--- /dev/null
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ endorse or promote products derived from this software without prior
+ written permission. For written permission, please contact
+ apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ 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/>.
+
--- /dev/null
+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.
+
--- /dev/null
+$Id$
+
+STATUS
+
+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]
+simple-links [Arved Sandstrom]
+SVG support [Keiron Liddle][Torsten Friebe]
+more borders, padding and absolute positioning [Jon Smirl]
+smooth shading in PDF [Steve Coffman]
+
+
+Things to do:
+
+Get images working
+[PARTIAL] Get padding working
+[DONE] Incorporate Arved Sandstrom's simple-link implementation
+[PARTIAL] Implement basic keeps
+[PARTIAL] Incorporate Eric Schaeffer's further table fixes
+Implement MessageHandler (or similar)
+Support XSL Working Draft 12 January 2000
+
+Other Bugs to fix:
+
+colour not continued onto subsequent pages if coloured block goes over page
+simple-link doesn't seem to work (I think I, JKT, broke it)
+
+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
+- GIF format is supported by the viewer, but disabled in FOP. BMP is
+ not done, because there are no standard libraries.
+- 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.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)
+
+
+A list of changes to the fo and properties implemented in FOP in the WD XSL 2000
+(contributed by Pankaj Narula)
+
+Formatting Objects
+root Yes
+layout-master-set Yes
+simple-page-master Yes
+region-body Yes
+region-before Yes
+region-after Yes
+page-sequence Yes
+sequence-specification changed to page-sequence-master
+sequence-specifier-single changed to single-page-master-reference
+sequence-specifier-repeating changed to repeatable-page-master-reference
+sequence-specifier-alternating changed to repeatable-page-master-alternatives
+flow Yes
+static-content Yes
+block Yes
+list-block Yes
+list-item Yes
+list-item-label Yes
+list-item-body Yes
+page-number Yes
+display-sequence nuked tbd the equivalent tag is block-container
+inline-sequence nuked tbd the equivalent tag is inline-container
+display-rule nuked tbd the equivalent thing
+display-graphic nuked now two tags external-graphic instream-graphic
+table (minimal support) Yes
+table-column (minimal support) Yes
+table-body (minimal support) Yes
+table-row (minimal support) Yes
+table-cell (minimal support) Yes
+
+Properties
+end-indent Yes
+page-master-name nuked replaced with master-name
+page-master-first implemented using conditional page reference object
+page-master-repeating do
+page-master-odd do
+page-master-even do
+margin-top (only on pages and regions) Yes
+margin-bottom (only on pages and regions) Yes
+margin-left (only on pages and regions) Yes
+margin-right (only on pages and regions) Yes
+extent Yes
+page-width Yes
+page-height Yes
+flow-name Yes
+font-family Yes
+font-style Yes
+font-weight Yes
+font-size Yes
+line-height Yes
+text-align Yes
+text-align-last Yes
+space-before.optimum Yes
+space-after.optimum Yes
+start-indent Yes
+end-indent Yes
+provisional-distance-between-starts Yes
+provisional-label-separation Yes
+rule-thickness Yes
+color Yes
+wrap-option Yes
+white-space-treatment Yes
+break-before Yes
+break-after Yes
+text-indent Yes
+href Yes
+column-width Yes
+background-color Yes
+padding-top (in conjunction with bgcolor) Yes
+padding-left (in conjunction with bgcolor) Yes
+padding-bottom (in conjunction with bgcolor) Yes
+padding-right (in conjunction with bgcolor) Yes
--- /dev/null
+@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\xml.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=
+
--- /dev/null
+#!/bin/sh
+
+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/xml.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 $*
--- /dev/null
+<?xml version="1.0"?>
+
+<!-- ===========================================================================
+
+
+ * ================= *
+ | How to build Fop |
+ * ================= *
+
+ Adaption from the Cocoon build.xml written by Stefano Mazzocchi
+ by Giacomo Pati with some addition by Fotis Jannidis
+
+
+Introduction
+============
+
+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.
+
+
+Installing the build tools
+==========================
+
+The Fop build system is based on Jakarta Ant, which is a Java building tool
+originally developed for the Jakarta Tomcat project but now used in many other
+Apache projects and extended by many developers.
+
+Ant is a little but very handy tool that uses a build file written in XML
+(this file) as building instructions. For more information refer to
+"http://jakarta.apache.org/ant/".
+
+To make things easier for you, the Fop distribution contains a
+precompiled version of Ant and the build scripts take care of all the
+classpath issues except the following:
+
+You need to have xerces.jar, xalan.jar and bsf.jar (comes with xalan) in
+your classpath. You can get those from http://xml.apache.org/xerces and
+http://xml.apache.org/xalan respectively.
+
+Additionaly you have to make sure, that the "JAVA_HOME" environment
+property should be set to match the JVM you want to use. That's it.
+
+
+Building instructions
+=====================
+
+First, make sure your current working directory is where this very file is
+located. Then type
+
+ ./build.sh (unix)
+ .\build.bat (win32)
+
+if everything is right and all the required packages are visible, this action
+will generate a file called "fop.jar" in the "./build" directory. Note, that
+if you do further development, compilation time is reduced since Ant is able
+to detect which files have changed an to recompile them at need.
+
+If something went wrong, go to the FAQ section below.
+
+Also, you'll note that reusing a single JVM instance for each task, increases
+tremendously the performance of the whole build system, compared to other
+tools (i.e. make or shell scripts) where a new JVM is started for each task.
+
+
+
+Build targets
+=============
+
+The build system is not only responsible of compiling Fop into a jar file,
+but is also responsible for creating the HTML documentation, javadocs,
+distributions and web site. In fact, the file you have here is _exactly_ what
+is used by fop maintainers to take care of everything in the Fop
+project, no less and no more. (only partially implemented)
+
+These are the meaningful targets for this build file:
+
+ - package [default] -> creates ./build/fop.jar
+ - usage -> shows a help screen
+ - codegen -> generates needed java sources from xml resources
+ - docs -> generates the HTML documentation in ./build/docs
+ - javadocs -> generates the API documentation in ./build/javadocs
+ - dist -> generates the Fop distribution
+ - clean -> restores the distribution to its original and clean state
+ (excepting dist files)
+ - distclean -> restores the distribution to its original and clean state
+ - site -> generates the web site in ../xml-site/targets/fop (not yet impl.)
+
+====================================== FAQ =====================================
+
+1) Why some of the classes present in the original jar are not built anymore?
+
+The fop build system is very flexible: if a module requires a package that
+is not present in the classpath at build time, the module is skipped but
+the built process is not stopped.
+
+Here is a list of such modules and what you have to download to build them:
+
+ org.apache.fop.apps.XTCommandLine ===>
+ James Clark's XT (http://www.jclark.com/)
+
+2) I see a lot of warnings starting like this: "Warning: file modified in the future:"
+Sometimes ant gives out this warnings, but the build is finished without any problems
+
+
+============================================================================ -->
+
+<project default="package" basedir=".">
+
+ <!-- =================================================================== -->
+ <!-- Initialization target -->
+ <!-- =================================================================== -->
+ <target name="init">
+ <tstamp/>
+ <property name="Name" value="Fop"/>
+ <property name="name" value="fop"/>
+ <property name="version" value="0.19.2"/>
+ <property name="year" value="1999-2000"/>
+
+ <echo message="------------------- ${Name} ${version} [${year}] ----------------"/>
+
+ <property name="build.compiler" value="classic"/>
+ <property name="debug" value="off"/>
+ <property name="optimize" value="on"/>
+ <property name="deprecation" value="off"/>
+
+ <property name="src.dir" value="./src"/>
+ <property name="src.codegen" value="./src/codegen"/>
+ <property name="docs.dir" value="./docs"/>
+ <property name="lib.dir" value="./lib"/>
+ <property name="packages" value="org.apache.fop.*"/>
+
+ <property name="doc.generator" value="org.apache.stylebook.StyleBook"/>
+ <property name="doc.generator.package" value="${lib.dir}/stylebook-1.0-b2.jar"/>
+
+ <property name="build.dir" value="./build"/>
+ <property name="build.src" value="./build/src"/>
+ <property name="build.codegen" value="./build/src/codegen"/>
+ <property name="build.dest" value="./build/classes"/>
+ <property name="build.docs" value="./build/docs"/>
+ <property name="build.javadocs" value="./build/javadocs"/>
+
+ <property name="dist.dir" value="./dist"/>
+
+ <property name="properties.dir" value="org/apache/fop/fo/properties"/>
+ <property name="fonts.dir" value="org/apache/fop/render/pdf/fonts"/>
+ <property name="replacestring" value="org/apache/fop"/>
+ <property name="ignore_this" value="ignore_this.java"/>
+
+ <property name="xslt" value="org.apache.xalan.xslt.Process"/>
+ <property name="src.properties.xsl" value="${src.codegen}/properties.xsl"/>
+ <property name="properties.xml" value="${build.codegen}/properties.xml"/>
+ <property name="properties.xsl" value="${build.codegen}/properties.xsl"/>
+ <property name="src.charlist.xsl" value="${src.codegen}/code-point-mapping.xsl"/>
+ <property name="charlist.xml" value="${build.codegen}/charlist.xml"/>
+ <property name="charlist.xsl" value="${build.codegen}/code-point-mapping.xsl"/>
+ <property name="fontfile.xsl" value="${build.codegen}/font-file.xsl"/>
+ <property name="Courier.xml" value="${build.codegen}/Courier.xml"/>
+ <property name="Courier-Oblique.xml" value="${build.codegen}/Courier-Oblique.xml"/>
+ <property name="Courier-Bold.xml" value="${build.codegen}/Courier-Bold.xml"/>
+ <property name="Courier-BoldOblique.xml" value="${build.codegen}/Courier-BoldOblique.xml"/>
+ <property name="Helvetica.xml" value="${build.codegen}/Helvetica.xml"/>
+ <property name="Helvetica-Oblique.xml" value="${build.codegen}/Helvetica-Oblique.xml"/>
+ <property name="Helvetica-Bold.xml" value="${build.codegen}/Helvetica-Bold.xml"/>
+ <property name="Helvetica-BoldOblique.xml" value="${build.codegen}/Helvetica-BoldOblique.xml"/>
+ <property name="Times-Roman.xml" value="${build.codegen}/Times-Roman.xml"/>
+ <property name="Times-Italic.xml" value="${build.codegen}/Times-Italic.xml"/>
+ <property name="Times-Bold.xml" value="${build.codegen}/Times-Bold.xml"/>
+ <property name="Times-BoldItalic.xml" value="${build.codegen}/Times-BoldItalic.xml"/>
+
+ <taskdef name="xslt" classname="Xslt"/>
+ <available property="xt.present" classname="com.jclark.xsl.sax.XSLProcessor"/>
+
+ <filter token="${replacestring}" value="${build.src}/${replacestring}"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Help on usage -->
+ <!-- =================================================================== -->
+ <target name="usage">
+ <echo message=""/>
+ <echo message=""/>
+ <echo message="${Name} Build file"/>
+ <echo message="-------------------------------------------------------------"/>
+ <echo message=""/>
+ <echo message=" available targets are:"/>
+ <echo message=""/>
+ <echo message=" package --> generates the ${name}.jar file (default)"/>
+ <echo message=" codegen --> generates the java files from the xml resources"/>
+ <echo message=" compile --> compiles the source code"/>
+ <echo message=" docs --> generates the HTML documentation"/>
+ <echo message=" javadocs --> generates the API documentation (java 1.2 only)"/>
+ <echo message=" dist --> generates the ${Name} distribution as .tar.gz and .zip"/>
+ <echo message=" clean --> cleans up the directory (except for the dist files)"/>
+ <echo message=" distclean --> cleans up the directory"/>
+ <echo message=" site --> generates the ${Name} web site (not yet implemented)"/>
+ <echo message=""/>
+ <echo message=" See the comments inside the build.xml file for more details."/>
+ <echo message="-------------------------------------------------------------"/>
+ <echo message=""/>
+ <echo message=""/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Prepares the build directory -->
+ <!-- =================================================================== -->
+ <target name="prepare" depends="init">
+ <!-- create directories -->
+ <echo message="Preparing the build directories"/>
+ <mkdir dir="${build.dir}"/>
+ <mkdir dir="${build.src}"/>
+ <mkdir dir="${build.src}/${properties.dir}"/>
+ <mkdir dir="${build.src}/${fonts.dir}"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Prepares the build directory -->
+ <!-- =================================================================== -->
+ <target name="prepare-xt" depends="prepare" if="xt.present">
+ <copydir src="${src.dir}"
+ dest="${build.src}"
+ includes="**/XT*"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Prepares the source code -->
+ <!-- =================================================================== -->
+ <target name="prepare-src" depends="prepare, prepare-xt">
+ <!-- copy src files -->
+ <copydir src="${src.dir}"
+ dest="${build.src}"
+ excludes="**/Makefile*, **/package.html, **/XT*"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Generate the source code -->
+ <!-- =================================================================== -->
+ <target name="codegen" depends="prepare">
+ <!-- resetting codegen directory -->
+ <echo message="Resetting codegen directory"/>
+
+ <!-- copy codegen directory -->
+ <copydir src="${src.codegen}" dest="${build.codegen}" filtering="on"/>
+
+ <!-- generate the java files from xml resources -->
+ <echo message="Generating the java files from xml resources"/>
+ <xslt infile="${properties.xml}" xsltfile="${properties.xsl}"
+ outfile="${build.src}/${replacestring}/fo/properties/${ignore_this}" smart="yes"/>
+ <xslt infile="${charlist.xml}" xsltfile="${charlist.xsl}"
+ outfile="${build.src}/${replacestring}/render/pdf/CodePointMapping.java" smart="yes"/>
+ <xslt infile="${Courier.xml}" xsltfile="${fontfile.xsl}"
+ outfile="${build.src}/${replacestring}/render/pdf/fonts/Courier.java" smart="yes"/>
+ <xslt infile="${Courier-Oblique.xml}" xsltfile="${fontfile.xsl}"
+ outfile="${build.src}/${replacestring}/render/pdf/fonts/CourierOblique.java" smart="yes"/>
+ <xslt infile="${Courier-Bold.xml}" xsltfile="${fontfile.xsl}"
+ outfile="${build.src}/${replacestring}/render/pdf/fonts/CourierBold.java" smart="yes"/>
+ <xslt infile="${Courier-BoldOblique.xml}" xsltfile="${fontfile.xsl}"
+ outfile="${build.src}/${replacestring}/render/pdf/fonts/CourierBoldOblique.java" smart="yes"/>
+ <xslt infile="${Helvetica.xml}" xsltfile="${fontfile.xsl}"
+ outfile="${build.src}/${replacestring}/render/pdf/fonts/Helvetica.java" smart="yes"/>
+ <xslt infile="${Helvetica-Oblique.xml}" xsltfile="${fontfile.xsl}"
+ outfile="${build.src}/${replacestring}/render/pdf/fonts/HelveticaOblique.java" smart="yes"/>
+ <xslt infile="${Helvetica-Bold.xml}" xsltfile="${fontfile.xsl}"
+ outfile="${build.src}/${replacestring}/render/pdf/fonts/HelveticaBold.java" smart="yes"/>
+ <xslt infile="${Helvetica-BoldOblique.xml}" xsltfile="${fontfile.xsl}"
+ outfile="${build.src}/${replacestring}/render/pdf/fonts/HelveticaBoldOblique.java" smart="yes"/>
+ <xslt infile="${Times-Roman.xml}" xsltfile="${fontfile.xsl}"
+ outfile="${build.src}/${replacestring}/render/pdf/fonts/TimesRoman.java" smart="yes"/>
+ <xslt infile="${Times-Italic.xml}" xsltfile="${fontfile.xsl}"
+ outfile="${build.src}/${replacestring}/render/pdf/fonts/TimesItalic.java" smart="yes"/>
+ <xslt infile="${Times-Bold.xml}" xsltfile="${fontfile.xsl}"
+ outfile="${build.src}/${replacestring}/render/pdf/fonts/TimesBold.java" smart="yes"/>
+ <xslt infile="${Times-BoldItalic.xml}" xsltfile="${fontfile.xsl}"
+ outfile="${build.src}/${replacestring}/render/pdf/fonts/TimesBoldItalic.java" smart="yes"/>
+
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Compiles the source directory -->
+ <!-- =================================================================== -->
+ <target name="compile" depends="codegen, prepare-src">
+ <echo message="Compiling the sources "/>
+ <!-- create directories -->
+ <mkdir dir="${build.dest}"/>
+
+ <javac srcdir="${build.src}"
+ destdir="${build.dest}"
+ debug="${debug}"
+ deprecation="${deprecation}"
+ optimize="${optimize}"
+ excludes="**/${ignore_this}"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Creates the class package -->
+ <!-- =================================================================== -->
+ <target name="package" depends="compile">
+ <echo message="Creating the jar file ${build.dir}/${name}.jar"/>
+ <jar jarfile="${build.dir}/${name}.jar"
+ basedir="${build.dest}"
+ includes="org/**"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Prepares the docs -->
+ <!-- =================================================================== -->
+ <target name="prepare-docs" depends="init">
+ <mkdir dir="${build.docs}"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Copying the documentation files -->
+ <!-- =================================================================== -->
+ <target name="docs" depends="prepare-docs">
+ <echo message="Copying doc files "/>
+ <copydir src="${docs.dir}" dest="${build.docs}" />
+ <copydir src="${lib.dir}" dest="${build.dir}/${lib.dir}" />
+ <copyfile src="build.xml" dest="${build.dir}/build.xml" /> -->
+ <copyfile src="${basedir}/README" dest="${build.dir}/README" />
+ <copyfile src="${basedir}/STATUS" dest="${build.dir}/STATUS" />
+ <copyfile src="${basedir}/LICENSE" dest="${build.dir}/LICENSE" />
+ <copyfile src="${basedir}/FAQ" dest="${build.dir}/FAQ" />
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Creates the API documentation -->
+ <!-- =================================================================== -->
+ <target name="javadocs" depends="prepare-src">
+ <echo message="Producing the javadoc files "/>
+ <mkdir dir="${build.javadocs}"/>
+ <javadoc packagenames="${packages}"
+ sourcepath="${build.src}"
+ destdir="${build.javadocs}"
+ author="true"
+ version="true"
+ windowtitle="${Name} API"
+ doctitle="${Name}"
+ bottom="Copyright © ${year} Apache Software Foundation. All Rights Reserved."
+ />
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Creates the distribution -->
+ <!-- =================================================================== -->
+ <target name="dist" depends="package, docs, javadocs">
+ <echo message="Building the distribution files (zip,tar)"/>
+ <mkdir dir="${dist.dir}"/>
+ <copyfile src="${basedir}/build.sh" dest="${dist.dir}/build.sh" />
+ <chmod src="${dist.dir}/build.sh" perm="ugo+rx" />
+ <copyfile src="${basedir}/build.bat" dest="${dist.dir}/build.bat" />
+ <copydir src="${build.dir}" dest="${dist.dir}"
+ excludes="**/classes/**, **/${ignore_this}"/>
+ <zip zipfile="${Name}-${version}.zip" basedir="${dist.dir}" includes="**"/>
+ <tar tarfile="${Name}-${version}.tar" basedir="${dist.dir}" includes="**"/>
+ <gzip zipfile="${Name}-${version}.tar.gz" src="${Name}-${version}.tar" />
+ <delete file="${Name}-${version}.tar"/>
+ <deltree dir="${dist.dir}"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Clean targets -->
+ <!-- =================================================================== -->
+ <target name="clean" depends="init">
+ <deltree dir="${build.dir}"/>
+ </target>
+
+ <target name="distclean" depends="clean">
+ <deltree dir="${dist.dir}"/>
+ <delete file="${Name}-${version}.tar.gz"/>
+ <delete file="${Name}-${version}.tar"/>
+ <delete file="${Name}-${version}.zip"/>
+ </target>
+
+</project>
+
+<!-- End of file -->
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>FOP Mechanics</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/architecture-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
+
+<TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Introduction</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+
+<P>
+The overall process is controlled by <B>org.apache.fop.apps.Driver</B>. In
+this class, a typical sequence is:</P>
+
+<P><CODE><FONT face="courier, monospaced">Driver driver = new Driver();</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">driver.setWriter(new PrintWriter(new FileWriter(args[1])));</FONT></CODE></P>
+<P></P>
+<P><CODE><FONT face="courier, monospaced">driver.buildFOTree(parser, fileInputSource(args[0]));</FONT></CODE></P>
+<P></P>
+<P><CODE><FONT face="courier, monospaced">driver.format();</FONT></CODE></P>
+<P></P>
+<P><CODE><FONT face="courier, monospaced">driver.render();</FONT></CODE></P>
+</FONT></TD></TR></TABLE><BR>
+
+<TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Formatting Object Tree</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+<P>The class <B>org.apache.fop.fo.FOTreeBuilder</B> is responsible for actually
+constructing the FO tree. The key SAX events used are </P>
+<P><CODE><FONT face="courier, monospaced">startElement()</FONT></CODE>,</P>
+<P><CODE><FONT face="courier, monospaced">endElement()</FONT></CODE> and <CODE><FONT face="courier, monospaced">characters()</FONT></CODE>.</P>
+
+<P>All formatting objects derive from abstract class
+<B>org.apache.fop.fo.FONode</B>. The other FO classes inherit from
+<B>FONode</B> as follows:</P>
+
+<P><CODE><FONT face="courier, monospaced"> FONode</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> |</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> __________|________</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> | |</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> FObj FOText</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> |</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> |___________________</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> | |</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> FObjMixed SequenceSpecifier
+</FONT></CODE></P>
+
+<P>FO's extending FObj:</P>
+
+<P>Package org.apache.fop.fo.pagination:</P>
+
+
+<P><CODE><FONT face="courier, monospaced"> LayoutMasterSet</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> PageSequence</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> RegionAfter</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> RegionBefore</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> RegionBody</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> Root</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> SequenceSpecification</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> SimplePageMaster</FONT></CODE></P>
+
+
+ <P>Package org.apache.fop.fo.flow:</P>
+
+
+<P><CODE><FONT face="courier, monospaced">BlockContainer</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">DisplayGraphic</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">DisplayRule</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">DisplaySequence</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">Flow</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">InlineGraphic</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">ListBlock</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">ListItem</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">ListItemBody</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">ListItemLabel</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">PageNumber</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">StaticContent</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">Table</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">TableBody</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">TableCell</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">TableColumn</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">TableRow</FONT></CODE></P>
+
+<P>FO's extending SequenceSpecifier:</P>
+
+ <P>Package org.apache.fop.fo.pagination:</P>
+
+
+<P><CODE><FONT face="courier, monospaced">SequenceSpecifierAlternating</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">SequenceSpecifierRepeating</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">SequenceSpecifierSingle</FONT></CODE></P>
+
+<P>FO's extending FObjMixed:</P>
+
+ <P>Package org.apache.fop.fo.flow:</P>
+
+
+<P><CODE><FONT face="courier, monospaced">Block</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">InlineSequence</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">SimpleLink</FONT></CODE></P>
+
+</FONT></TD></TR></TABLE><BR>
+
+<TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>FONode</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+<P>
+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.
+</P>
+
+<P>
+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 <CODE><FONT face="courier, monospaced">layout()</FONT></CODE> method.
+</P>
+</FONT></TD></TR></TABLE><BR>
+
+<TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Making FO's</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+
+<P>
+Every FO class has code that looks something like this:
+</P>
+
+<P><CODE><FONT face="courier, monospaced">public static class Maker extends FObj.Maker {</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> public FObj make(FObj parent, PropertyList propertyList)</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> throws FOPException</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> {</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> return new SimplePageMaster(parent, propertyList);</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> }</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced">}</FONT></CODE></P>
+
+
+<P>
+The class also has a static method that resembles
+</P>
+
+<P><CODE><FONT face="courier, monospaced">public static FObj.Maker maker()</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> {</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> return new PageSequence.Maker();</FONT></CODE></P>
+<P><CODE><FONT face="courier, monospaced"> }</FONT></CODE></P>
+
+<P>
+A hash 'fobjTable' exists in <B>FOTreeBuilder</B>, and maps the FO names (such as
+'fo:table') to object references to the appropriate factories
+(such as <B>Table.Maker</B>).
+</P>
+
+<P>
+Properties (recall that FO's have properties, areas have traits, and XML
+nodes have attributes) are also a concern of <B>FOTreeBuilder</B>. It
+accomplishes this by using <B>PropertyListBuilder</B>, which contains a hash of
+property names and <I>their</I> respective makers. The base class for
+properties is <B>Property</B>, and the property makers extend
+<B>Property.Maker</B>.
+</P>
+</FONT></TD></TR></TABLE><BR>
+<TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>FO Formatting</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+
+<P>
+<B>FOTreeBuilder</B> calls <CODE><FONT face="courier, monospaced">format()</FONT></CODE> on the root FO, passing
+it the <B>AreaTree</B>
+reference. In turn, <B>Root</B> calls <CODE><FONT face="courier, monospaced">format()</FONT></CODE> on each
+<B>PageSequence</B>, passing <I>it</I>
+the <B>AreaTree</B> reference.
+</P>
+
+<P>
+The <B>PageSequence</B> <CODE><FONT face="courier, monospaced">format()</FONT></CODE> method does the following things:
+</P>
+
+<OL>
+<LI>Makes a <B>Page</B>, using <B>PageMasterFactory</B> to produce a
+<B>PageMaster</B>, and
+using <CODE><FONT face="courier, monospaced">makePage()</FONT></CODE> in the latter class. In the simplest picture,
+a <B>Page</B> has
+5 areas represented by <B>AreaContainers</B>;</LI>
+
+<LI>Handles layout for <B>StaticContent</B> objects in the 'before' and 'after'
+regions, if set. This uses the <CODE><FONT face="courier, monospaced">layout()</FONT></CODE> method in
+<B>StaticContent</B>;</LI>
+
+<LI>If a page break is not forced, it will continue to layout the flow into
+the body area (<B>AreaContainer</B>) of the current page;</LI>
+
+<LI>It continues with (1) when layout into the current page is done, but
+the flow is not empty.</LI>
+</OL>
+</FONT></TD></TR></TABLE><BR>
+
+<TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Area Layout</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+
+<P>
+FO's that represent actual areas, starting with <B>Flow</B> and
+<B>StaticContent</B>, have
+a <CODE><FONT face="courier, monospaced">layout()</FONT></CODE> method, with the following signature:
+</P>
+
+<P>
+<CODE><FONT face="courier, monospaced">
+ public Status layout(Area area)
+</FONT></CODE>
+</P>
+
+<P>
+The fundamental role of the <CODE><FONT face="courier, monospaced">layout()</FONT></CODE> method is to manage the layout of
+children and/or to generate new areas.
+</P>
+
+<P>
+<B>Example</B>: the <CODE><FONT face="courier, monospaced">layout()</FONT></CODE> method for <B>Flow</B> generates no new areas - it manages the
+layout of the flow children.
+</P>
+
+<P>
+<B>Example</B>: the <CODE><FONT face="courier, monospaced">layout()</FONT></CODE> method for <B>Block</B>
+generates a new <B>BlockArea</B> in and of
+itself, and also manages the layout of the block children, which are added
+to the <B>BlockArea</B> before that is itself added to its parent
+<B>Area</B>.
+</P>
+
+<P>
+<CODE><FONT face="courier, monospaced">Layout()</FONT></CODE> 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 <B>Status</B>.
+</P>
+</FONT></TD></TR></TABLE><BR>
+
+<TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Rendering</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+
+<P>
+This is a separate process. The <CODE><FONT face="courier, monospaced">render()</FONT></CODE> method in
+<B>Driver</B> is invoked (say,
+by <B>CommandLine</B>) with the laid-out <B>AreaTree</B> and a
+<B>PrintWriter</B> as arguments.
+This actually calls the <CODE><FONT face="courier, monospaced">render()</FONT></CODE> method in a specific implementation of
+the <B>Renderer</B> interface, typically <B>PDFRenderer</B> or
+<B>AWTRenderer</B>.
+</P>
+
+<P>
+At the highest level <B>PDFRenderer</B>, for example, begins by rendering each
+<B>Page</B>. The <CODE><FONT face="courier, monospaced">render()</FONT></CODE> method in <B>Page</B> (as is the case for other areas),
+invokes a particular method in the renderer of choice, e.g.
+<CODE><FONT face="courier, monospaced">renderPage()</FONT></CODE>.
+<B>NOTE</B>: this system is bypassed for <B>Page</B>, incidentally.
+</P>
+
+<P>
+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.
+</P>
+</FONT></TD></TR></TABLE><BR>
+
+</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>Bugs</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/bugs-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG alt="Bugs" border="0" height="12" hspace="0" src="graphics/bugs-label-1.jpg" vspace="0" width="120"><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>How to report bugs</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>Please use the bug reporting system <A href="http://xml.apache.org/bugs/">bugzilla
+ </A>, which is part of xml.apache.org.</P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Some bugs</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>Colour not continued onto subsequent pages, if coloured block goes over page.
+ </P>
+ <P>Each page-sequence begins its page numbering with the number 1 (unless another integer is
+ specified in the initial-page-number attribute). The W3C recommendations says that
+ the default (auto) for initial-page-number is: The first page sequence starts with 1. For any further
+ fo:page-sequence the initial number will be one greater than the last number for that sequence.</P>
+ </FONT></TD></TR></TABLE><BR>
+</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>Compiling FOP</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/compiling-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <IMG alt="Compiling" border="0" height="12" hspace="0" src="graphics/compiling-label-1.jpg" vspace="0" width="120"><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Prerequisites</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Java 1.1.x or later</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1">
+ <P>If you use Java 1.1.x you must also seperately include the swing classes, which can
+ be found at the <A href="http://java.sun.com/products/jfc/#download-swing">
+ Sun website</A>. From Java 1.2 on (aka Java 2) they are part of the standard
+ distribution.
+ </P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>An XML parser</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1">
+ <P>An XML parser which supports Sax and DOM like
+ <A href="http://xml.apache.org/xerces-j/index.html">Xerces-J</A>.
+ The parser must be in your classpath</P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>The xslt processor Xalan </B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1">
+ <P>Some of the Java source code in FOP is generated from XML using
+ XSLT. Xalan must be used to generate this code.</P>
+ <P>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 <A href="http://xml.apache.org/xalan/overview.html">
+ xml.apache.org</A>. 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.</P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Setting of JAVA_HOME</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1">
+ <P>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.</P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Settings in your classpath</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1">
+ <P>If you need PDFOutputHandler (an extension, which calls Fop from the XSLT processor XT) you also
+ must have xp.jar and xt.jar (both can be found at <A href="http://www.jclark.com/xml/">http://www.jclark.com/xml/
+ </A> in your classpath.
+ </P>
+ <P>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):
+ </P>
+ <P><CODE><FONT face="courier, monospaced">set CLASSPATH=\jars\xp.jar;\jars\xt.jar;\jars\xalan.jar;\jars\xerces.jar;\jars\bsf.jar
+ </FONT></CODE></P>
+ </FONT></TD></TR></TABLE><BR>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Compiling</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>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
+ <A href="http://jakarta.apache.org/ant/">jakarte.apache.org</A>).
+ build.xml is the replacement of makefile. Look there for further information. </P>
+ <P>A help screen is shown by calling "build usage".
+ </P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Compiling FOP on MacOS</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+
+ <P>We strongly recommend the use of Codewarrior Java. You will find
+ a link to more information in the near future.
+ </P>
+ </FONT></TD></TR></TABLE><BR>
+</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>Downloading FOP</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/download-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG alt="Download" border="0" height="12" hspace="0" src="graphics/download-label-1.jpg" vspace="0" width="120"><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B></B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>You can download the latest release version from the <A href="http://xml.apache.org/dist/fop/">distribution directory</A>. </P>
+ <P>The file contains also the documentation (including some example fo files) and the source. </P>
+ <P>To run FOP from the command line, see <A href="running.html">Running FOP</A>. If you are
+ interested in embedding FOP in a Java application of your own, see
+ <A href="embedding.html">Embedding FOP</A>.
+ </P>
+ </FONT></TD></TR></TABLE><BR>
+</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>Embedding FOP </TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/embedding-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG alt="Embedding" border="0" height="12" hspace="0" src="graphics/embedding-label-1.jpg" vspace="0" width="120"><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B></B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>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).
+ </P>
+ <P>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.
+ </P>
+ <P>A third possibility may be used to build the FO Tree, namely
+ calling getDocumentHandler() and firing the SAX events yourself.
+ </P>
+ <P>Once the FO Tree is built, the format() and render() methods may be
+ called in that order.
+ </P>
+ <P>Here is an example use of Driver from CommandLine.java:</P>
+ <P><CODE><FONT face="courier, monospaced">Driver driver = new Driver();</FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced">driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);</FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced">driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");</FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced">driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");</FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced">driver.setWriter(new PrintWriter(new FileWriter(args[1])));</FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced">driver.buildFOTree(parser, fileInputSource(args[0]));</FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced">driver.format();</FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced">driver.render();</FONT></CODE></P>
+ </FONT></TD></TR></TABLE><BR>
+</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>Examples</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/examples-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG alt="Examples" border="0" height="12" hspace="0" src="graphics/examples-label-1.jpg" vspace="0" width="120"><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
+ <P>Examples for the use of xsl:fo can be found in the Fop distribution in
+ the subdirectory /docs/examples/fo.
+ </P>
+ <P>Please be warned: At the moment FOP only supports the
+ XSL Working Draft 21 April 1999 and the examples are also following this version.
+ </P>
+ <P>At the moment the following files are part of the distribution:</P>
+ <UL>
+ <LI>normal.fo - a very simple file showing the use of a 2 level of headings, normal text and a header.
+ </LI>
+ <LI>table.fo - a simple table
+ </LI>
+ <LI>list.fo - a simple list
+ </LI>
+ <LI>images.fo - shows how to embed gif and jpg images into the xsl:fo file using inline-graphic.
+ </LI>
+ <LI>border.fo - a not so simple example how to use borders in tables
+ </LI>
+ <LI>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.
+ </LI>
+ </UL>
+</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0"?>
+
+<!-- =========================================================================== -->
+
+<project default="runtest" basedir=".">
+
+ <!-- =================================================================== -->
+ <!-- Initialization target -->
+ <!-- =================================================================== -->
+ <target name="init">
+ <tstamp/>
+ <mkdir dir="tests"/>
+ <property name="referenceDir" value="reference"/>
+ <property name="testDir" value="tests"/>
+ <property name="foDir" value="fo"/>
+ <taskdef name="fop" classname="Fop"/>
+ <taskdef name="compare" classname="Compare"/>
+
+
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Help on usage -->
+ <!-- =================================================================== -->
+ <target name="usage">
+ <echo message=""/>
+ <echo message=""/>
+ <echo message="USAGE of runtests"/>
+ <echo message="-------------------------------------------------------------"/>
+ <echo message=""/>
+ <echo message=" available targets are:"/>
+ <echo message=""/>
+ <echo message=" compare --> generates new pdf test files and compares them to reference files (default)"/>
+ <echo message=" reference --> generates new reference pdf files"/>
+ <echo message=" See the comments inside the build.xml file for more details."/>
+ <echo message="-------------------------------------------------------------"/>
+ <echo message=""/>
+ <echo message=""/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Produces new test pdf files -->
+ <!-- =================================================================== -->
+ <target name="creating new test pdf files" depends="init">
+ <fop fofile="${foDir}/normal.fo" pdffile="${testDir}/normal.pdf"/>
+ <fop fofile="${foDir}/table.fo" pdffile="${testDir}/table.pdf"/>
+ <fop fofile="${foDir}/list.fo" pdffile="${testDir}/list.pdf"/>
+ <fop fofile="${foDir}/link.fo" pdffile="${testDir}/link.pdf"/>
+ <fop fofile="${foDir}/border.fo" pdffile="${testDir}/border.pdf"/>
+ <fop fofile="${foDir}/images.fo" pdffile="${testDir}/images.pdf"/>
+ <fop fofile="${foDir}/extensive.fo" pdffile="${testDir}/extensive.pdf"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Compares new test pdf files to reference pdf files -->
+ <!-- =================================================================== -->
+ <target name="compare" depends ="creating new test pdf files">
+ <compare referenceDirectory = "${referenceDir}"
+ testDirectory = "${testDir}"
+ filenames = "normal.pdf,table.pdf,list.pdf,link.pdf,border.pdf,images.pdf,extensive.pdf"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Produces new reference pdf files -->
+ <!-- =================================================================== -->
+ <target name="reference">
+ <fop fofile="${foDir}/normal.fo" pdffile="${referenceDir}/normal.pdf"/>
+ <fop fofile="${foDir}/table.fo" pdffile="${referenceDir}/table.pdf"/>
+ <fop fofile="${foDir}/list.fo" pdffile="${referenceDir}/list.pdf"/>
+ <fop fofile="${foDir}/link.fo" pdffile="${referenceDir}/link.pdf"/>
+ <fop fofile="${foDir}/border.fo" pdffile="${referenceDir}/border.pdf"/>
+ <fop fofile="${foDir}/images.fo" pdffile="${referenceDir}/images.pdf"/>
+ <fop fofile="${foDir}/extensive.fo" pdffile="${referenceDir}/extensive.pdf"/>
+ </target>
+
+
+
+
+ <!-- =================================================================== -->
+ <!-- Starts the test -->
+ <!-- =================================================================== -->
+ <target name="runtest" depends="compare">
+ <echo message="Running Fop tests"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Clean targets -->
+ <!-- =================================================================== -->
+ <target name="clean" depends="init">
+ <deltree dir="${build.dir}"/>
+
+ </target>
+
+
+</project>
+
+<!-- End of file -->
--- /dev/null
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master margin-right="0.5cm" margin-left="0.5cm" margin-bottom="0.5cm" margin-top="0.75cm" page-width="21cm" page-height="29.7cm" page-master-name="first">
+ <fo:region-body>
+ </fo:region-body>
+ </fo:simple-page-master>
+ <fo:simple-page-master margin-right="2.5cm" margin-left="2.5cm" margin-bottom="2cm" margin-top="1cm" page-width="21cm" page-height="29.7cm" page-master-name="rest">
+ <fo:region-body>
+ </fo:region-body>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence>
+ <fo:sequence-specification>
+ <fo:sequence-specifier-repeating page-master-repeating="rest" page-master-first="first">
+ </fo:sequence-specifier-repeating>
+ </fo:sequence-specification>
+ <fo:flow flow-name="xsl-body">
+ <fo:block-container height="4cm" width="12cm" top="0cm" left="0cm" position="absolute">
+ <fo:block text-align="start" line-height="18pt" font-family="sans-serif" font-weight="bold" font-size="14pt">
+ PX7.net
+ </fo:block>
+ <fo:block text-align="start" line-height="18pt" font-family="sans-serif" font-weight="bold" font-size="14pt">
+ 44 Liberty St
+ </fo:block>
+ <fo:block text-align="start" line-height="18pt" font-family="sans-serif" font-weight="bold" font-size="14pt">
+ Newburyport, MA 01950
+ </fo:block>
+ <fo:block text-align="start" line-height="18pt" font-family="sans-serif" font-weight="bold" font-size="14pt">
+ 978-462-1152
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container height="1cm" width="6cm" top="0cm" left="14cm" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="22pt" font-family="sans-serif" font-size="23pt">
+ Sales Receipt
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="0.5cm" width="2.5cm" top="1.2cm" left="14cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="12pt">
+ DATE
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="0.5cm" width="2.5cm" top="1.7cm" left="14cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="10pt">
+ 01/01/20000
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="0.5cm" width="2.5cm" top="1.2cm" left="16.5cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="12pt">
+ SALE #
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="0.5cm" width="2.5cm" top="1.7cm" left="16.5cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="10pt">
+ 1
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="0.5cm" width="9cm" top="3cm" left="0cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" line-height="15pt" font-family="sans-serif" font-size="12pt">
+ SOLD TO
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="3cm" width="9cm" top="3.5cm" left="0cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="12pt">
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="0.5cm" width="9cm" top="3cm" left="10cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="12pt">
+ SHIP TO
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="3cm" width="9cm" top="3.5cm" left="10cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="12pt">
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="0.5cm" width="4cm" top="7cm" left="11cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="12pt">
+ PMT METHOD
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="0.5cm" width="4cm" top="7.5cm" left="11cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="10pt">
+ Check
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="0.5cm" width="4cm" top="7cm" left="15cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="12pt">
+ CHECK #
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="0.5cm" width="4cm" top="7.5cm" left="15cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="10pt">
+ 1234
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container height="17cm" width="19cm" top="8cm" left="0cm" position="absolute">
+ <fo:table border-color="yellow" border-style="solid" border-width="1pt" height="17cm">
+ <fo:table-column column-width="2.5cm" border-color="red" border-style="solid" border-width="1pt">
+ </fo:table-column>
+ <fo:table-column column-width="11.5cm" border-color="red" border-style="solid" border-width="1pt">
+ </fo:table-column>
+ <fo:table-column column-width="2.5cm" border-color="red" border-style="solid" border-width="1pt">
+ </fo:table-column>
+ <fo:table-column column-width="2.5cm" border-color="red" border-style="solid" border-width="1pt">
+ </fo:table-column>
+ <fo:table-body font-family="sans-serif" font-weight="normal" font-size="10pt">
+ <fo:table-row line-height="12pt">
+ <fo:table-cell border-width="1pt" border-color="green" border-style="solid" padding="6pt">
+ <fo:block text-align="end">QUANTITY</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border-width="1pt" border-color="red" border-style="solid" padding="4pt">
+ <fo:block text-align="start">DESCRIPTION</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border-width="1pt" border-color="blue" border-style="solid" padding="3pt">
+ <fo:block text-align="centered">RATE</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border-width="1pt" border-color="orange" border-style="solid" padding="2pt">
+ <fo:block text-align="centered">AMOUNT</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row line-height="12pt">
+ <fo:table-cell padding="2pt">
+ <fo:block text-align="end">1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt">
+ <fo:block text-align="start">Widget</fo:block>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt">
+ <fo:block text-align="end">$22.23</fo:block>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt">
+ <fo:block text-align="end">22.31</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row line-height="12pt">
+ <fo:table-cell padding="2pt">
+ <fo:block text-align="end">3</fo:block>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt">
+ <fo:block text-align="start">Nuts</fo:block>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt">
+ <fo:block text-align="end">$12.00</fo:block>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt">
+ <fo:block text-align="end">36.00</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="1cm" width="14cm" top="25cm" left="0cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="12pt">
+ Please remit to the above address
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="1cm" width="2.5cm" top="25cm" left="14cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="25pt" font-family="sans-serif" font-size="22pt">
+ Total
+ </fo:block>
+ </fo:block-container>
+ <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="1cm" width="2.5cm" top="25cm" left="16.5cm" padding="2pt" position="absolute">
+ <fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="10pt">
+ $3.00
+ </fo:block>
+ </fo:block-container>
+ </fo:flow>
+ </fo:page-sequence>
+</fo:root>
--- /dev/null
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/Graphics/SVG/SVG-19990812.dtd">
+<fo:layout-master-set>
+<fo:simple-page-master page-master-name="one">
+<fo:region-body margin-top="50pt" margin-bottom="50pt" margin-left="100pt" margin-right="100pt"/>
+</fo:simple-page-master>
+</fo:layout-master-set>
+<fo:page-sequence>
+<fo:sequence-specification>
+<fo:sequence-specifier-repeating page-master-first="one" page-master-repeating="one"/>
+</fo:sequence-specification>
+<fo:flow>
+<fo:block>A Block</fo:block>
+<fo:block text-align="end">An End Aligned Block</fo:block>
+<fo:block text-align="centered">A Centered Block</fo:block>
+<fo:block>This is a multiple line block that extends over more than one line. There should be appropriate line breaks. Alignment is default.</fo:block>
+<fo:block text-align="end">This is a multiple line block that extends over more than one line. There should be appropriate line breaks. Alignment is end.</fo:block>
+<fo:block text-align="centered">This is a multiple line block that extends over more than one line. There should be appropriate line breaks. Alignment is centered.</fo:block>
+<fo:block text-align="justified">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.</fo:block>
+<fo:block>A block for comparison</fo:block>
+<fo:block space-before.optimum="12pt">A block with 12pt space-before</fo:block>
+<fo:block>A block for comparison</fo:block>
+<fo:block space-after.optimum="12pt">A block with 12pt space-after</fo:block>
+<fo:block>A block for comparison</fo:block>
+<fo:block space-before.optimum="12pt" space-after.optimum="12pt">A block with both 12pt space-before and space-after</fo:block>
+<fo:block>A block for comparison</fo:block>
+<fo:block start-indent="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 of 50pt.</fo:block>
+<fo:block end-indent="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.</fo:block>
+<fo:block start-indent="50pt" end-indent="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.</fo:block>
+<fo:block font-size="15pt">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.</fo:block>
+<fo:block line-height="20pt">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.</fo:block>
+<fo:block font-size="15pt" line-height="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.</fo:block>
+<fo:block font-size="15pt" line-height="15pt">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.</fo:block>
+<fo:block space-before.optimum="12pt" space-after.optimum="12pt"><fo:block space-before.optimum="12pt" space-after.optimum="12pt">A block within a block</fo:block></fo:block>
+<fo:block space-before.optimum="12pt" space-after.optimum="12pt">Text before<fo:block space-before.optimum="12pt" space-after.optimum="12pt">A block within a block</fo:block>Text after</fo:block>
+<fo:block space-before.optimum="12pt" space-after.optimum="12pt" start-indent="50pt">Text before<fo:block space-before.optimum="12pt" space-after.optimum="12pt">A block within a block with 50pt start-intent</fo:block>Text after</fo:block>
+<fo:block space-before.optimum="12pt" space-after.optimum="12pt" start-indent="50pt">And again for the page break, text before<fo:block space-before.optimum="12pt" space-after.optimum="12pt">A block within a block with 50pt start-intent</fo:block>Text after</fo:block>
+<fo:block space-before.optimum="12pt" space-after.optimum="12pt" start-indent="50pt">Text before<fo:block space-before.optimum="12pt" space-after.optimum="12pt">A block with 50pt start-indent within a block with 50pt start-intent</fo:block>Text after</fo:block>
+<fo:block space-before.optimum="12pt" space-after.optimum="12pt" start-indent="50pt">Text before<fo:block space-before.optimum="12pt" space-after.optimum="12pt" start-indent="100pt">A block with 100pt start-indent within a block with 50pt start-intent</fo:block>Text after</fo:block>
+<fo:list-block provisional-distance-between-starts="12pt" space-before.optimum="12pt" text-align="justified">
+<fo:list-item>
+<fo:list-item-label><fo:block>•</fo:block></fo:list-item-label>
+<fo:list-item-body><fo:block>This is a multiple line block that extends over more than one line. There should be appropriate line breaks.</fo:block></fo:list-item-body>
+</fo:list-item>
+<fo:list-item>
+<fo:list-item-label><fo:block>•</fo:block></fo:list-item-label>
+<fo:list-item-body><fo:block>This is a multiple line block that extends over more than one line. There should be appropriate line breaks.</fo:block><fo:block>This is a multiple line block that extends over more than one line. There should be appropriate line breaks.</fo:block><fo:block>This is a multiple line block that extends over more than one line. There should be appropriate line breaks.</fo:block></fo:list-item-body>
+</fo:list-item>
+</fo:list-block>
+<fo:list-block start-indent="50pt" provisional-distance-between-starts="12pt" space-before.optimum="12pt" text-align="justified">
+<fo:list-item>
+<fo:list-item-label><fo:block>•</fo:block></fo:list-item-label>
+<fo:list-item-body><fo:block>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.</fo:block></fo:list-item-body>
+</fo:list-item>
+<fo:list-item>
+<fo:list-item-label><fo:block>•</fo:block></fo:list-item-label>
+<fo:list-item-body><fo:block>This is a multiple line block that extends over more than one line. There should be appropriate line breaks.</fo:block><fo:block>This is a second multiple line block that extends over more than one line. There should be appropriate line breaks.</fo:block><fo:block>This is a third multiple line block that extends over more than one line. There should be appropriate line breaks.</fo:block></fo:list-item-body>
+</fo:list-item>
+</fo:list-block>
+<fo:list-block provisional-distance-between-starts="12pt" space-before.optimum="12pt" text-align="justified">
+<fo:list-item>
+<fo:list-item-label><fo:block>•</fo:block></fo:list-item-label>
+<fo:list-item-body><fo:block>This is a multiple line block that extends over more than one line. There should be appropriate line breaks.</fo:block><fo:block start-indent="100pt">This is a multiple line block with start-indent 100pt that extends over more than one line. There should be appropriate line breaks.</fo:block><fo:block>This is a multiple line block that extends over more than one line. There should be appropriate line breaks.</fo:block></fo:list-item-body>
+</fo:list-item>
+<fo:list-item>
+<fo:list-item-label><fo:block>•</fo:block></fo:list-item-label>
+<fo:list-item-body><fo:block>This is a multiple line block that extends over more than one line. There should be appropriate line breaks.<fo:block>This is an embedded multiple line block that extends over more than one line. There should be appropriate line breaks.</fo:block>This is a multiple line block that extends over more than one line. There should be appropriate line breaks.</fo:block></fo:list-item-body>
+</fo:list-item>
+</fo:list-block>
+ <fo:list-block provisional-distance-between-starts="12pt" space-before.optimum="12pt">
+ <fo:list-item>
+ <fo:list-item-label><fo:block>•</fo:block></fo:list-item-label>
+ <fo:list-item-body><fo:block>A block in a list-item-body</fo:block></fo:list-item-body>
+ </fo:list-item>
+ <fo:list-item>
+ <fo:list-item-label><fo:block>•</fo:block></fo:list-item-label>
+ <fo:list-item-body>
+ <fo:list-block provisional-distance-between-starts="12pt">
+ <fo:list-item>
+ <fo:list-item-label><fo:block>•</fo:block></fo:list-item-label>
+ <fo:list-item-body><fo:block>This is a list item in a list that is itself a list item</fo:block></fo:list-item-body>
+ </fo:list-item>
+ </fo:list-block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </fo:list-block>
+ <fo:block break-before="page" font-size="24pt" line-height="28pt" space-before.optimum="12pt" space-after.optimum="12pt">Next Stage</fo:block>
+ <fo:block>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.</fo:block>
+ <fo:display-rule space-before.optimum="12pt" space-after.optimum="12pt"/>
+ <fo:block>Now what follows is a display-rule of thickness 5pt with start-indent of 100pt (same space-before/after as before).</fo:block>
+ <fo:display-rule space-before.optimum="12pt" space-after.optimum="12pt" rule-thickness="5pt" start-indent="100pt"/>
+ <fo:block font-size="24pt" line-height="28pt" space-before.optimum="12pt" space-after.optimum="12pt"
+ ><fo:inline-sequence color="#500">C</fo:inline-sequence
+ ><fo:inline-sequence color="#700">o</fo:inline-sequence
+ ><fo:inline-sequence color="#900">l</fo:inline-sequence
+ ><fo:inline-sequence color="#B00">o</fo:inline-sequence
+ ><fo:inline-sequence color="#D00">u</fo:inline-sequence
+ ><fo:inline-sequence color="#F00">r</fo:inline-sequence
+ ></fo:block>
+ <fo:block color="black">black</fo:block>
+ <fo:block color="green">green</fo:block>
+ <fo:block color="silver">silver</fo:block>
+ <fo:block color="lime">lime</fo:block>
+ <fo:block color="gray">gray</fo:block>
+ <fo:block color="olive">olive</fo:block>
+ <fo:block color="white">white</fo:block>
+ <fo:block color="yellow">yellow</fo:block>
+ <fo:block color="maroon">maroon</fo:block>
+ <fo:block color="navy">navy</fo:block>
+ <fo:block color="red">red</fo:block>
+ <fo:block color="blue">blue</fo:block>
+ <fo:block color="purple">purple</fo:block>
+ <fo:block color="teal">teal</fo:block>
+ <fo:block color="fuchsia">fuchsia</fo:block>
+ <fo:block color="aqua">aqua</fo:block>
+ <fo:block break-before="even-page" font-size="24pt" line-height="28pt" space-before.optimum="12pt" space-after.optimum="12pt">Wrap</fo:block>
+ <fo:block space-before.optimum="12pt">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.</fo:block>
+ <fo:block space-before.optimum="12pt" wrap-option="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.</fo:block>
+ <fo:block space-before.optimum="12pt" wrap-option="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.</fo:block>
+ <fo:block font-size="24pt" line-height="28pt" space-before.optimum="12pt" space-after.optimum="12pt">White Space Treatment</fo:block>
+<fo:block>This is default!</fo:block>
+<fo:block white-space-treatment="preserve">This is preserve!</fo:block>
+<fo:block white-space-treatment="collapse">This is collapse!</fo:block>
+<fo:block white-space-treatment="ignore">This is ignore!</fo:block>
+<fo:block font-family="monospace" white-space-treatment="preserve">
+<![CDATA[
+<?xml version="1.0"?>
+<document>
+ <heading>This is a heading</heading>
+ <list>
+ <item>Item one</item>
+ <item>Item two</item>
+ </list>
+</document>
+]]>
+</fo:block>
+ <fo:block break-before="page" font-size="24pt" line-height="28pt" space-before.optimum="12pt" space-after.optimum="12pt">Embedded SVG</fo:block>
+ <svg:svg width="400pt" height="200pt">
+ <svg:rect x="20pt" y="20pt" width="100pt" height="100pt"/>
+ <svg:line x1="20pt" y1="20pt" x2="120pt" y2="120pt"/>
+ <svg:line x1="120pt" y1="20pt" x2="20pt" y2="120pt"/>
+ <svg:text x="20pt" y="150pt">Hello SVG!</svg:text>
+ </svg:svg>
+ <fo:block>The above is an example of an SVG graphic</fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+</fo:root>
+
+
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<fo:root
+font-family="Times Roman"
+font-size="12pt" text-align="justified"
+xmlns:fo="http://www.w3.org/1999/XSL/Format">
+
+<fo:layout-master-set>
+ <fo:simple-page-master
+ page-master-name="right"
+ margin-top="75pt"
+ margin-bottom="25pt"
+ margin-left="100pt"
+ margin-right="50pt">
+ <fo:region-body margin-bottom="50pt"/>
+ <fo:region-after extent="25pt"/>
+ </fo:simple-page-master>
+
+ <fo:simple-page-master
+ page-master-name="left"
+ margin-top="75pt"
+ margin-bottom="25pt"
+ margin-left="50pt"
+ margin-right="100pt">
+ <fo:region-body margin-bottom="50pt"/>
+ <fo:region-after extent="25pt"/>
+ </fo:simple-page-master>
+</fo:layout-master-set>
+
+<fo:page-sequence id="N2528">
+<fo:sequence-specification>
+<fo:sequence-specifier-alternating page-master-first="right" page-master-odd="right" page-master-even="left"/>
+</fo:sequence-specification>
+
+<fo:static-content flow-name="xsl-after">
+<fo:block text-align-last="centered" font-size="10pt">
+<fo:page-number/>
+</fo:block>
+</fo:static-content>
+
+<fo:flow>
+<fo:block font-size="18pt" font-weight="bold">1. FOP test for images</fo:block><fo:block id="N2531">
+<fo:block
+ font-size="16pt"
+ font-weight="bold"
+ space-before.minimum="1em"
+ space-before.optimum="1.5em"
+ space-before.maximum="2em">A GIF image in FOP</fo:block><fo:block>
+<fo:inline-graphic href="file:/java/xml-fop/docs/graphics/xml_feather.gif"/></fo:block></fo:block>
+<fo:block id="N2545">
+<fo:block font-size="16pt" font-weight="bold" space-before.minimum="1em" space-before.optimum="1.5em" space-before.maximum="2em">A JPEG image in FOP</fo:block><fo:block>
+<fo:inline-graphic href="file:/java/xml-fop/docs/graphics/fop.jpg"/></fo:block></fo:block><fo:block id="N2559">
+<fo:block font-size="16pt" font-weight="bold" space-before.minimum="1em" space-before.optimum="1.5em" space-before.maximum="2em"/>
+ This section is only required to show that the layout still works.
+ </fo:block></fo:flow></fo:page-sequence>
+
+<fo:page-sequence id="N2561" initial-page-number="2">
+<fo:sequence-specification>
+<fo:sequence-specifier-alternating page-master-first="right" page-master-odd="right" page-master-even="left"/>
+</fo:sequence-specification>
+<fo:static-content flow-name="xsl-after">
+<fo:block text-align-last="centered" font-size="10pt"><fo:page-number/>
+</fo:block></fo:static-content>
+<fo:flow>
+<fo:block font-size="18pt" font-weight="bold">A. Appendix</fo:block></fo:flow></fo:page-sequence></fo:root>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+
+ <!-- defines page layout -->
+ <fo:layout-master-set>
+ <fo:simple-page-master page-master-name="first"
+ page-height="29.7cm" page-width="21cm"
+ margin-top="1cm"
+ margin-bottom="2cm"
+ margin-left="2.5cm"
+ margin-right="2.5cm">
+ <fo:region-before extent="3cm"/>
+ <fo:region-body margin-top="3cm"/>
+ <fo:region-after extent="1.5cm"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <!-- end: defines page layout -->
+
+ <!-- actual layout -->
+ <fo:page-sequence>
+
+ <!-- applies layout master -->
+ <fo:sequence-specification>
+ <fo:sequence-specifier-single page-master-name="first"/>
+ </fo:sequence-specification>
+
+ <!-- text body -->
+ <fo:flow flow-name="xsl-body">
+
+ <!-- Normal text -->
+ <fo:block text-align="centered">1. <fo:simple-link external-destination="normal.pdf">normal.pdf</fo:simple-link>
+ </fo:block>
+
+ <!-- Normal text -->
+ <fo:block text-align="centered">---</fo:block>
+
+ <!-- Normal text -->
+ <fo:block text-align="centered">
+ 2. A one line example (text-align='start'): <fo:simple-link external-destination="normal.pdf">normal.pdf</fo:simple-link>
+ </fo:block>
+
+ <!-- Normal text -->
+ <fo:block text-align="centered">---</fo:block>
+
+ <!-- Normal text -->
+ <fo:block text-align="start">
+ 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 <fo:simple-link external-destination="normal.pdf">normal.pdf</fo:simple-link>
+ </fo:block>
+
+ <!-- Normal text -->
+ <fo:block text-align="centered">---</fo:block>
+
+ <!-- Normal text -->
+ <fo:block text-align="centered">
+ 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 <fo:simple-link external-destination="normal.pdf">normal.pdf</fo:simple-link>
+ </fo:block>
+
+ <!-- Normal text -->
+ <fo:block text-align="centered">---</fo:block>
+
+ <!-- Normal text -->
+ <fo:block text-align="end">
+ 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 <fo:simple-link external-destination="normal.pdf">normal.pdf</fo:simple-link>
+ </fo:block>
+
+ <!-- Normal text -->
+ <fo:block text-align="centered">---</fo:block>
+
+ <!-- Normal text -->
+ <fo:block text-align="start"
+ space-before.optimum="6pt"
+ line-height="24pt"
+ font-family="serif"
+ padding-top="3pt"
+ >
+ 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 <fo:simple-link external-destination="normal.pdf">generic</fo:simple-link> 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 <fo:simple-link external-destination="normal.pdf">normal.pdf</fo:simple-link>
+ </fo:block>
+
+ <!-- Normal text -->
+ <fo:block text-align="start"
+ space-before.optimum="6pt"
+ line-height="24pt"
+ font-family="serif"
+ padding-top="3pt"
+ >
+ 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 <fo:simple-link external-destination="normal.pdf">generic</fo:simple-link> 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 <fo:simple-link external-destination="normal.pdf">normal.pdf</fo:simple-link>
+ </fo:block>
+
+
+ <!-- Normal text -->
+<!-- <fo:block text-align="start"
+ space-before.optimum="6pt"
+ line-height="24pt"
+ font-family="serif"
+ padding-top="3pt"
+ >
+ 8. 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 <fo:simple-link external-destination="normal.pdf">generic</fo:simple-link> 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 <fo:simple-link external-destination="normal.pdf">normal.pdf</fo:simple-link>
+ </fo:block>
+-->
+
+
+ </fo:flow>
+ </fo:page-sequence>
+</fo:root>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+
+ <!-- defines the layout master -->
+ <fo:layout-master-set>
+ <fo:simple-page-master page-master-name="first"
+ page-height="29.7cm" page-width="21cm"
+ margin-top="1cm"
+ margin-bottom="2cm"
+ margin-left="2.5cm"
+ margin-right="2.5cm">
+ <fo:region-before extent="3cm"/>
+ <fo:region-body margin-top="3cm"/>
+ <fo:region-after extent="1.5cm"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+
+ <!-- starts actual layout -->
+ <fo:page-sequence>
+
+ <!-- applies layout master -->
+ <fo:sequence-specification>
+ <fo:sequence-specifier-single page-master-name="first"/>
+ </fo:sequence-specification>
+
+ <!-- Inserts a header with the page number -->
+ <fo:static-content flow-name="xsl-before">
+ <fo:block text-align="end" font-size="10pt" font-family="serif" line-height="14pt">
+ XSL-FO Example: simple list - p. <fo:page-number/>
+ </fo:block>
+ </fo:static-content>
+
+ <fo:flow flow-name="xsl-body">
+
+ <!-- title -->
+ <fo:block font-size="14pt"
+ font-family="sans-serif"
+ line-height="18pt"
+ space-before.optimum="3pt"
+ space-after.optimum="3pt"
+ font-weight="bold"
+ start-indent="15pt">
+ Validity Constraint: Standalone Document Declaration
+ </fo:block>
+
+ <!-- normal text -->
+ <fo:block font-size="12pt"
+ font-family="sans-serif"
+ line-height="15pt"
+ space-after.optimum="3pt" >
+ The standalone document declaration must have the value "no" if
+ any external markup declarations contain declarations of:
+ </fo:block>
+
+ <!-- list -->
+ <fo:list-block>
+
+ <!-- list item -->
+ <fo:list-item>
+ <!-- insert a bullet -->
+ <fo:list-item-label>
+ <fo:block>•</fo:block>
+ </fo:list-item-label>
+ <!-- list text -->
+ <fo:list-item-body>
+ <fo:block>
+ attributes with default values, if elements to which these attributes apply appear in the document without specifications of values for these attributes, or
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+
+ <!-- list item -->
+ <fo:list-item>
+ <!-- insert a bullet -->
+ <fo:list-item-label>
+ <fo:block>•</fo:block>
+ </fo:list-item-label>
+ <!-- list text -->
+ <fo:list-item-body>
+ <fo:block>
+ entities (other than amp, lt, gt, apos, quot), if references to those entities appear in the document, or
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+
+ <!-- list entry -->
+ <fo:list-item>
+ <!-- insert a bullet -->
+ <fo:list-item-label>
+ <fo:block>•</fo:block>
+ </fo:list-item-label>
+ <!-- list text -->
+ <fo:list-item-body>
+ <fo:block>
+ attributes with values subject to normalization, where the attribute appears in the document with a value which will
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+
+ <!-- list entry -->
+ <fo:list-item>
+ <!-- insert a bullet -->
+ <fo:list-item-label>
+ <fo:block>•</fo:block>
+ </fo:list-item-label>
+ <!-- list text -->
+ <fo:list-item-body>
+ <fo:block>
+ change as a result of normalization, or
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+
+ <!-- list entry -->
+ <fo:list-item>
+ <!-- insert a bullet -->
+ <fo:list-item-label>
+ <fo:block>•</fo:block>
+ </fo:list-item-label>
+ <!-- list text -->
+ <fo:list-item-body>
+ <fo:block>
+ element types with element content, if white space occurs directly within any instance of those types.
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+
+ </fo:list-block>
+ <!-- end list -->
+
+ </fo:flow>
+ </fo:page-sequence>
+</fo:root>
+
+
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+
+ <!-- defines page layout -->
+ <fo:layout-master-set>
+
+ <!-- layout for the first page -->
+ <fo:simple-page-master page-master-name="first"
+ page-height="29.7cm"
+ page-width="21cm"
+ margin-top="1cm"
+ margin-bottom="2cm"
+ margin-left="2.5cm"
+ margin-right="2.5cm">
+ <fo:region-before extent="3cm"/>
+ <fo:region-body margin-top="3cm"/>
+ <fo:region-after extent="1.5cm"/>
+ </fo:simple-page-master>
+
+ <!-- layout for the other pages -->
+ <fo:simple-page-master page-master-name="rest"
+ height="29.7cm"
+ width="21cm"
+ margin-top="1cm"
+ margin-bottom="2cm"
+ margin-left="2.5cm"
+ margin-right="2.5cm">
+ <fo:region-before extent="2.5cm"/>
+ <fo:region-body margin-top="2.5cm"/>
+ <fo:region-after extent="1.5cm"/>
+ </fo:simple-page-master>
+
+ </fo:layout-master-set>
+ <!-- end: defines page layout -->
+
+ <!-- actual layout -->
+ <fo:page-sequence>
+
+ <!-- usage of page layout -->
+ <fo:sequence-specification>
+ <fo:sequence-specifier-repeating page-master-first="first"
+ page-master-repeating="rest"/>
+ </fo:sequence-specification>
+
+ <!-- header -->
+ <fo:static-content flow-name="xsl-before">
+ <fo:block text-align="end"
+ font-size="10pt"
+ font-family="serif"
+ line-height="14pt" >
+ XML Recommendation - p. <fo:page-number/>
+ </fo:block>
+ </fo:static-content>
+
+ <fo:flow flow-name="xsl-body">
+
+ <!-- defines text title level 1-->
+ <fo:block font-size="18pt"
+ font-family="sans-serif"
+ line-height="24pt"
+ space-after.optimum="15pt"
+ background-color="blue"
+ color="white"
+ text-align="centered"
+ padding-top="3pt">
+ Extensible Markup Language (XML) 1.0
+ </fo:block>
+
+ <!-- defines text title level 2-->
+ <fo:block font-size="16pt"
+ font-family="sans-serif"
+ line-height="20pt"
+ space-before.optimum="10pt"
+ space-after.optimum="10pt"
+ text-align="start"
+ padding-top="3pt">
+ Abstract
+ </fo:block>
+
+ <!-- Normal text -->
+ <fo:block font-size="12pt"
+ font-family="sans-serif"
+ line-height="15pt"
+ space-after.optimum="3pt"
+ 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.
+ </fo:block>
+
+ <!-- defines text title level 2-->
+ <fo:block font-size="16pt"
+ font-family="sans-serif"
+ line-height="20pt"
+ space-before.optimum="10pt"
+ space-after.optimum="10pt"
+ text-align="start"
+ padding-top="3pt">
+ Status of this document
+ </fo:block>
+
+ <!-- Normal text -->
+ <fo:block font-size="12pt"
+ font-family="sans-serif"
+ line-height="15pt"
+ space-after.optimum="3pt"
+ text-align="start">
+ 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.
+ </fo:block>
+
+ <!-- Normal text -->
+ <fo:block font-size="12pt"
+ font-family="sans-serif"
+ line-height="15pt"
+ space-after.optimum="3pt"
+ text-align="start">
+ 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.
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+</fo:root>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+<fo:layout-master-set>
+<fo:simple-page-master page-master-name="first" height="29.7cm" width="21cm" margin-top="1cm" margin-bottom="2cm" margin-left="2.5cm" margin-right="2.5cm">
+<fo:region-before extent="3cm"/>
+<fo:region-body margin-top="3cm"/>
+<fo:region-after extent="1.5cm"/>
+</fo:simple-page-master>
+<fo:simple-page-master page-master-name="rest" height="29.7cm" width="21cm" margin-top="1cm" margin-bottom="2cm" margin-left="2.5cm" margin-right="2.5cm">
+<fo:region-before extent="2.5cm"/>
+<fo:region-body margin-top="2.5cm"/>
+<fo:region-after extent="1.5cm"/>
+</fo:simple-page-master>
+</fo:layout-master-set>
+<fo:page-sequence>
+<fo:sequence-specification>
+<fo:sequence-specifier-repeating page-master-first="first" page-master-repeating="rest"/>
+</fo:sequence-specification>
+<fo:static-content flow-name="xsl-before">
+<fo:block text-align="end" font-size="10pt" font-family="serif" line-height="14pt">
+ FOP - p. <fo:page-number/>
+</fo:block>
+</fo:static-content>
+<fo:flow flow-name="xsl-body">
+
+
+
+<fo:block font-size="18pt" font-family="sans-serif" line-height="24pt" space-after.optimum="15pt" background-color="blue" color="white" text-align="centered" padding-top="3pt">FOP: An Open-Source XSL Formatter and Renderer</fo:block>
+<fo:block font-size="10pt" font-family="sans-serif" line-height="10pt" space-after.optimum="3pt" font-weight="bold" start-indent="15pt">
+ Content
+ </fo:block>
+<fo:table>
+<fo:table-column column-width="1cm"/>
+<fo:table-column column-width="15cm"/>
+<fo:table-body font-size="10pt" font-family="sans-serif">
+<fo:table-row line-height="12pt">
+<fo:table-cell>
+<fo:block text-align="end">A)
+ </fo:block>
+</fo:table-cell>
+<fo:table-cell>
+<fo:block text-align="start">What is FOP?</fo:block>
+</fo:table-cell>
+</fo:table-row>
+<fo:table-row line-height="12pt">
+<fo:table-cell>
+<fo:block text-align="end">B)
+ </fo:block>
+</fo:table-cell>
+<fo:table-cell>
+<fo:block text-align="start">Downloading FOP</fo:block>
+</fo:table-cell>
+</fo:table-row>
+<fo:table-row line-height="12pt">
+<fo:table-cell>
+<fo:block text-align="end">C)
+ </fo:block>
+</fo:table-cell>
+<fo:table-cell>
+<fo:block text-align="start">Running FOP</fo:block>
+</fo:table-cell>
+</fo:table-row>
+<fo:table-row line-height="12pt">
+<fo:table-cell>
+<fo:block text-align="end">D)
+ </fo:block>
+</fo:table-cell>
+<fo:table-cell>
+<fo:block text-align="start">Embedding FOP </fo:block>
+</fo:table-cell>
+</fo:table-row>
+<fo:table-row line-height="12pt">
+<fo:table-cell>
+<fo:block text-align="end">E)
+ </fo:block>
+</fo:table-cell>
+<fo:table-cell>
+<fo:block text-align="start">What's Implemented?</fo:block>
+</fo:table-cell>
+</fo:table-row>
+<fo:table-row line-height="12pt">
+<fo:table-cell>
+<fo:block text-align="end">F)
+ </fo:block>
+</fo:table-cell>
+<fo:table-cell>
+<fo:block text-align="start">Limitations</fo:block>
+</fo:table-cell>
+</fo:table-row>
+<fo:table-row line-height="12pt">
+<fo:table-cell>
+<fo:block text-align="end">G)
+ </fo:block>
+</fo:table-cell>
+<fo:table-cell>
+<fo:block text-align="start">Bugs</fo:block>
+</fo:table-cell>
+</fo:table-row>
+<fo:table-row line-height="12pt">
+<fo:table-cell>
+<fo:block text-align="end">H)
+ </fo:block>
+</fo:table-cell>
+<fo:table-cell>
+<fo:block text-align="start">Compiling FOP</fo:block>
+</fo:table-cell>
+</fo:table-row>
+<fo:table-row line-height="12pt">
+<fo:table-cell>
+<fo:block text-align="end">I)
+ </fo:block>
+</fo:table-cell>
+<fo:table-cell>
+<fo:block text-align="start">Getting involved</fo:block>
+</fo:table-cell>
+</fo:table-row>
+<fo:table-row line-height="12pt">
+<fo:table-cell>
+<fo:block text-align="end">J)
+ </fo:block>
+</fo:table-cell>
+<fo:table-cell>
+<fo:block text-align="start">FOP Relevant Specifications</fo:block>
+</fo:table-cell>
+</fo:table-row>
+<fo:table-row line-height="12pt">
+<fo:table-cell>
+<fo:block text-align="end">K)
+ </fo:block>
+</fo:table-cell>
+<fo:table-cell>
+<fo:block text-align="start">Licence</fo:block>
+</fo:table-cell>
+</fo:table-row>
+</fo:table-body>
+</fo:table>
+
+
+
+
+
+ fop logo
+ <fo:block font-size="18pt" font-family="serif" line-height="20pt" space-before.optimum="20pt" space-after.optimum="14pt" keep-with-next="true">A)
+ What is FOP?</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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.
+
+ </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">FOP is part of Apache's XML project. The homepage of FOP is
+ <fo:inline-sequence font-style="italic" font-family="serif">http:/xml.apache.org/fop</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http:/xml.apache.org/fop)
+ </fo:inline-sequence>.
+ </fo:block>
+
+
+
+
+
+
+ <fo:block font-size="18pt" font-family="serif" line-height="20pt" space-before.optimum="20pt" space-after.optimum="14pt" keep-with-next="true">B)
+ Downloading FOP</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">The latest release version is <fo:inline-sequence font-style="italic" font-family="serif">FOP 12.0</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ ()
+ </fo:inline-sequence>. </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">NOTE: you do not have to unjar or unzip this jar file.</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">Documentation can be downloaded here as <fo:inline-sequence font-style="italic" font-family="serif">HMTL file</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ ()
+ </fo:inline-sequence> or
+ as <fo:inline-sequence font-style="italic" font-family="serif">PDF file</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ ()
+ </fo:inline-sequence>.</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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.
+ </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">You can also download the <fo:inline-sequence font-style="italic" font-family="serif">source code v. 12.0</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ ()
+ </fo:inline-sequence> as jar file</fo:block>
+
+
+
+
+
+ <fo:block font-size="18pt" font-family="serif" line-height="20pt" space-before.optimum="20pt" space-after.optimum="14pt" keep-with-next="true">C)
+ Running FOP</fo:block>
+
+ <fo:block font-size="16pt" font-family="serif" line-height="18pt" space-before.optimum="8pt" space-after.optimum="8pt" keep-with-next="true">1) Prerequisites</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">Following software must be installed:</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">a) Java 1.1.x or later</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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 <fo:inline-sequence font-style="italic" font-family="serif">
+ Sun website</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://java.sun.com/products/jfc/#download-swing)
+ </fo:inline-sequence>.
+ </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">b) An XML parser which supports SAX and DOM like
+ <fo:inline-sequence font-style="italic" font-family="serif">Xerces-J</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://xml.apache.org/xerces-j/index.html)
+ </fo:inline-sequence>.</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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
+ <fo:inline-sequence font-style="italic" font-family="serif">XT</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://www.jclark.com/xml/xt.html)
+ </fo:inline-sequence>
+ or <fo:inline-sequence font-style="italic" font-family="serif">XALAN</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://xml.apache.org/xalan/index.html)
+ </fo:inline-sequence>.
+ </fo:block>
+
+
+ <fo:block font-size="16pt" font-family="serif" line-height="18pt" space-before.optimum="8pt" space-after.optimum="8pt" keep-with-next="true">2) Starting FOP as an standalone application</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">There are three ways to run FOP from the command line.</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">a) Batch processing formatting objects (fo) files: </fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">java org.apache.fop.apps.CommandLine fo-file pdf-file</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">b) Batch processing xml files (includes production of the fo-files):</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">java org.apache.fop.apps.CommandLine xml-file xsl-file pdf-file</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">c) Previewing the fo-file:</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">java org.apache.fop.apps.AWTCommandLine fo-file</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">Each method uses next to the fop classes other packages. The following describes
+ each method in detail.</fo:block>
+
+ <fo:block font-size="14pt" font-family="serif" line-height="16pt" space-before.optimum="8pt" space-after.optimum="4pt" keep-with-next="true">a) Method One</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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
+ </fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">java -cp fop_x_xx_x.jar;xerces.jar</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">org.apache.fop.apps.CommandLine fo-file pdf-file</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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:
+ </fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">java -Dorg.xml.sax.parser=com.jclark.xml.sax.Driver</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">-cp fop_x_xx_x.jar;sax.jar;xt.jar;xp.jar;xerces.jar</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">org.apache.fop.apps.AWTCommandLine formatting-tree-file pdf-file</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">(You have to include xerces.jar or another xml parser which supports DOM in your classpath.) </fo:block>
+
+
+ <fo:block font-size="14pt" font-family="serif" line-height="16pt" space-before.optimum="8pt" space-after.optimum="4pt" keep-with-next="true">b) Method Two</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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
+ </fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">java -Dorg.xml.sax.parser=com.jclark.xml.sax.Driver</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">-cp fop_x_xx_x.jar;xt.jar;xerces.jar</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">org.apache.fop.apps.CommandLine xml-file xsl-file pdf-file</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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.
+ </fo:block>
+
+
+ <fo:block font-size="14pt" font-family="serif" line-height="16pt" space-before.optimum="8pt" space-after.optimum="4pt" keep-with-next="true">c) Method Three</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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
+ </fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">java -cp fop_x_xx_x.jar;xerces.jar</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">org.apache.fop.apps.AWTCommandLine fo-file </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">The viewer uses the swing classes.</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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:
+ </fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">java org.apache.fop.apps.CommandLine fo-file pdf-file</fo:block>
+
+
+
+ <fo:block font-size="16pt" font-family="serif" line-height="18pt" space-before.optimum="8pt" space-after.optimum="8pt" keep-with-next="true">3) Running FOP on MacOS</fo:block>
+
+ <fo:block space-after.optimum="3pt" font-family="serif">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.
+ </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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.
+ </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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.
+ </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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.
+ </fo:block>
+
+
+ <fo:block font-size="16pt" font-family="serif" line-height="18pt" space-before.optimum="8pt" space-after.optimum="8pt" keep-with-next="true">4) Problems</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">If you have problems running FOP, please have a look at the
+ <fo:inline-sequence font-style="italic" font-family="serif">FOP FAQ</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (faq.html)
+ </fo:inline-sequence>. 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.
+ </fo:block>
+
+
+
+
+
+
+
+
+
+ <fo:block font-size="18pt" font-family="serif" line-height="20pt" space-before.optimum="20pt" space-after.optimum="14pt" keep-with-next="true">D)
+ Embedding FOP </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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).
+ </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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.
+ </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">A third possibility may be used to build the FO Tree, namely
+ calling getDocumentHandler() and firing the SAX events yourself.
+ </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">Once the FO Tree is built, the format() and render() methods may be
+ called in that order.
+ </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">Here is an example use of Driver from CommandLine.java:</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">Driver driver = new Driver();</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">driver.setWriter(new PrintWriter(new FileWriter(args[1])));</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">driver.buildFOTree(parser, fileInputSource(args[0]));</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">driver.format();</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt">driver.render();</fo:block>
+
+
+
+
+
+
+ <fo:block font-size="18pt" font-family="serif" line-height="20pt" space-before.optimum="20pt" space-after.optimum="14pt" keep-with-next="true">E)
+ What's Implemented?</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">Also see STATUS for what is being worked on.</fo:block>
+
+ <fo:block font-size="16pt" font-family="serif" line-height="18pt" space-before.optimum="8pt" space-after.optimum="8pt" keep-with-next="true">1) Formatting Objects</fo:block>
+ <fo:list-block start-indent="1cm" provisional-distance-between-starts="12pt" font-family="serif">
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>root </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>layout-master-set </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>simple-page-master </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>region-body </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>region-before </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>region-after </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>page-sequence </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>sequence-specification </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>sequence-specifier-single </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>sequence-specifier-repeating </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>sequence-specifier-alternating </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>flow </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>static-content </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>block </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>list-block </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>list-item </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>list-item-label </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>list-item-body </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>page-number </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>display-sequence </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>inline-sequence </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>display-rule </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>display-graphic </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>table (minimal support)</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>table-column (minimal support)</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>table-body (minimal support)</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>table-row (minimal support)</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>table-cell (minimal support)</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ </fo:list-block>
+
+
+
+ <fo:block font-size="16pt" font-family="serif" line-height="18pt" space-before.optimum="8pt" space-after.optimum="8pt" keep-with-next="true">2) Properties</fo:block>
+ <fo:list-block start-indent="1cm" provisional-distance-between-starts="12pt" font-family="serif">
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>end-indent </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>page-master-name </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>page-master-first </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>page-master-repeating </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>page-master-odd </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>page-master-even </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>margin-top (only on pages and regions)</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>margin-bottom (only on pages and regions)</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>margin-left (only on pages and regions)</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>margin-right (only on pages and regions)</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>extent </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>page-width </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>page-height </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>flow-name </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>font-family </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>font-style </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>font-weight </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>font-size </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>line-height </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>text-align </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>text-align-last </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>space-before.optimum </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>space-after.optimum </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>start-indent </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>end-indent </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>provisional-distance-between-starts </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>provisional-label-separation </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>rule-thickness </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>color </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>wrap-option </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>white-space-treatment </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>break-before </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>break-after </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>text-indent </fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>href</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>column-width</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>background-color</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>padding-top (only in conjunction with background color)</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>padding-left (only in conjunction with background color)</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>padding-bottom (only in conjunction with background color)</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>padding-right (only in conjunction with background color)</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ </fo:list-block>
+
+
+
+
+
+
+ <fo:block font-size="18pt" font-family="serif" line-height="20pt" space-before.optimum="20pt" space-after.optimum="14pt" keep-with-next="true">F)
+ Limitations</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">Although FOP implements the above listed fo objects and properties, sometimes it does so
+ only in a limited way.
+ </fo:block>
+
+ <fo:block font-size="16pt" font-family="serif" line-height="18pt" space-before.optimum="8pt" space-after.optimum="8pt" keep-with-next="true">list-block</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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.</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">At the moment FOP only implements the second way. Therefore a list has a basic structure like this:</fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"><fo:list-block></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"><fo:list-item></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"><fo:list-item-label><fo:block></fo:block></fo:list-item-label></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"><fo:list-item-body><fo:block></fo:block></fo:list-item-body></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"></fo:list-item></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"></fo:list-block></fo:block>
+
+
+ <fo:block font-size="16pt" font-family="serif" line-height="18pt" space-before.optimum="8pt" space-after.optimum="8pt" keep-with-next="true">Padding</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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.
+ </fo:block>
+
+
+ <fo:block font-size="16pt" font-family="serif" line-height="18pt" space-before.optimum="8pt" space-after.optimum="8pt" keep-with-next="true">Tables</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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.
+ </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">A working basic example of a table looks like this: </fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"><fo:table></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:table-column column-width="150pt"/></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:table-column column-width="150pt"/></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:table-body font-size="10pt" font-family="sans-serif"></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:table-row></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:table-cell></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:block>text</fo:block></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> </fo:table-cell></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:table-cell></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:block>text</fo:block></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> </fo:table-cell></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> </fo:table-row></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:table-row></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:table-cell></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:block>text</fo:block></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> </fo:table-cell></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:table-cell></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:block>text</fo:block></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> </fo:table-cell></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> </fo:table-row></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:table-row></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:table-cell></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:block>text</fo:block></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> </fo:table-cell></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:table-cell></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> <fo:block>text</fo:block></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> </fo:table-cell></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> </fo:table-row></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"> </fo:table-body></fo:block>
+ <fo:block font-size="10pt" font-family="monospace" line-height="12pt" space-before.optimum="0pt" space-after.optimum="0pt"></fo:table></fo:block>
+
+
+
+
+
+
+
+
+
+
+
+ <fo:block font-size="18pt" font-family="serif" line-height="20pt" space-before.optimum="20pt" space-after.optimum="14pt" keep-with-next="true">G)
+ Bugs</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">see STATUS file</fo:block>
+
+
+
+
+
+
+ <fo:block font-size="18pt" font-family="serif" line-height="20pt" space-before.optimum="20pt" space-after.optimum="14pt" keep-with-next="true">H)
+ Compiling FOP</fo:block>
+
+ <fo:block font-size="16pt" font-family="serif" line-height="18pt" space-before.optimum="8pt" space-after.optimum="8pt" keep-with-next="true">1. Prerequisites</fo:block>
+
+ <fo:block font-size="14pt" font-family="serif" line-height="16pt" space-before.optimum="8pt" space-after.optimum="4pt" keep-with-next="true">a) Java 1.1.x or later</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">If you use Java 1.1.x you must also seperately include the swing classes, which can
+ be found at the <fo:inline-sequence font-style="italic" font-family="serif">
+ Sun website</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://java.sun.com/products/jfc/#download-swing)
+ </fo:inline-sequence>. From Java 1.2 on (aka Java 2) they are part of the standard
+ distribution.
+ </fo:block>
+
+
+ <fo:block font-size="14pt" font-family="serif" line-height="16pt" space-before.optimum="8pt" space-after.optimum="4pt" keep-with-next="true">b) An XML parser</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">An XML parser which supports DOM like
+ <fo:inline-sequence font-style="italic" font-family="serif">Xerces-J</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://xml.apache.org/xerces-j/index.html)
+ </fo:inline-sequence>.</fo:block>
+
+
+ <fo:block font-size="14pt" font-family="serif" line-height="16pt" space-before.optimum="8pt" space-after.optimum="4pt" keep-with-next="true">c) XT from James Clark</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">Some of the Java source code in FOP is generated from XML using
+ XSLT. XT must be used to generate this code.</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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 <fo:inline-sequence font-style="italic" font-family="serif">
+ James Clark's website</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://www.jclark.com/xml/xt.html)
+ </fo:inline-sequence>. You have to use XT version 19991105 or later.</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">(Under windows you shouldn't use the prepackaged xt.exe but also the
+ generic jar file, otherwise make won't work)
+ </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">XT relies on an sax parser like XP (also J. Clark), which can be
+ downloaded at <fo:inline-sequence font-style="italic" font-family="serif">James
+ Clark's Website</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://www.jclark.com/xml/xp/index.html)
+ </fo:inline-sequence>
+ </fo:block>
+
+
+ <fo:block font-size="14pt" font-family="serif" line-height="16pt" space-before.optimum="8pt" space-after.optimum="4pt" keep-with-next="true">d) make</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">Under windows it has been reported that the use of the cygnus solutions port
+ of the GNU utilities works. You can find it at
+ <fo:inline-sequence font-style="italic" font-family="serif">Cygnus Solutions</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://sourceware.cygnus.com/cygwin/)
+ </fo:inline-sequence>
+ </fo:block>
+
+
+
+ <fo:block font-size="16pt" font-family="serif" line-height="18pt" space-before.optimum="8pt" space-after.optimum="8pt" keep-with-next="true">Compiling FOP on MacOS</fo:block>
+
+ <fo:block space-after.optimum="3pt" font-family="serif">We strongly recommend the use of Codewarrior Java. This Readme will
+ contain a link to more information in the near future.
+ </fo:block>
+
+
+
+
+
+
+
+ <fo:block font-size="18pt" font-family="serif" line-height="20pt" space-before.optimum="20pt" space-after.optimum="14pt" keep-with-next="true">I)
+ Getting involved</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">1. Subscribe to fop-dev@xml.apache.org by sending an email
+ to fop-dev-subscribe@xml.apache.org</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">2. Read the archives to fop-dev to get an idea of the issues being
+ discussed. </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">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). </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">4. Try :-) to wrap your head around the XSL working draft. </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">5. Get CVS working on your system. </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">6. Ask, on fop-dev, any questions you have at all about the code, design, etc. </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">7. When you feel comfortable modifying the code, send diffs to
+ fop-dev with your contributions. </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">8. Have fun!</fo:block>
+
+
+
+
+
+
+ <fo:block font-size="18pt" font-family="serif" line-height="20pt" space-before.optimum="20pt" space-after.optimum="14pt" keep-with-next="true">J)
+ FOP Relevant Specifications</fo:block>
+ <fo:list-block start-indent="1cm" provisional-distance-between-starts="12pt" font-family="serif">
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>
+<fo:inline-sequence font-style="italic" font-family="serif">XML Recommendation</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://www.w3.org/TR/REC-xml)
+ </fo:inline-sequence>
+</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>
+<fo:inline-sequence font-style="italic" font-family="serif">XSL-FO Working Draft</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://www.w3.org/TR/WD-xsl/)
+ </fo:inline-sequence>
+</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>
+<fo:inline-sequence font-style="italic" font-family="serif">XSLT Recommendation</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://www.w3.org/TR/xslt)
+ </fo:inline-sequence>
+</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>
+<fo:inline-sequence font-style="italic" font-family="serif">PDF Documentation</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://partners.adobe.com/asn/developer/acrosdk/DOCS/pdfspec.pdf)
+ </fo:inline-sequence>
+</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>
+<fo:inline-sequence font-style="italic" font-family="serif">Simple API for XML (SAX)</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://www.megginson.com/SAX/)
+ </fo:inline-sequence>
+</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>
+<fo:inline-sequence font-style="italic" font-family="serif">Document Object Model (DOM)</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://www.w3.org/TR/REC-DOM-Level-1)
+ </fo:inline-sequence>
+</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>
+<fo:inline-sequence font-style="italic" font-family="serif">Namespaces in XML Recommendation</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://www.w3.org/TR/REC-xml-names/)
+ </fo:inline-sequence>
+</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ <fo:list-item>
+<fo:list-item-label>
+<fo:block>*</fo:block>
+</fo:list-item-label>
+<fo:list-item-body>
+<fo:block>
+<fo:inline-sequence font-style="italic" font-family="serif">Java JDK 1.1 Documentation</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://java.sun.com/products/jdk/1.1/docs/index.html)
+ </fo:inline-sequence>
+</fo:block>
+</fo:list-item-body>
+</fo:list-item>
+ </fo:list-block>
+
+
+
+
+
+
+ <fo:block font-size="18pt" font-family="serif" line-height="20pt" space-before.optimum="20pt" space-after.optimum="14pt" keep-with-next="true">K)
+ Licence</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif"> ============================================================================</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif"> The Apache Software License, Version 1.1</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif"> ============================================================================</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif"> Copyright (C) 1999 The Apache Software Foundation. All rights reserved.</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif"> Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:</fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ </fo:block>
+
+ <fo:block space-after.optimum="3pt" font-family="serif">2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ </fo:block>
+
+ <fo:block space-after.optimum="3pt" font-family="serif">3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+ </fo:block>
+
+ <fo:block space-after.optimum="3pt" font-family="serif">4. The names "FOP" and "Apache Software Foundation" must not be used to
+ endorse or promote products derived from this software without prior
+ written permission. For written permission, please contact
+ apache@apache.org.
+ </fo:block>
+
+ <fo:block space-after.optimum="3pt" font-family="serif">5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+ </fo:block>
+ <fo:block space-after.optimum="3pt" font-family="serif">THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ </fo:block>
+
+ <fo:block space-after.optimum="3pt" font-family="serif">
+ 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 <fo:inline-sequence font-style="italic" font-family="serif">http://www.apache.org/</fo:inline-sequence>
+<fo:inline-sequence font-family="serif">
+ (http://www.apache.org/)
+ </fo:inline-sequence>.
+ </fo:block>
+
+
+
+</fo:flow>
+</fo:page-sequence>
+</fo:root>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+
+
+ <!-- defines the layout master -->
+ <fo:layout-master-set>
+ <fo:simple-page-master page-master-name="first"
+ page-height="29.7cm"
+ page-width="21cm"
+ margin-top="1cm"
+ margin-bottom="2cm"
+ margin-left="2.5cm"
+ margin-right="2.5cm">
+ <fo:region-before extent="3cm"/>
+ <fo:region-body margin-top="3cm"/>
+ <fo:region-after extent="1.5cm"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+
+ <!-- starts actual layout -->
+ <fo:page-sequence>
+
+ <!-- applies layout master -->
+ <fo:sequence-specification>
+ <fo:sequence-specifier-single page-master-name="first"/>
+ </fo:sequence-specification>
+
+ <!-- Inserts a header with the page number -->
+ <fo:static-content flow-name="xsl-before">
+ <fo:block text-align="end" font-size="10pt" font-family="serif" line-height="14pt">
+ FOP - p. <fo:page-number/>
+ </fo:block>
+ </fo:static-content>
+
+ <fo:flow flow-name="xsl-body">
+
+ <fo:block font-size="10pt" font-family="sans-serif" line-height="10pt" space-after.optimum="3pt" font-weight="bold" start-indent="15pt">
+ Content
+ </fo:block>
+
+ <!-- Here starts the table -->
+ <fo:table>
+ <fo:table-column column-width="1cm"/>
+ <fo:table-column column-width="15cm"/>
+ <fo:table-body font-size="10pt" font-family="sans-serif">
+ <fo:table-row line-height="12pt">
+ <fo:table-cell>
+ <fo:block text-align="end">A) </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block text-align="start">What is FOP?</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row line-height="12pt">
+ <fo:table-cell>
+ <fo:block text-align="end">B) </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block text-align="start">Downloading FOP</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row line-height="12pt">
+ <fo:table-cell>
+ <fo:block text-align="end">C) </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block text-align="start">Running FOP</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row line-height="12pt">
+ <fo:table-cell>
+ <fo:block text-align="end">D) </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block text-align="start">Embedding FOP </fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row line-height="12pt">
+ <fo:table-cell>
+ <fo:block text-align="end">E) </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block text-align="start">What's Implemented?</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row line-height="12pt">
+ <fo:table-cell>
+ <fo:block text-align="end">F) </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block text-align="start">Limitations</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row line-height="12pt">
+ <fo:table-cell>
+ <fo:block text-align="end">G) </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block text-align="start">Bugs</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row line-height="12pt">
+ <fo:table-cell>
+ <fo:block text-align="end">H) </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block text-align="start">Compiling FOP</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row line-height="12pt">
+ <fo:table-cell>
+ <fo:block text-align="end">I) </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block text-align="start">Getting involved</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row line-height="12pt">
+ <fo:table-cell>
+ <fo:block text-align="end">J) </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block text-align="start">FOP Relevant Specifications</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row line-height="12pt">
+ <fo:table-cell>
+ <fo:block text-align="end">K) </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block text-align="start">Licence</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ </fo:flow>
+ </fo:page-sequence>
+</fo:root>
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 1
+/Kids [18 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] >>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 8224 >>
+stream
+BT
+/F3 14 Tf
+1 0 0 1 14.175 808.681 Tm (PX7.net) Tj
+1 0 0 1 14.175 791.731 Tm (44) Tj
+1 0 0 1 33.635 791.731 Tm (Liberty) Tj
+1 0 0 1 84.203 791.731 Tm (St) Tj
+1 0 0 1 14.175 774.781 Tm (Newburyport,) Tj
+1 0 0 1 108.297 774.781 Tm (MA) Tj
+1 0 0 1 133.959 774.781 Tm (01950) Tj
+1 0 0 1 14.175 757.831 Tm (978-462-1152) Tj
+/F1 23 Tf
+1 0 0 1 411.075 804.719 Tm (Sales) Tj
+1 0 0 1 474.992 804.719 Tm (Receipt) Tj
+0.0 0.0 0.0 RG
+411.075 786.713 m 481.95 786.713 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+411.075 786.713 m 411.075 772.538 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+481.95 786.713 m 481.95 772.538 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+411.075 772.538 m 481.95 772.538 l 1.0 w S
+0 0 0 RG
+/F1 12 Tf
+1 0 0 1 414.075 773.597 Tm (DATE) Tj
+0.0 0.0 0.0 RG
+411.075 772.538 m 481.95 772.538 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+411.075 772.538 m 411.075 758.363 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+481.95 772.538 m 481.95 758.363 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+411.075 758.363 m 481.95 758.363 l 1.0 w S
+0 0 0 RG
+/F1 10 Tf
+1 0 0 1 414.075 759.858 Tm (01/01/20000) Tj
+0.0 0.0 0.0 RG
+481.95 786.713 m 552.825 786.713 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+481.95 786.713 m 481.95 772.538 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+552.825 786.713 m 552.825 772.538 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+481.95 772.538 m 552.825 772.538 l 1.0 w S
+0 0 0 RG
+/F1 12 Tf
+1 0 0 1 484.95 773.597 Tm (SALE) Tj
+1 0 0 1 518.97 773.597 Tm (#) Tj
+0.0 0.0 0.0 RG
+481.95 772.538 m 552.825 772.538 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+481.95 772.538 m 481.95 758.363 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+552.825 772.538 m 552.825 758.363 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+481.95 758.363 m 552.825 758.363 l 1.0 w S
+0 0 0 RG
+/F1 10 Tf
+1 0 0 1 484.95 759.858 Tm (1) Tj
+0.0 0.0 0.0 RG
+14.175 735.683 m 269.325 735.683 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+14.175 735.683 m 14.175 721.508 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+269.325 735.683 m 269.325 721.508 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+14.175 721.508 m 269.325 721.508 l 1.0 w S
+0 0 0 RG
+/F1 12 Tf
+1 0 0 1 17.175 722.567 Tm (SOLD) Tj
+1 0 0 1 53.187 722.567 Tm (TO) Tj
+0.0 0.0 0.0 RG
+14.175 721.508 m 269.325 721.508 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+14.175 721.508 m 14.175 636.458 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+269.325 721.508 m 269.325 636.458 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+14.175 636.458 m 269.325 636.458 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+297.675 735.683 m 552.825 735.683 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+297.675 735.683 m 297.675 721.508 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+552.825 735.683 m 552.825 721.508 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+297.675 721.508 m 552.825 721.508 l 1.0 w S
+0 0 0 RG
+1 0 0 1 300.675 722.567 Tm (SHIP) Tj
+1 0 0 1 332.019 722.567 Tm (TO) Tj
+0.0 0.0 0.0 RG
+297.675 721.508 m 552.825 721.508 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+297.675 721.508 m 297.675 636.458 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+552.825 721.508 m 552.825 636.458 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+297.675 636.458 m 552.825 636.458 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+326.025 622.283 m 439.425 622.283 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+326.025 622.283 m 326.025 608.108 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+439.425 622.283 m 439.425 608.108 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+326.025 608.108 m 439.425 608.108 l 1.0 w S
+0 0 0 RG
+1 0 0 1 329.025 609.167 Tm (PMT) Tj
+1 0 0 1 357.693 609.167 Tm (METHOD) Tj
+0.0 0.0 0.0 RG
+326.025 608.108 m 439.425 608.108 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+326.025 608.108 m 326.025 593.933 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+439.425 608.108 m 439.425 593.933 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+326.025 593.933 m 439.425 593.933 l 1.0 w S
+0 0 0 RG
+/F1 10 Tf
+1 0 0 1 329.025 595.428 Tm (Check) Tj
+0.0 0.0 0.0 RG
+439.425 622.283 m 552.825 622.283 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+439.425 622.283 m 439.425 608.108 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+552.825 622.283 m 552.825 608.108 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+439.425 608.108 m 552.825 608.108 l 1.0 w S
+0 0 0 RG
+/F1 12 Tf
+1 0 0 1 442.425 609.167 Tm (CHECK) Tj
+1 0 0 1 487.761 609.167 Tm (#) Tj
+0.0 0.0 0.0 RG
+439.425 608.108 m 552.825 608.108 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+439.425 608.108 m 439.425 593.933 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+552.825 608.108 m 552.825 593.933 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+439.425 593.933 m 552.825 593.933 l 1.0 w S
+0 0 0 RG
+/F1 10 Tf
+1 0 0 1 442.425 595.428 Tm (1234) Tj
+1.0 1.0 0.0 RG
+14.175 593.933 m 552.825 593.933 l 1.0 w S
+0 0 0 RG
+1.0 1.0 0.0 RG
+14.175 593.933 m 14.175 111.983 l 1.0 w S
+0 0 0 RG
+1.0 1.0 0.0 RG
+552.825 593.933 m 552.825 111.983 l 1.0 w S
+0 0 0 RG
+1.0 1.0 0.0 RG
+14.175 111.983 m 552.825 111.983 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+14.175 593.933 m 85.05 593.933 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+14.175 593.933 m 14.175 111.983 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+85.05 593.933 m 85.05 111.983 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+14.175 111.983 m 85.05 111.983 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+85.05 593.933 m 411.075 593.933 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+85.05 593.933 m 85.05 111.983 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+411.075 593.933 m 411.075 111.983 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+85.05 111.983 m 411.075 111.983 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+411.075 593.933 m 481.95 593.933 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+411.075 593.933 m 411.075 111.983 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+481.95 593.933 m 481.95 111.983 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+411.075 111.983 m 481.95 111.983 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+481.95 593.933 m 552.825 593.933 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+481.95 593.933 m 481.95 111.983 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+552.825 593.933 m 552.825 111.983 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+481.95 111.983 m 552.825 111.983 l 1.0 w S
+0 0 0 RG
+0.0 0.5 0.0 RG
+14.175 593.933 m 85.05 593.933 l 1.0 w S
+0 0 0 RG
+0.0 0.5 0.0 RG
+14.175 593.933 m 14.175 568.683 l 1.0 w S
+0 0 0 RG
+0.0 0.5 0.0 RG
+85.05 593.933 m 85.05 568.683 l 1.0 w S
+0 0 0 RG
+0.0 0.5 0.0 RG
+14.175 568.683 m 85.05 568.683 l 1.0 w S
+0 0 0 RG
+1 0 0 1 27.49 578.753 Tm (QUANTITY) Tj
+1.0 0.0 0.0 RG
+85.05 593.933 m 411.075 593.933 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+85.05 593.933 m 85.05 568.683 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+411.075 593.933 m 411.075 568.683 l 1.0 w S
+0 0 0 RG
+1.0 0.0 0.0 RG
+85.05 568.683 m 411.075 568.683 l 1.0 w S
+0 0 0 RG
+1 0 0 1 90.05 580.753 Tm (DESCRIPTION) Tj
+0.0 0.0 1.0 RG
+411.075 593.933 m 481.95 593.933 l 1.0 w S
+0 0 0 RG
+0.0 0.0 1.0 RG
+411.075 593.933 m 411.075 568.683 l 1.0 w S
+0 0 0 RG
+0.0 0.0 1.0 RG
+481.95 593.933 m 481.95 568.683 l 1.0 w S
+0 0 0 RG
+0.0 0.0 1.0 RG
+411.075 568.683 m 481.95 568.683 l 1.0 w S
+0 0 0 RG
+1 0 0 1 433.177 581.753 Tm (RATE) Tj
+0.7 0.5 0.0 RG
+481.95 593.933 m 552.825 593.933 l 1.0 w S
+0 0 0 RG
+0.7 0.5 0.0 RG
+481.95 593.933 m 481.95 568.683 l 1.0 w S
+0 0 0 RG
+0.7 0.5 0.0 RG
+552.825 593.933 m 552.825 568.683 l 1.0 w S
+0 0 0 RG
+0.7 0.5 0.0 RG
+481.95 568.683 m 552.825 568.683 l 1.0 w S
+0 0 0 RG
+1 0 0 1 495.722 582.753 Tm (AMOUNT) Tj
+1 0 0 1 77.49 558.503 Tm (1) Tj
+1 0 0 1 87.05 558.503 Tm (Widget) Tj
+1 0 0 1 449.37 558.503 Tm ($22.23) Tj
+1 0 0 1 525.805 558.503 Tm (22.31) Tj
+1 0 0 1 77.49 543.253 Tm (3) Tj
+1 0 0 1 87.05 543.253 Tm (Nuts) Tj
+1 0 0 1 449.37 543.253 Tm ($12.00) Tj
+1 0 0 1 525.805 543.253 Tm (36.00) Tj
+0.0 0.0 0.0 RG
+14.175 111.983 m 411.075 111.983 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+14.175 111.983 m 14.175 83.633 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+411.075 111.983 m 411.075 83.633 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+14.175 83.633 m 411.075 83.633 l 1.0 w S
+0 0 0 RG
+/F1 12 Tf
+1 0 0 1 17.175 98.867 Tm (Please) Tj
+1 0 0 1 57.195 98.867 Tm (remit) Tj
+1 0 0 1 87.195 98.867 Tm (to) Tj
+1 0 0 1 100.539 98.867 Tm (the) Tj
+1 0 0 1 120.555 98.867 Tm (above) Tj
+1 0 0 1 156.579 98.867 Tm (address) Tj
+0.0 0.0 0.0 RG
+411.075 111.983 m 481.95 111.983 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+411.075 111.983 m 411.075 83.633 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+481.95 111.983 m 481.95 83.633 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+411.075 83.633 m 481.95 83.633 l 1.0 w S
+0 0 0 RG
+/F1 22 Tf
+1 0 0 1 414.075 91.687 Tm (Total) Tj
+0.0 0.0 0.0 RG
+481.95 111.983 m 552.825 111.983 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+481.95 111.983 m 481.95 83.633 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+552.825 111.983 m 552.825 83.633 l 1.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+481.95 83.633 m 552.825 83.633 l 1.0 w S
+0 0 0 RG
+/F1 10 Tf
+1 0 0 1 484.95 99.303 Tm ($3.00) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 17 0 R
+>>
+endobj
+xref
+0 19
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000117 00000 n
+0000000179 00000 n
+0000000377 00000 n
+0000000488 00000 n
+0000000602 00000 n
+0000000707 00000 n
+0000000821 00000 n
+0000000929 00000 n
+0000001040 00000 n
+0000001150 00000 n
+0000001270 00000 n
+0000001383 00000 n
+0000001499 00000 n
+0000001607 00000 n
+0000001726 00000 n
+0000010002 00000 n
+trailer
+<<
+/Size 19
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+10110
+%%EOF
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 7
+/Kids [18 0 R 20 0 R 22 0 R 24 0 R 26 0 R 28 0 R 30 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] >>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 13043 >>
+stream
+BT
+/F1 12 Tf
+1 0 0 1 100.0 732.184 Tm (A) Tj
+1 0 0 1 111.34 732.184 Tm (Block) Tj
+1 0 0 1 360.608 718.684 Tm (An) Tj
+1 0 0 1 378.62 718.684 Tm (End) Tj
+1 0 0 1 403.304 718.684 Tm (Aligned) Tj
+1 0 0 1 446.66 718.684 Tm (Block) Tj
+1 0 0 1 241.314 705.184 Tm (A) Tj
+1 0 0 1 252.654 705.184 Tm (Centered) Tj
+1 0 0 1 305.346 705.184 Tm (Block) Tj
+1 0 0 1 100.0 691.684 Tm (This) Tj
+1 0 0 1 126.004 691.684 Tm (is) Tj
+1 0 0 1 138.004 691.684 Tm (a) Tj
+1 0 0 1 148.012 691.684 Tm (multiple) Tj
+1 0 0 1 192.688 691.684 Tm (line) Tj
+1 0 0 1 214.696 691.684 Tm (block) Tj
+1 0 0 1 246.04 691.684 Tm (that) Tj
+1 0 0 1 269.392 691.684 Tm (extends) Tj
+1 0 0 1 314.752 691.684 Tm (over) Tj
+1 0 0 1 341.428 691.684 Tm (more) Tj
+1 0 0 1 372.1 691.684 Tm (than) Tj
+1 0 0 1 398.788 691.684 Tm (one) Tj
+1 0 0 1 422.14 691.684 Tm (line.) Tj
+1 0 0 1 100.0 678.184 Tm (There) Tj
+1 0 0 1 134.68 678.184 Tm (should) Tj
+1 0 0 1 173.368 678.184 Tm (be) Tj
+1 0 0 1 190.048 678.184 Tm (appropriate) Tj
+1 0 0 1 254.08 678.184 Tm (line) Tj
+1 0 0 1 276.088 678.184 Tm (breaks.) Tj
+1 0 0 1 318.772 678.184 Tm (Alignment) Tj
+1 0 0 1 375.46 678.184 Tm (is) Tj
+1 0 0 1 387.46 678.184 Tm (default.) Tj
+1 0 0 1 131.852 664.684 Tm (This) Tj
+1 0 0 1 157.856 664.684 Tm (is) Tj
+1 0 0 1 169.856 664.684 Tm (a) Tj
+1 0 0 1 179.864 664.684 Tm (multiple) Tj
+1 0 0 1 224.54 664.684 Tm (line) Tj
+1 0 0 1 246.548 664.684 Tm (block) Tj
+1 0 0 1 277.892 664.684 Tm (that) Tj
+1 0 0 1 301.244 664.684 Tm (extends) Tj
+1 0 0 1 346.604 664.684 Tm (over) Tj
+1 0 0 1 373.28 664.684 Tm (more) Tj
+1 0 0 1 403.952 664.684 Tm (than) Tj
+1 0 0 1 430.64 664.684 Tm (one) Tj
+1 0 0 1 453.992 664.684 Tm (line.) Tj
+1 0 0 1 165.188 651.184 Tm (There) Tj
+1 0 0 1 199.868 651.184 Tm (should) Tj
+1 0 0 1 238.556 651.184 Tm (be) Tj
+1 0 0 1 255.236 651.184 Tm (appropriate) Tj
+1 0 0 1 319.268 651.184 Tm (line) Tj
+1 0 0 1 341.276 651.184 Tm (breaks.) Tj
+1 0 0 1 383.96 651.184 Tm (Alignment) Tj
+1 0 0 1 440.648 651.184 Tm (is) Tj
+1 0 0 1 452.648 651.184 Tm (end.) Tj
+1 0 0 1 115.926 637.684 Tm (This) Tj
+1 0 0 1 141.93 637.684 Tm (is) Tj
+1 0 0 1 153.93 637.684 Tm (a) Tj
+1 0 0 1 163.938 637.684 Tm (multiple) Tj
+1 0 0 1 208.614 637.684 Tm (line) Tj
+1 0 0 1 230.622 637.684 Tm (block) Tj
+1 0 0 1 261.966 637.684 Tm (that) Tj
+1 0 0 1 285.318 637.684 Tm (extends) Tj
+1 0 0 1 330.678 637.684 Tm (over) Tj
+1 0 0 1 357.354 637.684 Tm (more) Tj
+1 0 0 1 388.026 637.684 Tm (than) Tj
+1 0 0 1 414.714 637.684 Tm (one) Tj
+1 0 0 1 438.066 637.684 Tm (line.) Tj
+1 0 0 1 119.256 624.184 Tm (There) Tj
+1 0 0 1 153.936 624.184 Tm (should) Tj
+1 0 0 1 192.624 624.184 Tm (be) Tj
+1 0 0 1 209.304 624.184 Tm (appropriate) Tj
+1 0 0 1 273.336 624.184 Tm (line) Tj
+1 0 0 1 295.344 624.184 Tm (breaks.) Tj
+1 0 0 1 338.028 624.184 Tm (Alignment) Tj
+1 0 0 1 394.716 624.184 Tm (is) Tj
+1 0 0 1 406.716 624.184 Tm (centered.) Tj
+1 0 0 1 100.0 610.684 Tm (This) Tj
+1 0 0 1 128.658 610.684 Tm (is) Tj
+1 0 0 1 143.312 610.684 Tm (a) Tj
+1 0 0 1 155.974 610.684 Tm (multiple) Tj
+1 0 0 1 203.304 610.684 Tm (line) Tj
+1 0 0 1 227.966 610.684 Tm (block) Tj
+1 0 0 1 261.964 610.684 Tm (that) Tj
+1 0 0 1 287.97 610.684 Tm (extends) Tj
+1 0 0 1 335.984 610.684 Tm (over) Tj
+1 0 0 1 365.314 610.684 Tm (more) Tj
+1 0 0 1 398.64 610.684 Tm (than) Tj
+1 0 0 1 427.982 610.684 Tm (one) Tj
+1 0 0 1 453.988 610.684 Tm (line.) Tj
+1 0 0 1 100.0 597.184 Tm (There) Tj
+1 0 0 1 135.584 597.184 Tm (should) Tj
+1 0 0 1 175.176 597.184 Tm (be) Tj
+1 0 0 1 192.76 597.184 Tm (appropriate) Tj
+1 0 0 1 257.696 597.184 Tm (line) Tj
+1 0 0 1 280.608 597.184 Tm (breaks.) Tj
+1 0 0 1 324.196 597.184 Tm (I'm) Tj
+1 0 0 1 344.06 597.184 Tm (going) Tj
+1 0 0 1 377.652 597.184 Tm (to) Tj
+1 0 0 1 391.9 597.184 Tm (keep) Tj
+1 0 0 1 422.156 597.184 Tm (going) Tj
+1 0 0 1 455.748 597.184 Tm (so) Tj
+1 0 0 1 472.66 597.184 Tm (I) Tj
+1 0 0 1 100.0 583.684 Tm (can) Tj
+1 0 0 1 124.871 583.684 Tm (get) Tj
+1 0 0 1 147.078 583.684 Tm (three) Tj
+1 0 0 1 179.953 583.684 Tm (lines) Tj
+1 0 0 1 210.152 583.684 Tm (to) Tj
+1 0 0 1 225.687 583.684 Tm (check) Tj
+1 0 0 1 262.558 583.684 Tm (how) Tj
+1 0 0 1 290.093 583.684 Tm (all) Tj
+1 0 0 1 307.62 583.684 Tm (but) Tj
+1 0 0 1 329.827 583.684 Tm (the) Tj
+1 0 0 1 352.034 583.684 Tm (last) Tj
+1 0 0 1 376.233 583.684 Tm (justify.) Tj
+1 0 0 1 415.768 583.684 Tm (There,) Tj
+1 0 0 1 455.975 583.684 Tm (that) Tj
+1 0 0 1 100.0 570.184 Tm (should) Tj
+1 0 0 1 138.688 570.184 Tm (do) Tj
+1 0 0 1 155.368 570.184 Tm (it.) Tj
+1 0 0 1 168.04 570.184 Tm (Alignment) Tj
+1 0 0 1 224.728 570.184 Tm (is) Tj
+1 0 0 1 236.728 570.184 Tm (justified.) Tj
+1 0 0 1 100.0 556.684 Tm (A) Tj
+1 0 0 1 111.34 556.684 Tm (block) Tj
+1 0 0 1 142.684 556.684 Tm (for) Tj
+1 0 0 1 160.024 556.684 Tm (comparison) Tj
+1 0 0 1 100.0 531.184 Tm (A) Tj
+1 0 0 1 111.34 531.184 Tm (block) Tj
+1 0 0 1 142.684 531.184 Tm (with) Tj
+1 0 0 1 167.356 531.184 Tm (12pt) Tj
+1 0 0 1 194.044 531.184 Tm (space-before) Tj
+1 0 0 1 100.0 517.684 Tm (A) Tj
+1 0 0 1 111.34 517.684 Tm (block) Tj
+1 0 0 1 142.684 517.684 Tm (for) Tj
+1 0 0 1 160.024 517.684 Tm (comparison) Tj
+1 0 0 1 100.0 504.184 Tm (A) Tj
+1 0 0 1 111.34 504.184 Tm (block) Tj
+1 0 0 1 142.684 504.184 Tm (with) Tj
+1 0 0 1 167.356 504.184 Tm (12pt) Tj
+1 0 0 1 194.044 504.184 Tm (space-after) Tj
+1 0 0 1 100.0 478.684 Tm (A) Tj
+1 0 0 1 111.34 478.684 Tm (block) Tj
+1 0 0 1 142.684 478.684 Tm (for) Tj
+1 0 0 1 160.024 478.684 Tm (comparison) Tj
+1 0 0 1 100.0 453.184 Tm (A) Tj
+1 0 0 1 111.34 453.184 Tm (block) Tj
+1 0 0 1 142.684 453.184 Tm (with) Tj
+1 0 0 1 167.356 453.184 Tm (both) Tj
+1 0 0 1 194.044 453.184 Tm (12pt) Tj
+1 0 0 1 220.732 453.184 Tm (space-before) Tj
+1 0 0 1 294.1 453.184 Tm (and) Tj
+1 0 0 1 317.452 453.184 Tm (space-after) Tj
+1 0 0 1 100.0 427.684 Tm (A) Tj
+1 0 0 1 111.34 427.684 Tm (block) Tj
+1 0 0 1 142.684 427.684 Tm (for) Tj
+1 0 0 1 160.024 427.684 Tm (comparison) Tj
+1 0 0 1 150.0 414.184 Tm (This) Tj
+1 0 0 1 176.004 414.184 Tm (is) Tj
+1 0 0 1 188.004 414.184 Tm (a) Tj
+1 0 0 1 198.012 414.184 Tm (multiple) Tj
+1 0 0 1 242.688 414.184 Tm (line) Tj
+1 0 0 1 264.696 414.184 Tm (block) Tj
+1 0 0 1 296.04 414.184 Tm (that) Tj
+1 0 0 1 319.392 414.184 Tm (extends) Tj
+1 0 0 1 364.752 414.184 Tm (over) Tj
+1 0 0 1 391.428 414.184 Tm (more) Tj
+1 0 0 1 422.1 414.184 Tm (than) Tj
+1 0 0 1 448.788 414.184 Tm (one) Tj
+1 0 0 1 150.0 400.684 Tm (line.) Tj
+1 0 0 1 175.344 400.684 Tm (There) Tj
+1 0 0 1 210.024 400.684 Tm (should) Tj
+1 0 0 1 248.712 400.684 Tm (be) Tj
+1 0 0 1 265.392 400.684 Tm (appropriate) Tj
+1 0 0 1 329.424 400.684 Tm (line) Tj
+1 0 0 1 351.432 400.684 Tm (breaks.) Tj
+1 0 0 1 394.116 400.684 Tm (There) Tj
+1 0 0 1 428.796 400.684 Tm (is) Tj
+1 0 0 1 440.796 400.684 Tm (a) Tj
+1 0 0 1 150.0 387.184 Tm (start-indent) Tj
+1 0 0 1 213.36 387.184 Tm (of) Tj
+1 0 0 1 226.704 387.184 Tm (50pt.) Tj
+1 0 0 1 100.0 373.684 Tm (This) Tj
+1 0 0 1 126.004 373.684 Tm (is) Tj
+1 0 0 1 138.004 373.684 Tm (a) Tj
+1 0 0 1 148.012 373.684 Tm (multiple) Tj
+1 0 0 1 192.688 373.684 Tm (line) Tj
+1 0 0 1 214.696 373.684 Tm (block) Tj
+1 0 0 1 246.04 373.684 Tm (that) Tj
+1 0 0 1 269.392 373.684 Tm (extends) Tj
+1 0 0 1 314.752 373.684 Tm (over) Tj
+1 0 0 1 341.428 373.684 Tm (more) Tj
+1 0 0 1 372.1 373.684 Tm (than) Tj
+1 0 0 1 398.788 373.684 Tm (one) Tj
+1 0 0 1 100.0 360.184 Tm (line.) Tj
+1 0 0 1 125.344 360.184 Tm (There) Tj
+1 0 0 1 160.024 360.184 Tm (should) Tj
+1 0 0 1 198.712 360.184 Tm (be) Tj
+1 0 0 1 215.392 360.184 Tm (appropriate) Tj
+1 0 0 1 279.424 360.184 Tm (line) Tj
+1 0 0 1 301.432 360.184 Tm (breaks.) Tj
+1 0 0 1 344.116 360.184 Tm (There) Tj
+1 0 0 1 378.796 360.184 Tm (is) Tj
+1 0 0 1 390.796 360.184 Tm (an) Tj
+1 0 0 1 100.0 346.684 Tm (end-indent) Tj
+1 0 0 1 160.036 346.684 Tm (of) Tj
+1 0 0 1 173.38 346.684 Tm (50pt.) Tj
+1 0 0 1 150.0 333.184 Tm (This) Tj
+1 0 0 1 176.004 333.184 Tm (is) Tj
+1 0 0 1 188.004 333.184 Tm (a) Tj
+1 0 0 1 198.012 333.184 Tm (multiple) Tj
+1 0 0 1 242.688 333.184 Tm (line) Tj
+1 0 0 1 264.696 333.184 Tm (block) Tj
+1 0 0 1 296.04 333.184 Tm (that) Tj
+1 0 0 1 319.392 333.184 Tm (extends) Tj
+1 0 0 1 364.752 333.184 Tm (over) Tj
+1 0 0 1 391.428 333.184 Tm (more) Tj
+1 0 0 1 150.0 319.684 Tm (than) Tj
+1 0 0 1 176.688 319.684 Tm (one) Tj
+1 0 0 1 200.04 319.684 Tm (line.) Tj
+1 0 0 1 225.384 319.684 Tm (There) Tj
+1 0 0 1 260.064 319.684 Tm (should) Tj
+1 0 0 1 298.752 319.684 Tm (be) Tj
+1 0 0 1 315.432 319.684 Tm (appropriate) Tj
+1 0 0 1 379.464 319.684 Tm (line) Tj
+1 0 0 1 150.0 306.184 Tm (breaks.) Tj
+1 0 0 1 192.684 306.184 Tm (There) Tj
+1 0 0 1 227.364 306.184 Tm (is) Tj
+1 0 0 1 239.364 306.184 Tm (a) Tj
+1 0 0 1 249.372 306.184 Tm (start-indent) Tj
+1 0 0 1 312.732 306.184 Tm (and) Tj
+1 0 0 1 336.084 306.184 Tm (end-indent) Tj
+1 0 0 1 396.12 306.184 Tm (of) Tj
+1 0 0 1 150.0 292.684 Tm (50pt.) Tj
+/F1 15 Tf
+1 0 0 1 100.0 278.53 Tm (This) Tj
+1 0 0 1 132.505 278.53 Tm (is) Tj
+1 0 0 1 147.505 278.53 Tm (a) Tj
+1 0 0 1 160.015 278.53 Tm (multiple) Tj
+1 0 0 1 215.86 278.53 Tm (line) Tj
+1 0 0 1 243.37 278.53 Tm (block) Tj
+1 0 0 1 282.55 278.53 Tm (that) Tj
+1 0 0 1 311.74 278.53 Tm (extends) Tj
+1 0 0 1 368.44 278.53 Tm (over) Tj
+1 0 0 1 401.785 278.53 Tm (more) Tj
+1 0 0 1 440.125 278.53 Tm (than) Tj
+1 0 0 1 100.0 265.255 Tm (one) Tj
+1 0 0 1 129.19 265.255 Tm (line.) Tj
+1 0 0 1 160.87 265.255 Tm (There) Tj
+1 0 0 1 204.22 265.255 Tm (should) Tj
+1 0 0 1 252.58 265.255 Tm (be) Tj
+1 0 0 1 273.43 265.255 Tm (appropriate) Tj
+1 0 0 1 353.47 265.255 Tm (line) Tj
+1 0 0 1 380.98 265.255 Tm (breaks.) Tj
+1 0 0 1 434.335 265.255 Tm (The) Tj
+1 0 0 1 100.0 251.98 Tm (font-size) Tj
+1 0 0 1 160.855 251.98 Tm (is) Tj
+1 0 0 1 175.855 251.98 Tm (set) Tj
+1 0 0 1 200.035 251.98 Tm (to) Tj
+1 0 0 1 216.715 251.98 Tm (15pt.) Tj
+/F1 12 Tf
+1 0 0 1 100.0 236.559 Tm (This) Tj
+1 0 0 1 126.004 236.559 Tm (is) Tj
+1 0 0 1 138.004 236.559 Tm (a) Tj
+1 0 0 1 148.012 236.559 Tm (multiple) Tj
+1 0 0 1 192.688 236.559 Tm (line) Tj
+1 0 0 1 214.696 236.559 Tm (block) Tj
+1 0 0 1 246.04 236.559 Tm (that) Tj
+1 0 0 1 269.392 236.559 Tm (extends) Tj
+1 0 0 1 314.752 236.559 Tm (over) Tj
+1 0 0 1 341.428 236.559 Tm (more) Tj
+1 0 0 1 372.1 236.559 Tm (than) Tj
+1 0 0 1 398.788 236.559 Tm (one) Tj
+1 0 0 1 422.14 236.559 Tm (line.) Tj
+1 0 0 1 100.0 217.459 Tm (There) Tj
+1 0 0 1 134.68 217.459 Tm (should) Tj
+1 0 0 1 173.368 217.459 Tm (be) Tj
+1 0 0 1 190.048 217.459 Tm (appropriate) Tj
+1 0 0 1 254.08 217.459 Tm (line) Tj
+1 0 0 1 276.088 217.459 Tm (breaks.) Tj
+1 0 0 1 318.772 217.459 Tm (The) Tj
+1 0 0 1 342.784 217.459 Tm (line-height) Tj
+1 0 0 1 401.476 217.459 Tm (is) Tj
+1 0 0 1 413.476 217.459 Tm (set) Tj
+1 0 0 1 432.82 217.459 Tm (to) Tj
+1 0 0 1 446.164 217.459 Tm (20pt.) Tj
+/F1 15 Tf
+1 0 0 1 100.0 197.705 Tm (This) Tj
+1 0 0 1 132.505 197.705 Tm (is) Tj
+1 0 0 1 147.505 197.705 Tm (a) Tj
+1 0 0 1 160.015 197.705 Tm (multiple) Tj
+1 0 0 1 215.86 197.705 Tm (line) Tj
+1 0 0 1 243.37 197.705 Tm (block) Tj
+1 0 0 1 282.55 197.705 Tm (that) Tj
+1 0 0 1 311.74 197.705 Tm (extends) Tj
+1 0 0 1 368.44 197.705 Tm (over) Tj
+1 0 0 1 401.785 197.705 Tm (more) Tj
+1 0 0 1 440.125 197.705 Tm (than) Tj
+1 0 0 1 100.0 178.83 Tm (one) Tj
+1 0 0 1 129.19 178.83 Tm (line.) Tj
+1 0 0 1 160.87 178.83 Tm (There) Tj
+1 0 0 1 204.22 178.83 Tm (should) Tj
+1 0 0 1 252.58 178.83 Tm (be) Tj
+1 0 0 1 273.43 178.83 Tm (appropriate) Tj
+1 0 0 1 353.47 178.83 Tm (line) Tj
+1 0 0 1 380.98 178.83 Tm (breaks.) Tj
+1 0 0 1 434.335 178.83 Tm (The) Tj
+1 0 0 1 100.0 159.955 Tm (font-size) Tj
+1 0 0 1 160.855 159.955 Tm (is) Tj
+1 0 0 1 175.855 159.955 Tm (set) Tj
+1 0 0 1 200.035 159.955 Tm (to) Tj
+1 0 0 1 216.715 159.955 Tm (15pt) Tj
+1 0 0 1 250.075 159.955 Tm (and) Tj
+1 0 0 1 279.265 159.955 Tm (the) Tj
+1 0 0 1 304.285 159.955 Tm (line-height) Tj
+1 0 0 1 377.65 159.955 Tm (is) Tj
+1 0 0 1 392.65 159.955 Tm (set) Tj
+1 0 0 1 416.83 159.955 Tm (to) Tj
+1 0 0 1 433.51 159.955 Tm (20pt.) Tj
+1 0 0 1 100.0 143.58 Tm (This) Tj
+1 0 0 1 132.505 143.58 Tm (is) Tj
+1 0 0 1 147.505 143.58 Tm (a) Tj
+1 0 0 1 160.015 143.58 Tm (multiple) Tj
+1 0 0 1 215.86 143.58 Tm (line) Tj
+1 0 0 1 243.37 143.58 Tm (block) Tj
+1 0 0 1 282.55 143.58 Tm (that) Tj
+1 0 0 1 311.74 143.58 Tm (extends) Tj
+1 0 0 1 368.44 143.58 Tm (over) Tj
+1 0 0 1 401.785 143.58 Tm (more) Tj
+1 0 0 1 440.125 143.58 Tm (than) Tj
+1 0 0 1 100.0 129.705 Tm (one) Tj
+1 0 0 1 129.19 129.705 Tm (line.) Tj
+1 0 0 1 160.87 129.705 Tm (There) Tj
+1 0 0 1 204.22 129.705 Tm (should) Tj
+1 0 0 1 252.58 129.705 Tm (be) Tj
+1 0 0 1 273.43 129.705 Tm (appropriate) Tj
+1 0 0 1 353.47 129.705 Tm (line) Tj
+1 0 0 1 380.98 129.705 Tm (breaks.) Tj
+1 0 0 1 434.335 129.705 Tm (The) Tj
+1 0 0 1 100.0 115.83 Tm (font-size) Tj
+1 0 0 1 160.855 115.83 Tm (is) Tj
+1 0 0 1 175.855 115.83 Tm (set) Tj
+1 0 0 1 200.035 115.83 Tm (to) Tj
+1 0 0 1 216.715 115.83 Tm (15pt) Tj
+1 0 0 1 250.075 115.83 Tm (and) Tj
+1 0 0 1 279.265 115.83 Tm (the) Tj
+1 0 0 1 304.285 115.83 Tm (line-height) Tj
+1 0 0 1 377.65 115.83 Tm (is) Tj
+1 0 0 1 392.65 115.83 Tm (set) Tj
+1 0 0 1 416.83 115.83 Tm (to) Tj
+1 0 0 1 433.51 115.83 Tm (15pt.) Tj
+/F1 12 Tf
+1 0 0 1 100.0 78.909 Tm (A) Tj
+1 0 0 1 111.34 78.909 Tm (block) Tj
+1 0 0 1 142.684 78.909 Tm (within) Tj
+1 0 0 1 176.692 78.909 Tm (a) Tj
+1 0 0 1 186.7 78.909 Tm (block) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 17 0 R
+>>
+endobj
+19 0 obj
+<< /Length 7406 >>
+stream
+BT
+/F1 12 Tf
+1 0 0 1 100.0 720.184 Tm (Text) Tj
+1 0 0 1 126.676 720.184 Tm (before) Tj
+1 0 0 1 100.0 694.684 Tm (A) Tj
+1 0 0 1 111.34 694.684 Tm (block) Tj
+1 0 0 1 142.684 694.684 Tm (within) Tj
+1 0 0 1 176.692 694.684 Tm (a) Tj
+1 0 0 1 186.7 694.684 Tm (block) Tj
+1 0 0 1 100.0 669.184 Tm (Text) Tj
+1 0 0 1 126.676 669.184 Tm (after) Tj
+1 0 0 1 150.0 631.684 Tm (Text) Tj
+1 0 0 1 176.676 631.684 Tm (before) Tj
+1 0 0 1 150.0 606.184 Tm (A) Tj
+1 0 0 1 161.34 606.184 Tm (block) Tj
+1 0 0 1 192.684 606.184 Tm (within) Tj
+1 0 0 1 226.692 606.184 Tm (a) Tj
+1 0 0 1 236.7 606.184 Tm (block) Tj
+1 0 0 1 268.044 606.184 Tm (with) Tj
+1 0 0 1 292.716 606.184 Tm (50pt) Tj
+1 0 0 1 319.404 606.184 Tm (start-intent) Tj
+1 0 0 1 150.0 580.684 Tm (Text) Tj
+1 0 0 1 176.676 580.684 Tm (after) Tj
+1 0 0 1 150.0 543.184 Tm (And) Tj
+1 0 0 1 174.684 543.184 Tm (again) Tj
+1 0 0 1 207.372 543.184 Tm (for) Tj
+1 0 0 1 224.712 543.184 Tm (the) Tj
+1 0 0 1 244.728 543.184 Tm (page) Tj
+1 0 0 1 274.752 543.184 Tm (break,) Tj
+1 0 0 1 311.436 543.184 Tm (text) Tj
+1 0 0 1 334.116 543.184 Tm (before) Tj
+1 0 0 1 150.0 517.684 Tm (A) Tj
+1 0 0 1 161.34 517.684 Tm (block) Tj
+1 0 0 1 192.684 517.684 Tm (within) Tj
+1 0 0 1 226.692 517.684 Tm (a) Tj
+1 0 0 1 236.7 517.684 Tm (block) Tj
+1 0 0 1 268.044 517.684 Tm (with) Tj
+1 0 0 1 292.716 517.684 Tm (50pt) Tj
+1 0 0 1 319.404 517.684 Tm (start-intent) Tj
+1 0 0 1 150.0 492.184 Tm (Text) Tj
+1 0 0 1 176.676 492.184 Tm (after) Tj
+1 0 0 1 150.0 454.684 Tm (Text) Tj
+1 0 0 1 176.676 454.684 Tm (before) Tj
+1 0 0 1 150.0 429.184 Tm (A) Tj
+1 0 0 1 161.34 429.184 Tm (block) Tj
+1 0 0 1 192.684 429.184 Tm (with) Tj
+1 0 0 1 217.356 429.184 Tm (50pt) Tj
+1 0 0 1 244.044 429.184 Tm (start-indent) Tj
+1 0 0 1 307.404 429.184 Tm (within) Tj
+1 0 0 1 341.412 429.184 Tm (a) Tj
+1 0 0 1 351.42 429.184 Tm (block) Tj
+1 0 0 1 382.764 429.184 Tm (with) Tj
+1 0 0 1 407.436 429.184 Tm (50pt) Tj
+1 0 0 1 150.0 415.684 Tm (start-intent) Tj
+1 0 0 1 150.0 390.184 Tm (Text) Tj
+1 0 0 1 176.676 390.184 Tm (after) Tj
+1 0 0 1 150.0 352.684 Tm (Text) Tj
+1 0 0 1 176.676 352.684 Tm (before) Tj
+1 0 0 1 200.0 327.184 Tm (A) Tj
+1 0 0 1 211.34 327.184 Tm (block) Tj
+1 0 0 1 242.684 327.184 Tm (with) Tj
+1 0 0 1 267.356 327.184 Tm (100pt) Tj
+1 0 0 1 300.716 327.184 Tm (start-indent) Tj
+1 0 0 1 364.076 327.184 Tm (within) Tj
+1 0 0 1 398.084 327.184 Tm (a) Tj
+1 0 0 1 408.092 327.184 Tm (block) Tj
+1 0 0 1 439.436 327.184 Tm (with) Tj
+1 0 0 1 200.0 313.684 Tm (50pt) Tj
+1 0 0 1 226.688 313.684 Tm (start-intent) Tj
+1 0 0 1 150.0 288.184 Tm (Text) Tj
+1 0 0 1 176.676 288.184 Tm (after) Tj
+1 0 0 1 100.0 250.684 Tm (\225) Tj
+1 0 0 1 112.0 250.684 Tm (This) Tj
+1 0 0 1 139.658 250.684 Tm (is) Tj
+1 0 0 1 153.312 250.684 Tm (a) Tj
+1 0 0 1 164.974 250.684 Tm (multiple) Tj
+1 0 0 1 211.304 250.684 Tm (line) Tj
+1 0 0 1 234.966 250.684 Tm (block) Tj
+1 0 0 1 267.964 250.684 Tm (that) Tj
+1 0 0 1 292.97 250.684 Tm (extends) Tj
+1 0 0 1 339.984 250.684 Tm (over) Tj
+1 0 0 1 368.314 250.684 Tm (more) Tj
+1 0 0 1 400.64 250.684 Tm (than) Tj
+1 0 0 1 428.982 250.684 Tm (one) Tj
+1 0 0 1 453.988 250.684 Tm (line.) Tj
+1 0 0 1 112.0 237.184 Tm (There) Tj
+1 0 0 1 146.68 237.184 Tm (should) Tj
+1 0 0 1 185.368 237.184 Tm (be) Tj
+1 0 0 1 202.048 237.184 Tm (appropriate) Tj
+1 0 0 1 266.08 237.184 Tm (line) Tj
+1 0 0 1 288.088 237.184 Tm (breaks.) Tj
+1 0 0 1 100.0 223.684 Tm (\225) Tj
+1 0 0 1 112.0 223.684 Tm (This) Tj
+1 0 0 1 139.658 223.684 Tm (is) Tj
+1 0 0 1 153.312 223.684 Tm (a) Tj
+1 0 0 1 164.974 223.684 Tm (multiple) Tj
+1 0 0 1 211.304 223.684 Tm (line) Tj
+1 0 0 1 234.966 223.684 Tm (block) Tj
+1 0 0 1 267.964 223.684 Tm (that) Tj
+1 0 0 1 292.97 223.684 Tm (extends) Tj
+1 0 0 1 339.984 223.684 Tm (over) Tj
+1 0 0 1 368.314 223.684 Tm (more) Tj
+1 0 0 1 400.64 223.684 Tm (than) Tj
+1 0 0 1 428.982 223.684 Tm (one) Tj
+1 0 0 1 453.988 223.684 Tm (line.) Tj
+1 0 0 1 112.0 210.184 Tm (There) Tj
+1 0 0 1 146.68 210.184 Tm (should) Tj
+1 0 0 1 185.368 210.184 Tm (be) Tj
+1 0 0 1 202.048 210.184 Tm (appropriate) Tj
+1 0 0 1 266.08 210.184 Tm (line) Tj
+1 0 0 1 288.088 210.184 Tm (breaks.) Tj
+1 0 0 1 112.0 196.684 Tm (This) Tj
+1 0 0 1 139.658 196.684 Tm (is) Tj
+1 0 0 1 153.312 196.684 Tm (a) Tj
+1 0 0 1 164.974 196.684 Tm (multiple) Tj
+1 0 0 1 211.304 196.684 Tm (line) Tj
+1 0 0 1 234.966 196.684 Tm (block) Tj
+1 0 0 1 267.964 196.684 Tm (that) Tj
+1 0 0 1 292.97 196.684 Tm (extends) Tj
+1 0 0 1 339.984 196.684 Tm (over) Tj
+1 0 0 1 368.314 196.684 Tm (more) Tj
+1 0 0 1 400.64 196.684 Tm (than) Tj
+1 0 0 1 428.982 196.684 Tm (one) Tj
+1 0 0 1 453.988 196.684 Tm (line.) Tj
+1 0 0 1 112.0 183.184 Tm (There) Tj
+1 0 0 1 146.68 183.184 Tm (should) Tj
+1 0 0 1 185.368 183.184 Tm (be) Tj
+1 0 0 1 202.048 183.184 Tm (appropriate) Tj
+1 0 0 1 266.08 183.184 Tm (line) Tj
+1 0 0 1 288.088 183.184 Tm (breaks.) Tj
+1 0 0 1 112.0 169.684 Tm (This) Tj
+1 0 0 1 139.658 169.684 Tm (is) Tj
+1 0 0 1 153.312 169.684 Tm (a) Tj
+1 0 0 1 164.974 169.684 Tm (multiple) Tj
+1 0 0 1 211.304 169.684 Tm (line) Tj
+1 0 0 1 234.966 169.684 Tm (block) Tj
+1 0 0 1 267.964 169.684 Tm (that) Tj
+1 0 0 1 292.97 169.684 Tm (extends) Tj
+1 0 0 1 339.984 169.684 Tm (over) Tj
+1 0 0 1 368.314 169.684 Tm (more) Tj
+1 0 0 1 400.64 169.684 Tm (than) Tj
+1 0 0 1 428.982 169.684 Tm (one) Tj
+1 0 0 1 453.988 169.684 Tm (line.) Tj
+1 0 0 1 112.0 156.184 Tm (There) Tj
+1 0 0 1 146.68 156.184 Tm (should) Tj
+1 0 0 1 185.368 156.184 Tm (be) Tj
+1 0 0 1 202.048 156.184 Tm (appropriate) Tj
+1 0 0 1 266.08 156.184 Tm (line) Tj
+1 0 0 1 288.088 156.184 Tm (breaks.) Tj
+1 0 0 1 150.0 130.684 Tm (\225) Tj
+1 0 0 1 162.0 130.684 Tm (This) Tj
+1 0 0 1 189.858 130.684 Tm (is) Tj
+1 0 0 1 203.712 130.684 Tm (a) Tj
+1 0 0 1 215.574 130.684 Tm (multiple) Tj
+1 0 0 1 262.104 130.684 Tm (line) Tj
+1 0 0 1 285.966 130.684 Tm (block) Tj
+1 0 0 1 319.164 130.684 Tm (that) Tj
+1 0 0 1 344.37 130.684 Tm (extends) Tj
+1 0 0 1 391.584 130.684 Tm (over) Tj
+1 0 0 1 420.114 130.684 Tm (more) Tj
+1 0 0 1 452.64 130.684 Tm (than) Tj
+1 0 0 1 162.0 117.184 Tm (one) Tj
+1 0 0 1 188.584 117.184 Tm (line.) Tj
+1 0 0 1 217.16 117.184 Tm (There) Tj
+1 0 0 1 255.072 117.184 Tm (should) Tj
+1 0 0 1 296.992 117.184 Tm (be) Tj
+1 0 0 1 316.904 117.184 Tm (appropriate) Tj
+1 0 0 1 384.168 117.184 Tm (line) Tj
+1 0 0 1 409.408 117.184 Tm (breaks.) Tj
+1 0 0 1 455.324 117.184 Tm (The) Tj
+1 0 0 1 162.0 103.684 Tm (list-block) Tj
+1 0 0 1 215.618 103.684 Tm (has) Tj
+1 0 0 1 241.912 103.684 Tm (a) Tj
+1 0 0 1 255.534 103.684 Tm (start-indent) Tj
+1 0 0 1 322.508 103.684 Tm (of) Tj
+1 0 0 1 339.466 103.684 Tm (50pt) Tj
+1 0 0 1 369.768 103.684 Tm (and) Tj
+1 0 0 1 396.734 103.684 Tm (a) Tj
+1 0 0 1 410.356 103.684 Tm (text-align) Tj
+1 0 0 1 465.99 103.684 Tm (of) Tj
+1 0 0 1 162.0 90.184 Tm (justified.) Tj
+1 0 0 1 150.0 76.684 Tm (\225) Tj
+1 0 0 1 162.0 76.684 Tm (This) Tj
+1 0 0 1 189.858 76.684 Tm (is) Tj
+1 0 0 1 203.712 76.684 Tm (a) Tj
+1 0 0 1 215.574 76.684 Tm (multiple) Tj
+1 0 0 1 262.104 76.684 Tm (line) Tj
+1 0 0 1 285.966 76.684 Tm (block) Tj
+1 0 0 1 319.164 76.684 Tm (that) Tj
+1 0 0 1 344.37 76.684 Tm (extends) Tj
+1 0 0 1 391.584 76.684 Tm (over) Tj
+1 0 0 1 420.114 76.684 Tm (more) Tj
+1 0 0 1 452.64 76.684 Tm (than) Tj
+1 0 0 1 162.0 63.184 Tm (one) Tj
+1 0 0 1 185.352 63.184 Tm (line.) Tj
+1 0 0 1 210.696 63.184 Tm (There) Tj
+1 0 0 1 245.376 63.184 Tm (should) Tj
+1 0 0 1 284.064 63.184 Tm (be) Tj
+1 0 0 1 300.744 63.184 Tm (appropriate) Tj
+1 0 0 1 364.776 63.184 Tm (line) Tj
+1 0 0 1 386.784 63.184 Tm (breaks.) Tj
+ET
+
+endstream
+endobj
+20 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 19 0 R
+>>
+endobj
+21 0 obj
+<< /Length 6797 >>
+stream
+BT
+/F1 12 Tf
+1 0 0 1 162.0 732.184 Tm (This) Tj
+1 0 0 1 188.325 732.184 Tm (is) Tj
+1 0 0 1 200.646 732.184 Tm (a) Tj
+1 0 0 1 210.975 732.184 Tm (second) Tj
+1 0 0 1 253.32 732.184 Tm (multiple) Tj
+1 0 0 1 298.317 732.184 Tm (line) Tj
+1 0 0 1 320.646 732.184 Tm (block) Tj
+1 0 0 1 352.311 732.184 Tm (that) Tj
+1 0 0 1 375.984 732.184 Tm (extends) Tj
+1 0 0 1 421.665 732.184 Tm (over) Tj
+1 0 0 1 448.662 732.184 Tm (more) Tj
+1 0 0 1 162.0 718.684 Tm (than) Tj
+1 0 0 1 188.688 718.684 Tm (one) Tj
+1 0 0 1 212.04 718.684 Tm (line.) Tj
+1 0 0 1 237.384 718.684 Tm (There) Tj
+1 0 0 1 272.064 718.684 Tm (should) Tj
+1 0 0 1 310.752 718.684 Tm (be) Tj
+1 0 0 1 327.432 718.684 Tm (appropriate) Tj
+1 0 0 1 391.464 718.684 Tm (line) Tj
+1 0 0 1 413.472 718.684 Tm (breaks.) Tj
+1 0 0 1 162.0 705.184 Tm (This) Tj
+1 0 0 1 189.86 705.184 Tm (is) Tj
+1 0 0 1 203.716 705.184 Tm (a) Tj
+1 0 0 1 215.58 705.184 Tm (third) Tj
+1 0 0 1 244.112 705.184 Tm (multiple) Tj
+1 0 0 1 290.644 705.184 Tm (line) Tj
+1 0 0 1 314.508 705.184 Tm (block) Tj
+1 0 0 1 347.708 705.184 Tm (that) Tj
+1 0 0 1 372.916 705.184 Tm (extends) Tj
+1 0 0 1 420.132 705.184 Tm (over) Tj
+1 0 0 1 448.664 705.184 Tm (more) Tj
+1 0 0 1 162.0 691.684 Tm (than) Tj
+1 0 0 1 188.688 691.684 Tm (one) Tj
+1 0 0 1 212.04 691.684 Tm (line.) Tj
+1 0 0 1 237.384 691.684 Tm (There) Tj
+1 0 0 1 272.064 691.684 Tm (should) Tj
+1 0 0 1 310.752 691.684 Tm (be) Tj
+1 0 0 1 327.432 691.684 Tm (appropriate) Tj
+1 0 0 1 391.464 691.684 Tm (line) Tj
+1 0 0 1 413.472 691.684 Tm (breaks.) Tj
+1 0 0 1 100.0 666.184 Tm (\225) Tj
+1 0 0 1 112.0 666.184 Tm (This) Tj
+1 0 0 1 139.658 666.184 Tm (is) Tj
+1 0 0 1 153.312 666.184 Tm (a) Tj
+1 0 0 1 164.974 666.184 Tm (multiple) Tj
+1 0 0 1 211.304 666.184 Tm (line) Tj
+1 0 0 1 234.966 666.184 Tm (block) Tj
+1 0 0 1 267.964 666.184 Tm (that) Tj
+1 0 0 1 292.97 666.184 Tm (extends) Tj
+1 0 0 1 339.984 666.184 Tm (over) Tj
+1 0 0 1 368.314 666.184 Tm (more) Tj
+1 0 0 1 400.64 666.184 Tm (than) Tj
+1 0 0 1 428.982 666.184 Tm (one) Tj
+1 0 0 1 453.988 666.184 Tm (line.) Tj
+1 0 0 1 112.0 652.684 Tm (There) Tj
+1 0 0 1 146.68 652.684 Tm (should) Tj
+1 0 0 1 185.368 652.684 Tm (be) Tj
+1 0 0 1 202.048 652.684 Tm (appropriate) Tj
+1 0 0 1 266.08 652.684 Tm (line) Tj
+1 0 0 1 288.088 652.684 Tm (breaks.) Tj
+1 0 0 1 212.0 639.184 Tm (This) Tj
+1 0 0 1 242.756 639.184 Tm (is) Tj
+1 0 0 1 259.508 639.184 Tm (a) Tj
+1 0 0 1 274.268 639.184 Tm (multiple) Tj
+1 0 0 1 323.696 639.184 Tm (line) Tj
+1 0 0 1 350.456 639.184 Tm (block) Tj
+1 0 0 1 386.552 639.184 Tm (with) Tj
+1 0 0 1 415.976 639.184 Tm (start-indent) Tj
+1 0 0 1 212.0 625.684 Tm (100pt) Tj
+1 0 0 1 250.007 625.684 Tm (that) Tj
+1 0 0 1 278.006 625.684 Tm (extends) Tj
+1 0 0 1 328.013 625.684 Tm (over) Tj
+1 0 0 1 359.336 625.684 Tm (more) Tj
+1 0 0 1 394.655 625.684 Tm (than) Tj
+1 0 0 1 425.99 625.684 Tm (one) Tj
+1 0 0 1 453.989 625.684 Tm (line.) Tj
+1 0 0 1 212.0 612.184 Tm (There) Tj
+1 0 0 1 246.68 612.184 Tm (should) Tj
+1 0 0 1 285.368 612.184 Tm (be) Tj
+1 0 0 1 302.048 612.184 Tm (appropriate) Tj
+1 0 0 1 366.08 612.184 Tm (line) Tj
+1 0 0 1 388.088 612.184 Tm (breaks.) Tj
+1 0 0 1 112.0 598.684 Tm (This) Tj
+1 0 0 1 139.658 598.684 Tm (is) Tj
+1 0 0 1 153.312 598.684 Tm (a) Tj
+1 0 0 1 164.974 598.684 Tm (multiple) Tj
+1 0 0 1 211.304 598.684 Tm (line) Tj
+1 0 0 1 234.966 598.684 Tm (block) Tj
+1 0 0 1 267.964 598.684 Tm (that) Tj
+1 0 0 1 292.97 598.684 Tm (extends) Tj
+1 0 0 1 339.984 598.684 Tm (over) Tj
+1 0 0 1 368.314 598.684 Tm (more) Tj
+1 0 0 1 400.64 598.684 Tm (than) Tj
+1 0 0 1 428.982 598.684 Tm (one) Tj
+1 0 0 1 453.988 598.684 Tm (line.) Tj
+1 0 0 1 112.0 585.184 Tm (There) Tj
+1 0 0 1 146.68 585.184 Tm (should) Tj
+1 0 0 1 185.368 585.184 Tm (be) Tj
+1 0 0 1 202.048 585.184 Tm (appropriate) Tj
+1 0 0 1 266.08 585.184 Tm (line) Tj
+1 0 0 1 288.088 585.184 Tm (breaks.) Tj
+1 0 0 1 100.0 571.684 Tm (\225) Tj
+1 0 0 1 112.0 571.684 Tm (This) Tj
+1 0 0 1 139.658 571.684 Tm (is) Tj
+1 0 0 1 153.312 571.684 Tm (a) Tj
+1 0 0 1 164.974 571.684 Tm (multiple) Tj
+1 0 0 1 211.304 571.684 Tm (line) Tj
+1 0 0 1 234.966 571.684 Tm (block) Tj
+1 0 0 1 267.964 571.684 Tm (that) Tj
+1 0 0 1 292.97 571.684 Tm (extends) Tj
+1 0 0 1 339.984 571.684 Tm (over) Tj
+1 0 0 1 368.314 571.684 Tm (more) Tj
+1 0 0 1 400.64 571.684 Tm (than) Tj
+1 0 0 1 428.982 571.684 Tm (one) Tj
+1 0 0 1 453.988 571.684 Tm (line.) Tj
+1 0 0 1 112.0 558.184 Tm (There) Tj
+1 0 0 1 146.68 558.184 Tm (should) Tj
+1 0 0 1 185.368 558.184 Tm (be) Tj
+1 0 0 1 202.048 558.184 Tm (appropriate) Tj
+1 0 0 1 266.08 558.184 Tm (line) Tj
+1 0 0 1 288.088 558.184 Tm (breaks.) Tj
+1 0 0 1 112.0 544.684 Tm (This) Tj
+1 0 0 1 138.171 544.684 Tm (is) Tj
+1 0 0 1 150.338 544.684 Tm (an) Tj
+1 0 0 1 167.185 544.684 Tm (embedded) Tj
+1 0 0 1 227.388 544.684 Tm (multiple) Tj
+1 0 0 1 272.231 544.684 Tm (line) Tj
+1 0 0 1 294.406 544.684 Tm (block) Tj
+1 0 0 1 325.917 544.684 Tm (that) Tj
+1 0 0 1 349.436 544.684 Tm (extends) Tj
+1 0 0 1 394.963 544.684 Tm (over) Tj
+1 0 0 1 421.806 544.684 Tm (more) Tj
+1 0 0 1 452.645 544.684 Tm (than) Tj
+1 0 0 1 112.0 531.184 Tm (one) Tj
+1 0 0 1 135.352 531.184 Tm (line.) Tj
+1 0 0 1 160.696 531.184 Tm (There) Tj
+1 0 0 1 195.376 531.184 Tm (should) Tj
+1 0 0 1 234.064 531.184 Tm (be) Tj
+1 0 0 1 250.744 531.184 Tm (appropriate) Tj
+1 0 0 1 314.776 531.184 Tm (line) Tj
+1 0 0 1 336.784 531.184 Tm (breaks.) Tj
+1 0 0 1 112.0 517.684 Tm (This) Tj
+1 0 0 1 139.658 517.684 Tm (is) Tj
+1 0 0 1 153.312 517.684 Tm (a) Tj
+1 0 0 1 164.974 517.684 Tm (multiple) Tj
+1 0 0 1 211.304 517.684 Tm (line) Tj
+1 0 0 1 234.966 517.684 Tm (block) Tj
+1 0 0 1 267.964 517.684 Tm (that) Tj
+1 0 0 1 292.97 517.684 Tm (extends) Tj
+1 0 0 1 339.984 517.684 Tm (over) Tj
+1 0 0 1 368.314 517.684 Tm (more) Tj
+1 0 0 1 400.64 517.684 Tm (than) Tj
+1 0 0 1 428.982 517.684 Tm (one) Tj
+1 0 0 1 453.988 517.684 Tm (line.) Tj
+1 0 0 1 112.0 504.184 Tm (There) Tj
+1 0 0 1 146.68 504.184 Tm (should) Tj
+1 0 0 1 185.368 504.184 Tm (be) Tj
+1 0 0 1 202.048 504.184 Tm (appropriate) Tj
+1 0 0 1 266.08 504.184 Tm (line) Tj
+1 0 0 1 288.088 504.184 Tm (breaks.) Tj
+1 0 0 1 100.0 478.684 Tm (\225) Tj
+1 0 0 1 112.0 478.684 Tm (A) Tj
+1 0 0 1 123.34 478.684 Tm (block) Tj
+1 0 0 1 154.684 478.684 Tm (in) Tj
+1 0 0 1 167.356 478.684 Tm (a) Tj
+1 0 0 1 177.364 478.684 Tm (list-item-body) Tj
+1 0 0 1 100.0 465.184 Tm (\225) Tj
+1 0 0 1 136.0 465.184 Tm (\225) Tj
+1 0 0 1 124.0 465.184 Tm (This) Tj
+1 0 0 1 150.004 465.184 Tm (is) Tj
+1 0 0 1 162.004 465.184 Tm (a) Tj
+1 0 0 1 172.012 465.184 Tm (list) Tj
+1 0 0 1 190.012 465.184 Tm (item) Tj
+1 0 0 1 216.016 465.184 Tm (in) Tj
+1 0 0 1 228.688 465.184 Tm (a) Tj
+1 0 0 1 238.696 465.184 Tm (list) Tj
+1 0 0 1 256.696 465.184 Tm (that) Tj
+1 0 0 1 280.048 465.184 Tm (is) Tj
+1 0 0 1 292.048 465.184 Tm (itself) Tj
+1 0 0 1 320.056 465.184 Tm (a) Tj
+1 0 0 1 330.064 465.184 Tm (list) Tj
+1 0 0 1 348.064 465.184 Tm (item) Tj
+ET
+
+endstream
+endobj
+22 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 21 0 R
+>>
+endobj
+23 0 obj
+<< /Length 3148 >>
+stream
+BT
+/F1 24 Tf
+1 0 0 1 100.0 710.768 Tm (Next) Tj
+1 0 0 1 156.016 710.768 Tm (Stage) Tj
+/F1 12 Tf
+1 0 0 1 100.0 681.984 Tm (Right,) Tj
+1 0 0 1 134.68 681.984 Tm (now) Tj
+1 0 0 1 160.024 681.984 Tm (we) Tj
+1 0 0 1 178.696 681.984 Tm (are) Tj
+1 0 0 1 199.372 681.984 Tm (ready) Tj
+1 0 0 1 232.72 681.984 Tm (to) Tj
+1 0 0 1 246.064 681.984 Tm (try) Tj
+1 0 0 1 262.732 681.984 Tm (some) Tj
+1 0 0 1 295.408 681.984 Tm (newly) Tj
+1 0 0 1 329.416 681.984 Tm (implemented) Tj
+1 0 0 1 401.44 681.984 Tm (things) Tj
+1 0 0 1 436.792 681.984 Tm (like) Tj
+1 0 0 1 100.0 668.484 Tm (rules.) Tj
+1 0 0 1 132.676 668.484 Tm (What) Tj
+1 0 0 1 164.02 668.484 Tm (follows) Tj
+1 0 0 1 204.028 668.484 Tm (is) Tj
+1 0 0 1 216.028 668.484 Tm (a) Tj
+1 0 0 1 226.036 668.484 Tm (display) Tj
+1 0 0 1 266.716 668.484 Tm (rule) Tj
+1 0 0 1 290.056 668.484 Tm (of) Tj
+1 0 0 1 303.4 668.484 Tm (default) Tj
+1 0 0 1 342.76 668.484 Tm (thickness) Tj
+1 0 0 1 396.112 668.484 Tm (1pt) Tj
+1 0 0 1 416.128 668.484 Tm (and) Tj
+1 0 0 1 439.48 668.484 Tm (a) Tj
+1 0 0 1 100.0 654.984 Tm (space-before) Tj
+1 0 0 1 173.368 654.984 Tm (and) Tj
+1 0 0 1 196.72 654.984 Tm (space-after) Tj
+1 0 0 1 260.08 654.984 Tm (of) Tj
+1 0 0 1 273.424 654.984 Tm (12pt.) Tj
+0.0 0.0 0.0 RG
+100.0 639.3 m 476.0 639.3 l 1.0 w S
+0 0 0 RG
+1 0 0 1 100.0 617.484 Tm (Now) Tj
+1 0 0 1 127.336 617.484 Tm (what) Tj
+1 0 0 1 156.016 617.484 Tm (follows) Tj
+1 0 0 1 196.024 617.484 Tm (is) Tj
+1 0 0 1 208.024 617.484 Tm (a) Tj
+1 0 0 1 218.032 617.484 Tm (display-rule) Tj
+1 0 0 1 282.712 617.484 Tm (of) Tj
+1 0 0 1 296.056 617.484 Tm (thickness) Tj
+1 0 0 1 349.408 617.484 Tm (5pt) Tj
+1 0 0 1 369.424 617.484 Tm (with) Tj
+1 0 0 1 394.096 617.484 Tm (start-indent) Tj
+1 0 0 1 457.456 617.484 Tm (of) Tj
+1 0 0 1 100.0 603.984 Tm (100pt) Tj
+1 0 0 1 133.36 603.984 Tm (\(same) Tj
+1 0 0 1 170.032 603.984 Tm (space-before/after) Tj
+1 0 0 1 270.748 603.984 Tm (as) Tj
+1 0 0 1 286.756 603.984 Tm (before\).) Tj
+0.0 0.0 0.0 RG
+200.0 588.3 m 476.0 588.3 l 5.0 w S
+0 0 0 RG
+/F1 24 Tf
+0.33333334 0.0 0.0 rg
+1 0 0 1 100.0 545.068 Tm (C) Tj
+0.46666667 0.0 0.0 rg
+1 0 0 1 117.328 545.068 Tm (o) Tj
+0.6 0.0 0.0 rg
+1 0 0 1 130.672 545.068 Tm (l) Tj
+0.73333335 0.0 0.0 rg
+1 0 0 1 136.0 545.068 Tm (o) Tj
+0.8666667 0.0 0.0 rg
+1 0 0 1 149.344 545.068 Tm (u) Tj
+1.0 0.0 0.0 rg
+1 0 0 1 162.688 545.068 Tm (r) Tj
+/F1 12 Tf
+0.0 0.0 0.0 rg
+1 0 0 1 100.0 516.284 Tm (black) Tj
+0.0 0.5 0.0 rg
+1 0 0 1 100.0 502.784 Tm (green) Tj
+0.75 0.75 0.75 rg
+1 0 0 1 100.0 489.284 Tm (silver) Tj
+0.0 1.0 0.0 rg
+1 0 0 1 100.0 475.784 Tm (lime) Tj
+0.5 0.5 0.5 rg
+1 0 0 1 100.0 462.284 Tm (gray) Tj
+0.5 0.5 0.0 rg
+1 0 0 1 100.0 448.784 Tm (olive) Tj
+1.0 1.0 1.0 rg
+1 0 0 1 100.0 435.284 Tm (white) Tj
+1.0 1.0 0.0 rg
+1 0 0 1 100.0 421.784 Tm (yellow) Tj
+0.5 0.0 0.0 rg
+1 0 0 1 100.0 408.284 Tm (maroon) Tj
+0.0 0.0 0.5 rg
+1 0 0 1 100.0 394.784 Tm (navy) Tj
+1.0 0.0 0.0 rg
+1 0 0 1 100.0 381.284 Tm (red) Tj
+0.0 0.0 1.0 rg
+1 0 0 1 100.0 367.784 Tm (blue) Tj
+0.5 0.0 0.5 rg
+1 0 0 1 100.0 354.284 Tm (purple) Tj
+0.0 0.5 0.5 rg
+1 0 0 1 100.0 340.784 Tm (teal) Tj
+1.0 0.0 1.0 rg
+1 0 0 1 100.0 327.284 Tm (fuchsia) Tj
+0.0 1.0 1.0 rg
+1 0 0 1 100.0 313.784 Tm (aqua) Tj
+ET
+
+endstream
+endobj
+24 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 23 0 R
+>>
+endobj
+25 0 obj
+<< /Length 7 >>
+stream
+BT
+ET
+
+endstream
+endobj
+26 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 25 0 R
+>>
+endobj
+27 0 obj
+<< /Length 5482 >>
+stream
+BT
+/F1 24 Tf
+0.0 0.0 0.0 rg
+1 0 0 1 100.0 710.768 Tm (Wrap) Tj
+/F1 12 Tf
+1 0 0 1 100.0 669.984 Tm (This) Tj
+1 0 0 1 126.004 669.984 Tm (is) Tj
+1 0 0 1 138.004 669.984 Tm (a) Tj
+1 0 0 1 148.012 669.984 Tm (rather) Tj
+1 0 0 1 182.692 669.984 Tm (long) Tj
+1 0 0 1 208.708 669.984 Tm (sentence) Tj
+1 0 0 1 260.74 669.984 Tm (that) Tj
+1 0 0 1 284.092 669.984 Tm (is) Tj
+1 0 0 1 296.092 669.984 Tm (going) Tj
+1 0 0 1 328.78 669.984 Tm (to) Tj
+1 0 0 1 342.124 669.984 Tm (keep) Tj
+1 0 0 1 371.476 669.984 Tm (on) Tj
+1 0 0 1 388.156 669.984 Tm (going) Tj
+1 0 0 1 420.844 669.984 Tm (and) Tj
+1 0 0 1 100.0 656.484 Tm (going,) Tj
+1 0 0 1 136.024 656.484 Tm (not) Tj
+1 0 0 1 156.04 656.484 Tm (really) Tj
+1 0 0 1 188.044 656.484 Tm (to) Tj
+1 0 0 1 201.388 656.484 Tm (demonstrate) Tj
+1 0 0 1 271.42 656.484 Tm (anything) Tj
+1 0 0 1 320.116 656.484 Tm (other) Tj
+1 0 0 1 350.8 656.484 Tm (that) Tj
+1 0 0 1 374.152 656.484 Tm (normal) Tj
+1 0 0 1 414.16 656.484 Tm (wrapping) Tj
+1 0 0 1 100.0 642.984 Tm (because) Tj
+1 0 0 1 148.696 642.984 Tm (the) Tj
+1 0 0 1 168.712 642.984 Tm (following) Tj
+1 0 0 1 218.728 642.984 Tm (paragraph) Tj
+1 0 0 1 276.76 642.984 Tm (will) Tj
+1 0 0 1 296.752 642.984 Tm (show) Tj
+1 0 0 1 328.096 642.984 Tm (what) Tj
+1 0 0 1 356.776 642.984 Tm (happens) Tj
+1 0 0 1 406.144 642.984 Tm (when) Tj
+1 0 0 1 100.0 629.484 Tm (wrap-option) Tj
+1 0 0 1 166.024 629.484 Tm (is) Tj
+1 0 0 1 178.024 629.484 Tm (set) Tj
+1 0 0 1 197.368 629.484 Tm (to) Tj
+1 0 0 1 210.712 629.484 Tm (no-wrap.) Tj
+1 0 0 1 100.0 603.984 Tm (This) Tj
+1 0 0 1 126.004 603.984 Tm (is) Tj
+1 0 0 1 138.004 603.984 Tm (a) Tj
+1 0 0 1 148.012 603.984 Tm (rather) Tj
+1 0 0 1 182.692 603.984 Tm (long) Tj
+1 0 0 1 208.708 603.984 Tm (sentence) Tj
+1 0 0 1 260.74 603.984 Tm (that) Tj
+1 0 0 1 284.092 603.984 Tm (is) Tj
+1 0 0 1 296.092 603.984 Tm (going) Tj
+1 0 0 1 328.78 603.984 Tm (to) Tj
+1 0 0 1 342.124 603.984 Tm (keep) Tj
+1 0 0 1 371.476 603.984 Tm (on) Tj
+1 0 0 1 388.156 603.984 Tm (going) Tj
+1 0 0 1 420.844 603.984 Tm (and) Tj
+1 0 0 1 444.196 603.984 Tm (going) Tj
+1 0 0 1 476.884 603.984 Tm (to) Tj
+1 0 0 1 490.228 603.984 Tm (demonstrate) Tj
+1 0 0 1 560.26 603.984 Tm (what) Tj
+1 0 0 1 588.94 603.984 Tm (happens) Tj
+1 0 0 1 638.308 603.984 Tm (when) Tj
+1 0 0 1 670.324 603.984 Tm (wrap-option) Tj
+1 0 0 1 736.348 603.984 Tm (is) Tj
+1 0 0 1 748.348 603.984 Tm (set) Tj
+1 0 0 1 767.692 603.984 Tm (to) Tj
+1 0 0 1 781.036 603.984 Tm (no-wrap) Tj
+1 0 0 1 827.716 603.984 Tm (which) Tj
+1 0 0 1 861.724 603.984 Tm (is) Tj
+1 0 0 1 873.724 603.984 Tm (unlike) Tj
+1 0 0 1 908.404 603.984 Tm (the) Tj
+1 0 0 1 928.42 603.984 Tm (preceding) Tj
+1 0 0 1 984.448 603.984 Tm (sentence) Tj
+1 0 0 1 1036.48 603.984 Tm (where) Tj
+1 0 0 1 1072.492 603.984 Tm (it) Tj
+1 0 0 1 1081.828 603.984 Tm (defaults) Tj
+1 0 0 1 1127.188 603.984 Tm (to) Tj
+1 0 0 1 1140.532 603.984 Tm (wrap.) Tj
+1 0 0 1 100.0 578.484 Tm (This) Tj
+1 0 0 1 126.004 578.484 Tm (is) Tj
+1 0 0 1 138.004 578.484 Tm (a) Tj
+1 0 0 1 148.012 578.484 Tm (rather) Tj
+1 0 0 1 182.692 578.484 Tm (long) Tj
+1 0 0 1 208.708 578.484 Tm (sentence) Tj
+1 0 0 1 260.74 578.484 Tm (that) Tj
+1 0 0 1 284.092 578.484 Tm (is) Tj
+1 0 0 1 296.092 578.484 Tm (going) Tj
+1 0 0 1 328.78 578.484 Tm (to) Tj
+1 0 0 1 342.124 578.484 Tm (keep) Tj
+1 0 0 1 371.476 578.484 Tm (on) Tj
+1 0 0 1 388.156 578.484 Tm (going) Tj
+1 0 0 1 420.844 578.484 Tm (and) Tj
+1 0 0 1 100.0 564.984 Tm (going,) Tj
+1 0 0 1 136.024 564.984 Tm (not) Tj
+1 0 0 1 156.04 564.984 Tm (really) Tj
+1 0 0 1 188.044 564.984 Tm (to) Tj
+1 0 0 1 201.388 564.984 Tm (demonstrate) Tj
+1 0 0 1 271.42 564.984 Tm (anything) Tj
+1 0 0 1 320.116 564.984 Tm (other) Tj
+1 0 0 1 350.8 564.984 Tm (that) Tj
+1 0 0 1 374.152 564.984 Tm (normal) Tj
+1 0 0 1 414.16 564.984 Tm (wrapping) Tj
+1 0 0 1 100.0 551.484 Tm (but) Tj
+1 0 0 1 120.016 551.484 Tm (it) Tj
+1 0 0 1 129.352 551.484 Tm (differs) Tj
+1 0 0 1 165.364 551.484 Tm (from) Tj
+1 0 0 1 192.7 551.484 Tm (the) Tj
+1 0 0 1 212.716 551.484 Tm (first) Tj
+1 0 0 1 235.384 551.484 Tm (of) Tj
+1 0 0 1 248.728 551.484 Tm (these) Tj
+1 0 0 1 281.416 551.484 Tm (three) Tj
+1 0 0 1 312.1 551.484 Tm (sentences) Tj
+1 0 0 1 370.132 551.484 Tm (in) Tj
+1 0 0 1 382.804 551.484 Tm (that) Tj
+1 0 0 1 406.156 551.484 Tm (wrap) Tj
+1 0 0 1 435.496 551.484 Tm (is) Tj
+1 0 0 1 447.496 551.484 Tm (set) Tj
+1 0 0 1 100.0 537.984 Tm (explicitly.) Tj
+/F1 24 Tf
+1 0 0 1 100.0 503.068 Tm (White) Tj
+1 0 0 1 168.016 503.068 Tm (Space) Tj
+1 0 0 1 242.728 503.068 Tm (Treatment) Tj
+/F1 12 Tf
+1 0 0 1 100.0 474.284 Tm (This) Tj
+1 0 0 1 126.004 474.284 Tm (is) Tj
+1 0 0 1 138.004 474.284 Tm (default!) Tj
+1 0 0 1 100.0 460.784 Tm (This) Tj
+1 0 0 1 162.7 460.784 Tm (is) Tj
+1 0 0 1 211.396 460.784 Tm (preserve!) Tj
+1 0 0 1 100.0 447.284 Tm (This) Tj
+1 0 0 1 126.004 447.284 Tm (is) Tj
+1 0 0 1 138.004 447.284 Tm (collapse!) Tj
+1 0 0 1 100.0 433.784 Tm (This) Tj
+1 0 0 1 122.668 433.784 Tm (is) Tj
+1 0 0 1 131.332 433.784 Tm (ignore!) Tj
+/F9 12 Tf
+1 0 0 1 107.2 385.856 Tm (<?xml) Tj
+1 0 0 1 150.4 385.856 Tm (version="1.0"?>) Tj
+1 0 0 1 107.2 362.192 Tm (<document>) Tj
+1 0 0 1 136.0 338.528 Tm (<heading>This) Tj
+1 0 0 1 236.8 338.528 Tm (is) Tj
+1 0 0 1 258.4 338.528 Tm (a) Tj
+1 0 0 1 272.8 338.528 Tm (heading</heading>) Tj
+1 0 0 1 136.0 314.864 Tm (<list>) Tj
+1 0 0 1 164.8 291.2 Tm (<item>Item) Tj
+1 0 0 1 244.0 291.2 Tm (one</item>) Tj
+1 0 0 1 164.8 267.536 Tm (<item>Item) Tj
+1 0 0 1 244.0 267.536 Tm (two</item>) Tj
+1 0 0 1 136.0 243.872 Tm (</list>) Tj
+1 0 0 1 107.2 220.208 Tm (</document>) Tj
+ET
+
+endstream
+endobj
+28 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 27 0 R
+>>
+endobj
+29 0 obj
+<< /Length 641 >>
+stream
+BT
+/F1 24 Tf
+1 0 0 1 100.0 710.768 Tm (Embedded) Tj
+1 0 0 1 222.736 710.768 Tm (SVG) Tj
+0.0 0.0 0.0 RG
+120.0 671.8 100.0 -100.0 re S
+0 0 0 RG
+0.0 0.0 0.0 RG
+120.0 671.8 m 220.0 571.8 l 0.0 w S
+0 0 0 RG
+0.0 0.0 0.0 RG
+220.0 671.8 m 120.0 571.8 l 0.0 w S
+0 0 0 RG
+1 0 0 1 120.0 541.8 Tm (Hello SVG!) Tj
+/F1 12 Tf
+1 0 0 1 100.0 481.984 Tm (The) Tj
+1 0 0 1 124.012 481.984 Tm (above) Tj
+1 0 0 1 160.036 481.984 Tm (is) Tj
+1 0 0 1 172.036 481.984 Tm (an) Tj
+1 0 0 1 188.716 481.984 Tm (example) Tj
+1 0 0 1 237.4 481.984 Tm (of) Tj
+1 0 0 1 250.744 481.984 Tm (an) Tj
+1 0 0 1 267.424 481.984 Tm (SVG) Tj
+1 0 0 1 296.104 481.984 Tm (graphic) Tj
+ET
+
+endstream
+endobj
+30 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 29 0 R
+>>
+endobj
+xref
+0 31
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000159 00000 n
+0000000221 00000 n
+0000000419 00000 n
+0000000530 00000 n
+0000000644 00000 n
+0000000749 00000 n
+0000000863 00000 n
+0000000971 00000 n
+0000001082 00000 n
+0000001192 00000 n
+0000001312 00000 n
+0000001425 00000 n
+0000001541 00000 n
+0000001649 00000 n
+0000001768 00000 n
+0000014864 00000 n
+0000014972 00000 n
+0000022430 00000 n
+0000022538 00000 n
+0000029387 00000 n
+0000029495 00000 n
+0000032695 00000 n
+0000032803 00000 n
+0000032859 00000 n
+0000032967 00000 n
+0000038501 00000 n
+0000038609 00000 n
+0000039301 00000 n
+trailer
+<<
+/Size 31
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+39409
+%%EOF
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 2
+/Kids [20 0 R 22 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] /XObject <</Im1 18 0 R
+/Im2 19 0 R
+ >>
+>>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 1147 >>
+stream
+BT
+/F7 18 Tf
+1 0 0 1 100.0 706.632 Tm (1.) Tj
+1 0 0 1 118.0 706.632 Tm (FOP) Tj
+1 0 0 1 158.5 706.632 Tm (test) Tj
+1 0 0 1 189.982 706.632 Tm (for) Tj
+1 0 0 1 217.468 706.632 Tm (images) Tj
+/F7 16 Tf
+1 0 0 1 100.0 676.726 Tm (A) Tj
+1 0 0 1 115.552 676.726 Tm (GIF) Tj
+1 0 0 1 148.0 676.726 Tm (image) Tj
+1 0 0 1 192.88 676.726 Tm (in) Tj
+1 0 0 1 210.224 676.726 Tm (FOP) Tj
+ET
+q
+221.0 0 0 96.0 202.5 578.246 cm
+/Im1 Do
+Q
+BT
+1 0 0 1 100.0 550.23 Tm (A) Tj
+1 0 0 1 115.552 550.23 Tm (JPEG) Tj
+1 0 0 1 160.448 550.23 Tm (image) Tj
+1 0 0 1 205.328 550.23 Tm (in) Tj
+1 0 0 1 222.672 550.23 Tm (FOP) Tj
+ET
+q
+100.0 0 0 60.0 263.0 487.75 cm
+/Im2 Do
+Q
+BT
+/F5 12 Tf
+1 0 0 1 100.0 460.354 Tm (This) Tj
+1 0 0 1 124.336 460.354 Tm (section) Tj
+1 0 0 1 161.332 460.354 Tm (is) Tj
+1 0 0 1 172.336 460.354 Tm (only) Tj
+1 0 0 1 196.672 460.354 Tm (required) Tj
+1 0 0 1 239.656 460.354 Tm (to) Tj
+1 0 0 1 251.992 460.354 Tm (show) Tj
+1 0 0 1 280.324 460.354 Tm (that) Tj
+1 0 0 1 301.324 460.354 Tm (the) Tj
+1 0 0 1 318.988 460.354 Tm (layout) Tj
+1 0 0 1 351.988 460.354 Tm (still) Tj
+1 0 0 1 373.0 460.354 Tm (works.) Tj
+/F5 10 Tf
+1 0 0 1 310.5 40.97 Tm (1) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<</Type /XObject
+/Subtype /Image
+/Name /Im1
+/Width 221
+/Height 96
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Filter /ASCIIHexDecode
+/Length 127297 >>
+stream
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a0021290084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a0084b50084b531393900425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400000000425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063845a636b00425a0084b5636b6b00425a0063840084b50021290084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063840000000000000021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425aadbdc600425a0063845a636b00425a00000031526300425a0084b50084b50084b50084b50084b50084b50084b500425a00425a00425a0084b50063840063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063840000000000000000000021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425aa5b5c629313100425a8494942931312931312931310063840084b50084b5006384002939005a73005a730000000084b500b5f7005a7b003139005a7b005a7b0031420063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063840021290000000000000000000021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a9cadb59cadbd00425a525a63525a637b8c94525a630063840084b50084b500526b00a5de00adde0029390084ad00b5ef0084b5005a7300b5ef00b5ef00b5f7008cb5000000005a7b005a7b005a7b08637b0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00000000000000000000000000000000425a0084b50084b50084b50084b50084b50084b50084b50084b50084b521292994a5b52129294a5a5a4a5a5a9cb5bd29313100425a0084b500425a009cce009cd600a5d600293900adde00ade700293900ade700ade700ade70084b5005a7b00b5f700b5f700bdf7008cbd000000005a7b005a7b005a7b00212900638400425a00425a00425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400212900000000000000000000000000000000425a0084b50084b50084b50084b50084b50084b500212900000063737b8c9cad2129294a525a94a5b54a5a5a00425a0084b500425a0894c60894c6004a63009cd600a5d600526b007ba500a5de00a5de007bad005a7300b5ef00b5ef00b5ef008cb5005a7300b5ef00b5f700b5f7008cbd003142085a7b108cbd18bdf718bdf71894bd10637b0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00000000000000000000000000000000000000425a0063840084b50084b50084b50084b500425a2129298494a563737b424a528c9cad4a525a00425a0084b500425a088cbd0894bd0029310894c600739c00739c009cce009cce00a5d600293900adde00ade700ade70084b500527300ade700ade700b5ef0084b5003142008cbd00bdf708bdff08bdff10bdff08637b003142005a7b005a7b085a7b0021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50021290000000000000000000000000000000000000021290063840084b50084b50084b5006384394a4a7b949c424a528494a5424a5200425a0084b50842520884ad0884b500425a088cbd004a630894bd0894c60894c6004a63007b9c00a5d600a5de00a5de00527300a5de00adde00ade7005a73005a7b00b5f700b5f700b5f700bdf7008cbd005a7b008cb500b5f700bdf700bdf7008cbd003142003142005a7b00212900425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400000000000000000000000000000000000000000000000000425a0084b50084b50063841821211821215a6b73394a5200425a0084b508394a087b9c0842520884ad08638400425a088cb5088cb5006b8c004a63009cce009cce009cce007ba500739c009cd600a5d600526b005a7300ade700b5ef00b5ef00b5ef008cb500293900b5ef00b5ef00b5ef00b5f7008cb500313900bdf700bdf700bdf700bdf708bdff00314200425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00000000000000000000000000000000000000000000000000425a00638400638418212118212139424a00425a0084b508394a08739408394a087b9c083952087ba5087ba50884ad002129088cbd0894bd0894c60894c6004a630894c60894c600739c007ba500a5de00adde00ade700ade70084b5007bad00ade700ade700ade700ade70084b5005a7b00b5ef00b5f700b5f700b5f700b5f700314210637b10637b1894bd10637b18637b00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00000000000000000000000000000000000000000000000000212900212900000018425200425a0084b508314208638408394a086b9408394a08739408739c085a730842520884ad0884b5088cb5088cbd00425a088cb5088cbd002931009cce009cd600a5d600a5de007ba500526b00a5d600a5de00a5de00adde0084ad005a7300ade700ade700b5ef00b5ef0084b5005a7b088cbd10bdff18bdf718bdf710637b000000005a7b005a7b085a7b0021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00000000000000000000000000000000000000000000000000000000212900425a0084b5083142086384083142086384083142086b84086b8c08394a085a73087ba5087ba50884ad00425a0884a50884ad00425a0894c60894c60894c6009cce009cce004a630894c6009cce009cce009cd600a5d600293900a5de00a5de00adde00ade70084ad005a7b00bdf700bdf700bdf7088cbd00314200b5f700b5f700bdf700bdf7008cbd00314218637b18637b18637b0021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a002129000000000000000000000000000000000000000000000000002129001821083142086384083142084a63086384086384083142086b8c087394087394087b9c08394a08739c087b9c00425a088cb5088cbd0894bd0894c6004a63088cbd0894bd0894c60894c60894c600739c00739c009cd600a5d600a5d6007ba500293900b5ef00b5f700b5f7008cbd005a730084b500b5ef00b5ef00b5f7005a7b08637b18bdf721c6f71894bd083142005a7b005a7b085a7b0021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b5006384002129000000000000000000000000000000000000000000000000000000001821001821086384086384086384083142086384086384086b8c08526b083942086b8c08526b085a7b0884ad0884ad0884b5088cb50042520884ad0884b5088cb5088cbd088cbd004a630894c60894c6009cce009cce00526b0084ad00ade700b5ef00b5ef005a7300ade700ade700ade700ade7005a7b008cbd08bdff10bdff108cbd005a7b00b5f700bdf700bdf700bdf7005a7b00314200212900425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00425a00425a00425a00425a00425a00425a00425a00425a000000000000000000000000000000000000000000000000000000000000000000083142084a63083142086384086384086384001821084a6308638408314208739408739c087b9c087ba5084252087b9c087b9c087ba50884ad0884ad0884b500425a088cb5088cbd0894bd086b94007ba500a5de00ade700ade7005273007ba500a5d600a5de00a5de005a73008cbd00bdf700bdf7008cbd005a7300b5ef00b5f700b5f7005a7b08314210637b29c6ff31c6f731c6f710313900000000212900425a00425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a212129394a4a21212939424a39424a18212100000000000018212100000000425a000000000000000000000000000000000000000000000000000000000000083142084a63086384083142086384086384001821086b84086b8c087394087394083942086b8c087394087394087b9c087b9c0842520884a50884ad0884ad0884b500526b009cd600a5d600a5d6007ba5004a63009cce009cce009cd60052730084b500b5ef00b5f7008cbd00527300ade700ade70084b500293910bdff18bdf718bdf71894bd083142005a7b008cbd00bdf700bdf708bdff08bdff00314200000000212900425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063840021294a525a6b7b84849ca5424a5200000000000039424a18212118212100425a0084b500182108526b000000000000000000000000000000000000000000000000000000000000000000001821084a63086384083142086384086384086384083142086384086384086384086b84086b8c08739408394a08739c087b9c087ba50842520894c60894c6009cce009cce0029310894bd0894bd0894c600293100ade700ade700ade700b5ef00527300a5de00a5de007bad005a7b00bdf700bdf708bdff08637b005a7300b5ef00b5f700b5f700b5f7005a7b00314218637b2994bd39c6f721637b10313908637b08637b08637b10637b10637b10637b00212900425a0084b50084b50084b50084b50063840063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a2931319cb5bd4a5a5a4a525a000000000000212929849ca52129295a6b7b1842520084b500425a086384084252087b9c107394085263001821000000000000000000000000000000000000000000000000000000001821001821084a63086384086384083142086384086384086384086384086384083142084a63086b8c086b9408739400425a088cb5088cbd0894bd004a630884ad0884b5088cb5006b8c00526b00a5de00a5de00ade7005a73009cce009cce007b9c005a7300b5f700b5f700b5f7005a7b00293900ade700ade700b5ef0084b5003142108cbd21c6f721c6f7083142003142008cbd00bdf700bdf708bdff08bdff108cbd08637b00000010637b10637b10637b08314200000018637b18637b18637b10313900425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063845a636329313100425a00212929313100000073848c9cadb52129296b7b844a525a0063840084b50029310894c6004a63088cb50884ad084252085a73107394085263001821000000000000000000000000000000000000000000000000000000000000083142001821086384086384086384086384086384001821086384086384086384083142085a7b0884ad0884ad088cb508394a087b9c087ba50884a5004a63009cce009cce00a5d6007ba5004a630894c60894c600293900ade700b5ef00b5ef003139007ba500a5de00a5de00adde005a73005a7b08bdff08bdff108cbd0029390084b500b5f700b5f700b5f700b5f7008cbd005a7b005a7b08bdff08bdff10bdff18bdf7083142108cbd21c6f721c6f721c6f729c6ff18637b18637b00212900425a00425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500000000212900425a0021298c949c293131adbdc6adbdc6525a63525a5a9cb5bd0021290084b500638400526b00a5d600526b009cce0894c6004a63088cb50884ad087ba508394a086b8c085263083142000000000000000000000000000000000000000000000000000000000000000000083142084a63083142083142086384086384086384001821087394087b9c087ba508425208526b08739408739408394a006b8c0894c60894c6009cce004a630884b5088cb5004a63007ba500adde00ade70084ad004a63009cce009cd600a5d6005a73008cb500b5f700bdf7008cbd0029390084ad00ade700b5ef00b5ef0084b5003139005a7b00b5f700b5f700bdf700bdf7008cbd00314208bdff10bdff18bdf7108cbd083142005a7b008cbd00bdf708bdff10bdff10637b00000008314218637b10313900425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a002129006384000000636b6b3131398c9c9c8c949c293131002129adbdc6525a630063840084b500425a00ade700ade700527300a5de00a5d600526b009cce0894c6088cbd00425a0884ad087ba510739408394a08526b08394a000000000000000000000000000000000000000000000000000000000000000000083142083142086384083142084a63086b8c086b8c08739408394a086384086384086b840021290884b5088cb5088cbd086b94085a7b087ba508638400526b009cd600a5d600a5de004a630894bd0894c60894c600739c0084b500b5ef00b5f700b5f7005a73007ba500adde00ade700ade7005a73005a7300b5ef00b5ef00b5ef00b5f700b5f7008cbd005a7b00bdf700bdf700bdf700314200293900b5ef00b5ef00b5f700b5f7005a7b005a7b088cbd18bdf721c6f729c6ff31c6f721637b10313900212900425a00425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b5636b6b949ca50021290084b500425abdced60021290084b50084b5005a7b00b5f700b5ef005a7300ade700ade700527300a5de00a5d600526b009cce0894c6088cbd088cb508394a107394107394083142106384083142001821000000000000000000000000000000000000000000000000000000000000000000083142083142084a63084a63084a63086384086384083142085a73087ba50884ad0884ad0839520873940873940021290894c60894c6009cce00526b086384088cb5088cb5006b8c00527300ade700ade700b5ef00527300739c009cd600a5d600a5d600293900a5de00adde00ade700ade700ade700b5ef005a7b005a7b00b5ef00b5f7008cb500314200a5de00adde00ade700b5ef0084b5003139008cbd00bdf708bdff10bdff10637b08314210637b2194bd31c6f731c6f739c6f721637b00000000000000425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b5006384636b733139390084b50084b500425a949ca500425a0084b50084b5005a7b00b5f700b5f7005a7b00b5ef00b5ef00000000ade700ade700527300a5de00a5d6009cce0894c6084252107ba5107ba5001821106384106384083142106384084a63001821000000000000000000000000000000000000000000000000000000000000000000000000001821083142083142001821087394087394087b9c085a7b084a63086384085263086384088cbd0894bd0894c6083952087ba5087ba50884ad004a6300a5d600a5de00adde0084ad086b940894c60894c6009cce002931009cd600a5d600a5d600a5de00a5de00adde00293900ade700ade700ade70084b5004a6300739c009cd600a5d600adde005a73005a7300b5ef00b5f700b5f7008cbd003142108cbd18bdf718bdf721bdf721c6f718637b002131086b94009cce009cd600a5d600527300000010313921637b0021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50000000063840084b50084b500425a636b730084b50084b50084b5005a7b00bdf700bdf7005a7b00b5f700b5f7005a7b00b5ef00b5ef005a7300ade700ade700adde00a5de08425a1084ad1084ad002129106384084a63084a63106384106384083142106384084a6308314200000000000000000000000000000000000000000000000000000000000000000000000000000000000008394a08394a00182108638408638408394a0884a50884ad0884b500425a08526b08739408739c085a73004a63009cce009cd600a5d6002129088cb5088cbd088cbd0029310894c60894c6009cce009cce009cce009cd600526b00a5de00a5de00adde0084ad00425a0894bd0894c6009cce009cd600526b007ba500ade700ade700b5ef005a7b00314200bdf708bdff08bdff10bdff108cbd00212908637b0884b5088cb50894bd0894c600526b18637b31c6f739c6f73194bd103139005a7b005a7b005a7b0021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a0084b50084b50084b50063843139390084b50084b50084b500212900bdf700bdf7005a7b00bdf700bdf7005a7b00b5f700b5f7005a7b0084b500b5ef00b5ef00ade70021311894bd1894bd08425a106384083142106384106384106384083142083142106384106384106384106384001821083142000000000000000000000000000000000000000000000000000000000000000000000000000000000000001821002129085a73087b9c087ba508394a086384086b84086b8c08394a0894bd0894c60894c6004a63087ba50884a50884ad00425a088cb5088cb5088cbd0894bd0894c6007394004a6300739c009cce009cd600526b0839520884ad088cb5088cbd0894c6004a6300739c00a5d600a5de00ade7002939008cb500b5f700b5f700bdf700bdf7008cbd08394a087394087b9c087ba50884ad088cb50021311894bd21c6f729c6ff08314200526b00ade700ade700b5ef00b5f700b5f7005a7b0021290084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063840084b50084b50084b5006384003142088cbd005a7b00bdf700bdf7005a7b00bdf700bdf700b5f7005a7b00b5f700b5f700b5ef003139109cc6109cc6084a63106384083142084a63106384106384106384083142106384106384106384106384083142106384106384106384001821001821000000000000000000000000000000000000000000000000000000000000000000000000000000000000002129001821083142084a63086384002129088cb5088cb5088cbd08394a08739408739c085a7b085a7b0884a50884ad0884ad0884b5006b8c00425a006b8c0894c60894c600293108394a08739c087ba50884ad086384002131086b94009cce009cce00a5d60052730084ad00b5ef00b5ef00b5ef00b5f7008cb5083142086384086384086b8c087394085a7b00212910bdff18bdf7108cbd002931009cce00a5d600a5de00adde00ade700b5ef00b5ef008cb5005a7b00212900425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a08314218bdf710bdff08637b00bdf700bdf700bdf7005a7b00bdf700b5f700b5f7005a7b18a5d618a5d608526b087ba5085a7b08394a107394086b8c086b8c08394a107394107394086b8c086b8c083942106384106384106384083142106384106384084a6300182100182100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008425200425a002131086384086b84086b8c08394a08739408739c087b9c087ba508637b0842520884ad0884b5088cb5083952084a63086b84086b8c087394085a7b0842520884b5088cbd0894c60894c6004a63007ba500ade700ade700ade700ade70084b508314208638408638408638408638408526b00314200bdf700bdf7008cbd00425a0894bd0894c6009cce009cd600a5d600527300293910637b18637b31c6f731c6f72994bd18637b10313900425a00425a00425a00425a00425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638410637b21c6f718bdf708637b10bdff08bdff00314200bdf700bdf700bdf7005a7b18b5e718ade7085a730894c60894c6004a63088cbd088cb50884ad084252087ba5087ba5087ba5087b9c083952083942106384106384083142107394107394086b8c001821107394107394086b8c001821083142000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083142001821083942086b8c086b9408394a08394a087b9c087ba508637b08394a084a6308638408638408638408526b08394a087b9c0884ad0884b5088cbd00213100739c00a5d600a5d600a5de00a5de0084ad083142086384086384086384086384084a63005a7b00b5f700b5f7008cbd0842520884ad0884b5088cbd0894c6007394000000108cbd18bdf718bdf721c6f721c6f729c6ff2194bd18637b003142005a7b088cbd18bdf721c6f729c6ff08314200212900212929637b29637b296b7b0021290084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500212918637b31c6f708314221c6f718bdf708637b10bdff08bdff00bdf7005a7b21bdf718bdf7105a7b00adde00a5de00293100a5d6009cd6009cce002931088cb5088cb50884b50884b50884ad08425a0884ad087ba5083952087ba5087ba5087ba5083952088cb5088cb50884b508314210638410638410638400000008314200182100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182108394a08394a08394a001821086384086384086384086384001821083142086b8c087394087b9c08637b00425a0073940894c6009cce009cce009cd6007ba5084a63086384086384086384086384084a63005a7300b5ef00b5ef00b5ef000000087394087b9c087ba50884ad00213100314200bdf708bdff08bdff10bdff18bdf718bdf70831420029390084b500b5f700bdf700bdf708bdff10637b0831423194bd42cef742cef74acef74acef752cef7429cb500212900425a00425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a0021292194bd31c6f729c6ff08314218bdf718bdf708637b21bdf721bdf710637b00b5ef00b5ef005a7300ade700ade700ade70052730894c60894c60894c60894bd0894bd004a63009cce0894c60894c600425a088cb5088cb500425a009cce009cce009cce001821086b8c086b8c086b8c083942106384106384002129087b9c085a7308394a002129000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001821083142083142086b8c087394002129088cb5088cbd0894bd0894c60894c6007394084252086384086384086384086384084a6300526b00adde00ade700ade7002939086384086b84086b9408739c00212900b5f700b5f700b5f700bdf700bdf700bdf7088cbd00293900ade700ade700b5ef00b5ef00b5f7008cbd00000010637b31c6f731c6f731c6f739c6f739c6f721637b103139296b7b5acef7296b7b296b7b10313900000000425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500212942cef739c6f718637b2194bd29c6ff21c6f718637b31c6f718637b00b5f700b5f7008cbd005a7b00b5f700b5ef0084b500739c009cce009cce009cce009cce005a7300ade700a5de00a5de004a630894c60894c6086b9400527300ade700adde0029390884a5087ba5087ba5084252085a73087b9c0839520884ad0884ad0884ad0842520884a5087ba5085a7b00182108314208314200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425a00425a004a5a002131084a63086384086384086384084a63002931009cd600a5d600a5de00293908638408638408638408638400182100b5ef00b5ef00b5ef00b5f700b5f700b5f7003142004a63009cd600a5de00adde00ade70084b5003139108cbd18bdf718bdf721c6f721c6f729c6ff18637b103139429cb5429cb5103139296b7b429cb55acef75acef7296b7b296b7b10313900425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00425a00425a00212939c6f731c6f708314239c6f72994b5005a7b00bdf700bdf700314200bdf700bdf700b5f700526b00a5de00a5de00a5d600a5d6005a7b00b5ef00b5ef00b5ef00526b009cce009cce009cce005a7b00b5ef00b5ef0084b5004a630894bd088cbd088cbd00425a088cb500425a0894bd088cbd088cbd00425a088cb5088cb5088cb508394a086b8c10638408394a0884ad0884ad08637b001821083142083142001821000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002931004a63004a6300526b002931083142086384086384086384083142007bad00ade700ade700ade700b5ef00b5ef003139088cbd0894c6009cce009cce00a5d6002939005a7b00bdf708bdff08bdff10bdff18bdf710637b29637b429cb55acef7103139296b7b5acef75acef75acef7296b7b103139429cb55acef75acef75acef7296b7b0021290084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500212921637b3194bd21637b42cef700314210bdff08bdff005a7b008cbd00bdf700bdf7005a7b0084ad00ade700ade700adde00314200b5f700b5f700b5f7005a7b00a5de00a5de00a5d6005a7300b5f700b5f700b5f7002931009cce009cce009cce004a63009cce009cce004a630894c60894c6087394004a630894c60894c600425a0884b50884ad086384086b8c088cbd088cb500425a086b8c106384106384084a630842520884ad08638408425a00000008314208314200182100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000526b00527300527300527300ade7004a6308637b0884ad088cb50894bd004a63003139008cb500b5f700b5f700bdf700bdf7008cbd00314229637b5acef729637b103139429cb55acef75acef7429cb5103139429cb55acef75acef729637b103139296b7b296b7b10313900212900425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a00425a1031391031392194bd21c6f721c6f710637b18bdf718bdf718bdf700293900ade700ade700ade7005a7300bdf700bdf700bdf7005a7b00ade700ade700ade700527300bdf700bdf700bdf7005a7b00adde00a5de00a5de00527300a5de00a5de00526b00a5d600a5d6009cd600526b009cce009cce00526b00739c009cce0894c6004a630894c60894c60894c60021290884ad087ba5087b9c085a7300425a088cbd088cbd004a5a083142106384106384084a6300212908637b0884ad086384000000083142083142083142083142000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002129002131000000005a73005a7b00b5ef00b5f7005a7b18637b29637b5acef75acef7103139429cb55acef75acef75acef710313929637b5acef75acef7429cb5103139429cb55acef75acef75acef75acef75acef71031390000000063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a0021293194bd39c6f72994bd18637b31c6f731c6f718637b00b5ef00b5ef00b5ef005a7318bdf718bdf710bdff08bdff00293900ade700ade700ade7085a7b08bdff08bdff088cbd0084ad00ade700ade70084ad005a7300ade7005a7300adde00a5de00a5de00293900a5de00a5de00a5de005a7300ade700adde007ba500526b009cd6009cd600526b009cce0894c60894c60894bd086b8c0873940894c60894c608739408394a10739c107394086b8c08394a088cbd088cbd006b8c083142086384086384086384086384084a630863840884ad0884ad0884ad08638400000008314208314200182100212900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010313929637b00000010313929637b5acef7429cb5103139429cb55acef75acef7429cb51031395acef75acef75acef75acef729637b10313929637b429cb5429cb529637b0021290084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400212929637b10313921637b42cef742cef7103139008cb500b5f700b5f718637b31c6f729c6ff21c6f710637b0084b500b5ef00b5ef00313921c6f721c6f721bdf708314200b5f700b5ef00b5ef005a7b00b5ef00b5ef005a7300ade700ade70084ad0084ad00ade700ade700527300b5ef00b5ef00b5ef00313900a5de00a5de00a5de00293900adde00a5de00a5de00a5d6007ba500526b009cd6009cce00739c086b8c088cbd088cb5086384004a63009cce009cce00739c0831420863840863840863840863840018210894bd0894bd0894bd0894c6086b940831420863840863840831420884b5088cb5088cb500182108638408638408638408314200000000425a00425a00425a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029637b29637b00000029637b5acef75acef7429cb5103139429cb55acef7429cb510313929637b29637b29637b1031390084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b5006384103139429cb55acef718637b008cbd00b5f7005a7b42cef742cef739c6f739c6f700313900b5f700b5f7008cb518637b39c6f731c6f72994bd005a7b00b5f700b5f7005a7b008cbd00b5f7008cb5005a7300b5ef00b5ef005a7300ade700ade700ade700293900b5f700b5f7008cbd005a7300ade700ade70084ad005a7b00b5ef00b5ef00ade700ade70084ad00527300a5de00a5de007ba500526b009cd6009cce00739c00526b00a5d600a5d6007ba5083142086b84086b84086b8c086b8c00425a009cce009cce009cce009cce007b9c08394a08739408739400425a0894c60894c600739408394a08739408739408739c085a73004a5a0894bd0894c6086b9400425a085a73087b9c087b9c08425229637b5acef7429cb510313910313929637b29637b10313900000000000000000000000000000000000000000000000000000010313929637b1031391031395acef75acef729637b29637b1031390063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a103139296b7b000000005a7b00bdf7003142429cb55acef752cef729637b008cbd00b5f700b5f7003142319cbd4acef74acef721637b008cbd00bdf700bdf700314200bdf700bdf700314200b5f700b5ef0084b5005a7b00b5ef00b5ef0084b5005a7b00bdf700bdf7005a7b0084b500b5ef00ade70084ad005a7b00b5f700b5f700b5f700b5ef0084b500527300ade700ade700527300ade700ade700ade7007bad00527300ade700ade70084ad08394a087b9c087b9c087b9c085a7b00526b00a5de00a5de00adde00adde002939087ba50884a508637b00526b00a5d600a5d600526b0842520884ad0884ad0884ad08638400526b00a5d600a5d600a5d6002939088cb5088cb5088cb5006b8c18526b429cb55acef7103139429cb55acef75acef729637b1031395acef75acef71031395acef729637b29637b103139103139296b7b000000000000000000000000103139296b7b296b7b00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a00425a00425a296b7b296b7b5acef718637b005a7b00bdf700bdf718637b429cb55acef75acef718637b00bdf700bdf7008cbd008cbd00bdf700bdf700314200b5f700b5f7008cb5005a7b00b5f700b5f7008cb508637b08bdff08bdff005a7b0084b500b5ef00b5ef0084b5005a7b00bdf700bdf700bdf700b5f7008cbd005a7300ade700ade700293900b5ef00b5ef00b5ef0084b5005a7300b5ef00b5ef005a7b086384088cb5088cb5088cb5006b8c0084ad00b5ef00b5ef00b5ef00b5ef003139088cbd088cbd006b8c0084ad00ade700ade70029390894bd0894bd0894c60894c6086b9400293900ade700ade700ade7005a730029310894c60894c60894c6004a63296b7b5acef71031395acef75acef75acef7429cb51031395acef7429cb51031395acef75acef75acef7103139429cb5429cb5000000429cb5429cb510313929637b429cb500425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a00425a00425a002129005a7b005a7b000000296b7b5acef7429cb500314210bdff10bdff003142088cbd08bdff08bdff003142008cbd00b5f7008cbd005a7b00b5f700b5f7008cbd10637b21c6f721c6f7085a7b008cb500b5f700b5f7008cb500314208bdff00bdf700bdf700bdf70031420084b500b5ef00b5ef00313900b5f700b5f700b5f7008cbd005a7b00b5f700b5f70052730073940894c60894c60894c6004a6300b5f700b5f700b5f700b5f700b5f7003142009cce009cce0052730084b500b5ef00b5ef005a7b002931009cd6009cd6009cd6007ba5005a7b0084b500b5f700b5f7008cbd00526b007ba500a5d600a5de007ba50029395acef7296b7b1031395acef75acef7429cb5296b7b5acef7429cb5103139429cb55acef75acef71031391031395acef7296b7b103139429cb5429cb50000000063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a002129296b7b00000010637b21c6f710637b10637b18bdf718bdf708637b005a7b00bdf7008cbd00314200bdf700bdf7008cbd1031392994bd31c6f710637b008cbd00b5f700b5f700b5f700313918bdf718bdf718bdf710bdff085a7b005a7b00b5f700b5f700313900bdf700bdf700bdf7008cbd00314208bdff08bdff005a7300526b00a5d600a5d600a5d600293900bdf700bdf700bdf708bdff088cbd00527300a5de00a5de005a73008cbd00bdf700bdf7008cbd005273007bad00ade700ade700ade700293908bdff08bdff08bdff08bdff005a730084ad00ade700ade700ade7005a73103139429cb5296b7b429cb55acef7429cb5000000429cb55acef710313929637b429cb55acef7429cb529637b103139296b7b0000000021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a00212900212900425a00425a00425a00425a00425a003142003142000000005a7b00bdf700bdf7005a7b1031393194bd29637b005a7b00bdf700bdf700bdf7005a7b0831422194bd29c6ff21c6f7083142008cbd00b5f700b5f7005a7b00314208bdff08bdff08bdff00314218bdf718bdf7108cbd00527300ade700ade700ade700293908637b18bdf718bdf718bdf71894bd00293900b5ef00b5ef005a7b088cbd10bdff10bdff10bdff083142005a7300b5ef00b5ef00b5ef005a7b0831421894bd21c6f721c6f710637b005a7b0084b500b5f700b5f7008cb5003139429cb5103139296b7b5acef75acef7103139296b7b5acef75acef7296b7b296b7b10313900425a00425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a002129005a7b005a7b000000000000103139000000003142005a7b00bdf700bdf7005a7b1031393194bd39c6f721637b005a7b00bdf700bdf7008cbd10637b1894bd21bdf718bdf70831421894bd29c6ff2194bd085a7b0084b500b5f700b5f7008cb508314229c6ff31c6f731c6f72194bd005a7b008cb500b5f708637b1894bd21c6f721c6f721c6f72194bd18637b003139005a7b005a7b005a7b00000008314218637b2994bd2994bd103139005a7b00bdf700bdf700bdf7005a7b103139296b7b296b7b103139296b7b296b7b00000000000010313900425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a00425a00425a00425a00425a00212929637b103139003142008cbd00bdf700bdf7005a7b08314218637b31c6f72194bd10313939c6f739c6f721637b003142005a7b008cbd00bdf700314210313921637b42cef742cef7103139005a7b08bdff08637b0831422994bd39c6f739c6f739c6f718637b08526b0063840084b50084b50084b50084b500425a00425a00425a00425a00425a00314208637b08637b08526b00425a00425a00425a00425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a005a7b005a7b005a7b00526b00425a00425a00425a00425a00425a10313921637b21637b00212900425a00425a00425a00425a00425a00425a00425a00425a00638400425a00425a00638400425a00425a00425a00425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a52525200000000425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a002129525252>
+endstream
+endobj
+19 0 obj
+<</Type /XObject
+/Subtype /Image
+/Name /Im2
+/Width 100
+/Height 60
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Filter /ASCIIHexDecode
+/Length 36001 >>
+stream
+0f00000d00000800000400000202020204030102040200030900030d00011200001400001700001701001401001400001500001300000d00000800000300000100000400030500030700020800020c00010b00000900000700000300000001000203000103000300000600000900000c00020b00050800040800060300040300020100000701010901000900000800000a010009020006000405000804000f02000f02000c02010700010000020000020001020001010101000800001200001001000401000200000900001000001a00001d00001f00001c00001900011200010a00020501010001020003020002020200011000001500001500001400001100000b00000700000002010002020001000001000001000401000b00001000000c0000000001000001000001000b00000a00000700000400000501000602010802020c00021500021b00002200002600002801002802002602002500002401002100001b00001600001000000e00000f00001100021100011400001500001600001300000f00000b00000a01000a03000a01000900000b00000c00000c00010a0002070002070206030305000302010600040902090b00080800060700070a0005090004060103040802000d02000d02000b02010600010000020001010000010000000001000801001301001401000f01001201001900002100002800002c00002e00002a00002600001f00011800011200010e02020e03010c03021200001c00002100002100001f00001b00001400000e00000701010300010001000001000001000401000700000c01000c0000000001000001000001000400000300000300000500000901000f01001800002200002e00003800004100014701014902004902004703004401004201003d00003600003000002a00002600002600002600002600002800002900002700002500002201001e01001d02001e02001d01001b0000190000140001100002090001050001000501000600000a00000f00001400001700031700011900011d00001b00001701001006000c0c00070a01050802040301010001010003010001010001000001000801001301001d01002701003102003801004000004500004900004900004700004000003b00003300003000002e00002c02012d00013100003600003900003800003300002f00002600001e00001400000d0000050000020000000000020000040000050100050000000001000001000001000002000002000203000801001100001d00002f00003e00004f00005c00006800017002037404037205026f03006a03006802006301025b00005300004c00004600004400004400004300004400004400004400004100003d01003903003702003a02013901043300042a00022000021700010c0000050601000b00001100001700001f00002800002d00003100003400003700003500002d00002505001b09001209000b0501060002020003010003000003000001000401000d02001802002a01004601005703005e02006503006b02006d00006c00016800006100015c00005700005300005200005202005402005400015800015800005600005000004a00003f00003500002900001d00001300000b0000040000020000000000000000000001000001000001000001000005020005010304000c01001c00003000004900006000007800018600009500019e0205a004079f05059a04039605029303038d03038602007c00007300007000006c00006c00006800006900006900006800006401006002005d03005c01005d00025a00075000074100032f00001e0000100500040f00001a00002500003100003d00004800005100005700005b00005a00005600004b00003e02002e04001e02001100000a0003050005030004000004000003000903001605012402003f02006a00008302008a03019004019602029600029500029100018900028400017f00007e00007e00007f02008201008201008200017f00007a01007500006a00006000005200014400003500002700001900000d0000040001000001000001000001000000000000000000000005050006040605011502002a00004400006401008101009f0402af0001bd0004c40105c70506c60506c20605be0606bb0504b40404ac0401a503009c03009602009403009303028f00009000009100009000008d02008a03008704008703008300047f00097100085a00034000002a0400170f00081b00002b00003b00004d00005f02006c01007600007d00008300008300007c00006e00005b01004403002f00001d00001200030a0005050005000004000702001405002506023405015602008c0000aa0300b10403b70503bc0303bd0103ba0003b50001ae0003a90001a40001a40001a40100a80200ab0200ab0200a90201a50301a202019a02008f00018000017200016500015200014100013100001e00000d0000020002000002000001000000000000000000000004070004060a05021e01003700005700007e01009f0200c00704d10100de0000e50102e70205e40405e10505de0705dd0604d70602cf0501c70400bf0400bb0400ba0401b80403b70100b90103ba0001ba0202b90300b50300b30400b20202ae0006a8000c96000b7a03055907003c0f00231f00112f0004430000580000700300860500960600a10400a90200ae0100af0200a702009605007f0500640500480000320002210001100005080004020702001103002506003708024a05016f0100ab0000cc0300d30403da0404de0205de0003da0004d60003d00003cb0003c70002c60001c80201cb0200cf0301d10301d00301ce0301c60201be0100b30100a400009601018700007401025f00014b00013200001e00000c0002000002000000000000020000020000020003070003061103032500004100006500008e0100b10200d70705e70200f10000f70000f70201f70303f40403f40604f20401ee0500e70400de0300d80300d40300d30300d30301d50002d60002d80003db0004d90102d70101d50100d50004d20009c9000db3060a910b02691100471d002b31001443000c610003790004930505ab0b04bd0a01c80902d10702d60703d30504ca0501b607009d06007e05006000004600023401001600000e0000050b00001b00003104004807025e0401840000c10000e10200e90303ef0304f40205f40003f00003ed0003e70004e30002e00002df0001e00001e20200e70200e90200e90300e70300e30100da0200d00000c30000b40000a500009300007e00006500004a00002f0000180001070001000000020000040000040000020000070601071600032e00004c00007100009d0500bf0601e10705f10301fa0300fd0200fc0100f90000fb0200fb0400f80100f60200f30200ed0300e90400e80500e60503e90506e80002eb0003ef0004f20005f20005ef0004ee0001ed0003ed000ae1040dc90d0ba31602752000513200354b002064001482000c9b030db80a0cce0e06da0b01e30500ea0100ed0101eb0008e60709d60d06bb0a039d09007d05005d00004500003000001c04000c0e00032200003c00005505006d0602970100cf0000ef0101f50102fa0002fb0001fa0003f90003f90003f70003f50002f10003ef0002ef0000f00000f30000f50000f40100f40100f20200f00200e70202de0404d60606ca0100b401019f02008502016901014900012e00001900000b0000070000050000050000040100070a00071b00033000004c00007200009b0300be0502df0806f10301fa0300fe0100fd0000fd0000fe0100ff0200fd0000fc0100f90000f40100f00300ee0500ee0403f00406f20003f50006f90007fc0008fc0008fb0005fa0004f70003f50008e80809ca1406a11f00742e004f45003362001e7c00189e000eb6010ece070be00804eb0500f20000f70000f90000f80004f10105e30602ca0500b005009603007600005d00004400002f0500190f000c2400034100005c0400780703a20000d20000f00102fa0102fd0001fe0001fd0001fd0002fe0002fe0003fc0002f80001f60001f40001f40000f80000fa0000fa0000fc0100fb0100fa0100f40101ef0102e80303df0200d00201be0301a402008500006200004300002b00001900000f0000070000070000050600050c00041a00012e00004900006a0000920402b20403d50908e80403f60201fe0200fe0100fe0100ff0200ff0300fe0100fd0200f90200f40300ef0500ee0701ec0704ef0707ee0206f20108f70009f90009fa0009fa0008f80007f30006ef0609dd1106c01f02982f006c44004b5f003281001e9b001cbf0212d20311e5070bf20604f80200fc0000ff0000ff0001ff0004f80202ea0200d60201c40404b006019501007b00006100004705002d0f001922000a3f00035c0203790804a10102ce0002ea0104f30204f90002fd0001fd0001fd0002fe0001fd0001fb0002f90003f50002f30003f20102f20101f50200fb0400fc0200fb0200f90101f70101f50101f50202f00301e80502d90402bf0301a002007d00005c00004000002900001401000c0000090000070600020c00001800012700004000005d0000810304a20405c5090ada0507ec0306f70303fc0301fd0100ff0200ff0200fe0300fb0200f60300ef0500e90600e50702e40907e40808e20306e50209e80109ea0009ea0009ea0009e80109e20306d90d06c61a02a82b008440005d5c00407d002b9e001bba0019d70310e5010df20209f90203fc0000fd0000fe0000fe0001fc0001f50000ea0000dd0003d40606c80803b100019b00007e0000640200440a002a1b00163600085000036e0303950104c10004dc0205e80205f20102fa0000fb0000fd0002fe0000fd0000fb0002f70003f20004ec0103eb0203e90203eb0401f00401f20401f00202f00102f30101f50101f90101f90302f60402eb0501d40501b603019300006f00005200003700001b02000e01000c0000090300000800001001001d00003000004a00006b0302890304ad070bc50409db0409ed0407f60305fa0200fd0100fe0200fb0200f70201ee0300e50400db0602d40702d10705cf0707cd0507cd0508d00308d00308cf0408cd0508cc0508c30a05b41301a122008738006753004674002e98001eba0011d4000ce80207f00007f70006fb0004fa0000f90000f70000f40000f20000ee0000e60000e20004e10608dd0906cd0204b800009e0000820000600200401000252800114000065a0003800104b10104cd0405dc0304e80102f30000fa0001fc0001fe0000fe0001fb0002f10002ea0103e20003dc0203da0302d90501da0501da0302dc0202de0102e60002ed0002f70100fc0100fb0201f30500e30400c70200a400008100006200004200002103001102000e01000c0001000302000a0300140100210000380000560001720002960309b00108cb020ae0030aee0407f60202fa0100fa0100f70102f10102e70103db0100cd0200c20200bb0200b60201b70505b40404b50205b30305b10505af0505ad0806a50e039016007d2b00684600506700348d0020b0000fd10105e70102f40000f90002fb0005fb0005f70203f20000ee0000ea0000e40000e60000e70200e90405ec080aed080ae20308d30006bc0003a000007b00005a0b003820001d34000b4900036d00039f0001be0203cf0303df0101ed0000f80100fc0101ff0100fc0101f70002ed0002e10102d80101d10001cb0100c60100c40200c50100c60102ce0003d80002e30001f20000fa0000fb0100f80300ec0400d50400b100008d00006f00004c01002604011402001001000d0004000006000205000a03001400002700004300005f00008200059f0006bd0009d70109e80107f30004f90001f90001f40105eb0104de0002ce0000be0000af0000a500009e00009c00009900009700009300009001008e03008c0500810c00701d005e33004f54003d7a0525a20813c60a05e20700f40400fc0100fe0000fd0004fa0306f30304ea0300e20000da0000d50000dc0000e40502ea0805f10809f60608ef0008e5000dd5000bba0007960004730a014d1c002c2a00143d00075e0001900000b10101c30202d40300e70300f20200fb0302fe0301fc0201f50301e80201db0000d00000c50000be0000b90000af0000ae0000b20000bc0001c80002d80002ea0001f60000fa0000fa0300f10400db0501ba03009700007900015402002a04011403001102000e0003000005000006000203000900001900003200004c00007100068f0005b30008cf0209e30208ef0003f70000f80000f00104e60203d90000c80000b40000a100008f00008400007b00007800007400007100006f00006c00006a04005b0e004f29003f43003664012a8b0618b40b0ad50a00ee0900fb0300ff0000fe0000fa0306f50609ec0906e00600d50100cc0000c60000d00001de0702e90702f30603f90203f60004ef000de80008cf0004ad00028a04006313003b1c001f28000f470003740001990103b00402c70400dd0300ec0400f90401fe0201fc0101f50000ea0000de0000cb0000bb0000aa00009f00009500009400009b0000a80002b90002cd0001e20000f10000f90000fa0400f50601e20502c30301a202008502015f0200300400170300130200100400000101000002000002000002000a01001d00003600005a00007c0000a40002c40105dd0304ed0101f60100f70200ee0500e50400db0000c80000b000009300007600006200005600004d00004c00004d00024a00024600024206053618002735001f5700207c001ca10813c60a0ce30c01f40600f80000fd0200fa0506f40a08ea0c07dd0b01ce0500c10000b80000b00003bc0003d10403e50700f30500fa0000fb0002fa0000ee0003e50001cf0200aa0600800c00581000311100152400094f0001750000900502b30701d30400e60100f40000fb0000fb0001fa0000f80001e90200cd0200ae02008e03007b03007104007202007d01008f0000a50000bd0000d70000eb0101f90000fb0300f60300e50402c80301ac00009000006a02003b03001f0000150000120700010400010001000002000004000303001603002e00005300007500009e0001c10305db0304ec0300f60100f70300ed0400e60200de0000cc0000b200009400007500005f04014e03004400014200004100013b00023200032b09071c1d001343000e6600128b0012af060dd20909eb0b00f80400fa0000fb0302f60809eb0d0ade0f07cc0a00ba0300aa00009e00009d0005ac0004c60305de0902f00700f80000fc0000fc0000f80000f00000dd0100bc04009408006909004004002113000f3800055b00017e0303a30701c50400dc0200ed0000fa0001fc0002fe0001fc0001ec0200cd0300a904008206006904005d05005e04006c03007f0000990001b40001d20000e80101f70000fb0100f60300e70401cc0300b100009600006f02003f0300210000170000130500010400010001000002000003000303001502002d00004f00007300009b0002bf0304db0304ed0200f80100f90200f10200eb0100e40000d40000bc0000a100008702007205006200005600005200004a00003b00002c00001f0c001121000d4d0009700011960512ba0b0cdc0e07f30b00fd0500fd0000fb0303f1070ae10a09cd0904b503009e00008b00007f0000860000990001b70205d40a04e90a01f40202f90000fb0004fb0005f80005e70901ca0a04a410057a0f064f08022e1300152d00084d00026d0002930501b80300d20100e30001f20003fc0003fd0002fb0002eb0200cd0200aa02008404006a0000560100550100630000790000930000b20001d00001e60101f70000fb0100f60200e70401cc0300b100009600006f02003d03001f0000150000120400000200010002010002000002000302001401002a00004c00006f0000990001bc0205da0203ed0101f90100fd0100f70201f30002eb0001df0000cb0000b502009e05008e07017f02007600006d00005d00004600002f03001e13000d2b00085700077b000ea30910c60f09e40e04f80a00ff0500fe0000f70105eb050ad50909bb05049e00008300006d00006200006d0000820000a40004c50a06de0e05ee0706f60004fa0006fd0008fb0307f00b06d60e09b3140a8c12075f08043c0f001c20000c3e00045d0002840200a90200c50100da0101eb0103f80004fd0003fa0002ea0200cd0200ae02008902006f0000560000530000630000780000930002b30002d00000e80002f70000fb0100f60200e70401cc0300b100009400006d02003b03001f0000150000120300000201000002010002000002000201001200002700004700006b0000940000ba0106d90305ec0203f90100fe0000fe0103fa0203f50103eb0100da0300ca0500b90800ae0a01a503009b00009000007a0000580200380b001f1f000b39000362000187000daf0c0dd01004ea0b00fc0600ff0000fe0000f40106e2040cc7060ba803068600006900005200004700005200006a00008d0002b10a06cf0d07e40908f00407f80005fb0006fb0005f30705df0e0ac0130a9b10056e0502490700271400142d00064b00027100019a0100b80200cf0103e20104f10004f60004f60002ea0101d10200b302009302007700005d00005900006900017e0002980002b60003d50002ea0001f90000fb0100f80200e70401cc0300af00009200006b02003903001e0000130000100300000000000002010002000002000201001100002200004300006500008f0001b50206d50306ec0203f90101fe0000ff0103fe0104fb0103f30302e70600dc0700d20900cc0a01c50200bd0000b100009800006c06004411002528000b4300036d000193020bb80e09d71000ef0800fe0200ff0000fd0000ef0006d9010ab703099300046f00005100003c00003300003b00005300007600009b0904bc0c07d60a0ae90509f20004f80003fa0000f50201e50808cc1209aa0f037e0102580100330c001c21000b3d00046200018c0000ae0100c60203da0103eb0004f30004f60002ed0201d80200be0300a201008600006e00016a00027800028a0003a50003c10002df0002f10001fb0000fb0100f80200e70402c80301ac00008f00006802003803001a00001200000e0100000001000003000002000002000100000e00002000003d00005f00008a0002b10408d20408eb0205f70102ff0101fd0001fd0002fd0002f70200f00600eb0700e60800e50600e40000de0000d30000b50300830b005418002e3000124d00077900049d040cc20e09dd0e00f20600fe0000ff0000fd0000e90004cf0108a901048000025900003a00002600001f00002800003d00005f0000850400a80a04c70b0bde0609ed0005f60001fb0000f80000ec0606d60e07b70c038e00026700013e03002317000f320005560002840000a60201c10202d60102e60002ef0002f70001f10100e00200cc0100b10000990001880003850003920003a30003b90002d30001ec0001fb0001fc0000fb0100f60300e30502c50302a600008700006102003403001800001000000c0001000001000003000003000001000100000c00001d0000380000590000830005ab0507cf0408e80306f70102ff0103fa0000fb0000fc0000f90200f60300f30500f20400f40300f60100f30000e90003c90602940f00611d003736001955000b7f0005a5030ec80d09e20d00f40300fd0000ff0000fb0000e40005c802079e03047300014a00002b00001800001000001b00002f0000500000740600990b05ba0b0bd5070ae80107f60001fb0000fb0000f10304de0b05c108009a00007300004600002a0f00122a00075100037f0100a30200be0300d30201e30001ef0000f80000f60200ea0200d70000c00000ae0001a40002a30002ac0002bd0002cf0001e20001f40101ff0000fe0000fa0300f20501de0503be04039d00017f00005a02002f03001500000c000009000200000100000200000200000100000000090000160000340000510000780002a20405c70408e50408f70305ff0204fc0203fb0102fb0200fa0100f60100f60200f80100f90200fd0100f90101f10104d207019e11006c2100433d01235e02118a010cb00411cf0d09e30800f40100ff0000fc0000ee0000dd0003bd02049303036a01004100001f00000a00000600001000002100003f0000620500880705ae0b0fcf0c0fe50709f30005ff0001ff0100f80302e60905cd0800a600007d00034e00022f0e00162700094e00037f0100a30300bf0501d40401e60100f10000fa0000f90000f20100e50200d30100c70101c50001c60001cf0001d80001e60001f00000fa0000fe0000fd0100f80300ea0400d30200ae00008d00006d00004c00002501001100000b0000070002000002000002000002000001020000020700001300002d00014800006f0102990505bf0506df0506f50204fe0103fb0303f80300fa0200f90100f80000f60100f50000f50000f90102f30002eb0102ce07009b13006b2200453f01266202138e000cb50212d30a0be50802f60100ff0000fa0000eb0000d40002b301028801016002003a02001c01000902000405020800001700003300005403007b0503a20a0cc40a0ddd0508ef0005fc0000ff0000f90101e90703d20600ad0000840000530002320c00182600094e00037f0100a40400be0400d50401e80100f20000fa0000fb0000f90100ef0100e10000db0000dd0000e10000e50000eb0000f30000f80001fc0100fc0100fa0400f10600e00600c60501a000007e00005e00004000001e01000d0000090000050002000002000002000001000001020000020500010f00002500003f00006400008e0402b70505d80305f00104f90101f70400f70400f70200f90101f50101f20000ec0000ea0001ec0106e60104da0404bd0b018e16006427004445032768021598000ebd0013d90a0ee90705f70302fd0000f70000e70100c90000a701007b00005400003200001600000806000407040301011000002700004600006c0000950409ba070ad40208eb0004f90000ff0100fa0201ed0706d70900b400018b0001560001350e001927000a4f0003800100a50500c00500d70500e70300f20000fa0000fe0100fc0100f60200ec0200ea0000ef0000f30000f50000f80000fa0001fb0201fd0301fc0500f50600e60601d10601b304018c02006b00004d00003100001901000a0000050000040002000002000002000001000001020000040200030a00001d00003600005a0000830300ad0303cf0302eb0102f60100f50300f50400f70201f60001f00003e90004df0005d70005d50208cb0407bd0704a00e00771a00552d003c4c0524720513a1000cc60014e10a0fee0906f80403fb0401f40202e30302c102019c00007000004a00002a00001300000605020308080204040c00002100003e00006300008c0107b4030ad00107e50002f50000fd0100f90101ee0807db0a02b900049000035a0001380e001c29000b510003800100a70400bf0700d70700e60300f10100fb0101ff0201ff0201fc0201f30201f30000fa0000fd0000fb0001f90002f70102f30201f30401ee0601e40701d50701bb06019c04007800005600003b0000230100140100080000040000000002000002000001000001000001040001040100050800021500002c00004f0000780200a20300c80201e50102f30100f20300f30400f70201f40004eb0006dd0007cb0007bb0007b20308a20705930a00791300591f003e34002f55081d7c080cad0008d00010e8090bf30905f90404f90402ee0505dc0505bb06039502006700004200002500000e00000400020003090002050800001c00003900005e0000860006ae0309ca0106e10002f20000fc0200f90302ef0b08dc0d04bb01059400035d00023b0e001e2a000b510003820100a70700c00700d50700e40500f00200f90201ff0101ff0201fc0101f50101f50000fa0000fb0001f60002f10003ea0004e20202de0303d50401ca0501b80602a104018402006100004100002900001601010d0100060000020000000002000002000001000001000001040000050002050501021200002700004700006f02009b0200c30300e10302f00200f10400f20300f60001f20005e60007d10007b70007a300068e02037d06006b0b005514003a2200273a00215c0815850906b50002d8000aed0707f60701f90301f60500e90404d50705b304048d01005f00003c00002000000c00000200030000080000030400001a00003800005c0000840004aa0206c40007df0002f00000fa0200f70402ed0c07db0c03ba00049300035f00033c0f001e2a000c520003820200a80800bf0a00d30901e20501ec0301f80201fd0101ff0001fb0000f40001f40000f70000f50002ee0002e40002d80003d00002c70203bd0101b102009f03008801006c01004b00003100001900000b0101090100050000000000000002000002000001000001000001040000050001060301040f0101230000440100690200960300bd0401de0402ef0401f00300f40300f80001f10005e00007c60007a500058b00067000005a0600480b003315001e2500133e001262090a8b0a00bc0000de0004f10502f70600f80300f30400e30401ce0502a901018300005600003500001c00000b00000100060000080000040500001d00003b0000600000870308ab0407c50008de0004ef0000f90200f60603eb0c08d90c03b700049000035f00023d0d001f28000c4f0003800300a70a01c00c02d40902dc0802ea0302f40201fc0001fc0001fa0000f10000ef0000ef0001ea0002df0003d40003c60004bb0003b10003a600009800008701007300005900003c00002200000c0000040201060101030000000001000002000002000001000001000001050001050002080201060d0101230000430000680100950100bc0300dc0503ee0403f00300f40200f70000f00004dd0006bf00049b00047b00065b0002440500310c001f16000d2600073f000c6507068e0800bf0000df0001f20700f70600f50300ef0400e00304c90700a000007a00004f00003000001a00000b00010200030000040000010c0000260000440000690000900405b20805cb0404e00201f00100f80100f40103ea0807d80b00b701008f00045d03043a18001c31000a560003860200ac0802c60c03d80903e30602ec0501f60101f90000f60000f00000e30000db0002d70002cf0003c50004b70004aa00049c00059102058600017501006600005300003f00002800001400000500010002020401010300000000010000010000020000010000020200020700020700030a0102070d00012400004300006a0000960000bc0001dc0105ed0105f20205f70305f90003ee0000dc0000bf00019600016f00034f00093200061f0302131200092600053e000c6302088c0201c10000dc0000ea0200ef0200f10301ed0700d90402bf03009800007500004b00002d00001700000900000300000400000900001a00003500005800007c0000a10801c20f00d90e00ec0a00f30200f70003f6000aee0506d80500b500008b030455120631280017400009660005950001b80001cf0200df0400eb0500f30500fc0501f80402ec0302dc0002c70002b70301ad0301a201019701008a00007c00006e01025f02035300004100023500012800011d00011000010600010000010000000000000000000000000001000000010000010000010400020700030900030a0201070e00012400004500006d0000970000bc0001db0004ec0205f10006f60106f90004ef0000db0000be00009200016a000346000a2800081502060b1103032700013e00096300078c0003c10000dc0003ea0404f00704f20806ed0905d90805bf04019800017400004c00002d00001800000b00000600000a00001801002b00004800006b00008f0000b10801cf1200e41200f41000f90402f90008f4000cea0109d40600b30400890d054f1c072c3400144c00096f00049e0003c00001d60000e60300f10400f70600fc0600f40601e20502cd0102b402029e03008b05007e03007502006a00005c01004e02024202023400022501031c01031200030a0102060002010000000000000000000000000000000000000300000100000000000001040002050002070002080201060e00002400004600006b0000950000b90100d70302e80202ee0002f60204fa0203ee0000da0000ba01008e00016600033f0006210004100202051200002700004000046500048d0005c00103da0009ec0909f20a07f30a09ee0b06db0505c204029c00027b00005300003400002000001300001000001600002c0200420001610006830107a60407c50b06dd1303ef1302fa0e02fc0505f8000af0000fe1020cca0800a80800801203471e0627360013520009790005a50002c60001da0001e90300f10300f40500f50700ec0601d90302c00002a501038c00007101006200005b00005000004500003b00002f00002600001b00001400010e0000080100050000020100020100020000000000000000000000000600000400000100000000040001050001070001060500041100002600004800006d0000960100b90300d50400e70300ed0000f50101f80203ed0101d80200b602018901015f00013900021c00010b0400011300002800004200006700018e0104bd0004da000deb0a0bf30b08f50908f00804de0304c70103a600028700006100004500003200002600002500002e00004703005e02067c010d9e050cbe060ad80b06ea0f03f60e00fb0803fb040af6000fe90011d5050dba09009507006e13003e2303223e00105c000a830006b00002cf0000df0000ec0300f20300f20600f10601e40401cc0101b100019400037800005600004500003e00003600002e00002600001f00001800001000000c0000090000070000050000050100050100040000020000000000000000000700000600000300000100040000050000050100050800021500002b00004c00007201009a0300bc0500d60500e90400ee0000f60202f80203ea0202d30301b10400820200580000340100170200060600001600002a00004400006a01008f0201ba0005d6000cea090af20806f50605f20402e30103cf0003b200029600007500005d00004b00004200004100004b00026804007e00079b000cb8000bd30107e60202f30600fb0600fc0205fb000ef30015e30416c90b0fa90d00800c005a1700322c001b4a000e6b0008940006bd0001d80000e80100f20300f40300f10600ea0500d90301be0101a100008100036100003b00022800002300001e00001800001200000e00000b0000070000050000050100050100050100070300070100050000020000000000000000000600000600000400000100020000040000040400030c00001d0000320000540000790200a10400c20500dc0500ed0400f20000f60201f60202e50100cc0200a80300790200500100300300160300050700001600002900004300006802008e0301b80004d5000ceb0708f20702f60102f60101eb0000da0002c20002ab00019000007c00006d00006500056704057205068e0a03a10208b8000ad00006e40001f10000fa0000ff0000fd0006fa0210ef0116d80518ba0f109613006d1400482000263700145800097a0007a40005cd0001e50000f00200f70300f40400ef0500e30400d00300b100009000006e00014b00012600021300020e00010c0001070000050001040000020001000000000100020100040100050100070300070300070100020000000000000000000400000400000300000300020100040300040800011100002500003b00005e0000830200ab0300cb0400e60200f40200f50100f70303f20203e00000c30100a002007102004a01002d0400140300050600001400002600003e00006301008a0401b70004d5000ceb0706f30500f80000fb0000f50000e80002d80005c60005b10007a2000696010590030a920a0a9d0e09b20d05c20405d50005e50000f40000fd0000ff0000ff0000fd0006f5020fe30211c70311a40e0c801500591b00372a001d47000d6900058d0005b60104dd0000f00000f70200fb0300f60400ed0600de0400c60301a400007f00005e00013b0002160003040002030001000002000001000001000001000102000201000201000400010300040300050400070300050100020000000000000000000100000100000100000100020300040600020c00011600002b00004300006500008b0000b30100d30100ec0000f70201f60202f50504ed0304d80001ba00019602006a03004401002b0400130200060300001000002200003a00005e0400830605b60406d5030cea0905f40500fb0000ff0000fe0000f40003ed0005dd0006cd0006c10205b90205b30409b60c0ac10f06ce0c01da0301e80000f50000fe0000ff0000ff0000ff0000f80006ec050dd5030cb4050d9010096c1a00482300293700145900077d0001a10003c70301e80100f80100fb0301fc0300f40400ea0500d60602bb04019800007200004f00012e00010d0002000001000002000002000001000001000001000302000302000501000400000400030300040400050300040100020000000000000000000002000001000001000000000400030900021100011c00003200004b00006f0000950002ba0003d90002ec0000f30000f30304eb0303e10102cd0104af01038700005c00003b00002000001301000c0400040c00001a0000300000530500780401ab0201cc000be70b07f50900fb0100ff0000ff0000fe0000f70000ef0004e50106dd0304d90506d70905d90b03db0b02e60b00ee0500f50000f80000fe0000ff0000ff0000fa0001f30804dd0806c00308a108057a11005116002f2300193f000c6b0006930003b70001d70300ef0200fc0100fe0200fb0300f10500e10400cb0300ae02008800006500004100022500000b0000000000000000000000000100000100000100000100000100000300000300000300000300000300020300020100000000000000000000000002000002000001000000000400030900021100011d0000350000500000720001980106bf0208dd0208f00006f50005eb0505e00605d30205bd00049e00037900014f00003200001c00001100000d0100070900011500002a00034a08016d08009d0200bf000adb0d07ee0c00f90400ff0000ff0000ff0000fe0000f90000f20001ee0201ea0300eb0500ed0700ef0700f20a00f80600fd0000ff0000ff0000ff0000ff0200f40904e50f05cc0d06ad08068d0c02681500421d00242c00124f00087b0001a40000c50100df0200f30100fd0000fb0100f40301ea0401d60300bf0400a101007a02005800003401011d00000b0000040000040000020100020100000100000100000100000100000300000300000300000300000300000100000000000000000000000000000003000003000001000001000400010900001100001c00003300004c0000700003950208bc040cda040cef030df2050de00809d00808c10305a800048600026300003e00002500001500000d00000d00000b0300040e00012000043d08005c0700870100a9000ac80e0ade0f00ed0700f90300ff0000ff0000ff0000fd0001fa0002f70200f80400f90400fb0500fc0800f90b01fd0a01ff0000fe0000fe0005fb0005f10b07e21208cf1407b31101920700710a004f13002f20001834000b590004890000b10000ce0100e70200f50100fb0000f70000ed0202dc0302c80401b002009102006c00004700002701001400000b0100070100070100050100050100040100020100020100000100000100000100000100000100000100000100000000000000000000000000000003000003000001000000000400010900001000001900002d00004400006600028a0307af060dcb060fe20610e4090fcf0c0abc0a06a903039000017000024e00002d00001700000e00000800000d00000c0000070800021600002f05004a06007002028f020aaf0d0ac60f04da0a00ea0700f40300f90000fb0200fa0204fa0305fa0502fc0500fd0500ff0300fd0600f80c05f90d05f90305f50007f2000bea060adb0e09c9140ab416069813007507005606003812002023000f3e0007640002930000b90300d60300ea0300f60100f80000f00000df0003cc0103b601019d00007e01005b0000380100190000090000090100090100090100070100070100050100040100040100020000000100000000000100000001000100000001000000000000000000000000000003000002000001000000000400010800000d00001500002500003a000056020078060698070ab40a0dc9070fcc0b0eb50c07a30a049103017600005800023900021c00010a00000501000400000b00000c0000070300010e000022030036030055020571020c8f0d0caa0f09c20c08d70b06e60a05ec0609f20a0bf50a0df70c0cf90b09fa0b03fb0700fb0300f80507f4100cf1100cee080be7010ee00311d40b0fbf120dab180b9317057811005906003d07002513001328000a4604066d0401980400bd0600d60701e90501f40201f20001e20003d00004b70004a000028800006b00004800002801000c0000000000040000070000070000050000050000050000040000040000040000020000020001000000000001000000000000000000000000000000000000000001000001000000000100000200010600000a00000f00001e02002f02004805006406048208079b0707ae0508b008079a07008906007700005f00004300012700030d03020003020004040000000800000c0000080100000800001700002501003a00035000096e0608890805a50708c00a0ad30b08dd090ee50b0eea0c11ee0d11f20e0df50d07f50900f40300f00509ea100ee4100cdd050bd3000ec80211ba090ea40f0b8d1305710e01590b003e03002a07001817000b2c04044a08027005009b0400bd0600d40702e50502ef0102ea0003d50003be0004a400038c00007500005a00003900001c0000000101000000000000020000020000040000040000040000040000040000040000040000020000020000020001000001000001000000000000000000000000000100000100000100000100000201000501000602000b01001302002201003702004d02006802007c01008d00009000007f00006f00006100004a00003100001701030004030005040007070002020700000b0000080000000300000f00001a00002200023500034d00006600008100009d0000b20000be0007ce0309d3030bda060ee10909e50703e60300e50000e00000d40503cc0201c20000b50003a800059900028002006804005003003c02002800001906000d1700032d05004b07007005009a0200b90400d00500e00401e60001dc0002c50003ad00029200027d00006500004a00002d0000130101000403000101000001000001000001000001000001000001000000020000040001040001040001040001040001040001040001020001000000000000000000000100000100000100000100000201000302000403010803000b00001500002500003600004900005800006600006700005e0000520000470000360000230001110102000304000404000707000202040000080000060000000200000900001100001500042200033600004800005f00007900008d0000980006ae0308b5040cbe080ec70a0bcd0c05ce0600cd0100c70203b60506ac0400a000009100008400027400005d00004600003703002703001700000e0900061800002a03004204006303008c0100a80500bc0602c90502cd0101c30001ab00029300027900036200004c00003600001d0000090401000402000101000001000001000001000001000001000001000001000000020001020000040001040000040001040001040001020001000000000000000000000001000001000000000000000100000100000300000600000c00021000011800021f00022700032e00033300053501053000022c00022700022100041700020f0002080002020003000002010000030000030000010000000100000300000400020a00031100021b00002a00003a00004d00006000006d0009830a088b0909960c0a9d0e09a10e04a10a00a0050399060a860a0d7b0a086f02036200005300004400003300002800001a01001306000a0a00041000001a00002500023302024c00026f00018802029604039f0601a304019a02008701017100005100003a00002400001300000b0100040400030501000100000000000000000000000000000000000000000000000000000001000000020000020000020000020000020001000000000000000000000000000001000001000001000001000000000100000300000400000900020b00030f000413000616010818030a1b040c1b040c19020a1801091601081400061100040d0002080000070000040000030000010000000000000100000100000100000100000100020500020d00001700002200013100004101004c01015b04006303006d04027307017705007602007400006d01045c05085205054801013d00003200002700001b00001400000e04000a0a00050e00001200001700001d00032300033500045500036b01027603037d04018204007b05006d04005702003b0200270100120000050100020100020400080300090100020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000001000001000000000100000300000400000600000800010900010d00030f00041200051300061300061200051200051100040e00030b0001080000070000060000040000030000010000000000000100000100000100000100010000000100000500000900001100001c00002700003000003b00004200004900004f00005200005100004e00004900003a00003300002c00002500001f00001800000f00000a0000070000040400000700000b00001000001300011600012400013d00014d00015a00006201006702006401005800004601003101001f01000e00000401000201000404000a02000a0100040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000001000001000000000000000100000300000400000600000700000800010900010b00010c00020c00020c00020c00020b0001090001080001070000060000040000030000010000000000000000000100000100000100000100010002010002000100000500000800000e00001500001d00002500002a00002f00003300003500003400003000002d00002200001e00001900001600001300000e0000080000050000010000000000000400000501000800000a00010d00011400012300003000003c00004500004c00004a00004200003501002602001602010900000201000201000504000c02000a000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000100000000000000000000000000010000030000040001050001050001050001070001070001060000060000070001070001070001070001050001050001050001040001030000010000000000000000000000000100000100000002030005040006020005000103000300000600000c00001100001000001300001600001800001800001600001300001200001000000d00000a0000070000070000040000010001000003000003000003000004000103010202020202020400030600010c00011400001f00002900003000003100002b00002300001701010d01010300000000000200000501000b02000c00000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010000000000000000000000000001000001000002000102000102000102000104000104000104000104000104000104000104000104000102000102000102000102000101000001000000000000000000000000000000010000000203000704000704000601000400000200020000060000080000040000060000060000060003070003050005030001020000070200050400040300010200010302000104000006000007000007000005000004000003020002030002030001040000030000020100020b00001201001b01001d00001a00001400000c00010501010001020000000000000401000901000900000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010101010101010101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000204000504000705000603000501000400000400000200020100020102020203010205010206000208000209000107000305020901010901000602000605000607000707000306000009000308000005000003000000010000020000030000030000030000020000010000000400000b00000e00000c00000900000400000000010001020001010000000200000700000700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010000010000010000010000010000020100020100020100010000010000010000010000010000010000010000010000000000000000000000000000000000000000000001000205000506000607000704000501000400000400000400000401000501000502000503000504000506000507000506000503000501000503000503000504000406000406000206000207010305010203000000000000010000020000030000030000030001020003000001000001000401000501000501000401000000010000010001020001020001010000000200000400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000000000000000000000000000000010000010000010000010000010000010000010000020000010000020000010000020000010000010000010000010000010000010000010000010000000000000000000000000001000001000004000004000004000003000001000200000200000400010400000500000500000500000700000700000700000701000501000203000203000203000203000203000203000203000201000200000200000200010200020200030200030200020001010003010004000003000003000203000403000401000201000001000000010000020000010000010000010000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000000000000000000000000000000010000010000010000010000010000010000010000020000020000020000020000020000020000020000010000010000010000010000010000010000000000000000000000000001000001000003000003000003000001000000000000010000010200010400010400020500020500020500030500030500020500010400000001000001000001000001000001000000000000000200000200000400010400010500020500020700030700020401000004000004000003000003000203000203000201000001000001000000010000010000010000010000020000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000000000000000000000000000000000000010000010000010000010000010000010000010000010000010000010000010000010000010000010000010000010000010000000000000000000000000000000000000001000001000001000001010001000000010000010000020000020000030200030200040400040400040400050200050200060000050000020000010000010000010000010000010000020000010000010200010400010500010700020700020900030900010900000503000403000503000403000401000401000201000201000000000000010000010000010000010000020000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000000000000000000000000000000000000000000010000010000010000010000010000010000010000010000010000010000010000010000010000010000010000010000000000000000000000000000000000000001000001000001010001010000010000020000010000030000020000040000030200050200050200060200060000070000070000060000040000020000020000020000020000020000020000020000020200010400010700010700020900020900020b00010b000009030009030007030005010005010004010002010002000000000000000000000100000100000100000200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>
+endstream
+endobj
+20 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 17 0 R
+>>
+endobj
+21 0 obj
+<< /Length 131 >>
+stream
+BT
+/F7 18 Tf
+1 0 0 1 100.0 706.632 Tm (A.) Tj
+1 0 0 1 121.996 706.632 Tm (Appendix) Tj
+/F5 10 Tf
+1 0 0 1 310.5 40.97 Tm (1) Tj
+ET
+
+endstream
+endobj
+22 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 21 0 R
+>>
+endobj
+xref
+0 23
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000124 00000 n
+0000000186 00000 n
+0000000425 00000 n
+0000000536 00000 n
+0000000650 00000 n
+0000000755 00000 n
+0000000869 00000 n
+0000000977 00000 n
+0000001088 00000 n
+0000001198 00000 n
+0000001318 00000 n
+0000001431 00000 n
+0000001547 00000 n
+0000001655 00000 n
+0000001774 00000 n
+0000002973 00000 n
+0000130455 00000 n
+0000166640 00000 n
+0000166748 00000 n
+0000166930 00000 n
+trailer
+<<
+/Size 23
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+167038
+%%EOF
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 1
+/Kids [18 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] >>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 13971 >>
+stream
+BT
+/F1 12 Tf
+1 0 0 1 260.991 718.779 Tm (1.) Tj
+1 0 0 1 274.335 718.779 Tm (normal.pdf) Tj
+1 0 0 1 291.681 705.279 Tm (---) Tj
+1 0 0 1 159.159 691.779 Tm (2.) Tj
+1 0 0 1 172.503 691.779 Tm (A) Tj
+1 0 0 1 183.843 691.779 Tm (one) Tj
+1 0 0 1 207.195 691.779 Tm (line) Tj
+1 0 0 1 229.203 691.779 Tm (example) Tj
+1 0 0 1 277.887 691.779 Tm (\(text-align='start'\):) Tj
+1 0 0 1 376.167 691.779 Tm (normal.pdf) Tj
+1 0 0 1 291.681 678.279 Tm (---) Tj
+1 0 0 1 70.875 664.779 Tm (3.) Tj
+1 0 0 1 84.219 664.779 Tm (A) Tj
+1 0 0 1 95.559 664.779 Tm (multiline) Tj
+1 0 0 1 142.899 664.779 Tm (text) Tj
+1 0 0 1 165.579 664.779 Tm (\(text-align='start'\).) Tj
+1 0 0 1 263.859 664.779 Tm (The) Tj
+1 0 0 1 287.871 664.779 Tm (Extensible) Tj
+1 0 0 1 346.563 664.779 Tm (Markup) Tj
+1 0 0 1 389.907 664.779 Tm (Language) Tj
+1 0 0 1 446.619 664.779 Tm (\(XML\)) Tj
+1 0 0 1 482.619 664.779 Tm (is) Tj
+1 0 0 1 494.619 664.779 Tm (a) Tj
+1 0 0 1 70.875 651.279 Tm (subset) Tj
+1 0 0 1 109.563 651.279 Tm (of) Tj
+1 0 0 1 122.907 651.279 Tm (SGML) Tj
+1 0 0 1 160.251 651.279 Tm (that) Tj
+1 0 0 1 183.603 651.279 Tm (is) Tj
+1 0 0 1 195.603 651.279 Tm (completely) Tj
+1 0 0 1 256.287 651.279 Tm (described) Tj
+1 0 0 1 311.643 651.279 Tm (in) Tj
+1 0 0 1 324.315 651.279 Tm (this) Tj
+1 0 0 1 346.323 651.279 Tm (document.) Tj
+1 0 0 1 405.687 651.279 Tm (Its) Tj
+1 0 0 1 421.695 651.279 Tm (goal) Tj
+1 0 0 1 447.711 651.279 Tm (is) Tj
+1 0 0 1 459.711 651.279 Tm (to) Tj
+1 0 0 1 473.055 651.279 Tm (enable) Tj
+1 0 0 1 70.875 637.779 Tm (generic) Tj
+1 0 0 1 113.559 637.779 Tm (SGML) Tj
+1 0 0 1 150.903 637.779 Tm (to) Tj
+1 0 0 1 164.247 637.779 Tm (be) Tj
+1 0 0 1 180.927 637.779 Tm (served,) Tj
+1 0 0 1 223.611 637.779 Tm (received,) Tj
+1 0 0 1 275.631 637.779 Tm (and) Tj
+1 0 0 1 298.983 637.779 Tm (processed) Tj
+1 0 0 1 357.675 637.779 Tm (on) Tj
+1 0 0 1 374.355 637.779 Tm (the) Tj
+1 0 0 1 394.371 637.779 Tm (Web) Tj
+1 0 0 1 422.379 637.779 Tm (in) Tj
+1 0 0 1 435.051 637.779 Tm (the) Tj
+1 0 0 1 455.067 637.779 Tm (way) Tj
+1 0 0 1 479.739 637.779 Tm (that) Tj
+1 0 0 1 503.091 637.779 Tm (is) Tj
+1 0 0 1 70.875 624.279 Tm (now) Tj
+1 0 0 1 96.219 624.279 Tm (possible) Tj
+1 0 0 1 143.571 624.279 Tm (with) Tj
+1 0 0 1 168.243 624.279 Tm (HTML.) Tj
+1 0 0 1 207.579 624.279 Tm (XML) Tj
+1 0 0 1 235.587 624.279 Tm (has) Tj
+1 0 0 1 258.267 624.279 Tm (been) Tj
+1 0 0 1 288.291 624.279 Tm (designed) Tj
+1 0 0 1 340.323 624.279 Tm (for) Tj
+1 0 0 1 357.663 624.279 Tm (ease) Tj
+1 0 0 1 387.015 624.279 Tm (of) Tj
+1 0 0 1 400.359 624.279 Tm (implementation) Tj
+1 0 0 1 485.055 624.279 Tm (and) Tj
+1 0 0 1 508.407 624.279 Tm (for) Tj
+1 0 0 1 70.875 610.779 Tm (interoperability) Tj
+1 0 0 1 152.235 610.779 Tm (with) Tj
+1 0 0 1 176.907 610.779 Tm (both) Tj
+1 0 0 1 203.595 610.779 Tm (SGML) Tj
+1 0 0 1 240.939 610.779 Tm (and) Tj
+1 0 0 1 264.291 610.779 Tm (HTML.) Tj
+1 0 0 1 303.627 610.779 Tm (For) Tj
+1 0 0 1 324.963 610.779 Tm (further) Tj
+1 0 0 1 362.979 610.779 Tm (information) Tj
+1 0 0 1 425.667 610.779 Tm (go) Tj
+1 0 0 1 442.347 610.779 Tm (to) Tj
+1 0 0 1 455.691 610.779 Tm (normal.pdf) Tj
+1 0 0 1 291.681 597.279 Tm (---) Tj
+1 0 0 1 75.795 583.779 Tm (4.) Tj
+1 0 0 1 89.139 583.779 Tm (A) Tj
+1 0 0 1 100.479 583.779 Tm (multiline) Tj
+1 0 0 1 147.819 583.779 Tm (text) Tj
+1 0 0 1 170.499 583.779 Tm (\(text-align='centered'\).) Tj
+1 0 0 1 292.131 583.779 Tm (The) Tj
+1 0 0 1 316.143 583.779 Tm (Extensible) Tj
+1 0 0 1 374.835 583.779 Tm (Markup) Tj
+1 0 0 1 418.179 583.779 Tm (Language) Tj
+1 0 0 1 474.891 583.779 Tm (\(XML\)) Tj
+1 0 0 1 510.891 583.779 Tm (is) Tj
+1 0 0 1 73.569 570.279 Tm (a) Tj
+1 0 0 1 83.577 570.279 Tm (subset) Tj
+1 0 0 1 122.265 570.279 Tm (of) Tj
+1 0 0 1 135.609 570.279 Tm (SGML) Tj
+1 0 0 1 172.953 570.279 Tm (that) Tj
+1 0 0 1 196.305 570.279 Tm (is) Tj
+1 0 0 1 208.305 570.279 Tm (completely) Tj
+1 0 0 1 268.989 570.279 Tm (described) Tj
+1 0 0 1 324.345 570.279 Tm (in) Tj
+1 0 0 1 337.017 570.279 Tm (this) Tj
+1 0 0 1 359.025 570.279 Tm (document.) Tj
+1 0 0 1 418.389 570.279 Tm (Its) Tj
+1 0 0 1 434.397 570.279 Tm (goal) Tj
+1 0 0 1 460.413 570.279 Tm (is) Tj
+1 0 0 1 472.413 570.279 Tm (to) Tj
+1 0 0 1 485.757 570.279 Tm (enable) Tj
+1 0 0 1 77.235 556.779 Tm (generic) Tj
+1 0 0 1 119.919 556.779 Tm (SGML) Tj
+1 0 0 1 157.263 556.779 Tm (to) Tj
+1 0 0 1 170.607 556.779 Tm (be) Tj
+1 0 0 1 187.287 556.779 Tm (served,) Tj
+1 0 0 1 229.971 556.779 Tm (received,) Tj
+1 0 0 1 281.991 556.779 Tm (and) Tj
+1 0 0 1 305.343 556.779 Tm (processed) Tj
+1 0 0 1 364.035 556.779 Tm (on) Tj
+1 0 0 1 380.715 556.779 Tm (the) Tj
+1 0 0 1 400.731 556.779 Tm (Web) Tj
+1 0 0 1 428.739 556.779 Tm (in) Tj
+1 0 0 1 441.411 556.779 Tm (the) Tj
+1 0 0 1 461.427 556.779 Tm (way) Tj
+1 0 0 1 486.099 556.779 Tm (that) Tj
+1 0 0 1 509.451 556.779 Tm (is) Tj
+1 0 0 1 71.907 543.279 Tm (now) Tj
+1 0 0 1 97.251 543.279 Tm (possible) Tj
+1 0 0 1 144.603 543.279 Tm (with) Tj
+1 0 0 1 169.275 543.279 Tm (HTML.) Tj
+1 0 0 1 208.611 543.279 Tm (XML) Tj
+1 0 0 1 236.619 543.279 Tm (has) Tj
+1 0 0 1 259.299 543.279 Tm (been) Tj
+1 0 0 1 289.323 543.279 Tm (designed) Tj
+1 0 0 1 341.355 543.279 Tm (for) Tj
+1 0 0 1 358.695 543.279 Tm (ease) Tj
+1 0 0 1 388.047 543.279 Tm (of) Tj
+1 0 0 1 401.391 543.279 Tm (implementation) Tj
+1 0 0 1 486.087 543.279 Tm (and) Tj
+1 0 0 1 509.439 543.279 Tm (for) Tj
+1 0 0 1 75.255 529.779 Tm (interoperability) Tj
+1 0 0 1 156.615 529.779 Tm (with) Tj
+1 0 0 1 181.287 529.779 Tm (both) Tj
+1 0 0 1 207.975 529.779 Tm (SGML) Tj
+1 0 0 1 245.319 529.779 Tm (and) Tj
+1 0 0 1 268.671 529.779 Tm (HTML.) Tj
+1 0 0 1 308.007 529.779 Tm (For) Tj
+1 0 0 1 329.343 529.779 Tm (further) Tj
+1 0 0 1 367.359 529.779 Tm (information) Tj
+1 0 0 1 430.047 529.779 Tm (go) Tj
+1 0 0 1 446.727 529.779 Tm (to) Tj
+1 0 0 1 460.071 529.779 Tm (normal.pdf) Tj
+1 0 0 1 291.681 516.279 Tm (---) Tj
+1 0 0 1 97.383 502.779 Tm (5.) Tj
+1 0 0 1 110.727 502.779 Tm (A) Tj
+1 0 0 1 122.067 502.779 Tm (multiline) Tj
+1 0 0 1 169.407 502.779 Tm (text) Tj
+1 0 0 1 192.087 502.779 Tm (\(text-align='end'\).) Tj
+1 0 0 1 287.043 502.779 Tm (The) Tj
+1 0 0 1 311.055 502.779 Tm (Extensible) Tj
+1 0 0 1 369.747 502.779 Tm (Markup) Tj
+1 0 0 1 413.091 502.779 Tm (Language) Tj
+1 0 0 1 469.803 502.779 Tm (\(XML\)) Tj
+1 0 0 1 505.803 502.779 Tm (is) Tj
+1 0 0 1 517.803 502.779 Tm (a) Tj
+1 0 0 1 86.271 489.279 Tm (subset) Tj
+1 0 0 1 124.959 489.279 Tm (of) Tj
+1 0 0 1 138.303 489.279 Tm (SGML) Tj
+1 0 0 1 175.647 489.279 Tm (that) Tj
+1 0 0 1 198.999 489.279 Tm (is) Tj
+1 0 0 1 210.999 489.279 Tm (completely) Tj
+1 0 0 1 271.683 489.279 Tm (described) Tj
+1 0 0 1 327.039 489.279 Tm (in) Tj
+1 0 0 1 339.711 489.279 Tm (this) Tj
+1 0 0 1 361.719 489.279 Tm (document.) Tj
+1 0 0 1 421.083 489.279 Tm (Its) Tj
+1 0 0 1 437.091 489.279 Tm (goal) Tj
+1 0 0 1 463.107 489.279 Tm (is) Tj
+1 0 0 1 475.107 489.279 Tm (to) Tj
+1 0 0 1 488.451 489.279 Tm (enable) Tj
+1 0 0 1 83.595 475.779 Tm (generic) Tj
+1 0 0 1 126.279 475.779 Tm (SGML) Tj
+1 0 0 1 163.623 475.779 Tm (to) Tj
+1 0 0 1 176.967 475.779 Tm (be) Tj
+1 0 0 1 193.647 475.779 Tm (served,) Tj
+1 0 0 1 236.331 475.779 Tm (received,) Tj
+1 0 0 1 288.351 475.779 Tm (and) Tj
+1 0 0 1 311.703 475.779 Tm (processed) Tj
+1 0 0 1 370.395 475.779 Tm (on) Tj
+1 0 0 1 387.075 475.779 Tm (the) Tj
+1 0 0 1 407.091 475.779 Tm (Web) Tj
+1 0 0 1 435.099 475.779 Tm (in) Tj
+1 0 0 1 447.771 475.779 Tm (the) Tj
+1 0 0 1 467.787 475.779 Tm (way) Tj
+1 0 0 1 492.459 475.779 Tm (that) Tj
+1 0 0 1 515.811 475.779 Tm (is) Tj
+1 0 0 1 72.939 462.279 Tm (now) Tj
+1 0 0 1 98.283 462.279 Tm (possible) Tj
+1 0 0 1 145.635 462.279 Tm (with) Tj
+1 0 0 1 170.307 462.279 Tm (HTML.) Tj
+1 0 0 1 209.643 462.279 Tm (XML) Tj
+1 0 0 1 237.651 462.279 Tm (has) Tj
+1 0 0 1 260.331 462.279 Tm (been) Tj
+1 0 0 1 290.355 462.279 Tm (designed) Tj
+1 0 0 1 342.387 462.279 Tm (for) Tj
+1 0 0 1 359.727 462.279 Tm (ease) Tj
+1 0 0 1 389.079 462.279 Tm (of) Tj
+1 0 0 1 402.423 462.279 Tm (implementation) Tj
+1 0 0 1 487.119 462.279 Tm (and) Tj
+1 0 0 1 510.471 462.279 Tm (for) Tj
+1 0 0 1 79.635 448.779 Tm (interoperability) Tj
+1 0 0 1 160.995 448.779 Tm (with) Tj
+1 0 0 1 185.667 448.779 Tm (both) Tj
+1 0 0 1 212.355 448.779 Tm (SGML) Tj
+1 0 0 1 249.699 448.779 Tm (and) Tj
+1 0 0 1 273.051 448.779 Tm (HTML.) Tj
+1 0 0 1 312.387 448.779 Tm (For) Tj
+1 0 0 1 333.723 448.779 Tm (further) Tj
+1 0 0 1 371.739 448.779 Tm (information) Tj
+1 0 0 1 434.427 448.779 Tm (go) Tj
+1 0 0 1 451.107 448.779 Tm (to) Tj
+1 0 0 1 464.451 448.779 Tm (normal.pdf) Tj
+1 0 0 1 291.681 435.279 Tm (---) Tj
+/F5 12 Tf
+1 0 0 1 70.875 411.399 Tm (6.) Tj
+1 0 0 1 82.875 411.399 Tm (A) Tj
+1 0 0 1 94.539 411.399 Tm (multiline) Tj
+1 0 0 1 140.883 411.399 Tm (text) Tj
+1 0 0 1 161.883 411.399 Tm (\(text-align='start',) Tj
+1 0 0 1 249.627 411.399 Tm (space-before.optimum=6pt,) Tj
+1 0 0 1 385.371 411.399 Tm (font-family=serif) Tj
+1 0 0 1 70.875 388.599 Tm (padding-top="3pt"\).) Tj
+1 0 0 1 170.763 388.599 Tm (The) Tj
+1 0 0 1 192.423 388.599 Tm (Extensible) Tj
+1 0 0 1 246.087 388.599 Tm (Markup) Tj
+1 0 0 1 287.079 388.599 Tm (Language) Tj
+1 0 0 1 337.395 388.599 Tm (\(XML\)) Tj
+1 0 0 1 375.051 388.599 Tm (is) Tj
+1 0 0 1 386.055 388.599 Tm (a) Tj
+1 0 0 1 394.383 388.599 Tm (subset) Tj
+1 0 0 1 427.383 388.599 Tm (of) Tj
+1 0 0 1 440.379 388.599 Tm (SGML) Tj
+1 0 0 1 476.715 388.599 Tm (that) Tj
+1 0 0 1 497.715 388.599 Tm (is) Tj
+1 0 0 1 70.875 365.799 Tm (completely) Tj
+1 0 0 1 127.203 365.799 Tm (described) Tj
+1 0 0 1 176.187 365.799 Tm (in) Tj
+1 0 0 1 188.523 365.799 Tm (this) Tj
+1 0 0 1 208.863 365.799 Tm (document.) Tj
+1 0 0 1 262.191 365.799 Tm (Its) Tj
+1 0 0 1 277.191 365.799 Tm (goal) Tj
+1 0 0 1 300.855 365.799 Tm (is) Tj
+1 0 0 1 311.859 365.799 Tm (to) Tj
+1 0 0 1 324.195 365.799 Tm (enable) Tj
+1 0 0 1 358.515 365.799 Tm (generic) Tj
+1 0 0 1 396.831 365.799 Tm (SGML) Tj
+1 0 0 1 433.167 365.799 Tm (to) Tj
+1 0 0 1 445.503 365.799 Tm (be) Tj
+1 0 0 1 459.831 365.799 Tm (served,) Tj
+1 0 0 1 70.875 342.999 Tm (received,) Tj
+1 0 0 1 117.519 342.999 Tm (and) Tj
+1 0 0 1 137.847 342.999 Tm (processed) Tj
+1 0 0 1 188.163 342.999 Tm (on) Tj
+1 0 0 1 203.163 342.999 Tm (the) Tj
+1 0 0 1 220.827 342.999 Tm (Web) Tj
+1 0 0 1 246.483 342.999 Tm (in) Tj
+1 0 0 1 258.819 342.999 Tm (the) Tj
+1 0 0 1 276.483 342.999 Tm (way) Tj
+1 0 0 1 299.475 342.999 Tm (that) Tj
+1 0 0 1 320.475 342.999 Tm (is) Tj
+1 0 0 1 331.479 342.999 Tm (now) Tj
+1 0 0 1 355.143 342.999 Tm (possible) Tj
+1 0 0 1 397.479 342.999 Tm (with) Tj
+1 0 0 1 421.815 342.999 Tm (HTML.) Tj
+1 0 0 1 461.811 342.999 Tm (XML) Tj
+1 0 0 1 491.475 342.999 Tm (has) Tj
+1 0 0 1 70.875 320.199 Tm (been) Tj
+1 0 0 1 96.531 320.199 Tm (designed) Tj
+1 0 0 1 142.191 320.199 Tm (for) Tj
+1 0 0 1 159.183 320.199 Tm (ease) Tj
+1 0 0 1 182.835 320.199 Tm (of) Tj
+1 0 0 1 195.831 320.199 Tm (implementation) Tj
+1 0 0 1 274.167 320.199 Tm (and) Tj
+1 0 0 1 294.495 320.199 Tm (for) Tj
+1 0 0 1 311.487 320.199 Tm (interoperability) Tj
+1 0 0 1 388.479 320.199 Tm (with) Tj
+1 0 0 1 412.815 320.199 Tm (both) Tj
+1 0 0 1 437.151 320.199 Tm (SGML) Tj
+1 0 0 1 473.487 320.199 Tm (and) Tj
+1 0 0 1 70.875 297.399 Tm (HTML.) Tj
+1 0 0 1 110.871 297.399 Tm (For) Tj
+1 0 0 1 130.539 297.399 Tm (further) Tj
+1 0 0 1 166.191 297.399 Tm (information) Tj
+1 0 0 1 225.855 297.399 Tm (go) Tj
+1 0 0 1 240.855 297.399 Tm (to) Tj
+1 0 0 1 253.191 297.399 Tm (normal.pdf) Tj
+1 0 0 1 70.875 268.599 Tm (7.) Tj
+1 0 0 1 82.875 268.599 Tm (A) Tj
+1 0 0 1 94.539 268.599 Tm (multiline) Tj
+1 0 0 1 140.883 268.599 Tm (text) Tj
+1 0 0 1 161.883 268.599 Tm (\(text-align='start',) Tj
+1 0 0 1 249.627 268.599 Tm (space-before.optimum=6pt,) Tj
+1 0 0 1 385.371 268.599 Tm (font-family=serif,) Tj
+1 0 0 1 70.875 245.799 Tm (padding-top="3pt"\).) Tj
+1 0 0 1 170.763 245.799 Tm (The) Tj
+1 0 0 1 192.423 245.799 Tm (Extensible) Tj
+1 0 0 1 246.087 245.799 Tm (Markup) Tj
+1 0 0 1 287.079 245.799 Tm (Language) Tj
+1 0 0 1 337.395 245.799 Tm (\(XML\)) Tj
+1 0 0 1 375.051 245.799 Tm (is) Tj
+1 0 0 1 386.055 245.799 Tm (a) Tj
+1 0 0 1 394.383 245.799 Tm (subset) Tj
+1 0 0 1 427.383 245.799 Tm (of) Tj
+1 0 0 1 440.379 245.799 Tm (SGML) Tj
+1 0 0 1 476.715 245.799 Tm (that) Tj
+1 0 0 1 497.715 245.799 Tm (is) Tj
+1 0 0 1 70.875 222.999 Tm (completely) Tj
+1 0 0 1 127.203 222.999 Tm (described) Tj
+1 0 0 1 176.187 222.999 Tm (in) Tj
+1 0 0 1 188.523 222.999 Tm (this) Tj
+1 0 0 1 208.863 222.999 Tm (document.) Tj
+1 0 0 1 262.191 222.999 Tm (Its) Tj
+1 0 0 1 277.191 222.999 Tm (goal) Tj
+1 0 0 1 300.855 222.999 Tm (is) Tj
+1 0 0 1 311.859 222.999 Tm (to) Tj
+1 0 0 1 324.195 222.999 Tm (enable) Tj
+1 0 0 1 358.515 222.999 Tm (generic) Tj
+1 0 0 1 396.831 222.999 Tm (SGML) Tj
+1 0 0 1 433.167 222.999 Tm (to) Tj
+1 0 0 1 445.503 222.999 Tm (be) Tj
+1 0 0 1 459.831 222.999 Tm (served,) Tj
+1 0 0 1 70.875 200.199 Tm (received,) Tj
+1 0 0 1 117.519 200.199 Tm (and) Tj
+1 0 0 1 137.847 200.199 Tm (processed) Tj
+1 0 0 1 188.163 200.199 Tm (on) Tj
+1 0 0 1 203.163 200.199 Tm (the) Tj
+1 0 0 1 220.827 200.199 Tm (Web) Tj
+1 0 0 1 246.483 200.199 Tm (in) Tj
+1 0 0 1 258.819 200.199 Tm (the) Tj
+1 0 0 1 276.483 200.199 Tm (way) Tj
+1 0 0 1 299.475 200.199 Tm (that) Tj
+1 0 0 1 320.475 200.199 Tm (is) Tj
+1 0 0 1 331.479 200.199 Tm (now) Tj
+1 0 0 1 355.143 200.199 Tm (possible) Tj
+1 0 0 1 397.479 200.199 Tm (with) Tj
+1 0 0 1 421.815 200.199 Tm (HTML.) Tj
+1 0 0 1 461.811 200.199 Tm (XML) Tj
+1 0 0 1 491.475 200.199 Tm (has) Tj
+1 0 0 1 70.875 177.399 Tm (been) Tj
+1 0 0 1 96.531 177.399 Tm (designed) Tj
+1 0 0 1 142.191 177.399 Tm (for) Tj
+1 0 0 1 159.183 177.399 Tm (ease) Tj
+1 0 0 1 182.835 177.399 Tm (of) Tj
+1 0 0 1 195.831 177.399 Tm (implementation) Tj
+1 0 0 1 274.167 177.399 Tm (and) Tj
+1 0 0 1 294.495 177.399 Tm (for) Tj
+1 0 0 1 311.487 177.399 Tm (interoperability) Tj
+1 0 0 1 388.479 177.399 Tm (with) Tj
+1 0 0 1 412.815 177.399 Tm (both) Tj
+1 0 0 1 437.151 177.399 Tm (SGML) Tj
+1 0 0 1 473.487 177.399 Tm (and) Tj
+1 0 0 1 70.875 154.599 Tm (HTML.) Tj
+1 0 0 1 110.871 154.599 Tm (For) Tj
+1 0 0 1 130.539 154.599 Tm (further) Tj
+1 0 0 1 166.191 154.599 Tm (information) Tj
+1 0 0 1 225.855 154.599 Tm (go) Tj
+1 0 0 1 240.855 154.599 Tm (to) Tj
+1 0 0 1 253.191 154.599 Tm (normal.pdf) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 17 0 R
+/Annots 19 0 R
+>>
+endobj
+19 0 obj
+[
+20 0 R
+23 0 R
+26 0 R
+29 0 R
+32 0 R
+35 0 R
+38 0 R
+41 0 R
+44 0 R
+]
+endobj
+20 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 274.335 728.595 331.023 714.195 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 22 0 R
+/H /I
+>>
+endobj
+21 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+22 0 obj
+<<
+/S /GoToR
+/F 21 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+23 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 376.167 701.595 432.855 687.195 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 25 0 R
+/H /I
+>>
+endobj
+24 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+25 0 obj
+<<
+/S /GoToR
+/F 24 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+26 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 455.691 620.595 512.379 606.195 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 28 0 R
+/H /I
+>>
+endobj
+27 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+28 0 obj
+<<
+/S /GoToR
+/F 27 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+29 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 460.071 539.595 516.759 525.195 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 31 0 R
+/H /I
+>>
+endobj
+30 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+31 0 obj
+<<
+/S /GoToR
+/F 30 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+32 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 464.451 458.595 521.139 444.195 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 34 0 R
+/H /I
+>>
+endobj
+33 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+34 0 obj
+<<
+/S /GoToR
+/F 33 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+35 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 358.515 379.995 393.831 355.995 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 37 0 R
+/H /I
+>>
+endobj
+36 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+37 0 obj
+<<
+/S /GoToR
+/F 36 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+38 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 253.191 311.595 306.183 287.595 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 40 0 R
+/H /I
+>>
+endobj
+39 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+40 0 obj
+<<
+/S /GoToR
+/F 39 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+41 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 358.515 234.195 393.831 210.195 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 43 0 R
+/H /I
+>>
+endobj
+42 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+43 0 obj
+<<
+/S /GoToR
+/F 42 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+44 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 253.191 165.795 306.183 141.795 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 46 0 R
+/H /I
+>>
+endobj
+45 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+46 0 obj
+<<
+/S /GoToR
+/F 45 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+xref
+0 47
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000117 00000 n
+0000000179 00000 n
+0000000377 00000 n
+0000000488 00000 n
+0000000602 00000 n
+0000000707 00000 n
+0000000821 00000 n
+0000000929 00000 n
+0000001040 00000 n
+0000001150 00000 n
+0000001270 00000 n
+0000001383 00000 n
+0000001499 00000 n
+0000001607 00000 n
+0000001726 00000 n
+0000015750 00000 n
+0000015873 00000 n
+0000015956 00000 n
+0000016095 00000 n
+0000016149 00000 n
+0000016221 00000 n
+0000016360 00000 n
+0000016414 00000 n
+0000016486 00000 n
+0000016625 00000 n
+0000016679 00000 n
+0000016751 00000 n
+0000016890 00000 n
+0000016944 00000 n
+0000017016 00000 n
+0000017155 00000 n
+0000017209 00000 n
+0000017281 00000 n
+0000017420 00000 n
+0000017474 00000 n
+0000017546 00000 n
+0000017685 00000 n
+0000017739 00000 n
+0000017811 00000 n
+0000017950 00000 n
+0000018004 00000 n
+0000018076 00000 n
+0000018215 00000 n
+0000018269 00000 n
+trailer
+<<
+/Size 47
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+18341
+%%EOF
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 1
+/Kids [18 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] >>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 4491 >>
+stream
+BT
+/F3 14 Tf
+1 0 0 1 85.875 713.543 Tm (Validity) Tj
+1 0 0 1 139.565 713.543 Tm (Constraint:) Tj
+1 0 0 1 218.119 713.543 Tm (Standalone) Tj
+1 0 0 1 297.471 713.543 Tm (Document) Tj
+1 0 0 1 369.809 713.543 Tm (Declaration) Tj
+/F1 12 Tf
+1 0 0 1 70.875 695.529 Tm (The) Tj
+1 0 0 1 94.887 695.529 Tm (standalone) Tj
+1 0 0 1 156.927 695.529 Tm (document) Tj
+1 0 0 1 212.955 695.529 Tm (declaration) Tj
+1 0 0 1 274.983 695.529 Tm (must) Tj
+1 0 0 1 304.323 695.529 Tm (have) Tj
+1 0 0 1 333.675 695.529 Tm (the) Tj
+1 0 0 1 353.691 695.529 Tm (value) Tj
+1 0 0 1 385.707 695.529 Tm ("no") Tj
+1 0 0 1 410.907 695.529 Tm (if) Tj
+1 0 0 1 420.243 695.529 Tm (any) Tj
+1 0 0 1 442.923 695.529 Tm (external) Tj
+1 0 0 1 70.875 681.429 Tm (markup) Tj
+1 0 0 1 114.219 681.429 Tm (declarations) Tj
+1 0 0 1 182.247 681.429 Tm (contain) Tj
+1 0 0 1 224.271 681.429 Tm (declarations) Tj
+1 0 0 1 292.299 681.429 Tm (of:) Tj
+1 0 0 1 70.875 664.629 Tm (\225) Tj
+1 0 0 1 94.875 664.629 Tm (attributes) Tj
+1 0 0 1 147.567 664.629 Tm (with) Tj
+1 0 0 1 172.239 664.629 Tm (default) Tj
+1 0 0 1 211.599 664.629 Tm (values,) Tj
+1 0 0 1 252.951 664.629 Tm (if) Tj
+1 0 0 1 262.287 664.629 Tm (elements) Tj
+1 0 0 1 314.307 664.629 Tm (to) Tj
+1 0 0 1 327.651 664.629 Tm (which) Tj
+1 0 0 1 361.659 664.629 Tm (these) Tj
+1 0 0 1 394.347 664.629 Tm (attributes) Tj
+1 0 0 1 447.039 664.629 Tm (apply) Tj
+1 0 0 1 479.055 664.629 Tm (appear) Tj
+1 0 0 1 94.875 651.129 Tm (in) Tj
+1 0 0 1 107.547 651.129 Tm (the) Tj
+1 0 0 1 127.563 651.129 Tm (document) Tj
+1 0 0 1 183.591 651.129 Tm (without) Tj
+1 0 0 1 224.943 651.129 Tm (specifications) Tj
+1 0 0 1 300.303 651.129 Tm (of) Tj
+1 0 0 1 313.647 651.129 Tm (values) Tj
+1 0 0 1 351.663 651.129 Tm (for) Tj
+1 0 0 1 369.003 651.129 Tm (these) Tj
+1 0 0 1 401.691 651.129 Tm (attributes,) Tj
+1 0 0 1 457.719 651.129 Tm (or) Tj
+1 0 0 1 70.875 637.629 Tm (\225) Tj
+1 0 0 1 94.875 637.629 Tm (entities) Tj
+1 0 0 1 136.227 637.629 Tm (\(other) Tj
+1 0 0 1 170.907 637.629 Tm (than) Tj
+1 0 0 1 197.595 637.629 Tm (amp,) Tj
+1 0 0 1 227.607 637.629 Tm (lt,) Tj
+1 0 0 1 240.279 637.629 Tm (gt,) Tj
+1 0 0 1 256.959 637.629 Tm (apos,) Tj
+1 0 0 1 289.647 637.629 Tm (quot\),) Tj
+1 0 0 1 323.667 637.629 Tm (if) Tj
+1 0 0 1 333.003 637.629 Tm (references) Tj
+1 0 0 1 393.027 637.629 Tm (to) Tj
+1 0 0 1 406.371 637.629 Tm (those) Tj
+1 0 0 1 439.059 637.629 Tm (entities) Tj
+1 0 0 1 480.411 637.629 Tm (appear) Tj
+1 0 0 1 94.875 624.129 Tm (in) Tj
+1 0 0 1 107.547 624.129 Tm (the) Tj
+1 0 0 1 127.563 624.129 Tm (document,) Tj
+1 0 0 1 186.927 624.129 Tm (or) Tj
+1 0 0 1 70.875 610.629 Tm (\225) Tj
+1 0 0 1 94.875 610.629 Tm (attributes) Tj
+1 0 0 1 147.567 610.629 Tm (with) Tj
+1 0 0 1 172.239 610.629 Tm (values) Tj
+1 0 0 1 210.255 610.629 Tm (subject) Tj
+1 0 0 1 251.607 610.629 Tm (to) Tj
+1 0 0 1 264.951 610.629 Tm (normalization,) Tj
+1 0 0 1 342.975 610.629 Tm (where) Tj
+1 0 0 1 378.987 610.629 Tm (the) Tj
+1 0 0 1 399.003 610.629 Tm (attribute) Tj
+1 0 0 1 445.695 610.629 Tm (appears) Tj
+1 0 0 1 492.387 610.629 Tm (in) Tj
+1 0 0 1 505.059 610.629 Tm (the) Tj
+1 0 0 1 94.875 597.129 Tm (document) Tj
+1 0 0 1 150.903 597.129 Tm (with) Tj
+1 0 0 1 175.575 597.129 Tm (a) Tj
+1 0 0 1 185.583 597.129 Tm (value) Tj
+1 0 0 1 217.599 597.129 Tm (which) Tj
+1 0 0 1 251.607 597.129 Tm (will) Tj
+1 0 0 1 70.875 583.629 Tm (\225) Tj
+1 0 0 1 94.875 583.629 Tm (change) Tj
+1 0 0 1 137.571 583.629 Tm (as) Tj
+1 0 0 1 153.579 583.629 Tm (a) Tj
+1 0 0 1 163.587 583.629 Tm (result) Tj
+1 0 0 1 196.263 583.629 Tm (of) Tj
+1 0 0 1 209.607 583.629 Tm (normalization,) Tj
+1 0 0 1 287.631 583.629 Tm (or) Tj
+1 0 0 1 70.875 570.129 Tm (\225) Tj
+1 0 0 1 94.875 570.129 Tm (element) Tj
+1 0 0 1 140.895 570.129 Tm (types) Tj
+1 0 0 1 172.911 570.129 Tm (with) Tj
+1 0 0 1 197.583 570.129 Tm (element) Tj
+1 0 0 1 243.603 570.129 Tm (content,) Tj
+1 0 0 1 289.635 570.129 Tm (if) Tj
+1 0 0 1 298.971 570.129 Tm (white) Tj
+1 0 0 1 330.315 570.129 Tm (space) Tj
+1 0 0 1 365.667 570.129 Tm (occurs) Tj
+1 0 0 1 404.343 570.129 Tm (directly) Tj
+1 0 0 1 445.683 570.129 Tm (within) Tj
+1 0 0 1 479.691 570.129 Tm (any) Tj
+1 0 0 1 94.875 556.629 Tm (instance) Tj
+1 0 0 1 142.899 556.629 Tm (of) Tj
+1 0 0 1 156.243 556.629 Tm (those) Tj
+1 0 0 1 188.931 556.629 Tm (types.) Tj
+/F5 10 Tf
+1 0 0 1 378.915 804.815 Tm (XSL-FO) Tj
+1 0 0 1 416.415 804.815 Tm (Example:) Tj
+1 0 0 1 457.245 804.815 Tm (simple) Tj
+1 0 0 1 486.415 804.815 Tm (list) Tj
+1 0 0 1 501.145 804.815 Tm (-) Tj
+1 0 0 1 506.975 804.815 Tm (p.) Tj
+1 0 0 1 516.975 804.815 Tm (1) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 17 0 R
+>>
+endobj
+xref
+0 19
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000117 00000 n
+0000000179 00000 n
+0000000377 00000 n
+0000000488 00000 n
+0000000602 00000 n
+0000000707 00000 n
+0000000821 00000 n
+0000000929 00000 n
+0000001040 00000 n
+0000001150 00000 n
+0000001270 00000 n
+0000001383 00000 n
+0000001499 00000 n
+0000001607 00000 n
+0000001726 00000 n
+0000006269 00000 n
+trailer
+<<
+/Size 19
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+6377
+%%EOF
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 1
+/Kids [18 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] >>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 8221 >>
+stream
+BT
+0.0 0.0 1.0 rg
+0.0 0.0 1.0 RG
+70.875 731.595 453.6 -25.65 re S
+70.875 731.595 453.6 -25.65 re f
+0 0 0 RG 0 0 0 rg
+/F1 18 Tf
+1.0 1.0 1.0 rg
+1 0 0 1 136.602 712.671 Tm (Extensible) Tj
+1 0 0 1 224.64 712.671 Tm (Markup) Tj
+1 0 0 1 289.656 712.671 Tm (Language) Tj
+1 0 0 1 374.724 712.671 Tm (\(XML\)) Tj
+1 0 0 1 428.724 712.671 Tm (1.0) Tj
+/F1 16 Tf
+0.0 0.0 0.0 rg
+1 0 0 1 70.875 667.457 Tm (Abstract) Tj
+/F1 12 Tf
+1 0 0 1 70.875 642.029 Tm (The) Tj
+1 0 0 1 94.887 642.029 Tm (Extensible) Tj
+1 0 0 1 153.579 642.029 Tm (Markup) Tj
+1 0 0 1 196.923 642.029 Tm (Language) Tj
+1 0 0 1 253.635 642.029 Tm (\(XML\)) Tj
+1 0 0 1 289.635 642.029 Tm (is) Tj
+1 0 0 1 301.635 642.029 Tm (a) Tj
+1 0 0 1 311.643 642.029 Tm (subset) Tj
+1 0 0 1 350.331 642.029 Tm (of) Tj
+1 0 0 1 363.675 642.029 Tm (SGML) Tj
+1 0 0 1 401.019 642.029 Tm (that) Tj
+1 0 0 1 424.371 642.029 Tm (is) Tj
+1 0 0 1 436.371 642.029 Tm (completely) Tj
+1 0 0 1 70.875 627.929 Tm (described) Tj
+1 0 0 1 126.231 627.929 Tm (in) Tj
+1 0 0 1 138.903 627.929 Tm (this) Tj
+1 0 0 1 160.911 627.929 Tm (document.) Tj
+1 0 0 1 220.275 627.929 Tm (Its) Tj
+1 0 0 1 236.283 627.929 Tm (goal) Tj
+1 0 0 1 262.299 627.929 Tm (is) Tj
+1 0 0 1 274.299 627.929 Tm (to) Tj
+1 0 0 1 287.643 627.929 Tm (enable) Tj
+1 0 0 1 327.003 627.929 Tm (generic) Tj
+1 0 0 1 369.687 627.929 Tm (SGML) Tj
+1 0 0 1 407.031 627.929 Tm (to) Tj
+1 0 0 1 420.375 627.929 Tm (be) Tj
+1 0 0 1 437.055 627.929 Tm (served,) Tj
+1 0 0 1 70.875 613.829 Tm (received,) Tj
+1 0 0 1 122.895 613.829 Tm (and) Tj
+1 0 0 1 146.247 613.829 Tm (processed) Tj
+1 0 0 1 204.939 613.829 Tm (on) Tj
+1 0 0 1 221.619 613.829 Tm (the) Tj
+1 0 0 1 241.635 613.829 Tm (Web) Tj
+1 0 0 1 269.643 613.829 Tm (in) Tj
+1 0 0 1 282.315 613.829 Tm (the) Tj
+1 0 0 1 302.331 613.829 Tm (way) Tj
+1 0 0 1 327.003 613.829 Tm (that) Tj
+1 0 0 1 350.355 613.829 Tm (is) Tj
+1 0 0 1 362.355 613.829 Tm (now) Tj
+1 0 0 1 387.699 613.829 Tm (possible) Tj
+1 0 0 1 435.051 613.829 Tm (with) Tj
+1 0 0 1 459.723 613.829 Tm (HTML.) Tj
+1 0 0 1 499.059 613.829 Tm (XML) Tj
+1 0 0 1 70.875 599.729 Tm (has) Tj
+1 0 0 1 93.555 599.729 Tm (been) Tj
+1 0 0 1 123.579 599.729 Tm (designed) Tj
+1 0 0 1 175.611 599.729 Tm (for) Tj
+1 0 0 1 192.951 599.729 Tm (ease) Tj
+1 0 0 1 222.303 599.729 Tm (of) Tj
+1 0 0 1 235.647 599.729 Tm (implementation) Tj
+1 0 0 1 320.343 599.729 Tm (and) Tj
+1 0 0 1 343.695 599.729 Tm (for) Tj
+1 0 0 1 361.035 599.729 Tm (interoperability) Tj
+1 0 0 1 442.395 599.729 Tm (with) Tj
+1 0 0 1 467.067 599.729 Tm (both) Tj
+1 0 0 1 70.875 585.629 Tm (SGML) Tj
+1 0 0 1 108.219 585.629 Tm (and) Tj
+1 0 0 1 131.571 585.629 Tm (HTML.) Tj
+/F1 16 Tf
+1 0 0 1 70.875 555.157 Tm (Status) Tj
+1 0 0 1 120.683 555.157 Tm (of) Tj
+1 0 0 1 138.475 555.157 Tm (this) Tj
+1 0 0 1 167.819 555.157 Tm (document) Tj
+/F1 12 Tf
+1 0 0 1 70.875 529.729 Tm (This) Tj
+1 0 0 1 96.879 529.729 Tm (document) Tj
+1 0 0 1 152.907 529.729 Tm (has) Tj
+1 0 0 1 175.587 529.729 Tm (been) Tj
+1 0 0 1 205.611 529.729 Tm (reviewed) Tj
+1 0 0 1 256.959 529.729 Tm (by) Tj
+1 0 0 1 272.967 529.729 Tm (W3C) Tj
+1 0 0 1 302.967 529.729 Tm (Members) Tj
+1 0 0 1 356.307 529.729 Tm (and) Tj
+1 0 0 1 379.659 529.729 Tm (other) Tj
+1 0 0 1 410.343 529.729 Tm (interested) Tj
+1 0 0 1 466.371 529.729 Tm (parties) Tj
+1 0 0 1 70.875 515.629 Tm (and) Tj
+1 0 0 1 94.227 515.629 Tm (has) Tj
+1 0 0 1 116.907 515.629 Tm (been) Tj
+1 0 0 1 146.931 515.629 Tm (endorsed) Tj
+1 0 0 1 200.295 515.629 Tm (by) Tj
+1 0 0 1 216.303 515.629 Tm (the) Tj
+1 0 0 1 236.319 515.629 Tm (Director) Tj
+1 0 0 1 281.655 515.629 Tm (as) Tj
+1 0 0 1 297.663 515.629 Tm (a) Tj
+1 0 0 1 307.671 515.629 Tm (W3C) Tj
+1 0 0 1 337.671 515.629 Tm (Recommendation.) Tj
+1 0 0 1 438.375 515.629 Tm (It) Tj
+1 0 0 1 448.383 515.629 Tm (is) Tj
+1 0 0 1 460.383 515.629 Tm (a) Tj
+1 0 0 1 470.391 515.629 Tm (stable) Tj
+1 0 0 1 70.875 501.529 Tm (document) Tj
+1 0 0 1 126.903 501.529 Tm (and) Tj
+1 0 0 1 150.255 501.529 Tm (may) Tj
+1 0 0 1 176.259 501.529 Tm (be) Tj
+1 0 0 1 192.939 501.529 Tm (used) Tj
+1 0 0 1 222.291 501.529 Tm (as) Tj
+1 0 0 1 238.299 501.529 Tm (reference) Tj
+1 0 0 1 292.323 501.529 Tm (material) Tj
+1 0 0 1 338.331 501.529 Tm (or) Tj
+1 0 0 1 352.335 501.529 Tm (cited) Tj
+1 0 0 1 381.015 501.529 Tm (as) Tj
+1 0 0 1 397.023 501.529 Tm (a) Tj
+1 0 0 1 407.031 501.529 Tm (normative) Tj
+1 0 0 1 463.047 501.529 Tm (reference) Tj
+1 0 0 1 70.875 487.429 Tm (from) Tj
+1 0 0 1 98.211 487.429 Tm (another) Tj
+1 0 0 1 142.239 487.429 Tm (document.) Tj
+1 0 0 1 201.603 487.429 Tm (W3C's) Tj
+1 0 0 1 239.895 487.429 Tm (role) Tj
+1 0 0 1 263.235 487.429 Tm (in) Tj
+1 0 0 1 275.907 487.429 Tm (making) Tj
+1 0 0 1 317.919 487.429 Tm (the) Tj
+1 0 0 1 337.935 487.429 Tm (Recommendation) Tj
+1 0 0 1 435.303 487.429 Tm (is) Tj
+1 0 0 1 447.303 487.429 Tm (to) Tj
+1 0 0 1 460.647 487.429 Tm (draw) Tj
+1 0 0 1 70.875 473.329 Tm (attention) Tj
+1 0 0 1 120.243 473.329 Tm (to) Tj
+1 0 0 1 133.587 473.329 Tm (the) Tj
+1 0 0 1 153.603 473.329 Tm (specification) Tj
+1 0 0 1 222.963 473.329 Tm (and) Tj
+1 0 0 1 246.315 473.329 Tm (to) Tj
+1 0 0 1 259.659 473.329 Tm (promote) Tj
+1 0 0 1 307.011 473.329 Tm (its) Tj
+1 0 0 1 322.347 473.329 Tm (widespread) Tj
+1 0 0 1 387.039 473.329 Tm (deployment.) Tj
+1 0 0 1 455.739 473.329 Tm (This) Tj
+1 0 0 1 70.875 459.229 Tm (enhances) Tj
+1 0 0 1 126.243 459.229 Tm (the) Tj
+1 0 0 1 146.259 459.229 Tm (functionality) Tj
+1 0 0 1 212.955 459.229 Tm (and) Tj
+1 0 0 1 236.307 459.229 Tm (interoperability) Tj
+1 0 0 1 317.667 459.229 Tm (of) Tj
+1 0 0 1 331.011 459.229 Tm (the) Tj
+1 0 0 1 351.027 459.229 Tm (Web.) Tj
+1 0 0 1 70.875 442.129 Tm (This) Tj
+1 0 0 1 96.879 442.129 Tm (document) Tj
+1 0 0 1 152.907 442.129 Tm (specifies) Tj
+1 0 0 1 202.923 442.129 Tm (a) Tj
+1 0 0 1 212.931 442.129 Tm (syntax) Tj
+1 0 0 1 250.947 442.129 Tm (created) Tj
+1 0 0 1 294.303 442.129 Tm (by) Tj
+1 0 0 1 310.311 442.129 Tm (subsetting) Tj
+1 0 0 1 368.343 442.129 Tm (an) Tj
+1 0 0 1 385.023 442.129 Tm (existing,) Tj
+1 0 0 1 432.375 442.129 Tm (widely) Tj
+1 0 0 1 469.047 442.129 Tm (used) Tj
+1 0 0 1 70.875 428.029 Tm (international) Tj
+1 0 0 1 139.575 428.029 Tm (text) Tj
+1 0 0 1 162.255 428.029 Tm (processing) Tj
+1 0 0 1 223.611 428.029 Tm (standard) Tj
+1 0 0 1 273.639 428.029 Tm (\(Standard) Tj
+1 0 0 1 329.667 428.029 Tm (Generalized) Tj
+1 0 0 1 397.695 428.029 Tm (Markup) Tj
+1 0 0 1 441.039 428.029 Tm (Language,) Tj
+1 0 0 1 501.087 428.029 Tm (ISO) Tj
+1 0 0 1 70.875 413.929 Tm (8879:1986\(E\)) Tj
+1 0 0 1 146.919 413.929 Tm (as) Tj
+1 0 0 1 162.927 413.929 Tm (amended) Tj
+1 0 0 1 216.291 413.929 Tm (and) Tj
+1 0 0 1 239.643 413.929 Tm (corrected\)) Tj
+1 0 0 1 296.991 413.929 Tm (for) Tj
+1 0 0 1 314.331 413.929 Tm (use) Tj
+1 0 0 1 337.011 413.929 Tm (on) Tj
+1 0 0 1 353.691 413.929 Tm (the) Tj
+1 0 0 1 373.707 413.929 Tm (World) Tj
+1 0 0 1 408.375 413.929 Tm (Wide) Tj
+1 0 0 1 439.047 413.929 Tm (Web.) Tj
+1 0 0 1 470.391 413.929 Tm (It) Tj
+1 0 0 1 480.399 413.929 Tm (is) Tj
+1 0 0 1 492.399 413.929 Tm (a) Tj
+1 0 0 1 70.875 399.829 Tm (product) Tj
+1 0 0 1 114.231 399.829 Tm (of) Tj
+1 0 0 1 127.575 399.829 Tm (the) Tj
+1 0 0 1 147.591 399.829 Tm (W3C) Tj
+1 0 0 1 177.591 399.829 Tm (XML) Tj
+1 0 0 1 205.599 399.829 Tm (Activity,) Tj
+1 0 0 1 250.275 399.829 Tm (details) Tj
+1 0 0 1 288.291 399.829 Tm (of) Tj
+1 0 0 1 301.635 399.829 Tm (which) Tj
+1 0 0 1 335.643 399.829 Tm (can) Tj
+1 0 0 1 358.323 399.829 Tm (be) Tj
+1 0 0 1 375.003 399.829 Tm (found) Tj
+1 0 0 1 408.363 399.829 Tm (at) Tj
+1 0 0 1 70.875 385.729 Tm (http://www.w3.org/XML.) Tj
+1 0 0 1 200.919 385.729 Tm (A) Tj
+1 0 0 1 212.259 385.729 Tm (list) Tj
+1 0 0 1 230.259 385.729 Tm (of) Tj
+1 0 0 1 243.603 385.729 Tm (current) Tj
+1 0 0 1 284.283 385.729 Tm (W3C) Tj
+1 0 0 1 314.283 385.729 Tm (Recommendations) Tj
+1 0 0 1 417.651 385.729 Tm (and) Tj
+1 0 0 1 441.003 385.729 Tm (other) Tj
+1 0 0 1 471.687 385.729 Tm (technical) Tj
+1 0 0 1 70.875 371.629 Tm (documents) Tj
+1 0 0 1 132.903 371.629 Tm (can) Tj
+1 0 0 1 155.583 371.629 Tm (be) Tj
+1 0 0 1 172.263 371.629 Tm (found) Tj
+1 0 0 1 205.623 371.629 Tm (at) Tj
+1 0 0 1 218.967 371.629 Tm (http://www.w3.org/TR.) Tj
+/F5 10 Tf
+1 0 0 1 403.375 804.815 Tm (XML) Tj
+1 0 0 1 428.095 804.815 Tm (Recommendation) Tj
+1 0 0 1 501.145 804.815 Tm (-) Tj
+1 0 0 1 506.975 804.815 Tm (p.) Tj
+1 0 0 1 516.975 804.815 Tm (1) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 17 0 R
+>>
+endobj
+xref
+0 19
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000117 00000 n
+0000000179 00000 n
+0000000377 00000 n
+0000000488 00000 n
+0000000602 00000 n
+0000000707 00000 n
+0000000821 00000 n
+0000000929 00000 n
+0000001040 00000 n
+0000001150 00000 n
+0000001270 00000 n
+0000001383 00000 n
+0000001499 00000 n
+0000001607 00000 n
+0000001726 00000 n
+0000009999 00000 n
+trailer
+<<
+/Size 19
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+10107
+%%EOF
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 1
+/Kids [18 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] >>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 1420 >>
+stream
+BT
+/F3 10 Tf
+1 0 0 1 85.875 721.415 Tm (Content) Tj
+/F1 10 Tf
+1 0 0 1 86.445 708.165 Tm (A\)) Tj
+1 0 0 1 99.225 708.165 Tm (What) Tj
+1 0 0 1 125.345 708.165 Tm (is) Tj
+1 0 0 1 135.345 708.165 Tm (FOP?) Tj
+1 0 0 1 86.445 696.915 Tm (B\)) Tj
+1 0 0 1 99.225 696.915 Tm (Downloading) Tj
+1 0 0 1 159.805 696.915 Tm (FOP) Tj
+1 0 0 1 85.895 685.665 Tm (C\)) Tj
+1 0 0 1 99.225 685.665 Tm (Running) Tj
+1 0 0 1 139.245 685.665 Tm (FOP) Tj
+1 0 0 1 85.895 674.415 Tm (D\)) Tj
+1 0 0 1 99.225 674.415 Tm (Embedding) Tj
+1 0 0 1 152.585 674.415 Tm (FOP) Tj
+1 0 0 1 86.445 663.165 Tm (E\)) Tj
+1 0 0 1 99.225 663.165 Tm (What's) Tj
+1 0 0 1 132.255 663.165 Tm (Implemented?) Tj
+1 0 0 1 87.005 651.915 Tm (F\)) Tj
+1 0 0 1 99.225 651.915 Tm (Limitations) Tj
+1 0 0 1 85.335 640.665 Tm (G\)) Tj
+1 0 0 1 99.225 640.665 Tm (Bugs) Tj
+1 0 0 1 85.895 629.415 Tm (H\)) Tj
+1 0 0 1 99.225 629.415 Tm (Compiling) Tj
+1 0 0 1 146.455 629.415 Tm (FOP) Tj
+1 0 0 1 90.335 618.165 Tm (I\)) Tj
+1 0 0 1 99.225 618.165 Tm (Getting) Tj
+1 0 0 1 134.245 618.165 Tm (involved) Tj
+1 0 0 1 88.115 606.915 Tm (J\)) Tj
+1 0 0 1 99.225 606.915 Tm (FOP) Tj
+1 0 0 1 122.565 606.915 Tm (Relevant) Tj
+1 0 0 1 164.805 606.915 Tm (Specifications) Tj
+1 0 0 1 86.445 595.665 Tm (K\)) Tj
+1 0 0 1 99.225 595.665 Tm (Licence) Tj
+/F5 10 Tf
+1 0 0 1 480.305 804.815 Tm (FOP) Tj
+1 0 0 1 501.145 804.815 Tm (-) Tj
+1 0 0 1 506.975 804.815 Tm (p.) Tj
+1 0 0 1 516.975 804.815 Tm (1) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 17 0 R
+>>
+endobj
+xref
+0 19
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000117 00000 n
+0000000179 00000 n
+0000000377 00000 n
+0000000488 00000 n
+0000000602 00000 n
+0000000707 00000 n
+0000000821 00000 n
+0000000929 00000 n
+0000001040 00000 n
+0000001150 00000 n
+0000001270 00000 n
+0000001383 00000 n
+0000001499 00000 n
+0000001607 00000 n
+0000001726 00000 n
+0000003198 00000 n
+trailer
+<<
+/Size 19
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+3306
+%%EOF
--- /dev/null
+<html><head><title>Test Results</title></head><body>
+
+<h2>Compare Results<br>
+<font size='1'>created 18.05.2000 12:46:15</font></h2>
+<table cellpadding='10' border='2'><thead><th align='center'>reference file</th><th align='center'>test file</th><th align='center'>identical?</th></thead>
+<tr><td><a href='reference\normal.pdf'>normal.pdf</a> </td><td> <a href='tests\normal.pdf'>normal.pdf</a> </td><td><font color='red'>No</font></td></tr>
+<tr><td><a href='reference\table.pdf'>table.pdf</a> </td><td> <a href='tests\table.pdf'>table.pdf</a> </td><td><font color='red'>No</font></td></tr>
+<tr><td><a href='reference\list.pdf'>list.pdf</a> </td><td> <a href='tests\list.pdf'>list.pdf</a> </td><td><font color='red'>No</font></td></tr>
+<tr><td><a href='reference\link.pdf'>link.pdf</a> </td><td> <a href='tests\link.pdf'>link.pdf</a> </td><td><font color='red'>No</font></td></tr>
+<tr><td><a href='reference\border.pdf'>border.pdf</a> </td><td> <a href='tests\border.pdf'>border.pdf</a> </td><td><font color='red'>No</font></td></tr>
+<tr><td><a href='reference\images.pdf'>images.pdf</a> </td><td> <a href='tests\images.pdf'>images.pdf</a> </td><td><font color='red'>No</font></td></tr>
+<tr><td><a href='reference\extensive.pdf'>extensive.pdf</a> </td><td> <a href='tests\extensive.pdf'>extensive.pdf</a> </td><td><font color='red'>No</font></td></tr>
+</table></html>
--- /dev/null
+@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\xml.jar;..\..\lib;..\..\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=
+
--- /dev/null
+#!/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/xml.jar:../../lib:../../build/fop.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 $*
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 1
+/Kids [18 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] >>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 8375 >>
+stream
+BT
+/F3 14 Tf
+0 0 0 rg
+1 0 0 1 14.175 808.681 Tm (PX7.net) Tj
+0 0 0 rg
+1 0 0 1 14.175 791.731 Tm (44) Tj
+0 0 0 rg
+1 0 0 1 33.635 791.731 Tm (Liberty) Tj
+0 0 0 rg
+1 0 0 1 84.203 791.731 Tm (St) Tj
+0 0 0 rg
+1 0 0 1 14.175 774.781 Tm (Newburyport,) Tj
+0 0 0 rg
+1 0 0 1 108.297 774.781 Tm (MA) Tj
+0 0 0 rg
+1 0 0 1 133.959 774.781 Tm (01950) Tj
+0 0 0 rg
+1 0 0 1 14.175 757.831 Tm (978-462-1152) Tj
+/F1 23 Tf
+0 0 0 rg
+1 0 0 1 411.075 804.719 Tm (Sales) Tj
+0 0 0 rg
+1 0 0 1 474.992 804.719 Tm (Receipt) Tj
+0 0 0 RG
+411.075 786.713 m 481.95 786.713 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+411.075 786.713 m 411.075 772.538 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+481.95 786.713 m 481.95 772.538 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+411.075 772.538 m 481.95 772.538 l 1.0 w S
+0 0 0 RG
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 414.075 773.597 Tm (DATE) Tj
+0 0 0 RG
+411.075 772.538 m 481.95 772.538 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+411.075 772.538 m 411.075 758.363 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+481.95 772.538 m 481.95 758.363 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+411.075 758.363 m 481.95 758.363 l 1.0 w S
+0 0 0 RG
+/F1 10 Tf
+0 0 0 rg
+1 0 0 1 414.075 759.858 Tm (01/01/20000) Tj
+0 0 0 RG
+481.95 786.713 m 552.825 786.713 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+481.95 786.713 m 481.95 772.538 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+552.825 786.713 m 552.825 772.538 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+481.95 772.538 m 552.825 772.538 l 1.0 w S
+0 0 0 RG
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 484.95 773.597 Tm (SALE) Tj
+0 0 0 rg
+1 0 0 1 518.97 773.597 Tm (#) Tj
+0 0 0 RG
+481.95 772.538 m 552.825 772.538 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+481.95 772.538 m 481.95 758.363 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+552.825 772.538 m 552.825 758.363 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+481.95 758.363 m 552.825 758.363 l 1.0 w S
+0 0 0 RG
+/F1 10 Tf
+0 0 0 rg
+1 0 0 1 484.95 759.858 Tm (1) Tj
+0 0 0 RG
+14.175 735.683 m 269.325 735.683 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+14.175 735.683 m 14.175 721.508 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+269.325 735.683 m 269.325 721.508 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+14.175 721.508 m 269.325 721.508 l 1.0 w S
+0 0 0 RG
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 17.175 722.567 Tm (SOLD) Tj
+0 0 0 rg
+1 0 0 1 53.187 722.567 Tm (TO) Tj
+0 0 0 RG
+14.175 721.508 m 269.325 721.508 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+14.175 721.508 m 14.175 636.458 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+269.325 721.508 m 269.325 636.458 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+14.175 636.458 m 269.325 636.458 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+297.675 735.683 m 552.825 735.683 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+297.675 735.683 m 297.675 721.508 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+552.825 735.683 m 552.825 721.508 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+297.675 721.508 m 552.825 721.508 l 1.0 w S
+0 0 0 RG
+0 0 0 rg
+1 0 0 1 300.675 722.567 Tm (SHIP) Tj
+0 0 0 rg
+1 0 0 1 332.019 722.567 Tm (TO) Tj
+0 0 0 RG
+297.675 721.508 m 552.825 721.508 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+297.675 721.508 m 297.675 636.458 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+552.825 721.508 m 552.825 636.458 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+297.675 636.458 m 552.825 636.458 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+326.025 622.283 m 439.425 622.283 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+326.025 622.283 m 326.025 608.108 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+439.425 622.283 m 439.425 608.108 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+326.025 608.108 m 439.425 608.108 l 1.0 w S
+0 0 0 RG
+0 0 0 rg
+1 0 0 1 329.025 609.167 Tm (PMT) Tj
+0 0 0 rg
+1 0 0 1 357.693 609.167 Tm (METHOD) Tj
+0 0 0 RG
+326.025 608.108 m 439.425 608.108 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+326.025 608.108 m 326.025 593.933 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+439.425 608.108 m 439.425 593.933 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+326.025 593.933 m 439.425 593.933 l 1.0 w S
+0 0 0 RG
+/F1 10 Tf
+0 0 0 rg
+1 0 0 1 329.025 595.428 Tm (Check) Tj
+0 0 0 RG
+439.425 622.283 m 552.825 622.283 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+439.425 622.283 m 439.425 608.108 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+552.825 622.283 m 552.825 608.108 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+439.425 608.108 m 552.825 608.108 l 1.0 w S
+0 0 0 RG
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 442.425 609.167 Tm (CHECK) Tj
+0 0 0 rg
+1 0 0 1 487.761 609.167 Tm (#) Tj
+0 0 0 RG
+439.425 608.108 m 552.825 608.108 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+439.425 608.108 m 439.425 593.933 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+552.825 608.108 m 552.825 593.933 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+439.425 593.933 m 552.825 593.933 l 1.0 w S
+0 0 0 RG
+/F1 10 Tf
+0 0 0 rg
+1 0 0 1 442.425 595.428 Tm (1234) Tj
+1 1 0 RG
+14.175 593.933 m 552.825 593.933 l 1.0 w S
+0 0 0 RG
+1 1 0 RG
+14.175 593.933 m 14.175 111.983 l 1.0 w S
+0 0 0 RG
+1 1 0 RG
+552.825 593.933 m 552.825 111.983 l 1.0 w S
+0 0 0 RG
+1 1 0 RG
+14.175 111.983 m 552.825 111.983 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+14.175 593.933 m 85.05 593.933 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+14.175 593.933 m 14.175 111.983 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+85.05 593.933 m 85.05 111.983 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+14.175 111.983 m 85.05 111.983 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+85.05 593.933 m 411.075 593.933 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+85.05 593.933 m 85.05 111.983 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+411.075 593.933 m 411.075 111.983 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+85.05 111.983 m 411.075 111.983 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+411.075 593.933 m 481.95 593.933 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+411.075 593.933 m 411.075 111.983 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+481.95 593.933 m 481.95 111.983 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+411.075 111.983 m 481.95 111.983 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+481.95 593.933 m 552.825 593.933 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+481.95 593.933 m 481.95 111.983 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+552.825 593.933 m 552.825 111.983 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+481.95 111.983 m 552.825 111.983 l 1.0 w S
+0 0 0 RG
+0 0.5 0 RG
+14.175 593.933 m 85.05 593.933 l 1.0 w S
+0 0 0 RG
+0 0.5 0 RG
+14.175 593.933 m 14.175 568.683 l 1.0 w S
+0 0 0 RG
+0 0.5 0 RG
+85.05 593.933 m 85.05 568.683 l 1.0 w S
+0 0 0 RG
+0 0.5 0 RG
+14.175 568.683 m 85.05 568.683 l 1.0 w S
+0 0 0 RG
+0 0 0 rg
+1 0 0 1 27.49 578.753 Tm (QUANTITY) Tj
+1 0 0 RG
+85.05 593.933 m 411.075 593.933 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+85.05 593.933 m 85.05 568.683 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+411.075 593.933 m 411.075 568.683 l 1.0 w S
+0 0 0 RG
+1 0 0 RG
+85.05 568.683 m 411.075 568.683 l 1.0 w S
+0 0 0 RG
+0 0 0 rg
+1 0 0 1 90.05 580.753 Tm (DESCRIPTION) Tj
+0 0 1 RG
+411.075 593.933 m 481.95 593.933 l 1.0 w S
+0 0 0 RG
+0 0 1 RG
+411.075 593.933 m 411.075 568.683 l 1.0 w S
+0 0 0 RG
+0 0 1 RG
+481.95 593.933 m 481.95 568.683 l 1.0 w S
+0 0 0 RG
+0 0 1 RG
+411.075 568.683 m 481.95 568.683 l 1.0 w S
+0 0 0 RG
+0 0 0 rg
+1 0 0 1 433.177 581.753 Tm (RATE) Tj
+0.69999 0.5 0 RG
+481.95 593.933 m 552.825 593.933 l 1.0 w S
+0 0 0 RG
+0.69999 0.5 0 RG
+481.95 593.933 m 481.95 568.683 l 1.0 w S
+0 0 0 RG
+0.69999 0.5 0 RG
+552.825 593.933 m 552.825 568.683 l 1.0 w S
+0 0 0 RG
+0.69999 0.5 0 RG
+481.95 568.683 m 552.825 568.683 l 1.0 w S
+0 0 0 RG
+0 0 0 rg
+1 0 0 1 495.722 582.753 Tm (AMOUNT) Tj
+0 0 0 rg
+1 0 0 1 77.49 558.503 Tm (1) Tj
+0 0 0 rg
+1 0 0 1 87.05 558.503 Tm (Widget) Tj
+0 0 0 rg
+1 0 0 1 449.37 558.503 Tm ($22.23) Tj
+0 0 0 rg
+1 0 0 1 525.805 558.503 Tm (22.31) Tj
+0 0 0 rg
+1 0 0 1 77.49 543.253 Tm (3) Tj
+0 0 0 rg
+1 0 0 1 87.05 543.253 Tm (Nuts) Tj
+0 0 0 rg
+1 0 0 1 449.37 543.253 Tm ($12.00) Tj
+0 0 0 rg
+1 0 0 1 525.805 543.253 Tm (36.00) Tj
+0 0 0 RG
+14.175 111.983 m 411.075 111.983 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+14.175 111.983 m 14.175 83.633 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+411.075 111.983 m 411.075 83.633 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+14.175 83.633 m 411.075 83.633 l 1.0 w S
+0 0 0 RG
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 17.175 98.867 Tm (Please) Tj
+0 0 0 rg
+1 0 0 1 57.195 98.867 Tm (remit) Tj
+0 0 0 rg
+1 0 0 1 87.195 98.867 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 100.539 98.867 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 120.555 98.867 Tm (above) Tj
+0 0 0 rg
+1 0 0 1 156.579 98.867 Tm (address) Tj
+0 0 0 RG
+411.075 111.983 m 481.95 111.983 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+411.075 111.983 m 411.075 83.633 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+481.95 111.983 m 481.95 83.633 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+411.075 83.633 m 481.95 83.633 l 1.0 w S
+0 0 0 RG
+/F1 22 Tf
+0 0 0 rg
+1 0 0 1 414.075 91.687 Tm (Total) Tj
+0 0 0 RG
+481.95 111.983 m 552.825 111.983 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+481.95 111.983 m 481.95 83.633 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+552.825 111.983 m 552.825 83.633 l 1.0 w S
+0 0 0 RG
+0 0 0 RG
+481.95 83.633 m 552.825 83.633 l 1.0 w S
+0 0 0 RG
+/F1 10 Tf
+0 0 0 rg
+1 0 0 1 484.95 99.303 Tm ($3.00) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 17 0 R
+>>
+endobj
+xref
+0 19
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000117 00000 n
+0000000179 00000 n
+0000000377 00000 n
+0000000488 00000 n
+0000000602 00000 n
+0000000707 00000 n
+0000000821 00000 n
+0000000929 00000 n
+0000001040 00000 n
+0000001150 00000 n
+0000001270 00000 n
+0000001383 00000 n
+0000001499 00000 n
+0000001607 00000 n
+0000001726 00000 n
+0000010153 00000 n
+trailer
+<<
+/Size 19
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+10261
+%%EOF
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 7
+/Kids [18 0 R 20 0 R 22 0 R 24 0 R 26 0 R 28 0 R 30 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] >>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 16904 >>
+stream
+BT
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 100.0 732.184 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 111.34 732.184 Tm (Block) Tj
+0 0 0 rg
+1 0 0 1 360.608 718.684 Tm (An) Tj
+0 0 0 rg
+1 0 0 1 378.62 718.684 Tm (End) Tj
+0 0 0 rg
+1 0 0 1 403.304 718.684 Tm (Aligned) Tj
+0 0 0 rg
+1 0 0 1 446.66 718.684 Tm (Block) Tj
+0 0 0 rg
+1 0 0 1 241.314 705.184 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 252.654 705.184 Tm (Centered) Tj
+0 0 0 rg
+1 0 0 1 305.346 705.184 Tm (Block) Tj
+0 0 0 rg
+1 0 0 1 100.0 691.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 126.004 691.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 138.004 691.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 148.012 691.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 192.688 691.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 214.696 691.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 246.04 691.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 269.392 691.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 314.752 691.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 341.428 691.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 372.1 691.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 398.788 691.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 422.14 691.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 100.0 678.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 134.68 678.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 173.368 678.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 190.048 678.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 254.08 678.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 276.088 678.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 318.772 678.184 Tm (Alignment) Tj
+0 0 0 rg
+1 0 0 1 375.46 678.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 387.46 678.184 Tm (default.) Tj
+0 0 0 rg
+1 0 0 1 131.852 664.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 157.856 664.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 169.856 664.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 179.864 664.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 224.54 664.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 246.548 664.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 277.892 664.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 301.244 664.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 346.604 664.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 373.28 664.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 403.952 664.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 430.64 664.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 453.992 664.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 165.188 651.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 199.868 651.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 238.556 651.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 255.236 651.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 319.268 651.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 341.276 651.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 383.96 651.184 Tm (Alignment) Tj
+0 0 0 rg
+1 0 0 1 440.648 651.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 452.648 651.184 Tm (end.) Tj
+0 0 0 rg
+1 0 0 1 115.926 637.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 141.93 637.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 153.93 637.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 163.938 637.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 208.614 637.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 230.622 637.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 261.966 637.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 285.318 637.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 330.678 637.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 357.354 637.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 388.026 637.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 414.714 637.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 438.066 637.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 119.256 624.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 153.936 624.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 192.624 624.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 209.304 624.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 273.336 624.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 295.344 624.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 338.028 624.184 Tm (Alignment) Tj
+0 0 0 rg
+1 0 0 1 394.716 624.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 406.716 624.184 Tm (centered.) Tj
+0 0 0 rg
+1 0 0 1 100.0 610.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 128.658 610.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 143.312 610.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 155.974 610.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 203.304 610.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 227.966 610.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 261.964 610.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 287.97 610.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 335.984 610.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 365.314 610.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 398.64 610.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 427.982 610.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 453.988 610.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 100.0 597.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 135.584 597.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 175.176 597.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 192.76 597.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 257.696 597.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 280.608 597.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 324.196 597.184 Tm (I'm) Tj
+0 0 0 rg
+1 0 0 1 344.06 597.184 Tm (going) Tj
+0 0 0 rg
+1 0 0 1 377.652 597.184 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 391.9 597.184 Tm (keep) Tj
+0 0 0 rg
+1 0 0 1 422.156 597.184 Tm (going) Tj
+0 0 0 rg
+1 0 0 1 455.748 597.184 Tm (so) Tj
+0 0 0 rg
+1 0 0 1 472.66 597.184 Tm (I) Tj
+0 0 0 rg
+1 0 0 1 100.0 583.684 Tm (can) Tj
+0 0 0 rg
+1 0 0 1 124.871 583.684 Tm (get) Tj
+0 0 0 rg
+1 0 0 1 147.078 583.684 Tm (three) Tj
+0 0 0 rg
+1 0 0 1 179.953 583.684 Tm (lines) Tj
+0 0 0 rg
+1 0 0 1 210.152 583.684 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 225.687 583.684 Tm (check) Tj
+0 0 0 rg
+1 0 0 1 262.558 583.684 Tm (how) Tj
+0 0 0 rg
+1 0 0 1 290.093 583.684 Tm (all) Tj
+0 0 0 rg
+1 0 0 1 307.62 583.684 Tm (but) Tj
+0 0 0 rg
+1 0 0 1 329.827 583.684 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 352.034 583.684 Tm (last) Tj
+0 0 0 rg
+1 0 0 1 376.233 583.684 Tm (justify.) Tj
+0 0 0 rg
+1 0 0 1 415.768 583.684 Tm (There,) Tj
+0 0 0 rg
+1 0 0 1 455.975 583.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 100.0 570.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 138.688 570.184 Tm (do) Tj
+0 0 0 rg
+1 0 0 1 155.368 570.184 Tm (it.) Tj
+0 0 0 rg
+1 0 0 1 168.04 570.184 Tm (Alignment) Tj
+0 0 0 rg
+1 0 0 1 224.728 570.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 236.728 570.184 Tm (justified.) Tj
+0 0 0 rg
+1 0 0 1 100.0 556.684 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 111.34 556.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 142.684 556.684 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 160.024 556.684 Tm (comparison) Tj
+0 0 0 rg
+1 0 0 1 100.0 531.184 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 111.34 531.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 142.684 531.184 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 167.356 531.184 Tm (12pt) Tj
+0 0 0 rg
+1 0 0 1 194.044 531.184 Tm (space-before) Tj
+0 0 0 rg
+1 0 0 1 100.0 517.684 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 111.34 517.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 142.684 517.684 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 160.024 517.684 Tm (comparison) Tj
+0 0 0 rg
+1 0 0 1 100.0 504.184 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 111.34 504.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 142.684 504.184 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 167.356 504.184 Tm (12pt) Tj
+0 0 0 rg
+1 0 0 1 194.044 504.184 Tm (space-after) Tj
+0 0 0 rg
+1 0 0 1 100.0 478.684 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 111.34 478.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 142.684 478.684 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 160.024 478.684 Tm (comparison) Tj
+0 0 0 rg
+1 0 0 1 100.0 453.184 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 111.34 453.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 142.684 453.184 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 167.356 453.184 Tm (both) Tj
+0 0 0 rg
+1 0 0 1 194.044 453.184 Tm (12pt) Tj
+0 0 0 rg
+1 0 0 1 220.732 453.184 Tm (space-before) Tj
+0 0 0 rg
+1 0 0 1 294.1 453.184 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 317.452 453.184 Tm (space-after) Tj
+0 0 0 rg
+1 0 0 1 100.0 427.684 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 111.34 427.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 142.684 427.684 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 160.024 427.684 Tm (comparison) Tj
+0 0 0 rg
+1 0 0 1 150.0 414.184 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 176.004 414.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 188.004 414.184 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 198.012 414.184 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 242.688 414.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 264.696 414.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 296.04 414.184 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 319.392 414.184 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 364.752 414.184 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 391.428 414.184 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 422.1 414.184 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 448.788 414.184 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 150.0 400.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 175.344 400.684 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 210.024 400.684 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 248.712 400.684 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 265.392 400.684 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 329.424 400.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 351.432 400.684 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 394.116 400.684 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 428.796 400.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 440.796 400.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 150.0 387.184 Tm (start-indent) Tj
+0 0 0 rg
+1 0 0 1 213.36 387.184 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 226.704 387.184 Tm (50pt.) Tj
+0 0 0 rg
+1 0 0 1 100.0 373.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 126.004 373.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 138.004 373.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 148.012 373.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 192.688 373.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 214.696 373.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 246.04 373.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 269.392 373.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 314.752 373.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 341.428 373.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 372.1 373.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 398.788 373.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 100.0 360.184 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 125.344 360.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 160.024 360.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 198.712 360.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 215.392 360.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 279.424 360.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 301.432 360.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 344.116 360.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 378.796 360.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 390.796 360.184 Tm (an) Tj
+0 0 0 rg
+1 0 0 1 100.0 346.684 Tm (end-indent) Tj
+0 0 0 rg
+1 0 0 1 160.036 346.684 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 173.38 346.684 Tm (50pt.) Tj
+0 0 0 rg
+1 0 0 1 150.0 333.184 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 176.004 333.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 188.004 333.184 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 198.012 333.184 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 242.688 333.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 264.696 333.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 296.04 333.184 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 319.392 333.184 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 364.752 333.184 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 391.428 333.184 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 150.0 319.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 176.688 319.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 200.04 319.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 225.384 319.684 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 260.064 319.684 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 298.752 319.684 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 315.432 319.684 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 379.464 319.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 150.0 306.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 192.684 306.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 227.364 306.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 239.364 306.184 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 249.372 306.184 Tm (start-indent) Tj
+0 0 0 rg
+1 0 0 1 312.732 306.184 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 336.084 306.184 Tm (end-indent) Tj
+0 0 0 rg
+1 0 0 1 396.12 306.184 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 150.0 292.684 Tm (50pt.) Tj
+/F1 15 Tf
+0 0 0 rg
+1 0 0 1 100.0 278.53 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 132.505 278.53 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 147.505 278.53 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 160.015 278.53 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 215.86 278.53 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 243.37 278.53 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 282.55 278.53 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 311.74 278.53 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 368.44 278.53 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 401.785 278.53 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 440.125 278.53 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 100.0 265.255 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 129.19 265.255 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 160.87 265.255 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 204.22 265.255 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 252.58 265.255 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 273.43 265.255 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 353.47 265.255 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 380.98 265.255 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 434.335 265.255 Tm (The) Tj
+0 0 0 rg
+1 0 0 1 100.0 251.98 Tm (font-size) Tj
+0 0 0 rg
+1 0 0 1 160.855 251.98 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 175.855 251.98 Tm (set) Tj
+0 0 0 rg
+1 0 0 1 200.035 251.98 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 216.715 251.98 Tm (15pt.) Tj
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 100.0 236.559 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 126.004 236.559 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 138.004 236.559 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 148.012 236.559 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 192.688 236.559 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 214.696 236.559 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 246.04 236.559 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 269.392 236.559 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 314.752 236.559 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 341.428 236.559 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 372.1 236.559 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 398.788 236.559 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 422.14 236.559 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 100.0 217.459 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 134.68 217.459 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 173.368 217.459 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 190.048 217.459 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 254.08 217.459 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 276.088 217.459 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 318.772 217.459 Tm (The) Tj
+0 0 0 rg
+1 0 0 1 342.784 217.459 Tm (line-height) Tj
+0 0 0 rg
+1 0 0 1 401.476 217.459 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 413.476 217.459 Tm (set) Tj
+0 0 0 rg
+1 0 0 1 432.82 217.459 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 446.164 217.459 Tm (20pt.) Tj
+/F1 15 Tf
+0 0 0 rg
+1 0 0 1 100.0 197.705 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 132.505 197.705 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 147.505 197.705 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 160.015 197.705 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 215.86 197.705 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 243.37 197.705 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 282.55 197.705 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 311.74 197.705 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 368.44 197.705 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 401.785 197.705 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 440.125 197.705 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 100.0 178.83 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 129.19 178.83 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 160.87 178.83 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 204.22 178.83 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 252.58 178.83 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 273.43 178.83 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 353.47 178.83 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 380.98 178.83 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 434.335 178.83 Tm (The) Tj
+0 0 0 rg
+1 0 0 1 100.0 159.955 Tm (font-size) Tj
+0 0 0 rg
+1 0 0 1 160.855 159.955 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 175.855 159.955 Tm (set) Tj
+0 0 0 rg
+1 0 0 1 200.035 159.955 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 216.715 159.955 Tm (15pt) Tj
+0 0 0 rg
+1 0 0 1 250.075 159.955 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 279.265 159.955 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 304.285 159.955 Tm (line-height) Tj
+0 0 0 rg
+1 0 0 1 377.65 159.955 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 392.65 159.955 Tm (set) Tj
+0 0 0 rg
+1 0 0 1 416.83 159.955 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 433.51 159.955 Tm (20pt.) Tj
+0 0 0 rg
+1 0 0 1 100.0 143.58 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 132.505 143.58 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 147.505 143.58 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 160.015 143.58 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 215.86 143.58 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 243.37 143.58 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 282.55 143.58 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 311.74 143.58 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 368.44 143.58 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 401.785 143.58 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 440.125 143.58 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 100.0 129.705 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 129.19 129.705 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 160.87 129.705 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 204.22 129.705 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 252.58 129.705 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 273.43 129.705 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 353.47 129.705 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 380.98 129.705 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 434.335 129.705 Tm (The) Tj
+0 0 0 rg
+1 0 0 1 100.0 115.83 Tm (font-size) Tj
+0 0 0 rg
+1 0 0 1 160.855 115.83 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 175.855 115.83 Tm (set) Tj
+0 0 0 rg
+1 0 0 1 200.035 115.83 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 216.715 115.83 Tm (15pt) Tj
+0 0 0 rg
+1 0 0 1 250.075 115.83 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 279.265 115.83 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 304.285 115.83 Tm (line-height) Tj
+0 0 0 rg
+1 0 0 1 377.65 115.83 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 392.65 115.83 Tm (set) Tj
+0 0 0 rg
+1 0 0 1 416.83 115.83 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 433.51 115.83 Tm (15pt.) Tj
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 100.0 78.909 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 111.34 78.909 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 142.684 78.909 Tm (within) Tj
+0 0 0 rg
+1 0 0 1 176.692 78.909 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 186.7 78.909 Tm (block) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 17 0 R
+>>
+endobj
+19 0 obj
+<< /Length 9595 >>
+stream
+BT
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 100.0 720.184 Tm (Text) Tj
+0 0 0 rg
+1 0 0 1 126.676 720.184 Tm (before) Tj
+0 0 0 rg
+1 0 0 1 100.0 694.684 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 111.34 694.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 142.684 694.684 Tm (within) Tj
+0 0 0 rg
+1 0 0 1 176.692 694.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 186.7 694.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 100.0 669.184 Tm (Text) Tj
+0 0 0 rg
+1 0 0 1 126.676 669.184 Tm (after) Tj
+0 0 0 rg
+1 0 0 1 150.0 631.684 Tm (Text) Tj
+0 0 0 rg
+1 0 0 1 176.676 631.684 Tm (before) Tj
+0 0 0 rg
+1 0 0 1 150.0 606.184 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 161.34 606.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 192.684 606.184 Tm (within) Tj
+0 0 0 rg
+1 0 0 1 226.692 606.184 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 236.7 606.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 268.044 606.184 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 292.716 606.184 Tm (50pt) Tj
+0 0 0 rg
+1 0 0 1 319.404 606.184 Tm (start-intent) Tj
+0 0 0 rg
+1 0 0 1 150.0 580.684 Tm (Text) Tj
+0 0 0 rg
+1 0 0 1 176.676 580.684 Tm (after) Tj
+0 0 0 rg
+1 0 0 1 150.0 543.184 Tm (And) Tj
+0 0 0 rg
+1 0 0 1 174.684 543.184 Tm (again) Tj
+0 0 0 rg
+1 0 0 1 207.372 543.184 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 224.712 543.184 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 244.728 543.184 Tm (page) Tj
+0 0 0 rg
+1 0 0 1 274.752 543.184 Tm (break,) Tj
+0 0 0 rg
+1 0 0 1 311.436 543.184 Tm (text) Tj
+0 0 0 rg
+1 0 0 1 334.116 543.184 Tm (before) Tj
+0 0 0 rg
+1 0 0 1 150.0 517.684 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 161.34 517.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 192.684 517.684 Tm (within) Tj
+0 0 0 rg
+1 0 0 1 226.692 517.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 236.7 517.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 268.044 517.684 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 292.716 517.684 Tm (50pt) Tj
+0 0 0 rg
+1 0 0 1 319.404 517.684 Tm (start-intent) Tj
+0 0 0 rg
+1 0 0 1 150.0 492.184 Tm (Text) Tj
+0 0 0 rg
+1 0 0 1 176.676 492.184 Tm (after) Tj
+0 0 0 rg
+1 0 0 1 150.0 454.684 Tm (Text) Tj
+0 0 0 rg
+1 0 0 1 176.676 454.684 Tm (before) Tj
+0 0 0 rg
+1 0 0 1 150.0 429.184 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 161.34 429.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 192.684 429.184 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 217.356 429.184 Tm (50pt) Tj
+0 0 0 rg
+1 0 0 1 244.044 429.184 Tm (start-indent) Tj
+0 0 0 rg
+1 0 0 1 307.404 429.184 Tm (within) Tj
+0 0 0 rg
+1 0 0 1 341.412 429.184 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 351.42 429.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 382.764 429.184 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 407.436 429.184 Tm (50pt) Tj
+0 0 0 rg
+1 0 0 1 150.0 415.684 Tm (start-intent) Tj
+0 0 0 rg
+1 0 0 1 150.0 390.184 Tm (Text) Tj
+0 0 0 rg
+1 0 0 1 176.676 390.184 Tm (after) Tj
+0 0 0 rg
+1 0 0 1 150.0 352.684 Tm (Text) Tj
+0 0 0 rg
+1 0 0 1 176.676 352.684 Tm (before) Tj
+0 0 0 rg
+1 0 0 1 200.0 327.184 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 211.34 327.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 242.684 327.184 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 267.356 327.184 Tm (100pt) Tj
+0 0 0 rg
+1 0 0 1 300.716 327.184 Tm (start-indent) Tj
+0 0 0 rg
+1 0 0 1 364.076 327.184 Tm (within) Tj
+0 0 0 rg
+1 0 0 1 398.084 327.184 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 408.092 327.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 439.436 327.184 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 200.0 313.684 Tm (50pt) Tj
+0 0 0 rg
+1 0 0 1 226.688 313.684 Tm (start-intent) Tj
+0 0 0 rg
+1 0 0 1 150.0 288.184 Tm (Text) Tj
+0 0 0 rg
+1 0 0 1 176.676 288.184 Tm (after) Tj
+0 0 0 rg
+1 0 0 1 100.0 250.684 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 112.0 250.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 139.658 250.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 153.312 250.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 164.974 250.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 211.304 250.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 234.966 250.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 267.964 250.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 292.97 250.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 339.984 250.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 368.314 250.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 400.64 250.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 428.982 250.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 453.988 250.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 112.0 237.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 146.68 237.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 185.368 237.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 202.048 237.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 266.08 237.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 288.088 237.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 100.0 223.684 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 112.0 223.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 139.658 223.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 153.312 223.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 164.974 223.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 211.304 223.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 234.966 223.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 267.964 223.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 292.97 223.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 339.984 223.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 368.314 223.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 400.64 223.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 428.982 223.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 453.988 223.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 112.0 210.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 146.68 210.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 185.368 210.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 202.048 210.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 266.08 210.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 288.088 210.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 112.0 196.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 139.658 196.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 153.312 196.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 164.974 196.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 211.304 196.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 234.966 196.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 267.964 196.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 292.97 196.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 339.984 196.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 368.314 196.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 400.64 196.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 428.982 196.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 453.988 196.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 112.0 183.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 146.68 183.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 185.368 183.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 202.048 183.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 266.08 183.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 288.088 183.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 112.0 169.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 139.658 169.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 153.312 169.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 164.974 169.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 211.304 169.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 234.966 169.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 267.964 169.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 292.97 169.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 339.984 169.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 368.314 169.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 400.64 169.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 428.982 169.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 453.988 169.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 112.0 156.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 146.68 156.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 185.368 156.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 202.048 156.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 266.08 156.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 288.088 156.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 150.0 130.684 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 162.0 130.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 189.858 130.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 203.712 130.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 215.574 130.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 262.104 130.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 285.966 130.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 319.164 130.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 344.37 130.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 391.584 130.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 420.114 130.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 452.64 130.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 162.0 117.184 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 188.584 117.184 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 217.16 117.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 255.072 117.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 296.992 117.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 316.904 117.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 384.168 117.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 409.408 117.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 455.324 117.184 Tm (The) Tj
+0 0 0 rg
+1 0 0 1 162.0 103.684 Tm (list-block) Tj
+0 0 0 rg
+1 0 0 1 215.618 103.684 Tm (has) Tj
+0 0 0 rg
+1 0 0 1 241.912 103.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 255.534 103.684 Tm (start-indent) Tj
+0 0 0 rg
+1 0 0 1 322.508 103.684 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 339.466 103.684 Tm (50pt) Tj
+0 0 0 rg
+1 0 0 1 369.768 103.684 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 396.734 103.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 410.356 103.684 Tm (text-align) Tj
+0 0 0 rg
+1 0 0 1 465.99 103.684 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 162.0 90.184 Tm (justified.) Tj
+0 0 0 rg
+1 0 0 1 150.0 76.684 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 162.0 76.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 189.858 76.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 203.712 76.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 215.574 76.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 262.104 76.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 285.966 76.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 319.164 76.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 344.37 76.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 391.584 76.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 420.114 76.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 452.64 76.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 162.0 63.184 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 185.352 63.184 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 210.696 63.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 245.376 63.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 284.064 63.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 300.744 63.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 364.776 63.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 386.784 63.184 Tm (breaks.) Tj
+ET
+
+endstream
+endobj
+20 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 19 0 R
+>>
+endobj
+21 0 obj
+<< /Length 8799 >>
+stream
+BT
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 162.0 732.184 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 188.325 732.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 200.646 732.184 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 210.975 732.184 Tm (second) Tj
+0 0 0 rg
+1 0 0 1 253.32 732.184 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 298.317 732.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 320.646 732.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 352.311 732.184 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 375.984 732.184 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 421.665 732.184 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 448.662 732.184 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 162.0 718.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 188.688 718.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 212.04 718.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 237.384 718.684 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 272.064 718.684 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 310.752 718.684 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 327.432 718.684 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 391.464 718.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 413.472 718.684 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 162.0 705.184 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 189.86 705.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 203.716 705.184 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 215.58 705.184 Tm (third) Tj
+0 0 0 rg
+1 0 0 1 244.112 705.184 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 290.644 705.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 314.508 705.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 347.708 705.184 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 372.916 705.184 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 420.132 705.184 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 448.664 705.184 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 162.0 691.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 188.688 691.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 212.04 691.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 237.384 691.684 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 272.064 691.684 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 310.752 691.684 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 327.432 691.684 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 391.464 691.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 413.472 691.684 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 100.0 666.184 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 112.0 666.184 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 139.658 666.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 153.312 666.184 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 164.974 666.184 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 211.304 666.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 234.966 666.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 267.964 666.184 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 292.97 666.184 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 339.984 666.184 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 368.314 666.184 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 400.64 666.184 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 428.982 666.184 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 453.988 666.184 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 112.0 652.684 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 146.68 652.684 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 185.368 652.684 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 202.048 652.684 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 266.08 652.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 288.088 652.684 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 212.0 639.184 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 242.756 639.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 259.508 639.184 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 274.268 639.184 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 323.696 639.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 350.456 639.184 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 386.552 639.184 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 415.976 639.184 Tm (start-indent) Tj
+0 0 0 rg
+1 0 0 1 212.0 625.684 Tm (100pt) Tj
+0 0 0 rg
+1 0 0 1 250.007 625.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 278.006 625.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 328.013 625.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 359.336 625.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 394.655 625.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 425.99 625.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 453.989 625.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 212.0 612.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 246.68 612.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 285.368 612.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 302.048 612.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 366.08 612.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 388.088 612.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 112.0 598.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 139.658 598.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 153.312 598.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 164.974 598.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 211.304 598.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 234.966 598.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 267.964 598.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 292.97 598.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 339.984 598.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 368.314 598.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 400.64 598.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 428.982 598.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 453.988 598.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 112.0 585.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 146.68 585.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 185.368 585.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 202.048 585.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 266.08 585.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 288.088 585.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 100.0 571.684 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 112.0 571.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 139.658 571.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 153.312 571.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 164.974 571.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 211.304 571.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 234.966 571.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 267.964 571.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 292.97 571.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 339.984 571.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 368.314 571.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 400.64 571.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 428.982 571.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 453.988 571.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 112.0 558.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 146.68 558.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 185.368 558.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 202.048 558.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 266.08 558.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 288.088 558.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 112.0 544.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 138.171 544.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 150.338 544.684 Tm (an) Tj
+0 0 0 rg
+1 0 0 1 167.185 544.684 Tm (embedded) Tj
+0 0 0 rg
+1 0 0 1 227.388 544.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 272.231 544.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 294.406 544.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 325.917 544.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 349.436 544.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 394.963 544.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 421.806 544.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 452.645 544.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 112.0 531.184 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 135.352 531.184 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 160.696 531.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 195.376 531.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 234.064 531.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 250.744 531.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 314.776 531.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 336.784 531.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 112.0 517.684 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 139.658 517.684 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 153.312 517.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 164.974 517.684 Tm (multiple) Tj
+0 0 0 rg
+1 0 0 1 211.304 517.684 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 234.966 517.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 267.964 517.684 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 292.97 517.684 Tm (extends) Tj
+0 0 0 rg
+1 0 0 1 339.984 517.684 Tm (over) Tj
+0 0 0 rg
+1 0 0 1 368.314 517.684 Tm (more) Tj
+0 0 0 rg
+1 0 0 1 400.64 517.684 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 428.982 517.684 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 453.988 517.684 Tm (line.) Tj
+0 0 0 rg
+1 0 0 1 112.0 504.184 Tm (There) Tj
+0 0 0 rg
+1 0 0 1 146.68 504.184 Tm (should) Tj
+0 0 0 rg
+1 0 0 1 185.368 504.184 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 202.048 504.184 Tm (appropriate) Tj
+0 0 0 rg
+1 0 0 1 266.08 504.184 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 288.088 504.184 Tm (breaks.) Tj
+0 0 0 rg
+1 0 0 1 100.0 478.684 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 112.0 478.684 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 123.34 478.684 Tm (block) Tj
+0 0 0 rg
+1 0 0 1 154.684 478.684 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 167.356 478.684 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 177.364 478.684 Tm (list-item-body) Tj
+0 0 0 rg
+1 0 0 1 100.0 465.184 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 136.0 465.184 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 124.0 465.184 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 150.004 465.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 162.004 465.184 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 172.012 465.184 Tm (list) Tj
+0 0 0 rg
+1 0 0 1 190.012 465.184 Tm (item) Tj
+0 0 0 rg
+1 0 0 1 216.016 465.184 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 228.688 465.184 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 238.696 465.184 Tm (list) Tj
+0 0 0 rg
+1 0 0 1 256.696 465.184 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 280.048 465.184 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 292.048 465.184 Tm (itself) Tj
+0 0 0 rg
+1 0 0 1 320.056 465.184 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 330.064 465.184 Tm (list) Tj
+0 0 0 rg
+1 0 0 1 348.064 465.184 Tm (item) Tj
+ET
+
+endstream
+endobj
+22 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 21 0 R
+>>
+endobj
+23 0 obj
+<< /Length 3624 >>
+stream
+BT
+/F1 24 Tf
+0 0 0 rg
+1 0 0 1 100.0 710.768 Tm (Next) Tj
+0 0 0 rg
+1 0 0 1 156.016 710.768 Tm (Stage) Tj
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 100.0 681.984 Tm (Right,) Tj
+0 0 0 rg
+1 0 0 1 134.68 681.984 Tm (now) Tj
+0 0 0 rg
+1 0 0 1 160.024 681.984 Tm (we) Tj
+0 0 0 rg
+1 0 0 1 178.696 681.984 Tm (are) Tj
+0 0 0 rg
+1 0 0 1 199.372 681.984 Tm (ready) Tj
+0 0 0 rg
+1 0 0 1 232.72 681.984 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 246.064 681.984 Tm (try) Tj
+0 0 0 rg
+1 0 0 1 262.732 681.984 Tm (some) Tj
+0 0 0 rg
+1 0 0 1 295.408 681.984 Tm (newly) Tj
+0 0 0 rg
+1 0 0 1 329.416 681.984 Tm (implemented) Tj
+0 0 0 rg
+1 0 0 1 401.44 681.984 Tm (things) Tj
+0 0 0 rg
+1 0 0 1 436.792 681.984 Tm (like) Tj
+0 0 0 rg
+1 0 0 1 100.0 668.484 Tm (rules.) Tj
+0 0 0 rg
+1 0 0 1 132.676 668.484 Tm (What) Tj
+0 0 0 rg
+1 0 0 1 164.02 668.484 Tm (follows) Tj
+0 0 0 rg
+1 0 0 1 204.028 668.484 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 216.028 668.484 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 226.036 668.484 Tm (display) Tj
+0 0 0 rg
+1 0 0 1 266.716 668.484 Tm (rule) Tj
+0 0 0 rg
+1 0 0 1 290.056 668.484 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 303.4 668.484 Tm (default) Tj
+0 0 0 rg
+1 0 0 1 342.76 668.484 Tm (thickness) Tj
+0 0 0 rg
+1 0 0 1 396.112 668.484 Tm (1pt) Tj
+0 0 0 rg
+1 0 0 1 416.128 668.484 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 439.48 668.484 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 100.0 654.984 Tm (space-before) Tj
+0 0 0 rg
+1 0 0 1 173.368 654.984 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 196.72 654.984 Tm (space-after) Tj
+0 0 0 rg
+1 0 0 1 260.08 654.984 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 273.424 654.984 Tm (12pt.) Tj
+0 0 0 RG
+100.0 639.3 m 476.0 639.3 l 1.0 w S
+0 0 0 RG
+0 0 0 rg
+1 0 0 1 100.0 617.484 Tm (Now) Tj
+0 0 0 rg
+1 0 0 1 127.336 617.484 Tm (what) Tj
+0 0 0 rg
+1 0 0 1 156.016 617.484 Tm (follows) Tj
+0 0 0 rg
+1 0 0 1 196.024 617.484 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 208.024 617.484 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 218.032 617.484 Tm (display-rule) Tj
+0 0 0 rg
+1 0 0 1 282.712 617.484 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 296.056 617.484 Tm (thickness) Tj
+0 0 0 rg
+1 0 0 1 349.408 617.484 Tm (5pt) Tj
+0 0 0 rg
+1 0 0 1 369.424 617.484 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 394.096 617.484 Tm (start-indent) Tj
+0 0 0 rg
+1 0 0 1 457.456 617.484 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 100.0 603.984 Tm (100pt) Tj
+0 0 0 rg
+1 0 0 1 133.36 603.984 Tm (\(same) Tj
+0 0 0 rg
+1 0 0 1 170.032 603.984 Tm (space-before/after) Tj
+0 0 0 rg
+1 0 0 1 270.748 603.984 Tm (as) Tj
+0 0 0 rg
+1 0 0 1 286.756 603.984 Tm (before\).) Tj
+0 0 0 RG
+200.0 588.3 m 476.0 588.3 l 5.0 w S
+0 0 0 RG
+/F1 24 Tf
+0.33333 0 0 rg
+1 0 0 1 100.0 545.068 Tm (C) Tj
+0.46666 0 0 rg
+1 0 0 1 117.328 545.068 Tm (o) Tj
+0.60000 0 0 rg
+1 0 0 1 130.672 545.068 Tm (l) Tj
+0.73333 0 0 rg
+1 0 0 1 136.0 545.068 Tm (o) Tj
+0.86666 0 0 rg
+1 0 0 1 149.344 545.068 Tm (u) Tj
+1 0 0 rg
+1 0 0 1 162.688 545.068 Tm (r) Tj
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 100.0 516.284 Tm (black) Tj
+0 0.5 0 rg
+1 0 0 1 100.0 502.784 Tm (green) Tj
+0.75 0.75 0.75 rg
+1 0 0 1 100.0 489.284 Tm (silver) Tj
+0 1 0 rg
+1 0 0 1 100.0 475.784 Tm (lime) Tj
+0.5 0.5 0.5 rg
+1 0 0 1 100.0 462.284 Tm (gray) Tj
+0.5 0.5 0 rg
+1 0 0 1 100.0 448.784 Tm (olive) Tj
+1 1 1 rg
+1 0 0 1 100.0 435.284 Tm (white) Tj
+1 1 0 rg
+1 0 0 1 100.0 421.784 Tm (yellow) Tj
+0.5 0 0 rg
+1 0 0 1 100.0 408.284 Tm (maroon) Tj
+0 0 0.5 rg
+1 0 0 1 100.0 394.784 Tm (navy) Tj
+1 0 0 rg
+1 0 0 1 100.0 381.284 Tm (red) Tj
+0 0 1 rg
+1 0 0 1 100.0 367.784 Tm (blue) Tj
+0.5 0 0.5 rg
+1 0 0 1 100.0 354.284 Tm (purple) Tj
+0 0.5 0.5 rg
+1 0 0 1 100.0 340.784 Tm (teal) Tj
+1 0 1 rg
+1 0 0 1 100.0 327.284 Tm (fuchsia) Tj
+0 1 1 rg
+1 0 0 1 100.0 313.784 Tm (aqua) Tj
+ET
+
+endstream
+endobj
+24 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 23 0 R
+>>
+endobj
+25 0 obj
+<< /Length 7 >>
+stream
+BT
+ET
+
+endstream
+endobj
+26 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 25 0 R
+>>
+endobj
+27 0 obj
+<< /Length 7051 >>
+stream
+BT
+/F1 24 Tf
+0 0 0 rg
+1 0 0 1 100.0 710.768 Tm (Wrap) Tj
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 100.0 669.984 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 126.004 669.984 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 138.004 669.984 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 148.012 669.984 Tm (rather) Tj
+0 0 0 rg
+1 0 0 1 182.692 669.984 Tm (long) Tj
+0 0 0 rg
+1 0 0 1 208.708 669.984 Tm (sentence) Tj
+0 0 0 rg
+1 0 0 1 260.74 669.984 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 284.092 669.984 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 296.092 669.984 Tm (going) Tj
+0 0 0 rg
+1 0 0 1 328.78 669.984 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 342.124 669.984 Tm (keep) Tj
+0 0 0 rg
+1 0 0 1 371.476 669.984 Tm (on) Tj
+0 0 0 rg
+1 0 0 1 388.156 669.984 Tm (going) Tj
+0 0 0 rg
+1 0 0 1 420.844 669.984 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 100.0 656.484 Tm (going,) Tj
+0 0 0 rg
+1 0 0 1 136.024 656.484 Tm (not) Tj
+0 0 0 rg
+1 0 0 1 156.04 656.484 Tm (really) Tj
+0 0 0 rg
+1 0 0 1 188.044 656.484 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 201.388 656.484 Tm (demonstrate) Tj
+0 0 0 rg
+1 0 0 1 271.42 656.484 Tm (anything) Tj
+0 0 0 rg
+1 0 0 1 320.116 656.484 Tm (other) Tj
+0 0 0 rg
+1 0 0 1 350.8 656.484 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 374.152 656.484 Tm (normal) Tj
+0 0 0 rg
+1 0 0 1 414.16 656.484 Tm (wrapping) Tj
+0 0 0 rg
+1 0 0 1 100.0 642.984 Tm (because) Tj
+0 0 0 rg
+1 0 0 1 148.696 642.984 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 168.712 642.984 Tm (following) Tj
+0 0 0 rg
+1 0 0 1 218.728 642.984 Tm (paragraph) Tj
+0 0 0 rg
+1 0 0 1 276.76 642.984 Tm (will) Tj
+0 0 0 rg
+1 0 0 1 296.752 642.984 Tm (show) Tj
+0 0 0 rg
+1 0 0 1 328.096 642.984 Tm (what) Tj
+0 0 0 rg
+1 0 0 1 356.776 642.984 Tm (happens) Tj
+0 0 0 rg
+1 0 0 1 406.144 642.984 Tm (when) Tj
+0 0 0 rg
+1 0 0 1 100.0 629.484 Tm (wrap-option) Tj
+0 0 0 rg
+1 0 0 1 166.024 629.484 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 178.024 629.484 Tm (set) Tj
+0 0 0 rg
+1 0 0 1 197.368 629.484 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 210.712 629.484 Tm (no-wrap.) Tj
+0 0 0 rg
+1 0 0 1 100.0 603.984 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 126.004 603.984 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 138.004 603.984 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 148.012 603.984 Tm (rather) Tj
+0 0 0 rg
+1 0 0 1 182.692 603.984 Tm (long) Tj
+0 0 0 rg
+1 0 0 1 208.708 603.984 Tm (sentence) Tj
+0 0 0 rg
+1 0 0 1 260.74 603.984 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 284.092 603.984 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 296.092 603.984 Tm (going) Tj
+0 0 0 rg
+1 0 0 1 328.78 603.984 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 342.124 603.984 Tm (keep) Tj
+0 0 0 rg
+1 0 0 1 371.476 603.984 Tm (on) Tj
+0 0 0 rg
+1 0 0 1 388.156 603.984 Tm (going) Tj
+0 0 0 rg
+1 0 0 1 420.844 603.984 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 444.196 603.984 Tm (going) Tj
+0 0 0 rg
+1 0 0 1 476.884 603.984 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 490.228 603.984 Tm (demonstrate) Tj
+0 0 0 rg
+1 0 0 1 560.26 603.984 Tm (what) Tj
+0 0 0 rg
+1 0 0 1 588.94 603.984 Tm (happens) Tj
+0 0 0 rg
+1 0 0 1 638.308 603.984 Tm (when) Tj
+0 0 0 rg
+1 0 0 1 670.324 603.984 Tm (wrap-option) Tj
+0 0 0 rg
+1 0 0 1 736.348 603.984 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 748.348 603.984 Tm (set) Tj
+0 0 0 rg
+1 0 0 1 767.692 603.984 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 781.036 603.984 Tm (no-wrap) Tj
+0 0 0 rg
+1 0 0 1 827.716 603.984 Tm (which) Tj
+0 0 0 rg
+1 0 0 1 861.724 603.984 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 873.724 603.984 Tm (unlike) Tj
+0 0 0 rg
+1 0 0 1 908.404 603.984 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 928.42 603.984 Tm (preceding) Tj
+0 0 0 rg
+1 0 0 1 984.448 603.984 Tm (sentence) Tj
+0 0 0 rg
+1 0 0 1 1036.48 603.984 Tm (where) Tj
+0 0 0 rg
+1 0 0 1 1072.492 603.984 Tm (it) Tj
+0 0 0 rg
+1 0 0 1 1081.828 603.984 Tm (defaults) Tj
+0 0 0 rg
+1 0 0 1 1127.188 603.984 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 1140.532 603.984 Tm (wrap.) Tj
+0 0 0 rg
+1 0 0 1 100.0 578.484 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 126.004 578.484 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 138.004 578.484 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 148.012 578.484 Tm (rather) Tj
+0 0 0 rg
+1 0 0 1 182.692 578.484 Tm (long) Tj
+0 0 0 rg
+1 0 0 1 208.708 578.484 Tm (sentence) Tj
+0 0 0 rg
+1 0 0 1 260.74 578.484 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 284.092 578.484 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 296.092 578.484 Tm (going) Tj
+0 0 0 rg
+1 0 0 1 328.78 578.484 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 342.124 578.484 Tm (keep) Tj
+0 0 0 rg
+1 0 0 1 371.476 578.484 Tm (on) Tj
+0 0 0 rg
+1 0 0 1 388.156 578.484 Tm (going) Tj
+0 0 0 rg
+1 0 0 1 420.844 578.484 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 100.0 564.984 Tm (going,) Tj
+0 0 0 rg
+1 0 0 1 136.024 564.984 Tm (not) Tj
+0 0 0 rg
+1 0 0 1 156.04 564.984 Tm (really) Tj
+0 0 0 rg
+1 0 0 1 188.044 564.984 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 201.388 564.984 Tm (demonstrate) Tj
+0 0 0 rg
+1 0 0 1 271.42 564.984 Tm (anything) Tj
+0 0 0 rg
+1 0 0 1 320.116 564.984 Tm (other) Tj
+0 0 0 rg
+1 0 0 1 350.8 564.984 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 374.152 564.984 Tm (normal) Tj
+0 0 0 rg
+1 0 0 1 414.16 564.984 Tm (wrapping) Tj
+0 0 0 rg
+1 0 0 1 100.0 551.484 Tm (but) Tj
+0 0 0 rg
+1 0 0 1 120.016 551.484 Tm (it) Tj
+0 0 0 rg
+1 0 0 1 129.352 551.484 Tm (differs) Tj
+0 0 0 rg
+1 0 0 1 165.364 551.484 Tm (from) Tj
+0 0 0 rg
+1 0 0 1 192.7 551.484 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 212.716 551.484 Tm (first) Tj
+0 0 0 rg
+1 0 0 1 235.384 551.484 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 248.728 551.484 Tm (these) Tj
+0 0 0 rg
+1 0 0 1 281.416 551.484 Tm (three) Tj
+0 0 0 rg
+1 0 0 1 312.1 551.484 Tm (sentences) Tj
+0 0 0 rg
+1 0 0 1 370.132 551.484 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 382.804 551.484 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 406.156 551.484 Tm (wrap) Tj
+0 0 0 rg
+1 0 0 1 435.496 551.484 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 447.496 551.484 Tm (set) Tj
+0 0 0 rg
+1 0 0 1 100.0 537.984 Tm (explicitly.) Tj
+/F1 24 Tf
+0 0 0 rg
+1 0 0 1 100.0 503.068 Tm (White) Tj
+0 0 0 rg
+1 0 0 1 168.016 503.068 Tm (Space) Tj
+0 0 0 rg
+1 0 0 1 242.728 503.068 Tm (Treatment) Tj
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 100.0 474.284 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 126.004 474.284 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 138.004 474.284 Tm (default!) Tj
+0 0 0 rg
+1 0 0 1 100.0 460.784 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 162.7 460.784 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 211.396 460.784 Tm (preserve!) Tj
+0 0 0 rg
+1 0 0 1 100.0 447.284 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 126.004 447.284 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 138.004 447.284 Tm (collapse!) Tj
+0 0 0 rg
+1 0 0 1 100.0 433.784 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 122.668 433.784 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 131.332 433.784 Tm (ignore!) Tj
+/F9 12 Tf
+0 0 0 rg
+1 0 0 1 107.2 385.856 Tm (<?xml) Tj
+0 0 0 rg
+1 0 0 1 150.4 385.856 Tm (version="1.0"?>) Tj
+0 0 0 rg
+1 0 0 1 107.2 362.192 Tm (<document>) Tj
+0 0 0 rg
+1 0 0 1 136.0 338.528 Tm (<heading>This) Tj
+0 0 0 rg
+1 0 0 1 236.8 338.528 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 258.4 338.528 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 272.8 338.528 Tm (heading</heading>) Tj
+0 0 0 rg
+1 0 0 1 136.0 314.864 Tm (<list>) Tj
+0 0 0 rg
+1 0 0 1 164.8 291.2 Tm (<item>Item) Tj
+0 0 0 rg
+1 0 0 1 244.0 291.2 Tm (one</item>) Tj
+0 0 0 rg
+1 0 0 1 164.8 267.536 Tm (<item>Item) Tj
+0 0 0 rg
+1 0 0 1 244.0 267.536 Tm (two</item>) Tj
+0 0 0 rg
+1 0 0 1 136.0 243.872 Tm (</list>) Tj
+0 0 0 rg
+1 0 0 1 107.2 220.208 Tm (</document>) Tj
+ET
+
+endstream
+endobj
+28 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 27 0 R
+>>
+endobj
+29 0 obj
+<< /Length 750 >>
+stream
+BT
+/F1 24 Tf
+0 0 0 rg
+1 0 0 1 100.0 710.768 Tm (Embedded) Tj
+0 0 0 rg
+1 0 0 1 222.736 710.768 Tm (SVG) Tj
+0 0 0 RG
+120.0 671.8 100.0 -100.0 re S
+0 0 0 RG
+0 0 0 RG
+120.0 671.8 m 220.0 571.8 l 0.0 w S
+0 0 0 RG
+0 0 0 RG
+220.0 671.8 m 120.0 571.8 l 0.0 w S
+0 0 0 RG
+1 0 0 1 120.0 541.8 Tm (Hello SVG!) Tj
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 100.0 481.984 Tm (The) Tj
+0 0 0 rg
+1 0 0 1 124.012 481.984 Tm (above) Tj
+0 0 0 rg
+1 0 0 1 160.036 481.984 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 172.036 481.984 Tm (an) Tj
+0 0 0 rg
+1 0 0 1 188.716 481.984 Tm (example) Tj
+0 0 0 rg
+1 0 0 1 237.4 481.984 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 250.744 481.984 Tm (an) Tj
+0 0 0 rg
+1 0 0 1 267.424 481.984 Tm (SVG) Tj
+0 0 0 rg
+1 0 0 1 296.104 481.984 Tm (graphic) Tj
+ET
+
+endstream
+endobj
+30 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 29 0 R
+>>
+endobj
+xref
+0 31
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000159 00000 n
+0000000221 00000 n
+0000000419 00000 n
+0000000530 00000 n
+0000000644 00000 n
+0000000749 00000 n
+0000000863 00000 n
+0000000971 00000 n
+0000001082 00000 n
+0000001192 00000 n
+0000001312 00000 n
+0000001425 00000 n
+0000001541 00000 n
+0000001649 00000 n
+0000001768 00000 n
+0000018725 00000 n
+0000018833 00000 n
+0000028480 00000 n
+0000028588 00000 n
+0000037439 00000 n
+0000037547 00000 n
+0000041223 00000 n
+0000041331 00000 n
+0000041387 00000 n
+0000041495 00000 n
+0000048598 00000 n
+0000048706 00000 n
+0000049507 00000 n
+trailer
+<<
+/Size 31
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+49615
+%%EOF
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 2
+/Kids [20 0 R 22 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] /XObject <</Im1 18 0 R
+/Im2 19 0 R
+ >>
+>>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 1456 >>
+stream
+BT
+/F7 18 Tf
+0 0 0 rg
+1 0 0 1 100.0 706.632 Tm (1.) Tj
+0 0 0 rg
+1 0 0 1 118.0 706.632 Tm (FOP) Tj
+0 0 0 rg
+1 0 0 1 158.5 706.632 Tm (test) Tj
+0 0 0 rg
+1 0 0 1 189.982 706.632 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 217.468 706.632 Tm (images) Tj
+/F7 16 Tf
+0 0 0 rg
+1 0 0 1 100.0 676.726 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 115.552 676.726 Tm (GIF) Tj
+0 0 0 rg
+1 0 0 1 148.0 676.726 Tm (image) Tj
+0 0 0 rg
+1 0 0 1 192.88 676.726 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 210.224 676.726 Tm (FOP) Tj
+ET
+q
+221.0 0 0 96.0 202.5 578.246 cm
+/Im1 Do
+Q
+BT
+0 0 0 rg
+1 0 0 1 100.0 550.23 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 115.552 550.23 Tm (JPEG) Tj
+0 0 0 rg
+1 0 0 1 160.448 550.23 Tm (image) Tj
+0 0 0 rg
+1 0 0 1 205.328 550.23 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 222.672 550.23 Tm (FOP) Tj
+ET
+q
+100.0 0 0 60.0 263.0 487.75 cm
+/Im2 Do
+Q
+BT
+/F5 12 Tf
+0 0 0 rg
+1 0 0 1 100.0 460.354 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 124.336 460.354 Tm (section) Tj
+0 0 0 rg
+1 0 0 1 161.332 460.354 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 172.336 460.354 Tm (only) Tj
+0 0 0 rg
+1 0 0 1 196.672 460.354 Tm (required) Tj
+0 0 0 rg
+1 0 0 1 239.656 460.354 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 251.992 460.354 Tm (show) Tj
+0 0 0 rg
+1 0 0 1 280.324 460.354 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 301.324 460.354 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 318.988 460.354 Tm (layout) Tj
+0 0 0 rg
+1 0 0 1 351.988 460.354 Tm (still) Tj
+0 0 0 rg
+1 0 0 1 373.0 460.354 Tm (works.) Tj
+/F5 10 Tf
+0 0 0 rg
+1 0 0 1 309.25 40.97 Tm (1) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<</Type /XObject
+/Subtype /Image
+/Name /Im1
+/Width 221
+/Height 96
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Filter /ASCIIHexDecode
+/Length 127297 >>
+stream
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a0021290084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a0084b50084b531393900425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400000000425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063845a636b00425a0084b5636b6b00425a0063840084b50021290084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063840000000000000021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425aadbdc600425a0063845a636b00425a00000031526300425a0084b50084b50084b50084b50084b50084b50084b500425a00425a00425a0084b50063840063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063840000000000000000000021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425aa5b5c629313100425a8494942931312931312931310063840084b50084b5006384002939005a73005a730000000084b500b5f7005a7b003139005a7b005a7b0031420063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063840021290000000000000000000021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a9cadb59cadbd00425a525a63525a637b8c94525a630063840084b50084b500526b00a5de00adde0029390084ad00b5ef0084b5005a7300b5ef00b5ef00b5f7008cb5000000005a7b005a7b005a7b08637b0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00000000000000000000000000000000425a0084b50084b50084b50084b50084b50084b50084b50084b50084b521292994a5b52129294a5a5a4a5a5a9cb5bd29313100425a0084b500425a009cce009cd600a5d600293900adde00ade700293900ade700ade700ade70084b5005a7b00b5f700b5f700bdf7008cbd000000005a7b005a7b005a7b00212900638400425a00425a00425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400212900000000000000000000000000000000425a0084b50084b50084b50084b50084b50084b500212900000063737b8c9cad2129294a525a94a5b54a5a5a00425a0084b500425a0894c60894c6004a63009cd600a5d600526b007ba500a5de00a5de007bad005a7300b5ef00b5ef00b5ef008cb5005a7300b5ef00b5f700b5f7008cbd003142085a7b108cbd18bdf718bdf71894bd10637b0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00000000000000000000000000000000000000425a0063840084b50084b50084b50084b500425a2129298494a563737b424a528c9cad4a525a00425a0084b500425a088cbd0894bd0029310894c600739c00739c009cce009cce00a5d600293900adde00ade700ade70084b500527300ade700ade700b5ef0084b5003142008cbd00bdf708bdff08bdff10bdff08637b003142005a7b005a7b085a7b0021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50021290000000000000000000000000000000000000021290063840084b50084b50084b5006384394a4a7b949c424a528494a5424a5200425a0084b50842520884ad0884b500425a088cbd004a630894bd0894c60894c6004a63007b9c00a5d600a5de00a5de00527300a5de00adde00ade7005a73005a7b00b5f700b5f700b5f700bdf7008cbd005a7b008cb500b5f700bdf700bdf7008cbd003142003142005a7b00212900425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400000000000000000000000000000000000000000000000000425a0084b50084b50063841821211821215a6b73394a5200425a0084b508394a087b9c0842520884ad08638400425a088cb5088cb5006b8c004a63009cce009cce009cce007ba500739c009cd600a5d600526b005a7300ade700b5ef00b5ef00b5ef008cb500293900b5ef00b5ef00b5ef00b5f7008cb500313900bdf700bdf700bdf700bdf708bdff00314200425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00000000000000000000000000000000000000000000000000425a00638400638418212118212139424a00425a0084b508394a08739408394a087b9c083952087ba5087ba50884ad002129088cbd0894bd0894c60894c6004a630894c60894c600739c007ba500a5de00adde00ade700ade70084b5007bad00ade700ade700ade700ade70084b5005a7b00b5ef00b5f700b5f700b5f700b5f700314210637b10637b1894bd10637b18637b00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00000000000000000000000000000000000000000000000000212900212900000018425200425a0084b508314208638408394a086b9408394a08739408739c085a730842520884ad0884b5088cb5088cbd00425a088cb5088cbd002931009cce009cd600a5d600a5de007ba500526b00a5d600a5de00a5de00adde0084ad005a7300ade700ade700b5ef00b5ef0084b5005a7b088cbd10bdff18bdf718bdf710637b000000005a7b005a7b085a7b0021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00000000000000000000000000000000000000000000000000000000212900425a0084b5083142086384083142086384083142086b84086b8c08394a085a73087ba5087ba50884ad00425a0884a50884ad00425a0894c60894c60894c6009cce009cce004a630894c6009cce009cce009cd600a5d600293900a5de00a5de00adde00ade70084ad005a7b00bdf700bdf700bdf7088cbd00314200b5f700b5f700bdf700bdf7008cbd00314218637b18637b18637b0021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a002129000000000000000000000000000000000000000000000000002129001821083142086384083142084a63086384086384083142086b8c087394087394087b9c08394a08739c087b9c00425a088cb5088cbd0894bd0894c6004a63088cbd0894bd0894c60894c60894c600739c00739c009cd600a5d600a5d6007ba500293900b5ef00b5f700b5f7008cbd005a730084b500b5ef00b5ef00b5f7005a7b08637b18bdf721c6f71894bd083142005a7b005a7b085a7b0021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b5006384002129000000000000000000000000000000000000000000000000000000001821001821086384086384086384083142086384086384086b8c08526b083942086b8c08526b085a7b0884ad0884ad0884b5088cb50042520884ad0884b5088cb5088cbd088cbd004a630894c60894c6009cce009cce00526b0084ad00ade700b5ef00b5ef005a7300ade700ade700ade700ade7005a7b008cbd08bdff10bdff108cbd005a7b00b5f700bdf700bdf700bdf7005a7b00314200212900425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00425a00425a00425a00425a00425a00425a00425a00425a000000000000000000000000000000000000000000000000000000000000000000083142084a63083142086384086384086384001821084a6308638408314208739408739c087b9c087ba5084252087b9c087b9c087ba50884ad0884ad0884b500425a088cb5088cbd0894bd086b94007ba500a5de00ade700ade7005273007ba500a5d600a5de00a5de005a73008cbd00bdf700bdf7008cbd005a7300b5ef00b5f700b5f7005a7b08314210637b29c6ff31c6f731c6f710313900000000212900425a00425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a212129394a4a21212939424a39424a18212100000000000018212100000000425a000000000000000000000000000000000000000000000000000000000000083142084a63086384083142086384086384001821086b84086b8c087394087394083942086b8c087394087394087b9c087b9c0842520884a50884ad0884ad0884b500526b009cd600a5d600a5d6007ba5004a63009cce009cce009cd60052730084b500b5ef00b5f7008cbd00527300ade700ade70084b500293910bdff18bdf718bdf71894bd083142005a7b008cbd00bdf700bdf708bdff08bdff00314200000000212900425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063840021294a525a6b7b84849ca5424a5200000000000039424a18212118212100425a0084b500182108526b000000000000000000000000000000000000000000000000000000000000000000001821084a63086384083142086384086384086384083142086384086384086384086b84086b8c08739408394a08739c087b9c087ba50842520894c60894c6009cce009cce0029310894bd0894bd0894c600293100ade700ade700ade700b5ef00527300a5de00a5de007bad005a7b00bdf700bdf708bdff08637b005a7300b5ef00b5f700b5f700b5f7005a7b00314218637b2994bd39c6f721637b10313908637b08637b08637b10637b10637b10637b00212900425a0084b50084b50084b50084b50063840063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a2931319cb5bd4a5a5a4a525a000000000000212929849ca52129295a6b7b1842520084b500425a086384084252087b9c107394085263001821000000000000000000000000000000000000000000000000000000001821001821084a63086384086384083142086384086384086384086384086384083142084a63086b8c086b9408739400425a088cb5088cbd0894bd004a630884ad0884b5088cb5006b8c00526b00a5de00a5de00ade7005a73009cce009cce007b9c005a7300b5f700b5f700b5f7005a7b00293900ade700ade700b5ef0084b5003142108cbd21c6f721c6f7083142003142008cbd00bdf700bdf708bdff08bdff108cbd08637b00000010637b10637b10637b08314200000018637b18637b18637b10313900425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063845a636329313100425a00212929313100000073848c9cadb52129296b7b844a525a0063840084b50029310894c6004a63088cb50884ad084252085a73107394085263001821000000000000000000000000000000000000000000000000000000000000083142001821086384086384086384086384086384001821086384086384086384083142085a7b0884ad0884ad088cb508394a087b9c087ba50884a5004a63009cce009cce00a5d6007ba5004a630894c60894c600293900ade700b5ef00b5ef003139007ba500a5de00a5de00adde005a73005a7b08bdff08bdff108cbd0029390084b500b5f700b5f700b5f700b5f7008cbd005a7b005a7b08bdff08bdff10bdff18bdf7083142108cbd21c6f721c6f721c6f729c6ff18637b18637b00212900425a00425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500000000212900425a0021298c949c293131adbdc6adbdc6525a63525a5a9cb5bd0021290084b500638400526b00a5d600526b009cce0894c6004a63088cb50884ad087ba508394a086b8c085263083142000000000000000000000000000000000000000000000000000000000000000000083142084a63083142083142086384086384086384001821087394087b9c087ba508425208526b08739408739408394a006b8c0894c60894c6009cce004a630884b5088cb5004a63007ba500adde00ade70084ad004a63009cce009cd600a5d6005a73008cb500b5f700bdf7008cbd0029390084ad00ade700b5ef00b5ef0084b5003139005a7b00b5f700b5f700bdf700bdf7008cbd00314208bdff10bdff18bdf7108cbd083142005a7b008cbd00bdf708bdff10bdff10637b00000008314218637b10313900425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a002129006384000000636b6b3131398c9c9c8c949c293131002129adbdc6525a630063840084b500425a00ade700ade700527300a5de00a5d600526b009cce0894c6088cbd00425a0884ad087ba510739408394a08526b08394a000000000000000000000000000000000000000000000000000000000000000000083142083142086384083142084a63086b8c086b8c08739408394a086384086384086b840021290884b5088cb5088cbd086b94085a7b087ba508638400526b009cd600a5d600a5de004a630894bd0894c60894c600739c0084b500b5ef00b5f700b5f7005a73007ba500adde00ade700ade7005a73005a7300b5ef00b5ef00b5ef00b5f700b5f7008cbd005a7b00bdf700bdf700bdf700314200293900b5ef00b5ef00b5f700b5f7005a7b005a7b088cbd18bdf721c6f729c6ff31c6f721637b10313900212900425a00425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b5636b6b949ca50021290084b500425abdced60021290084b50084b5005a7b00b5f700b5ef005a7300ade700ade700527300a5de00a5d600526b009cce0894c6088cbd088cb508394a107394107394083142106384083142001821000000000000000000000000000000000000000000000000000000000000000000083142083142084a63084a63084a63086384086384083142085a73087ba50884ad0884ad0839520873940873940021290894c60894c6009cce00526b086384088cb5088cb5006b8c00527300ade700ade700b5ef00527300739c009cd600a5d600a5d600293900a5de00adde00ade700ade700ade700b5ef005a7b005a7b00b5ef00b5f7008cb500314200a5de00adde00ade700b5ef0084b5003139008cbd00bdf708bdff10bdff10637b08314210637b2194bd31c6f731c6f739c6f721637b00000000000000425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b5006384636b733139390084b50084b500425a949ca500425a0084b50084b5005a7b00b5f700b5f7005a7b00b5ef00b5ef00000000ade700ade700527300a5de00a5d6009cce0894c6084252107ba5107ba5001821106384106384083142106384084a63001821000000000000000000000000000000000000000000000000000000000000000000000000001821083142083142001821087394087394087b9c085a7b084a63086384085263086384088cbd0894bd0894c6083952087ba5087ba50884ad004a6300a5d600a5de00adde0084ad086b940894c60894c6009cce002931009cd600a5d600a5d600a5de00a5de00adde00293900ade700ade700ade70084b5004a6300739c009cd600a5d600adde005a73005a7300b5ef00b5f700b5f7008cbd003142108cbd18bdf718bdf721bdf721c6f718637b002131086b94009cce009cd600a5d600527300000010313921637b0021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50000000063840084b50084b500425a636b730084b50084b50084b5005a7b00bdf700bdf7005a7b00b5f700b5f7005a7b00b5ef00b5ef005a7300ade700ade700adde00a5de08425a1084ad1084ad002129106384084a63084a63106384106384083142106384084a6308314200000000000000000000000000000000000000000000000000000000000000000000000000000000000008394a08394a00182108638408638408394a0884a50884ad0884b500425a08526b08739408739c085a73004a63009cce009cd600a5d6002129088cb5088cbd088cbd0029310894c60894c6009cce009cce009cce009cd600526b00a5de00a5de00adde0084ad00425a0894bd0894c6009cce009cd600526b007ba500ade700ade700b5ef005a7b00314200bdf708bdff08bdff10bdff108cbd00212908637b0884b5088cb50894bd0894c600526b18637b31c6f739c6f73194bd103139005a7b005a7b005a7b0021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a0084b50084b50084b50063843139390084b50084b50084b500212900bdf700bdf7005a7b00bdf700bdf7005a7b00b5f700b5f7005a7b0084b500b5ef00b5ef00ade70021311894bd1894bd08425a106384083142106384106384106384083142083142106384106384106384106384001821083142000000000000000000000000000000000000000000000000000000000000000000000000000000000000001821002129085a73087b9c087ba508394a086384086b84086b8c08394a0894bd0894c60894c6004a63087ba50884a50884ad00425a088cb5088cb5088cbd0894bd0894c6007394004a6300739c009cce009cd600526b0839520884ad088cb5088cbd0894c6004a6300739c00a5d600a5de00ade7002939008cb500b5f700b5f700bdf700bdf7008cbd08394a087394087b9c087ba50884ad088cb50021311894bd21c6f729c6ff08314200526b00ade700ade700b5ef00b5f700b5f7005a7b0021290084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50063840084b50084b50084b5006384003142088cbd005a7b00bdf700bdf7005a7b00bdf700bdf700b5f7005a7b00b5f700b5f700b5ef003139109cc6109cc6084a63106384083142084a63106384106384106384083142106384106384106384106384083142106384106384106384001821001821000000000000000000000000000000000000000000000000000000000000000000000000000000000000002129001821083142084a63086384002129088cb5088cb5088cbd08394a08739408739c085a7b085a7b0884a50884ad0884ad0884b5006b8c00425a006b8c0894c60894c600293108394a08739c087ba50884ad086384002131086b94009cce009cce00a5d60052730084ad00b5ef00b5ef00b5ef00b5f7008cb5083142086384086384086b8c087394085a7b00212910bdff18bdf7108cbd002931009cce00a5d600a5de00adde00ade700b5ef00b5ef008cb5005a7b00212900425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a08314218bdf710bdff08637b00bdf700bdf700bdf7005a7b00bdf700b5f700b5f7005a7b18a5d618a5d608526b087ba5085a7b08394a107394086b8c086b8c08394a107394107394086b8c086b8c083942106384106384106384083142106384106384084a6300182100182100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008425200425a002131086384086b84086b8c08394a08739408739c087b9c087ba508637b0842520884ad0884b5088cb5083952084a63086b84086b8c087394085a7b0842520884b5088cbd0894c60894c6004a63007ba500ade700ade700ade700ade70084b508314208638408638408638408638408526b00314200bdf700bdf7008cbd00425a0894bd0894c6009cce009cd600a5d600527300293910637b18637b31c6f731c6f72994bd18637b10313900425a00425a00425a00425a00425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638410637b21c6f718bdf708637b10bdff08bdff00314200bdf700bdf700bdf7005a7b18b5e718ade7085a730894c60894c6004a63088cbd088cb50884ad084252087ba5087ba5087ba5087b9c083952083942106384106384083142107394107394086b8c001821107394107394086b8c001821083142000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083142001821083942086b8c086b9408394a08394a087b9c087ba508637b08394a084a6308638408638408638408526b08394a087b9c0884ad0884b5088cbd00213100739c00a5d600a5d600a5de00a5de0084ad083142086384086384086384086384084a63005a7b00b5f700b5f7008cbd0842520884ad0884b5088cbd0894c6007394000000108cbd18bdf718bdf721c6f721c6f729c6ff2194bd18637b003142005a7b088cbd18bdf721c6f729c6ff08314200212900212929637b29637b296b7b0021290084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500212918637b31c6f708314221c6f718bdf708637b10bdff08bdff00bdf7005a7b21bdf718bdf7105a7b00adde00a5de00293100a5d6009cd6009cce002931088cb5088cb50884b50884b50884ad08425a0884ad087ba5083952087ba5087ba5087ba5083952088cb5088cb50884b508314210638410638410638400000008314200182100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182108394a08394a08394a001821086384086384086384086384001821083142086b8c087394087b9c08637b00425a0073940894c6009cce009cce009cd6007ba5084a63086384086384086384086384084a63005a7300b5ef00b5ef00b5ef000000087394087b9c087ba50884ad00213100314200bdf708bdff08bdff10bdff18bdf718bdf70831420029390084b500b5f700bdf700bdf708bdff10637b0831423194bd42cef742cef74acef74acef752cef7429cb500212900425a00425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a0021292194bd31c6f729c6ff08314218bdf718bdf708637b21bdf721bdf710637b00b5ef00b5ef005a7300ade700ade700ade70052730894c60894c60894c60894bd0894bd004a63009cce0894c60894c600425a088cb5088cb500425a009cce009cce009cce001821086b8c086b8c086b8c083942106384106384002129087b9c085a7308394a002129000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001821083142083142086b8c087394002129088cb5088cbd0894bd0894c60894c6007394084252086384086384086384086384084a6300526b00adde00ade700ade7002939086384086b84086b9408739c00212900b5f700b5f700b5f700bdf700bdf700bdf7088cbd00293900ade700ade700b5ef00b5ef00b5f7008cbd00000010637b31c6f731c6f731c6f739c6f739c6f721637b103139296b7b5acef7296b7b296b7b10313900000000425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500212942cef739c6f718637b2194bd29c6ff21c6f718637b31c6f718637b00b5f700b5f7008cbd005a7b00b5f700b5ef0084b500739c009cce009cce009cce009cce005a7300ade700a5de00a5de004a630894c60894c6086b9400527300ade700adde0029390884a5087ba5087ba5084252085a73087b9c0839520884ad0884ad0884ad0842520884a5087ba5085a7b00182108314208314200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425a00425a004a5a002131084a63086384086384086384084a63002931009cd600a5d600a5de00293908638408638408638408638400182100b5ef00b5ef00b5ef00b5f700b5f700b5f7003142004a63009cd600a5de00adde00ade70084b5003139108cbd18bdf718bdf721c6f721c6f729c6ff18637b103139429cb5429cb5103139296b7b429cb55acef75acef7296b7b296b7b10313900425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a00425a00425a00212939c6f731c6f708314239c6f72994b5005a7b00bdf700bdf700314200bdf700bdf700b5f700526b00a5de00a5de00a5d600a5d6005a7b00b5ef00b5ef00b5ef00526b009cce009cce009cce005a7b00b5ef00b5ef0084b5004a630894bd088cbd088cbd00425a088cb500425a0894bd088cbd088cbd00425a088cb5088cb5088cb508394a086b8c10638408394a0884ad0884ad08637b001821083142083142001821000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002931004a63004a6300526b002931083142086384086384086384083142007bad00ade700ade700ade700b5ef00b5ef003139088cbd0894c6009cce009cce00a5d6002939005a7b00bdf708bdff08bdff10bdff18bdf710637b29637b429cb55acef7103139296b7b5acef75acef75acef7296b7b103139429cb55acef75acef75acef7296b7b0021290084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500212921637b3194bd21637b42cef700314210bdff08bdff005a7b008cbd00bdf700bdf7005a7b0084ad00ade700ade700adde00314200b5f700b5f700b5f7005a7b00a5de00a5de00a5d6005a7300b5f700b5f700b5f7002931009cce009cce009cce004a63009cce009cce004a630894c60894c6087394004a630894c60894c600425a0884b50884ad086384086b8c088cbd088cb500425a086b8c106384106384084a630842520884ad08638408425a00000008314208314200182100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000526b00527300527300527300ade7004a6308637b0884ad088cb50894bd004a63003139008cb500b5f700b5f700bdf700bdf7008cbd00314229637b5acef729637b103139429cb55acef75acef7429cb5103139429cb55acef75acef729637b103139296b7b296b7b10313900212900425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a00425a1031391031392194bd21c6f721c6f710637b18bdf718bdf718bdf700293900ade700ade700ade7005a7300bdf700bdf700bdf7005a7b00ade700ade700ade700527300bdf700bdf700bdf7005a7b00adde00a5de00a5de00527300a5de00a5de00526b00a5d600a5d6009cd600526b009cce009cce00526b00739c009cce0894c6004a630894c60894c60894c60021290884ad087ba5087b9c085a7300425a088cbd088cbd004a5a083142106384106384084a6300212908637b0884ad086384000000083142083142083142083142000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002129002131000000005a73005a7b00b5ef00b5f7005a7b18637b29637b5acef75acef7103139429cb55acef75acef75acef710313929637b5acef75acef7429cb5103139429cb55acef75acef75acef75acef75acef71031390000000063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a0021293194bd39c6f72994bd18637b31c6f731c6f718637b00b5ef00b5ef00b5ef005a7318bdf718bdf710bdff08bdff00293900ade700ade700ade7085a7b08bdff08bdff088cbd0084ad00ade700ade70084ad005a7300ade7005a7300adde00a5de00a5de00293900a5de00a5de00a5de005a7300ade700adde007ba500526b009cd6009cd600526b009cce0894c60894c60894bd086b8c0873940894c60894c608739408394a10739c107394086b8c08394a088cbd088cbd006b8c083142086384086384086384086384084a630863840884ad0884ad0884ad08638400000008314208314200182100212900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010313929637b00000010313929637b5acef7429cb5103139429cb55acef75acef7429cb51031395acef75acef75acef75acef729637b10313929637b429cb5429cb529637b0021290084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400212929637b10313921637b42cef742cef7103139008cb500b5f700b5f718637b31c6f729c6ff21c6f710637b0084b500b5ef00b5ef00313921c6f721c6f721bdf708314200b5f700b5ef00b5ef005a7b00b5ef00b5ef005a7300ade700ade70084ad0084ad00ade700ade700527300b5ef00b5ef00b5ef00313900a5de00a5de00a5de00293900adde00a5de00a5de00a5d6007ba500526b009cd6009cce00739c086b8c088cbd088cb5086384004a63009cce009cce00739c0831420863840863840863840863840018210894bd0894bd0894bd0894c6086b940831420863840863840831420884b5088cb5088cb500182108638408638408638408314200000000425a00425a00425a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029637b29637b00000029637b5acef75acef7429cb5103139429cb55acef7429cb510313929637b29637b29637b1031390084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b5006384103139429cb55acef718637b008cbd00b5f7005a7b42cef742cef739c6f739c6f700313900b5f700b5f7008cb518637b39c6f731c6f72994bd005a7b00b5f700b5f7005a7b008cbd00b5f7008cb5005a7300b5ef00b5ef005a7300ade700ade700ade700293900b5f700b5f7008cbd005a7300ade700ade70084ad005a7b00b5ef00b5ef00ade700ade70084ad00527300a5de00a5de007ba500526b009cd6009cce00739c00526b00a5d600a5d6007ba5083142086b84086b84086b8c086b8c00425a009cce009cce009cce009cce007b9c08394a08739408739400425a0894c60894c600739408394a08739408739408739c085a73004a5a0894bd0894c6086b9400425a085a73087b9c087b9c08425229637b5acef7429cb510313910313929637b29637b10313900000000000000000000000000000000000000000000000000000010313929637b1031391031395acef75acef729637b29637b1031390063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a103139296b7b000000005a7b00bdf7003142429cb55acef752cef729637b008cbd00b5f700b5f7003142319cbd4acef74acef721637b008cbd00bdf700bdf700314200bdf700bdf700314200b5f700b5ef0084b5005a7b00b5ef00b5ef0084b5005a7b00bdf700bdf7005a7b0084b500b5ef00ade70084ad005a7b00b5f700b5f700b5f700b5ef0084b500527300ade700ade700527300ade700ade700ade7007bad00527300ade700ade70084ad08394a087b9c087b9c087b9c085a7b00526b00a5de00a5de00adde00adde002939087ba50884a508637b00526b00a5d600a5d600526b0842520884ad0884ad0884ad08638400526b00a5d600a5d600a5d6002939088cb5088cb5088cb5006b8c18526b429cb55acef7103139429cb55acef75acef729637b1031395acef75acef71031395acef729637b29637b103139103139296b7b000000000000000000000000103139296b7b296b7b00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a00425a00425a296b7b296b7b5acef718637b005a7b00bdf700bdf718637b429cb55acef75acef718637b00bdf700bdf7008cbd008cbd00bdf700bdf700314200b5f700b5f7008cb5005a7b00b5f700b5f7008cb508637b08bdff08bdff005a7b0084b500b5ef00b5ef0084b5005a7b00bdf700bdf700bdf700b5f7008cbd005a7300ade700ade700293900b5ef00b5ef00b5ef0084b5005a7300b5ef00b5ef005a7b086384088cb5088cb5088cb5006b8c0084ad00b5ef00b5ef00b5ef00b5ef003139088cbd088cbd006b8c0084ad00ade700ade70029390894bd0894bd0894c60894c6086b9400293900ade700ade700ade7005a730029310894c60894c60894c6004a63296b7b5acef71031395acef75acef75acef7429cb51031395acef7429cb51031395acef75acef75acef7103139429cb5429cb5000000429cb5429cb510313929637b429cb500425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a00425a00425a002129005a7b005a7b000000296b7b5acef7429cb500314210bdff10bdff003142088cbd08bdff08bdff003142008cbd00b5f7008cbd005a7b00b5f700b5f7008cbd10637b21c6f721c6f7085a7b008cb500b5f700b5f7008cb500314208bdff00bdf700bdf700bdf70031420084b500b5ef00b5ef00313900b5f700b5f700b5f7008cbd005a7b00b5f700b5f70052730073940894c60894c60894c6004a6300b5f700b5f700b5f700b5f700b5f7003142009cce009cce0052730084b500b5ef00b5ef005a7b002931009cd6009cd6009cd6007ba5005a7b0084b500b5f700b5f7008cbd00526b007ba500a5d600a5de007ba50029395acef7296b7b1031395acef75acef7429cb5296b7b5acef7429cb5103139429cb55acef75acef71031391031395acef7296b7b103139429cb5429cb50000000063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a002129296b7b00000010637b21c6f710637b10637b18bdf718bdf708637b005a7b00bdf7008cbd00314200bdf700bdf7008cbd1031392994bd31c6f710637b008cbd00b5f700b5f700b5f700313918bdf718bdf718bdf710bdff085a7b005a7b00b5f700b5f700313900bdf700bdf700bdf7008cbd00314208bdff08bdff005a7300526b00a5d600a5d600a5d600293900bdf700bdf700bdf708bdff088cbd00527300a5de00a5de005a73008cbd00bdf700bdf7008cbd005273007bad00ade700ade700ade700293908bdff08bdff08bdff08bdff005a730084ad00ade700ade700ade7005a73103139429cb5296b7b429cb55acef7429cb5000000429cb55acef710313929637b429cb55acef7429cb529637b103139296b7b0000000021290063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a00212900212900425a00425a00425a00425a00425a003142003142000000005a7b00bdf700bdf7005a7b1031393194bd29637b005a7b00bdf700bdf700bdf7005a7b0831422194bd29c6ff21c6f7083142008cbd00b5f700b5f7005a7b00314208bdff08bdff08bdff00314218bdf718bdf7108cbd00527300ade700ade700ade700293908637b18bdf718bdf718bdf71894bd00293900b5ef00b5ef005a7b088cbd10bdff10bdff10bdff083142005a7300b5ef00b5ef00b5ef005a7b0831421894bd21c6f721c6f710637b005a7b0084b500b5f700b5f7008cb5003139429cb5103139296b7b5acef75acef7103139296b7b5acef75acef7296b7b296b7b10313900425a00425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a002129005a7b005a7b000000000000103139000000003142005a7b00bdf700bdf7005a7b1031393194bd39c6f721637b005a7b00bdf700bdf7008cbd10637b1894bd21bdf718bdf70831421894bd29c6ff2194bd085a7b0084b500b5f700b5f7008cb508314229c6ff31c6f731c6f72194bd005a7b008cb500b5f708637b1894bd21c6f721c6f721c6f72194bd18637b003139005a7b005a7b005a7b00000008314218637b2994bd2994bd103139005a7b00bdf700bdf700bdf7005a7b103139296b7b296b7b103139296b7b296b7b00000000000010313900425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500638400425a00425a00425a00425a00425a00212929637b103139003142008cbd00bdf700bdf7005a7b08314218637b31c6f72194bd10313939c6f739c6f721637b003142005a7b008cbd00bdf700314210313921637b42cef742cef7103139005a7b08bdff08637b0831422994bd39c6f739c6f739c6f718637b08526b0063840084b50084b50084b50084b500425a00425a00425a00425a00425a00314208637b08637b08526b00425a00425a00425a00425a00425a0084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a005a7b005a7b005a7b00526b00425a00425a00425a00425a00425a10313921637b21637b00212900425a00425a00425a00425a00425a00425a00425a00425a00638400425a00425a00638400425a00425a00425a00425a0063840084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a5252520000000084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b50084b500425a52525200000000425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a00425a002129525252>
+endstream
+endobj
+19 0 obj
+<</Type /XObject
+/Subtype /Image
+/Name /Im2
+/Width 100
+/Height 60
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/Filter /ASCIIHexDecode
+/Length 36001 >>
+stream
+0f00000d00000800000400000202020204030102040200030900030d00011200001400001700001701001401001400001500001300000d00000800000300000100000400030500030700020800020c00010b00000900000700000300000001000203000103000300000600000900000c00020b00050800040800060300040300020100000701010901000900000800000a010009020006000405000804000f02000f02000c02010700010000020000020001020001010101000800001200001001000401000200000900001000001a00001d00001f00001c00001900011200010a00020501010001020003020002020200011000001500001500001400001100000b00000700000002010002020001000001000001000401000b00001000000c0000000001000001000001000b00000a00000700000400000501000602010802020c00021500021b00002200002600002801002802002602002500002401002100001b00001600001000000e00000f00001100021100011400001500001600001300000f00000b00000a01000a03000a01000900000b00000c00000c00010a0002070002070206030305000302010600040902090b00080800060700070a0005090004060103040802000d02000d02000b02010600010000020001010000010000000001000801001301001401000f01001201001900002100002800002c00002e00002a00002600001f00011800011200010e02020e03010c03021200001c00002100002100001f00001b00001400000e00000701010300010001000001000001000401000700000c01000c0000000001000001000001000400000300000300000500000901000f01001800002200002e00003800004100014701014902004902004703004401004201003d00003600003000002a00002600002600002600002600002800002900002700002500002201001e01001d02001e02001d01001b0000190000140001100002090001050001000501000600000a00000f00001400001700031700011900011d00001b00001701001006000c0c00070a01050802040301010001010003010001010001000001000801001301001d01002701003102003801004000004500004900004900004700004000003b00003300003000002e00002c02012d00013100003600003900003800003300002f00002600001e00001400000d0000050000020000000000020000040000050100050000000001000001000001000002000002000203000801001100001d00002f00003e00004f00005c00006800017002037404037205026f03006a03006802006301025b00005300004c00004600004400004400004300004400004400004400004100003d01003903003702003a02013901043300042a00022000021700010c0000050601000b00001100001700001f00002800002d00003100003400003700003500002d00002505001b09001209000b0501060002020003010003000003000001000401000d02001802002a01004601005703005e02006503006b02006d00006c00016800006100015c00005700005300005200005202005402005400015800015800005600005000004a00003f00003500002900001d00001300000b0000040000020000000000000000000001000001000001000001000005020005010304000c01001c00003000004900006000007800018600009500019e0205a004079f05059a04039605029303038d03038602007c00007300007000006c00006c00006800006900006900006800006401006002005d03005c01005d00025a00075000074100032f00001e0000100500040f00001a00002500003100003d00004800005100005700005b00005a00005600004b00003e02002e04001e02001100000a0003050005030004000004000003000903001605012402003f02006a00008302008a03019004019602029600029500029100018900028400017f00007e00007e00007f02008201008201008200017f00007a01007500006a00006000005200014400003500002700001900000d0000040001000001000001000001000000000000000000000005050006040605011502002a00004400006401008101009f0402af0001bd0004c40105c70506c60506c20605be0606bb0504b40404ac0401a503009c03009602009403009303028f00009000009100009000008d02008a03008704008703008300047f00097100085a00034000002a0400170f00081b00002b00003b00004d00005f02006c01007600007d00008300008300007c00006e00005b01004403002f00001d00001200030a0005050005000004000702001405002506023405015602008c0000aa0300b10403b70503bc0303bd0103ba0003b50001ae0003a90001a40001a40001a40100a80200ab0200ab0200a90201a50301a202019a02008f00018000017200016500015200014100013100001e00000d0000020002000002000001000000000000000000000004070004060a05021e01003700005700007e01009f0200c00704d10100de0000e50102e70205e40405e10505de0705dd0604d70602cf0501c70400bf0400bb0400ba0401b80403b70100b90103ba0001ba0202b90300b50300b30400b20202ae0006a8000c96000b7a03055907003c0f00231f00112f0004430000580000700300860500960600a10400a90200ae0100af0200a702009605007f0500640500480000320002210001100005080004020702001103002506003708024a05016f0100ab0000cc0300d30403da0404de0205de0003da0004d60003d00003cb0003c70002c60001c80201cb0200cf0301d10301d00301ce0301c60201be0100b30100a400009601018700007401025f00014b00013200001e00000c0002000002000000000000020000020000020003070003061103032500004100006500008e0100b10200d70705e70200f10000f70000f70201f70303f40403f40604f20401ee0500e70400de0300d80300d40300d30300d30301d50002d60002d80003db0004d90102d70101d50100d50004d20009c9000db3060a910b02691100471d002b31001443000c610003790004930505ab0b04bd0a01c80902d10702d60703d30504ca0501b607009d06007e05006000004600023401001600000e0000050b00001b00003104004807025e0401840000c10000e10200e90303ef0304f40205f40003f00003ed0003e70004e30002e00002df0001e00001e20200e70200e90200e90300e70300e30100da0200d00000c30000b40000a500009300007e00006500004a00002f0000180001070001000000020000040000040000020000070601071600032e00004c00007100009d0500bf0601e10705f10301fa0300fd0200fc0100f90000fb0200fb0400f80100f60200f30200ed0300e90400e80500e60503e90506e80002eb0003ef0004f20005f20005ef0004ee0001ed0003ed000ae1040dc90d0ba31602752000513200354b002064001482000c9b030db80a0cce0e06da0b01e30500ea0100ed0101eb0008e60709d60d06bb0a039d09007d05005d00004500003000001c04000c0e00032200003c00005505006d0602970100cf0000ef0101f50102fa0002fb0001fa0003f90003f90003f70003f50002f10003ef0002ef0000f00000f30000f50000f40100f40100f20200f00200e70202de0404d60606ca0100b401019f02008502016901014900012e00001900000b0000070000050000050000040100070a00071b00033000004c00007200009b0300be0502df0806f10301fa0300fe0100fd0000fd0000fe0100ff0200fd0000fc0100f90000f40100f00300ee0500ee0403f00406f20003f50006f90007fc0008fc0008fb0005fa0004f70003f50008e80809ca1406a11f00742e004f45003362001e7c00189e000eb6010ece070be00804eb0500f20000f70000f90000f80004f10105e30602ca0500b005009603007600005d00004400002f0500190f000c2400034100005c0400780703a20000d20000f00102fa0102fd0001fe0001fd0001fd0002fe0002fe0003fc0002f80001f60001f40001f40000f80000fa0000fa0000fc0100fb0100fa0100f40101ef0102e80303df0200d00201be0301a402008500006200004300002b00001900000f0000070000070000050600050c00041a00012e00004900006a0000920402b20403d50908e80403f60201fe0200fe0100fe0100ff0200ff0300fe0100fd0200f90200f40300ef0500ee0701ec0704ef0707ee0206f20108f70009f90009fa0009fa0008f80007f30006ef0609dd1106c01f02982f006c44004b5f003281001e9b001cbf0212d20311e5070bf20604f80200fc0000ff0000ff0001ff0004f80202ea0200d60201c40404b006019501007b00006100004705002d0f001922000a3f00035c0203790804a10102ce0002ea0104f30204f90002fd0001fd0001fd0002fe0001fd0001fb0002f90003f50002f30003f20102f20101f50200fb0400fc0200fb0200f90101f70101f50101f50202f00301e80502d90402bf0301a002007d00005c00004000002900001401000c0000090000070600020c00001800012700004000005d0000810304a20405c5090ada0507ec0306f70303fc0301fd0100ff0200ff0200fe0300fb0200f60300ef0500e90600e50702e40907e40808e20306e50209e80109ea0009ea0009ea0009e80109e20306d90d06c61a02a82b008440005d5c00407d002b9e001bba0019d70310e5010df20209f90203fc0000fd0000fe0000fe0001fc0001f50000ea0000dd0003d40606c80803b100019b00007e0000640200440a002a1b00163600085000036e0303950104c10004dc0205e80205f20102fa0000fb0000fd0002fe0000fd0000fb0002f70003f20004ec0103eb0203e90203eb0401f00401f20401f00202f00102f30101f50101f90101f90302f60402eb0501d40501b603019300006f00005200003700001b02000e01000c0000090300000800001001001d00003000004a00006b0302890304ad070bc50409db0409ed0407f60305fa0200fd0100fe0200fb0200f70201ee0300e50400db0602d40702d10705cf0707cd0507cd0508d00308d00308cf0408cd0508cc0508c30a05b41301a122008738006753004674002e98001eba0011d4000ce80207f00007f70006fb0004fa0000f90000f70000f40000f20000ee0000e60000e20004e10608dd0906cd0204b800009e0000820000600200401000252800114000065a0003800104b10104cd0405dc0304e80102f30000fa0001fc0001fe0000fe0001fb0002f10002ea0103e20003dc0203da0302d90501da0501da0302dc0202de0102e60002ed0002f70100fc0100fb0201f30500e30400c70200a400008100006200004200002103001102000e01000c0001000302000a0300140100210000380000560001720002960309b00108cb020ae0030aee0407f60202fa0100fa0100f70102f10102e70103db0100cd0200c20200bb0200b60201b70505b40404b50205b30305b10505af0505ad0806a50e039016007d2b00684600506700348d0020b0000fd10105e70102f40000f90002fb0005fb0005f70203f20000ee0000ea0000e40000e60000e70200e90405ec080aed080ae20308d30006bc0003a000007b00005a0b003820001d34000b4900036d00039f0001be0203cf0303df0101ed0000f80100fc0101ff0100fc0101f70002ed0002e10102d80101d10001cb0100c60100c40200c50100c60102ce0003d80002e30001f20000fa0000fb0100f80300ec0400d50400b100008d00006f00004c01002604011402001001000d0004000006000205000a03001400002700004300005f00008200059f0006bd0009d70109e80107f30004f90001f90001f40105eb0104de0002ce0000be0000af0000a500009e00009c00009900009700009300009001008e03008c0500810c00701d005e33004f54003d7a0525a20813c60a05e20700f40400fc0100fe0000fd0004fa0306f30304ea0300e20000da0000d50000dc0000e40502ea0805f10809f60608ef0008e5000dd5000bba0007960004730a014d1c002c2a00143d00075e0001900000b10101c30202d40300e70300f20200fb0302fe0301fc0201f50301e80201db0000d00000c50000be0000b90000af0000ae0000b20000bc0001c80002d80002ea0001f60000fa0000fa0300f10400db0501ba03009700007900015402002a04011403001102000e0003000005000006000203000900001900003200004c00007100068f0005b30008cf0209e30208ef0003f70000f80000f00104e60203d90000c80000b40000a100008f00008400007b00007800007400007100006f00006c00006a04005b0e004f29003f43003664012a8b0618b40b0ad50a00ee0900fb0300ff0000fe0000fa0306f50609ec0906e00600d50100cc0000c60000d00001de0702e90702f30603f90203f60004ef000de80008cf0004ad00028a04006313003b1c001f28000f470003740001990103b00402c70400dd0300ec0400f90401fe0201fc0101f50000ea0000de0000cb0000bb0000aa00009f00009500009400009b0000a80002b90002cd0001e20000f10000f90000fa0400f50601e20502c30301a202008502015f0200300400170300130200100400000101000002000002000002000a01001d00003600005a00007c0000a40002c40105dd0304ed0101f60100f70200ee0500e50400db0000c80000b000009300007600006200005600004d00004c00004d00024a00024600024206053618002735001f5700207c001ca10813c60a0ce30c01f40600f80000fd0200fa0506f40a08ea0c07dd0b01ce0500c10000b80000b00003bc0003d10403e50700f30500fa0000fb0002fa0000ee0003e50001cf0200aa0600800c00581000311100152400094f0001750000900502b30701d30400e60100f40000fb0000fb0001fa0000f80001e90200cd0200ae02008e03007b03007104007202007d01008f0000a50000bd0000d70000eb0101f90000fb0300f60300e50402c80301ac00009000006a02003b03001f0000150000120700010400010001000002000004000303001603002e00005300007500009e0001c10305db0304ec0300f60100f70300ed0400e60200de0000cc0000b200009400007500005f04014e03004400014200004100013b00023200032b09071c1d001343000e6600128b0012af060dd20909eb0b00f80400fa0000fb0302f60809eb0d0ade0f07cc0a00ba0300aa00009e00009d0005ac0004c60305de0902f00700f80000fc0000fc0000f80000f00000dd0100bc04009408006909004004002113000f3800055b00017e0303a30701c50400dc0200ed0000fa0001fc0002fe0001fc0001ec0200cd0300a904008206006904005d05005e04006c03007f0000990001b40001d20000e80101f70000fb0100f60300e70401cc0300b100009600006f02003f0300210000170000130500010400010001000002000003000303001502002d00004f00007300009b0002bf0304db0304ed0200f80100f90200f10200eb0100e40000d40000bc0000a100008702007205006200005600005200004a00003b00002c00001f0c001121000d4d0009700011960512ba0b0cdc0e07f30b00fd0500fd0000fb0303f1070ae10a09cd0904b503009e00008b00007f0000860000990001b70205d40a04e90a01f40202f90000fb0004fb0005f80005e70901ca0a04a410057a0f064f08022e1300152d00084d00026d0002930501b80300d20100e30001f20003fc0003fd0002fb0002eb0200cd0200aa02008404006a0000560100550100630000790000930000b20001d00001e60101f70000fb0100f60200e70401cc0300b100009600006f02003d03001f0000150000120400000200010002010002000002000302001401002a00004c00006f0000990001bc0205da0203ed0101f90100fd0100f70201f30002eb0001df0000cb0000b502009e05008e07017f02007600006d00005d00004600002f03001e13000d2b00085700077b000ea30910c60f09e40e04f80a00ff0500fe0000f70105eb050ad50909bb05049e00008300006d00006200006d0000820000a40004c50a06de0e05ee0706f60004fa0006fd0008fb0307f00b06d60e09b3140a8c12075f08043c0f001c20000c3e00045d0002840200a90200c50100da0101eb0103f80004fd0003fa0002ea0200cd0200ae02008902006f0000560000530000630000780000930002b30002d00000e80002f70000fb0100f60200e70401cc0300b100009400006d02003b03001f0000150000120300000201000002010002000002000201001200002700004700006b0000940000ba0106d90305ec0203f90100fe0000fe0103fa0203f50103eb0100da0300ca0500b90800ae0a01a503009b00009000007a0000580200380b001f1f000b39000362000187000daf0c0dd01004ea0b00fc0600ff0000fe0000f40106e2040cc7060ba803068600006900005200004700005200006a00008d0002b10a06cf0d07e40908f00407f80005fb0006fb0005f30705df0e0ac0130a9b10056e0502490700271400142d00064b00027100019a0100b80200cf0103e20104f10004f60004f60002ea0101d10200b302009302007700005d00005900006900017e0002980002b60003d50002ea0001f90000fb0100f80200e70401cc0300af00009200006b02003903001e0000130000100300000000000002010002000002000201001100002200004300006500008f0001b50206d50306ec0203f90101fe0000ff0103fe0104fb0103f30302e70600dc0700d20900cc0a01c50200bd0000b100009800006c06004411002528000b4300036d000193020bb80e09d71000ef0800fe0200ff0000fd0000ef0006d9010ab703099300046f00005100003c00003300003b00005300007600009b0904bc0c07d60a0ae90509f20004f80003fa0000f50201e50808cc1209aa0f037e0102580100330c001c21000b3d00046200018c0000ae0100c60203da0103eb0004f30004f60002ed0201d80200be0300a201008600006e00016a00027800028a0003a50003c10002df0002f10001fb0000fb0100f80200e70402c80301ac00008f00006802003803001a00001200000e0100000001000003000002000002000100000e00002000003d00005f00008a0002b10408d20408eb0205f70102ff0101fd0001fd0002fd0002f70200f00600eb0700e60800e50600e40000de0000d30000b50300830b005418002e3000124d00077900049d040cc20e09dd0e00f20600fe0000ff0000fd0000e90004cf0108a901048000025900003a00002600001f00002800003d00005f0000850400a80a04c70b0bde0609ed0005f60001fb0000f80000ec0606d60e07b70c038e00026700013e03002317000f320005560002840000a60201c10202d60102e60002ef0002f70001f10100e00200cc0100b10000990001880003850003920003a30003b90002d30001ec0001fb0001fc0000fb0100f60300e30502c50302a600008700006102003403001800001000000c0001000001000003000003000001000100000c00001d0000380000590000830005ab0507cf0408e80306f70102ff0103fa0000fb0000fc0000f90200f60300f30500f20400f40300f60100f30000e90003c90602940f00611d003736001955000b7f0005a5030ec80d09e20d00f40300fd0000ff0000fb0000e40005c802079e03047300014a00002b00001800001000001b00002f0000500000740600990b05ba0b0bd5070ae80107f60001fb0000fb0000f10304de0b05c108009a00007300004600002a0f00122a00075100037f0100a30200be0300d30201e30001ef0000f80000f60200ea0200d70000c00000ae0001a40002a30002ac0002bd0002cf0001e20001f40101ff0000fe0000fa0300f20501de0503be04039d00017f00005a02002f03001500000c000009000200000100000200000200000100000000090000160000340000510000780002a20405c70408e50408f70305ff0204fc0203fb0102fb0200fa0100f60100f60200f80100f90200fd0100f90101f10104d207019e11006c2100433d01235e02118a010cb00411cf0d09e30800f40100ff0000fc0000ee0000dd0003bd02049303036a01004100001f00000a00000600001000002100003f0000620500880705ae0b0fcf0c0fe50709f30005ff0001ff0100f80302e60905cd0800a600007d00034e00022f0e00162700094e00037f0100a30300bf0501d40401e60100f10000fa0000f90000f20100e50200d30100c70101c50001c60001cf0001d80001e60001f00000fa0000fe0000fd0100f80300ea0400d30200ae00008d00006d00004c00002501001100000b0000070002000002000002000002000001020000020700001300002d00014800006f0102990505bf0506df0506f50204fe0103fb0303f80300fa0200f90100f80000f60100f50000f50000f90102f30002eb0102ce07009b13006b2200453f01266202138e000cb50212d30a0be50802f60100ff0000fa0000eb0000d40002b301028801016002003a02001c01000902000405020800001700003300005403007b0503a20a0cc40a0ddd0508ef0005fc0000ff0000f90101e90703d20600ad0000840000530002320c00182600094e00037f0100a40400be0400d50401e80100f20000fa0000fb0000f90100ef0100e10000db0000dd0000e10000e50000eb0000f30000f80001fc0100fc0100fa0400f10600e00600c60501a000007e00005e00004000001e01000d0000090000050002000002000002000001000001020000020500010f00002500003f00006400008e0402b70505d80305f00104f90101f70400f70400f70200f90101f50101f20000ec0000ea0001ec0106e60104da0404bd0b018e16006427004445032768021598000ebd0013d90a0ee90705f70302fd0000f70000e70100c90000a701007b00005400003200001600000806000407040301011000002700004600006c0000950409ba070ad40208eb0004f90000ff0100fa0201ed0706d70900b400018b0001560001350e001927000a4f0003800100a50500c00500d70500e70300f20000fa0000fe0100fc0100f60200ec0200ea0000ef0000f30000f50000f80000fa0001fb0201fd0301fc0500f50600e60601d10601b304018c02006b00004d00003100001901000a0000050000040002000002000002000001000001020000040200030a00001d00003600005a0000830300ad0303cf0302eb0102f60100f50300f50400f70201f60001f00003e90004df0005d70005d50208cb0407bd0704a00e00771a00552d003c4c0524720513a1000cc60014e10a0fee0906f80403fb0401f40202e30302c102019c00007000004a00002a00001300000605020308080204040c00002100003e00006300008c0107b4030ad00107e50002f50000fd0100f90101ee0807db0a02b900049000035a0001380e001c29000b510003800100a70400bf0700d70700e60300f10100fb0101ff0201ff0201fc0201f30201f30000fa0000fd0000fb0001f90002f70102f30201f30401ee0601e40701d50701bb06019c04007800005600003b0000230100140100080000040000000002000002000001000001000001040001040100050800021500002c00004f0000780200a20300c80201e50102f30100f20300f30400f70201f40004eb0006dd0007cb0007bb0007b20308a20705930a00791300591f003e34002f55081d7c080cad0008d00010e8090bf30905f90404f90402ee0505dc0505bb06039502006700004200002500000e00000400020003090002050800001c00003900005e0000860006ae0309ca0106e10002f20000fc0200f90302ef0b08dc0d04bb01059400035d00023b0e001e2a000b510003820100a70700c00700d50700e40500f00200f90201ff0101ff0201fc0101f50101f50000fa0000fb0001f60002f10003ea0004e20202de0303d50401ca0501b80602a104018402006100004100002900001601010d0100060000020000000002000002000001000001000001040000050002050501021200002700004700006f02009b0200c30300e10302f00200f10400f20300f60001f20005e60007d10007b70007a300068e02037d06006b0b005514003a2200273a00215c0815850906b50002d8000aed0707f60701f90301f60500e90404d50705b304048d01005f00003c00002000000c00000200030000080000030400001a00003800005c0000840004aa0206c40007df0002f00000fa0200f70402ed0c07db0c03ba00049300035f00033c0f001e2a000c520003820200a80800bf0a00d30901e20501ec0301f80201fd0101ff0001fb0000f40001f40000f70000f50002ee0002e40002d80003d00002c70203bd0101b102009f03008801006c01004b00003100001900000b0101090100050000000000000002000002000001000001000001040000050001060301040f0101230000440100690200960300bd0401de0402ef0401f00300f40300f80001f10005e00007c60007a500058b00067000005a0600480b003315001e2500133e001262090a8b0a00bc0000de0004f10502f70600f80300f30400e30401ce0502a901018300005600003500001c00000b00000100060000080000040500001d00003b0000600000870308ab0407c50008de0004ef0000f90200f60603eb0c08d90c03b700049000035f00023d0d001f28000c4f0003800300a70a01c00c02d40902dc0802ea0302f40201fc0001fc0001fa0000f10000ef0000ef0001ea0002df0003d40003c60004bb0003b10003a600009800008701007300005900003c00002200000c0000040201060101030000000001000002000002000001000001000001050001050002080201060d0101230000430000680100950100bc0300dc0503ee0403f00300f40200f70000f00004dd0006bf00049b00047b00065b0002440500310c001f16000d2600073f000c6507068e0800bf0000df0001f20700f70600f50300ef0400e00304c90700a000007a00004f00003000001a00000b00010200030000040000010c0000260000440000690000900405b20805cb0404e00201f00100f80100f40103ea0807d80b00b701008f00045d03043a18001c31000a560003860200ac0802c60c03d80903e30602ec0501f60101f90000f60000f00000e30000db0002d70002cf0003c50004b70004aa00049c00059102058600017501006600005300003f00002800001400000500010002020401010300000000010000010000020000010000020200020700020700030a0102070d00012400004300006a0000960000bc0001dc0105ed0105f20205f70305f90003ee0000dc0000bf00019600016f00034f00093200061f0302131200092600053e000c6302088c0201c10000dc0000ea0200ef0200f10301ed0700d90402bf03009800007500004b00002d00001700000900000300000400000900001a00003500005800007c0000a10801c20f00d90e00ec0a00f30200f70003f6000aee0506d80500b500008b030455120631280017400009660005950001b80001cf0200df0400eb0500f30500fc0501f80402ec0302dc0002c70002b70301ad0301a201019701008a00007c00006e01025f02035300004100023500012800011d00011000010600010000010000000000000000000000000001000000010000010000010400020700030900030a0201070e00012400004500006d0000970000bc0001db0004ec0205f10006f60106f90004ef0000db0000be00009200016a000346000a2800081502060b1103032700013e00096300078c0003c10000dc0003ea0404f00704f20806ed0905d90805bf04019800017400004c00002d00001800000b00000600000a00001801002b00004800006b00008f0000b10801cf1200e41200f41000f90402f90008f4000cea0109d40600b30400890d054f1c072c3400144c00096f00049e0003c00001d60000e60300f10400f70600fc0600f40601e20502cd0102b402029e03008b05007e03007502006a00005c01004e02024202023400022501031c01031200030a0102060002010000000000000000000000000000000000000300000100000000000001040002050002070002080201060e00002400004600006b0000950000b90100d70302e80202ee0002f60204fa0203ee0000da0000ba01008e00016600033f0006210004100202051200002700004000046500048d0005c00103da0009ec0909f20a07f30a09ee0b06db0505c204029c00027b00005300003400002000001300001000001600002c0200420001610006830107a60407c50b06dd1303ef1302fa0e02fc0505f8000af0000fe1020cca0800a80800801203471e0627360013520009790005a50002c60001da0001e90300f10300f40500f50700ec0601d90302c00002a501038c00007101006200005b00005000004500003b00002f00002600001b00001400010e0000080100050000020100020100020000000000000000000000000600000400000100000000040001050001070001060500041100002600004800006d0000960100b90300d50400e70300ed0000f50101f80203ed0101d80200b602018901015f00013900021c00010b0400011300002800004200006700018e0104bd0004da000deb0a0bf30b08f50908f00804de0304c70103a600028700006100004500003200002600002500002e00004703005e02067c010d9e050cbe060ad80b06ea0f03f60e00fb0803fb040af6000fe90011d5050dba09009507006e13003e2303223e00105c000a830006b00002cf0000df0000ec0300f20300f20600f10601e40401cc0101b100019400037800005600004500003e00003600002e00002600001f00001800001000000c0000090000070000050000050100050100040000020000000000000000000700000600000300000100040000050000050100050800021500002b00004c00007201009a0300bc0500d60500e90400ee0000f60202f80203ea0202d30301b10400820200580000340100170200060600001600002a00004400006a01008f0201ba0005d6000cea090af20806f50605f20402e30103cf0003b200029600007500005d00004b00004200004100004b00026804007e00079b000cb8000bd30107e60202f30600fb0600fc0205fb000ef30015e30416c90b0fa90d00800c005a1700322c001b4a000e6b0008940006bd0001d80000e80100f20300f40300f10600ea0500d90301be0101a100008100036100003b00022800002300001e00001800001200000e00000b0000070000050000050100050100050100070300070100050000020000000000000000000600000600000400000100020000040000040400030c00001d0000320000540000790200a10400c20500dc0500ed0400f20000f60201f60202e50100cc0200a80300790200500100300300160300050700001600002900004300006802008e0301b80004d5000ceb0708f20702f60102f60101eb0000da0002c20002ab00019000007c00006d00006500056704057205068e0a03a10208b8000ad00006e40001f10000fa0000ff0000fd0006fa0210ef0116d80518ba0f109613006d1400482000263700145800097a0007a40005cd0001e50000f00200f70300f40400ef0500e30400d00300b100009000006e00014b00012600021300020e00010c0001070000050001040000020001000000000100020100040100050100070300070300070100020000000000000000000400000400000300000300020100040300040800011100002500003b00005e0000830200ab0300cb0400e60200f40200f50100f70303f20203e00000c30100a002007102004a01002d0400140300050600001400002600003e00006301008a0401b70004d5000ceb0706f30500f80000fb0000f50000e80002d80005c60005b10007a2000696010590030a920a0a9d0e09b20d05c20405d50005e50000f40000fd0000ff0000ff0000fd0006f5020fe30211c70311a40e0c801500591b00372a001d47000d6900058d0005b60104dd0000f00000f70200fb0300f60400ed0600de0400c60301a400007f00005e00013b0002160003040002030001000002000001000001000001000102000201000201000400010300040300050400070300050100020000000000000000000100000100000100000100020300040600020c00011600002b00004300006500008b0000b30100d30100ec0000f70201f60202f50504ed0304d80001ba00019602006a03004401002b0400130200060300001000002200003a00005e0400830605b60406d5030cea0905f40500fb0000ff0000fe0000f40003ed0005dd0006cd0006c10205b90205b30409b60c0ac10f06ce0c01da0301e80000f50000fe0000ff0000ff0000ff0000f80006ec050dd5030cb4050d9010096c1a00482300293700145900077d0001a10003c70301e80100f80100fb0301fc0300f40400ea0500d60602bb04019800007200004f00012e00010d0002000001000002000002000001000001000001000302000302000501000400000400030300040400050300040100020000000000000000000002000001000001000000000400030900021100011c00003200004b00006f0000950002ba0003d90002ec0000f30000f30304eb0303e10102cd0104af01038700005c00003b00002000001301000c0400040c00001a0000300000530500780401ab0201cc000be70b07f50900fb0100ff0000ff0000fe0000f70000ef0004e50106dd0304d90506d70905d90b03db0b02e60b00ee0500f50000f80000fe0000ff0000ff0000fa0001f30804dd0806c00308a108057a11005116002f2300193f000c6b0006930003b70001d70300ef0200fc0100fe0200fb0300f10500e10400cb0300ae02008800006500004100022500000b0000000000000000000000000100000100000100000100000100000300000300000300000300000300020300020100000000000000000000000002000002000001000000000400030900021100011d0000350000500000720001980106bf0208dd0208f00006f50005eb0505e00605d30205bd00049e00037900014f00003200001c00001100000d0100070900011500002a00034a08016d08009d0200bf000adb0d07ee0c00f90400ff0000ff0000ff0000fe0000f90000f20001ee0201ea0300eb0500ed0700ef0700f20a00f80600fd0000ff0000ff0000ff0000ff0200f40904e50f05cc0d06ad08068d0c02681500421d00242c00124f00087b0001a40000c50100df0200f30100fd0000fb0100f40301ea0401d60300bf0400a101007a02005800003401011d00000b0000040000040000020100020100000100000100000100000100000300000300000300000300000300000100000000000000000000000000000003000003000001000001000400010900001100001c00003300004c0000700003950208bc040cda040cef030df2050de00809d00808c10305a800048600026300003e00002500001500000d00000d00000b0300040e00012000043d08005c0700870100a9000ac80e0ade0f00ed0700f90300ff0000ff0000ff0000fd0001fa0002f70200f80400f90400fb0500fc0800f90b01fd0a01ff0000fe0000fe0005fb0005f10b07e21208cf1407b31101920700710a004f13002f20001834000b590004890000b10000ce0100e70200f50100fb0000f70000ed0202dc0302c80401b002009102006c00004700002701001400000b0100070100070100050100050100040100020100020100000100000100000100000100000100000100000100000000000000000000000000000003000003000001000000000400010900001000001900002d00004400006600028a0307af060dcb060fe20610e4090fcf0c0abc0a06a903039000017000024e00002d00001700000e00000800000d00000c0000070800021600002f05004a06007002028f020aaf0d0ac60f04da0a00ea0700f40300f90000fb0200fa0204fa0305fa0502fc0500fd0500ff0300fd0600f80c05f90d05f90305f50007f2000bea060adb0e09c9140ab416069813007507005606003812002023000f3e0007640002930000b90300d60300ea0300f60100f80000f00000df0003cc0103b601019d00007e01005b0000380100190000090000090100090100090100070100070100050100040100040100020000000100000000000100000001000100000001000000000000000000000000000003000002000001000000000400010800000d00001500002500003a000056020078060698070ab40a0dc9070fcc0b0eb50c07a30a049103017600005800023900021c00010a00000501000400000b00000c0000070300010e000022030036030055020571020c8f0d0caa0f09c20c08d70b06e60a05ec0609f20a0bf50a0df70c0cf90b09fa0b03fb0700fb0300f80507f4100cf1100cee080be7010ee00311d40b0fbf120dab180b9317057811005906003d07002513001328000a4604066d0401980400bd0600d60701e90501f40201f20001e20003d00004b70004a000028800006b00004800002801000c0000000000040000070000070000050000050000050000040000040000040000020000020001000000000001000000000000000000000000000000000000000001000001000000000100000200010600000a00000f00001e02002f02004805006406048208079b0707ae0508b008079a07008906007700005f00004300012700030d03020003020004040000000800000c0000080100000800001700002501003a00035000096e0608890805a50708c00a0ad30b08dd090ee50b0eea0c11ee0d11f20e0df50d07f50900f40300f00509ea100ee4100cdd050bd3000ec80211ba090ea40f0b8d1305710e01590b003e03002a07001817000b2c04044a08027005009b0400bd0600d40702e50502ef0102ea0003d50003be0004a400038c00007500005a00003900001c0000000101000000000000020000020000040000040000040000040000040000040000040000020000020000020001000001000001000000000000000000000000000100000100000100000100000201000501000602000b01001302002201003702004d02006802007c01008d00009000007f00006f00006100004a00003100001701030004030005040007070002020700000b0000080000000300000f00001a00002200023500034d00006600008100009d0000b20000be0007ce0309d3030bda060ee10909e50703e60300e50000e00000d40503cc0201c20000b50003a800059900028002006804005003003c02002800001906000d1700032d05004b07007005009a0200b90400d00500e00401e60001dc0002c50003ad00029200027d00006500004a00002d0000130101000403000101000001000001000001000001000001000001000000020000040001040001040001040001040001040001040001020001000000000000000000000100000100000100000100000201000302000403010803000b00001500002500003600004900005800006600006700005e0000520000470000360000230001110102000304000404000707000202040000080000060000000200000900001100001500042200033600004800005f00007900008d0000980006ae0308b5040cbe080ec70a0bcd0c05ce0600cd0100c70203b60506ac0400a000009100008400027400005d00004600003703002703001700000e0900061800002a03004204006303008c0100a80500bc0602c90502cd0101c30001ab00029300027900036200004c00003600001d0000090401000402000101000001000001000001000001000001000001000001000000020001020000040001040000040001040001040001020001000000000000000000000001000001000000000000000100000100000300000600000c00021000011800021f00022700032e00033300053501053000022c00022700022100041700020f0002080002020003000002010000030000030000010000000100000300000400020a00031100021b00002a00003a00004d00006000006d0009830a088b0909960c0a9d0e09a10e04a10a00a0050399060a860a0d7b0a086f02036200005300004400003300002800001a01001306000a0a00041000001a00002500023302024c00026f00018802029604039f0601a304019a02008701017100005100003a00002400001300000b0100040400030501000100000000000000000000000000000000000000000000000000000001000000020000020000020000020000020001000000000000000000000000000001000001000001000001000000000100000300000400000900020b00030f000413000616010818030a1b040c1b040c19020a1801091601081400061100040d0002080000070000040000030000010000000000000100000100000100000100000100020500020d00001700002200013100004101004c01015b04006303006d04027307017705007602007400006d01045c05085205054801013d00003200002700001b00001400000e04000a0a00050e00001200001700001d00032300033500045500036b01027603037d04018204007b05006d04005702003b0200270100120000050100020100020400080300090100020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000001000001000000000100000300000400000600000800010900010d00030f00041200051300061300061200051200051100040e00030b0001080000070000060000040000030000010000000000000100000100000100000100010000000100000500000900001100001c00002700003000003b00004200004900004f00005200005100004e00004900003a00003300002c00002500001f00001800000f00000a0000070000040400000700000b00001000001300011600012400013d00014d00015a00006201006702006401005800004601003101001f01000e00000401000201000404000a02000a0100040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000001000001000000000000000100000300000400000600000700000800010900010b00010c00020c00020c00020c00020b0001090001080001070000060000040000030000010000000000000000000100000100000100000100010002010002000100000500000800000e00001500001d00002500002a00002f00003300003500003400003000002d00002200001e00001900001600001300000e0000080000050000010000000000000400000501000800000a00010d00011400012300003000003c00004500004c00004a00004200003501002602001602010900000201000201000504000c02000a000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000100000000000000000000000000010000030000040001050001050001050001070001070001060000060000070001070001070001070001050001050001050001040001030000010000000000000000000000000100000100000002030005040006020005000103000300000600000c00001100001000001300001600001800001800001600001300001200001000000d00000a0000070000070000040000010001000003000003000003000004000103010202020202020400030600010c00011400001f00002900003000003100002b00002300001701010d01010300000000000200000501000b02000c00000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010000000000000000000000000001000001000002000102000102000102000104000104000104000104000104000104000104000104000102000102000102000102000101000001000000000000000000000000000000010000000203000704000704000601000400000200020000060000080000040000060000060000060003070003050005030001020000070200050400040300010200010302000104000006000007000007000005000004000003020002030002030001040000030000020100020b00001201001b01001d00001a00001400000c00010501010001020000000000000401000901000900000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010101010101010101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000204000504000705000603000501000400000400000200020100020102020203010205010206000208000209000107000305020901010901000602000605000607000707000306000009000308000005000003000000010000020000030000030000030000020000010000000400000b00000e00000c00000900000400000000010001020001010000000200000700000700000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010000010000010000010000010000020100020100020100010000010000010000010000010000010000010000010000000000000000000000000000000000000000000001000205000506000607000704000501000400000400000400000401000501000502000503000504000506000507000506000503000501000503000503000504000406000406000206000207010305010203000000000000010000020000030000030000030001020003000001000001000401000501000501000401000000010000010001020001020001010000000200000400000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000000000000000000000000000000010000010000010000010000010000010000010000020000010000020000010000020000010000010000010000010000010000010000010000010000000000000000000000000001000001000004000004000004000003000001000200000200000400010400000500000500000500000700000700000700000701000501000203000203000203000203000203000203000203000201000200000200000200010200020200030200030200020001010003010004000003000003000203000403000401000201000001000000010000020000010000010000010000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000000000000000000000000000000010000010000010000010000010000010000010000020000020000020000020000020000020000020000010000010000010000010000010000010000000000000000000000000001000001000003000003000003000001000000000000010000010200010400010400020500020500020500030500030500020500010400000001000001000001000001000001000000000000000200000200000400010400010500020500020700030700020401000004000004000003000003000203000203000201000001000001000000010000010000010000010000020000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000000000000000000000000000000000000010000010000010000010000010000010000010000010000010000010000010000010000010000010000010000010000010000000000000000000000000000000000000001000001000001000001010001000000010000010000020000020000030200030200040400040400040400050200050200060000050000020000010000010000010000010000010000020000010000010200010400010500010700020700020900030900010900000503000403000503000403000401000401000201000201000000000000010000010000010000010000020000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000000000000000000000000000000000000000000010000010000010000010000010000010000010000010000010000010000010000010000010000010000010000010000000000000000000000000000000000000001000001000001010001010000010000020000010000030000020000040000030200050200050200060200060000070000070000060000040000020000020000020000020000020000020000020000020200010400010700010700020900020900020b00010b000009030009030007030005010005010004010002010002000000000000000000000100000100000100000200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>
+endstream
+endobj
+20 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 17 0 R
+>>
+endobj
+21 0 obj
+<< /Length 165 >>
+stream
+BT
+/F7 18 Tf
+0 0 0 rg
+1 0 0 1 100.0 706.632 Tm (A.) Tj
+0 0 0 rg
+1 0 0 1 121.996 706.632 Tm (Appendix) Tj
+/F5 10 Tf
+0 0 0 rg
+1 0 0 1 309.25 40.97 Tm (2) Tj
+ET
+
+endstream
+endobj
+22 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 576 792 ]
+/Resources 4 0 R
+/Contents 21 0 R
+>>
+endobj
+xref
+0 23
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000124 00000 n
+0000000186 00000 n
+0000000425 00000 n
+0000000536 00000 n
+0000000650 00000 n
+0000000755 00000 n
+0000000869 00000 n
+0000000977 00000 n
+0000001088 00000 n
+0000001198 00000 n
+0000001318 00000 n
+0000001431 00000 n
+0000001547 00000 n
+0000001655 00000 n
+0000001774 00000 n
+0000003282 00000 n
+0000130764 00000 n
+0000166949 00000 n
+0000167057 00000 n
+0000167273 00000 n
+trailer
+<<
+/Size 23
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+167381
+%%EOF
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 1
+/Kids [18 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] >>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 17986 >>
+stream
+BT
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 260.991 718.779 Tm (1.) Tj
+0 0 0 rg
+1 0 0 1 274.335 718.779 Tm (normal.pdf) Tj
+0 0 0 rg
+1 0 0 1 291.681 705.279 Tm (---) Tj
+0 0 0 rg
+1 0 0 1 159.159 691.779 Tm (2.) Tj
+0 0 0 rg
+1 0 0 1 172.503 691.779 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 183.843 691.779 Tm (one) Tj
+0 0 0 rg
+1 0 0 1 207.195 691.779 Tm (line) Tj
+0 0 0 rg
+1 0 0 1 229.203 691.779 Tm (example) Tj
+0 0 0 rg
+1 0 0 1 277.887 691.779 Tm (\(text-align='start'\):) Tj
+0 0 0 rg
+1 0 0 1 376.167 691.779 Tm (normal.pdf) Tj
+0 0 0 rg
+1 0 0 1 291.681 678.279 Tm (---) Tj
+0 0 0 rg
+1 0 0 1 70.875 664.779 Tm (3.) Tj
+0 0 0 rg
+1 0 0 1 84.219 664.779 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 95.559 664.779 Tm (multiline) Tj
+0 0 0 rg
+1 0 0 1 142.899 664.779 Tm (text) Tj
+0 0 0 rg
+1 0 0 1 165.579 664.779 Tm (\(text-align='start'\).) Tj
+0 0 0 rg
+1 0 0 1 263.859 664.779 Tm (The) Tj
+0 0 0 rg
+1 0 0 1 287.871 664.779 Tm (Extensible) Tj
+0 0 0 rg
+1 0 0 1 346.563 664.779 Tm (Markup) Tj
+0 0 0 rg
+1 0 0 1 389.907 664.779 Tm (Language) Tj
+0 0 0 rg
+1 0 0 1 446.619 664.779 Tm (\(XML\)) Tj
+0 0 0 rg
+1 0 0 1 482.619 664.779 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 494.619 664.779 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 70.875 651.279 Tm (subset) Tj
+0 0 0 rg
+1 0 0 1 109.563 651.279 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 122.907 651.279 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 160.251 651.279 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 183.603 651.279 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 195.603 651.279 Tm (completely) Tj
+0 0 0 rg
+1 0 0 1 256.287 651.279 Tm (described) Tj
+0 0 0 rg
+1 0 0 1 311.643 651.279 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 324.315 651.279 Tm (this) Tj
+0 0 0 rg
+1 0 0 1 346.323 651.279 Tm (document.) Tj
+0 0 0 rg
+1 0 0 1 405.687 651.279 Tm (Its) Tj
+0 0 0 rg
+1 0 0 1 421.695 651.279 Tm (goal) Tj
+0 0 0 rg
+1 0 0 1 447.711 651.279 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 459.711 651.279 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 473.055 651.279 Tm (enable) Tj
+0 0 0 rg
+1 0 0 1 70.875 637.779 Tm (generic) Tj
+0 0 0 rg
+1 0 0 1 113.559 637.779 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 150.903 637.779 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 164.247 637.779 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 180.927 637.779 Tm (served,) Tj
+0 0 0 rg
+1 0 0 1 223.611 637.779 Tm (received,) Tj
+0 0 0 rg
+1 0 0 1 275.631 637.779 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 298.983 637.779 Tm (processed) Tj
+0 0 0 rg
+1 0 0 1 357.675 637.779 Tm (on) Tj
+0 0 0 rg
+1 0 0 1 374.355 637.779 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 394.371 637.779 Tm (Web) Tj
+0 0 0 rg
+1 0 0 1 422.379 637.779 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 435.051 637.779 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 455.067 637.779 Tm (way) Tj
+0 0 0 rg
+1 0 0 1 479.739 637.779 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 503.091 637.779 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 70.875 624.279 Tm (now) Tj
+0 0 0 rg
+1 0 0 1 96.219 624.279 Tm (possible) Tj
+0 0 0 rg
+1 0 0 1 143.571 624.279 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 168.243 624.279 Tm (HTML.) Tj
+0 0 0 rg
+1 0 0 1 207.579 624.279 Tm (XML) Tj
+0 0 0 rg
+1 0 0 1 235.587 624.279 Tm (has) Tj
+0 0 0 rg
+1 0 0 1 258.267 624.279 Tm (been) Tj
+0 0 0 rg
+1 0 0 1 288.291 624.279 Tm (designed) Tj
+0 0 0 rg
+1 0 0 1 340.323 624.279 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 357.663 624.279 Tm (ease) Tj
+0 0 0 rg
+1 0 0 1 387.015 624.279 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 400.359 624.279 Tm (implementation) Tj
+0 0 0 rg
+1 0 0 1 485.055 624.279 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 508.407 624.279 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 70.875 610.779 Tm (interoperability) Tj
+0 0 0 rg
+1 0 0 1 152.235 610.779 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 176.907 610.779 Tm (both) Tj
+0 0 0 rg
+1 0 0 1 203.595 610.779 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 240.939 610.779 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 264.291 610.779 Tm (HTML.) Tj
+0 0 0 rg
+1 0 0 1 303.627 610.779 Tm (For) Tj
+0 0 0 rg
+1 0 0 1 324.963 610.779 Tm (further) Tj
+0 0 0 rg
+1 0 0 1 362.979 610.779 Tm (information) Tj
+0 0 0 rg
+1 0 0 1 425.667 610.779 Tm (go) Tj
+0 0 0 rg
+1 0 0 1 442.347 610.779 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 455.691 610.779 Tm (normal.pdf) Tj
+0 0 0 rg
+1 0 0 1 291.681 597.279 Tm (---) Tj
+0 0 0 rg
+1 0 0 1 75.795 583.779 Tm (4.) Tj
+0 0 0 rg
+1 0 0 1 89.139 583.779 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 100.479 583.779 Tm (multiline) Tj
+0 0 0 rg
+1 0 0 1 147.819 583.779 Tm (text) Tj
+0 0 0 rg
+1 0 0 1 170.499 583.779 Tm (\(text-align='centered'\).) Tj
+0 0 0 rg
+1 0 0 1 292.131 583.779 Tm (The) Tj
+0 0 0 rg
+1 0 0 1 316.143 583.779 Tm (Extensible) Tj
+0 0 0 rg
+1 0 0 1 374.835 583.779 Tm (Markup) Tj
+0 0 0 rg
+1 0 0 1 418.179 583.779 Tm (Language) Tj
+0 0 0 rg
+1 0 0 1 474.891 583.779 Tm (\(XML\)) Tj
+0 0 0 rg
+1 0 0 1 510.891 583.779 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 73.569 570.279 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 83.577 570.279 Tm (subset) Tj
+0 0 0 rg
+1 0 0 1 122.265 570.279 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 135.609 570.279 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 172.953 570.279 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 196.305 570.279 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 208.305 570.279 Tm (completely) Tj
+0 0 0 rg
+1 0 0 1 268.989 570.279 Tm (described) Tj
+0 0 0 rg
+1 0 0 1 324.345 570.279 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 337.017 570.279 Tm (this) Tj
+0 0 0 rg
+1 0 0 1 359.025 570.279 Tm (document.) Tj
+0 0 0 rg
+1 0 0 1 418.389 570.279 Tm (Its) Tj
+0 0 0 rg
+1 0 0 1 434.397 570.279 Tm (goal) Tj
+0 0 0 rg
+1 0 0 1 460.413 570.279 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 472.413 570.279 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 485.757 570.279 Tm (enable) Tj
+0 0 0 rg
+1 0 0 1 77.235 556.779 Tm (generic) Tj
+0 0 0 rg
+1 0 0 1 119.919 556.779 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 157.263 556.779 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 170.607 556.779 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 187.287 556.779 Tm (served,) Tj
+0 0 0 rg
+1 0 0 1 229.971 556.779 Tm (received,) Tj
+0 0 0 rg
+1 0 0 1 281.991 556.779 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 305.343 556.779 Tm (processed) Tj
+0 0 0 rg
+1 0 0 1 364.035 556.779 Tm (on) Tj
+0 0 0 rg
+1 0 0 1 380.715 556.779 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 400.731 556.779 Tm (Web) Tj
+0 0 0 rg
+1 0 0 1 428.739 556.779 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 441.411 556.779 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 461.427 556.779 Tm (way) Tj
+0 0 0 rg
+1 0 0 1 486.099 556.779 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 509.451 556.779 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 71.907 543.279 Tm (now) Tj
+0 0 0 rg
+1 0 0 1 97.251 543.279 Tm (possible) Tj
+0 0 0 rg
+1 0 0 1 144.603 543.279 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 169.275 543.279 Tm (HTML.) Tj
+0 0 0 rg
+1 0 0 1 208.611 543.279 Tm (XML) Tj
+0 0 0 rg
+1 0 0 1 236.619 543.279 Tm (has) Tj
+0 0 0 rg
+1 0 0 1 259.299 543.279 Tm (been) Tj
+0 0 0 rg
+1 0 0 1 289.323 543.279 Tm (designed) Tj
+0 0 0 rg
+1 0 0 1 341.355 543.279 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 358.695 543.279 Tm (ease) Tj
+0 0 0 rg
+1 0 0 1 388.047 543.279 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 401.391 543.279 Tm (implementation) Tj
+0 0 0 rg
+1 0 0 1 486.087 543.279 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 509.439 543.279 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 75.255 529.779 Tm (interoperability) Tj
+0 0 0 rg
+1 0 0 1 156.615 529.779 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 181.287 529.779 Tm (both) Tj
+0 0 0 rg
+1 0 0 1 207.975 529.779 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 245.319 529.779 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 268.671 529.779 Tm (HTML.) Tj
+0 0 0 rg
+1 0 0 1 308.007 529.779 Tm (For) Tj
+0 0 0 rg
+1 0 0 1 329.343 529.779 Tm (further) Tj
+0 0 0 rg
+1 0 0 1 367.359 529.779 Tm (information) Tj
+0 0 0 rg
+1 0 0 1 430.047 529.779 Tm (go) Tj
+0 0 0 rg
+1 0 0 1 446.727 529.779 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 460.071 529.779 Tm (normal.pdf) Tj
+0 0 0 rg
+1 0 0 1 291.681 516.279 Tm (---) Tj
+0 0 0 rg
+1 0 0 1 97.383 502.779 Tm (5.) Tj
+0 0 0 rg
+1 0 0 1 110.727 502.779 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 122.067 502.779 Tm (multiline) Tj
+0 0 0 rg
+1 0 0 1 169.407 502.779 Tm (text) Tj
+0 0 0 rg
+1 0 0 1 192.087 502.779 Tm (\(text-align='end'\).) Tj
+0 0 0 rg
+1 0 0 1 287.043 502.779 Tm (The) Tj
+0 0 0 rg
+1 0 0 1 311.055 502.779 Tm (Extensible) Tj
+0 0 0 rg
+1 0 0 1 369.747 502.779 Tm (Markup) Tj
+0 0 0 rg
+1 0 0 1 413.091 502.779 Tm (Language) Tj
+0 0 0 rg
+1 0 0 1 469.803 502.779 Tm (\(XML\)) Tj
+0 0 0 rg
+1 0 0 1 505.803 502.779 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 517.803 502.779 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 86.271 489.279 Tm (subset) Tj
+0 0 0 rg
+1 0 0 1 124.959 489.279 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 138.303 489.279 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 175.647 489.279 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 198.999 489.279 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 210.999 489.279 Tm (completely) Tj
+0 0 0 rg
+1 0 0 1 271.683 489.279 Tm (described) Tj
+0 0 0 rg
+1 0 0 1 327.039 489.279 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 339.711 489.279 Tm (this) Tj
+0 0 0 rg
+1 0 0 1 361.719 489.279 Tm (document.) Tj
+0 0 0 rg
+1 0 0 1 421.083 489.279 Tm (Its) Tj
+0 0 0 rg
+1 0 0 1 437.091 489.279 Tm (goal) Tj
+0 0 0 rg
+1 0 0 1 463.107 489.279 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 475.107 489.279 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 488.451 489.279 Tm (enable) Tj
+0 0 0 rg
+1 0 0 1 83.595 475.779 Tm (generic) Tj
+0 0 0 rg
+1 0 0 1 126.279 475.779 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 163.623 475.779 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 176.967 475.779 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 193.647 475.779 Tm (served,) Tj
+0 0 0 rg
+1 0 0 1 236.331 475.779 Tm (received,) Tj
+0 0 0 rg
+1 0 0 1 288.351 475.779 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 311.703 475.779 Tm (processed) Tj
+0 0 0 rg
+1 0 0 1 370.395 475.779 Tm (on) Tj
+0 0 0 rg
+1 0 0 1 387.075 475.779 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 407.091 475.779 Tm (Web) Tj
+0 0 0 rg
+1 0 0 1 435.099 475.779 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 447.771 475.779 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 467.787 475.779 Tm (way) Tj
+0 0 0 rg
+1 0 0 1 492.459 475.779 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 515.811 475.779 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 72.939 462.279 Tm (now) Tj
+0 0 0 rg
+1 0 0 1 98.283 462.279 Tm (possible) Tj
+0 0 0 rg
+1 0 0 1 145.635 462.279 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 170.307 462.279 Tm (HTML.) Tj
+0 0 0 rg
+1 0 0 1 209.643 462.279 Tm (XML) Tj
+0 0 0 rg
+1 0 0 1 237.651 462.279 Tm (has) Tj
+0 0 0 rg
+1 0 0 1 260.331 462.279 Tm (been) Tj
+0 0 0 rg
+1 0 0 1 290.355 462.279 Tm (designed) Tj
+0 0 0 rg
+1 0 0 1 342.387 462.279 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 359.727 462.279 Tm (ease) Tj
+0 0 0 rg
+1 0 0 1 389.079 462.279 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 402.423 462.279 Tm (implementation) Tj
+0 0 0 rg
+1 0 0 1 487.119 462.279 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 510.471 462.279 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 79.635 448.779 Tm (interoperability) Tj
+0 0 0 rg
+1 0 0 1 160.995 448.779 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 185.667 448.779 Tm (both) Tj
+0 0 0 rg
+1 0 0 1 212.355 448.779 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 249.699 448.779 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 273.051 448.779 Tm (HTML.) Tj
+0 0 0 rg
+1 0 0 1 312.387 448.779 Tm (For) Tj
+0 0 0 rg
+1 0 0 1 333.723 448.779 Tm (further) Tj
+0 0 0 rg
+1 0 0 1 371.739 448.779 Tm (information) Tj
+0 0 0 rg
+1 0 0 1 434.427 448.779 Tm (go) Tj
+0 0 0 rg
+1 0 0 1 451.107 448.779 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 464.451 448.779 Tm (normal.pdf) Tj
+0 0 0 rg
+1 0 0 1 291.681 435.279 Tm (---) Tj
+/F5 12 Tf
+0 0 0 rg
+1 0 0 1 70.875 411.399 Tm (6.) Tj
+0 0 0 rg
+1 0 0 1 82.875 411.399 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 94.539 411.399 Tm (multiline) Tj
+0 0 0 rg
+1 0 0 1 140.883 411.399 Tm (text) Tj
+0 0 0 rg
+1 0 0 1 161.883 411.399 Tm (\(text-align='start',) Tj
+0 0 0 rg
+1 0 0 1 249.627 411.399 Tm (space-before.optimum=6pt,) Tj
+0 0 0 rg
+1 0 0 1 385.371 411.399 Tm (font-family=serif) Tj
+0 0 0 rg
+1 0 0 1 70.875 388.599 Tm (padding-top="3pt"\).) Tj
+0 0 0 rg
+1 0 0 1 170.763 388.599 Tm (The) Tj
+0 0 0 rg
+1 0 0 1 192.423 388.599 Tm (Extensible) Tj
+0 0 0 rg
+1 0 0 1 246.087 388.599 Tm (Markup) Tj
+0 0 0 rg
+1 0 0 1 287.079 388.599 Tm (Language) Tj
+0 0 0 rg
+1 0 0 1 337.395 388.599 Tm (\(XML\)) Tj
+0 0 0 rg
+1 0 0 1 375.051 388.599 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 386.055 388.599 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 394.383 388.599 Tm (subset) Tj
+0 0 0 rg
+1 0 0 1 427.383 388.599 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 440.379 388.599 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 476.715 388.599 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 497.715 388.599 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 70.875 365.799 Tm (completely) Tj
+0 0 0 rg
+1 0 0 1 127.203 365.799 Tm (described) Tj
+0 0 0 rg
+1 0 0 1 176.187 365.799 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 188.523 365.799 Tm (this) Tj
+0 0 0 rg
+1 0 0 1 208.863 365.799 Tm (document.) Tj
+0 0 0 rg
+1 0 0 1 262.191 365.799 Tm (Its) Tj
+0 0 0 rg
+1 0 0 1 277.191 365.799 Tm (goal) Tj
+0 0 0 rg
+1 0 0 1 300.855 365.799 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 311.859 365.799 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 324.195 365.799 Tm (enable) Tj
+0 0 0 rg
+1 0 0 1 358.515 365.799 Tm (generic) Tj
+0 0 0 rg
+1 0 0 1 396.831 365.799 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 433.167 365.799 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 445.503 365.799 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 459.831 365.799 Tm (served,) Tj
+0 0 0 rg
+1 0 0 1 70.875 342.999 Tm (received,) Tj
+0 0 0 rg
+1 0 0 1 117.519 342.999 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 137.847 342.999 Tm (processed) Tj
+0 0 0 rg
+1 0 0 1 188.163 342.999 Tm (on) Tj
+0 0 0 rg
+1 0 0 1 203.163 342.999 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 220.827 342.999 Tm (Web) Tj
+0 0 0 rg
+1 0 0 1 246.483 342.999 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 258.819 342.999 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 276.483 342.999 Tm (way) Tj
+0 0 0 rg
+1 0 0 1 299.475 342.999 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 320.475 342.999 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 331.479 342.999 Tm (now) Tj
+0 0 0 rg
+1 0 0 1 355.143 342.999 Tm (possible) Tj
+0 0 0 rg
+1 0 0 1 397.479 342.999 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 421.815 342.999 Tm (HTML.) Tj
+0 0 0 rg
+1 0 0 1 461.811 342.999 Tm (XML) Tj
+0 0 0 rg
+1 0 0 1 491.475 342.999 Tm (has) Tj
+0 0 0 rg
+1 0 0 1 70.875 320.199 Tm (been) Tj
+0 0 0 rg
+1 0 0 1 96.531 320.199 Tm (designed) Tj
+0 0 0 rg
+1 0 0 1 142.191 320.199 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 159.183 320.199 Tm (ease) Tj
+0 0 0 rg
+1 0 0 1 182.835 320.199 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 195.831 320.199 Tm (implementation) Tj
+0 0 0 rg
+1 0 0 1 274.167 320.199 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 294.495 320.199 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 311.487 320.199 Tm (interoperability) Tj
+0 0 0 rg
+1 0 0 1 388.479 320.199 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 412.815 320.199 Tm (both) Tj
+0 0 0 rg
+1 0 0 1 437.151 320.199 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 473.487 320.199 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 70.875 297.399 Tm (HTML.) Tj
+0 0 0 rg
+1 0 0 1 110.871 297.399 Tm (For) Tj
+0 0 0 rg
+1 0 0 1 130.539 297.399 Tm (further) Tj
+0 0 0 rg
+1 0 0 1 166.191 297.399 Tm (information) Tj
+0 0 0 rg
+1 0 0 1 225.855 297.399 Tm (go) Tj
+0 0 0 rg
+1 0 0 1 240.855 297.399 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 253.191 297.399 Tm (normal.pdf) Tj
+0 0 0 rg
+1 0 0 1 70.875 268.599 Tm (7.) Tj
+0 0 0 rg
+1 0 0 1 82.875 268.599 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 94.539 268.599 Tm (multiline) Tj
+0 0 0 rg
+1 0 0 1 140.883 268.599 Tm (text) Tj
+0 0 0 rg
+1 0 0 1 161.883 268.599 Tm (\(text-align='start',) Tj
+0 0 0 rg
+1 0 0 1 249.627 268.599 Tm (space-before.optimum=6pt,) Tj
+0 0 0 rg
+1 0 0 1 385.371 268.599 Tm (font-family=serif,) Tj
+0 0 0 rg
+1 0 0 1 70.875 245.799 Tm (padding-top="3pt"\).) Tj
+0 0 0 rg
+1 0 0 1 170.763 245.799 Tm (The) Tj
+0 0 0 rg
+1 0 0 1 192.423 245.799 Tm (Extensible) Tj
+0 0 0 rg
+1 0 0 1 246.087 245.799 Tm (Markup) Tj
+0 0 0 rg
+1 0 0 1 287.079 245.799 Tm (Language) Tj
+0 0 0 rg
+1 0 0 1 337.395 245.799 Tm (\(XML\)) Tj
+0 0 0 rg
+1 0 0 1 375.051 245.799 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 386.055 245.799 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 394.383 245.799 Tm (subset) Tj
+0 0 0 rg
+1 0 0 1 427.383 245.799 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 440.379 245.799 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 476.715 245.799 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 497.715 245.799 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 70.875 222.999 Tm (completely) Tj
+0 0 0 rg
+1 0 0 1 127.203 222.999 Tm (described) Tj
+0 0 0 rg
+1 0 0 1 176.187 222.999 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 188.523 222.999 Tm (this) Tj
+0 0 0 rg
+1 0 0 1 208.863 222.999 Tm (document.) Tj
+0 0 0 rg
+1 0 0 1 262.191 222.999 Tm (Its) Tj
+0 0 0 rg
+1 0 0 1 277.191 222.999 Tm (goal) Tj
+0 0 0 rg
+1 0 0 1 300.855 222.999 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 311.859 222.999 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 324.195 222.999 Tm (enable) Tj
+0 0 0 rg
+1 0 0 1 358.515 222.999 Tm (generic) Tj
+0 0 0 rg
+1 0 0 1 396.831 222.999 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 433.167 222.999 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 445.503 222.999 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 459.831 222.999 Tm (served,) Tj
+0 0 0 rg
+1 0 0 1 70.875 200.199 Tm (received,) Tj
+0 0 0 rg
+1 0 0 1 117.519 200.199 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 137.847 200.199 Tm (processed) Tj
+0 0 0 rg
+1 0 0 1 188.163 200.199 Tm (on) Tj
+0 0 0 rg
+1 0 0 1 203.163 200.199 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 220.827 200.199 Tm (Web) Tj
+0 0 0 rg
+1 0 0 1 246.483 200.199 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 258.819 200.199 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 276.483 200.199 Tm (way) Tj
+0 0 0 rg
+1 0 0 1 299.475 200.199 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 320.475 200.199 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 331.479 200.199 Tm (now) Tj
+0 0 0 rg
+1 0 0 1 355.143 200.199 Tm (possible) Tj
+0 0 0 rg
+1 0 0 1 397.479 200.199 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 421.815 200.199 Tm (HTML.) Tj
+0 0 0 rg
+1 0 0 1 461.811 200.199 Tm (XML) Tj
+0 0 0 rg
+1 0 0 1 491.475 200.199 Tm (has) Tj
+0 0 0 rg
+1 0 0 1 70.875 177.399 Tm (been) Tj
+0 0 0 rg
+1 0 0 1 96.531 177.399 Tm (designed) Tj
+0 0 0 rg
+1 0 0 1 142.191 177.399 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 159.183 177.399 Tm (ease) Tj
+0 0 0 rg
+1 0 0 1 182.835 177.399 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 195.831 177.399 Tm (implementation) Tj
+0 0 0 rg
+1 0 0 1 274.167 177.399 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 294.495 177.399 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 311.487 177.399 Tm (interoperability) Tj
+0 0 0 rg
+1 0 0 1 388.479 177.399 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 412.815 177.399 Tm (both) Tj
+0 0 0 rg
+1 0 0 1 437.151 177.399 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 473.487 177.399 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 70.875 154.599 Tm (HTML.) Tj
+0 0 0 rg
+1 0 0 1 110.871 154.599 Tm (For) Tj
+0 0 0 rg
+1 0 0 1 130.539 154.599 Tm (further) Tj
+0 0 0 rg
+1 0 0 1 166.191 154.599 Tm (information) Tj
+0 0 0 rg
+1 0 0 1 225.855 154.599 Tm (go) Tj
+0 0 0 rg
+1 0 0 1 240.855 154.599 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 253.191 154.599 Tm (normal.pdf) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 17 0 R
+/Annots 19 0 R
+>>
+endobj
+19 0 obj
+[
+20 0 R
+23 0 R
+26 0 R
+29 0 R
+32 0 R
+35 0 R
+38 0 R
+41 0 R
+44 0 R
+]
+endobj
+20 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 274.335 728.595 331.023 714.195 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 22 0 R
+/H /I
+>>
+endobj
+21 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+22 0 obj
+<<
+/S /GoToR
+/F 21 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+23 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 376.167 701.595 432.855 687.195 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 25 0 R
+/H /I
+>>
+endobj
+24 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+25 0 obj
+<<
+/S /GoToR
+/F 24 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+26 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 455.691 620.595 512.379 606.195 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 28 0 R
+/H /I
+>>
+endobj
+27 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+28 0 obj
+<<
+/S /GoToR
+/F 27 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+29 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 460.071 539.595 516.759 525.195 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 31 0 R
+/H /I
+>>
+endobj
+30 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+31 0 obj
+<<
+/S /GoToR
+/F 30 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+32 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 464.451 458.595 521.139 444.195 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 34 0 R
+/H /I
+>>
+endobj
+33 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+34 0 obj
+<<
+/S /GoToR
+/F 33 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+35 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 358.515 379.995 393.831 355.995 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 37 0 R
+/H /I
+>>
+endobj
+36 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+37 0 obj
+<<
+/S /GoToR
+/F 36 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+38 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 253.191 311.595 306.183 287.595 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 40 0 R
+/H /I
+>>
+endobj
+39 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+40 0 obj
+<<
+/S /GoToR
+/F 39 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+41 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 358.515 234.195 393.831 210.195 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 43 0 R
+/H /I
+>>
+endobj
+42 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+43 0 obj
+<<
+/S /GoToR
+/F 42 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+44 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 253.191 165.795 306.183 141.795 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 46 0 R
+/H /I
+>>
+endobj
+45 0 obj
+<<
+/Type /FileSpec
+/F (normal.pdf)
+>>
+endobj
+46 0 obj
+<<
+/S /GoToR
+/F 45 0 R
+/D [ 0 /XYZ null null null ]
+>>
+endobj
+xref
+0 47
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000117 00000 n
+0000000179 00000 n
+0000000377 00000 n
+0000000488 00000 n
+0000000602 00000 n
+0000000707 00000 n
+0000000821 00000 n
+0000000929 00000 n
+0000001040 00000 n
+0000001150 00000 n
+0000001270 00000 n
+0000001383 00000 n
+0000001499 00000 n
+0000001607 00000 n
+0000001726 00000 n
+0000019765 00000 n
+0000019888 00000 n
+0000019971 00000 n
+0000020110 00000 n
+0000020164 00000 n
+0000020236 00000 n
+0000020375 00000 n
+0000020429 00000 n
+0000020501 00000 n
+0000020640 00000 n
+0000020694 00000 n
+0000020766 00000 n
+0000020905 00000 n
+0000020959 00000 n
+0000021031 00000 n
+0000021170 00000 n
+0000021224 00000 n
+0000021296 00000 n
+0000021435 00000 n
+0000021489 00000 n
+0000021561 00000 n
+0000021700 00000 n
+0000021754 00000 n
+0000021826 00000 n
+0000021965 00000 n
+0000022019 00000 n
+0000022091 00000 n
+0000022230 00000 n
+0000022284 00000 n
+trailer
+<<
+/Size 47
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+22356
+%%EOF
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 1
+/Kids [18 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] >>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 5767 >>
+stream
+BT
+/F3 14 Tf
+0 0 0 rg
+1 0 0 1 85.875 713.543 Tm (Validity) Tj
+0 0 0 rg
+1 0 0 1 139.565 713.543 Tm (Constraint:) Tj
+0 0 0 rg
+1 0 0 1 218.119 713.543 Tm (Standalone) Tj
+0 0 0 rg
+1 0 0 1 297.471 713.543 Tm (Document) Tj
+0 0 0 rg
+1 0 0 1 369.809 713.543 Tm (Declaration) Tj
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 70.875 695.529 Tm (The) Tj
+0 0 0 rg
+1 0 0 1 94.887 695.529 Tm (standalone) Tj
+0 0 0 rg
+1 0 0 1 156.927 695.529 Tm (document) Tj
+0 0 0 rg
+1 0 0 1 212.955 695.529 Tm (declaration) Tj
+0 0 0 rg
+1 0 0 1 274.983 695.529 Tm (must) Tj
+0 0 0 rg
+1 0 0 1 304.323 695.529 Tm (have) Tj
+0 0 0 rg
+1 0 0 1 333.675 695.529 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 353.691 695.529 Tm (value) Tj
+0 0 0 rg
+1 0 0 1 385.707 695.529 Tm ("no") Tj
+0 0 0 rg
+1 0 0 1 410.907 695.529 Tm (if) Tj
+0 0 0 rg
+1 0 0 1 420.243 695.529 Tm (any) Tj
+0 0 0 rg
+1 0 0 1 442.923 695.529 Tm (external) Tj
+0 0 0 rg
+1 0 0 1 70.875 681.429 Tm (markup) Tj
+0 0 0 rg
+1 0 0 1 114.219 681.429 Tm (declarations) Tj
+0 0 0 rg
+1 0 0 1 182.247 681.429 Tm (contain) Tj
+0 0 0 rg
+1 0 0 1 224.271 681.429 Tm (declarations) Tj
+0 0 0 rg
+1 0 0 1 292.299 681.429 Tm (of:) Tj
+0 0 0 rg
+1 0 0 1 70.875 664.629 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 94.875 664.629 Tm (attributes) Tj
+0 0 0 rg
+1 0 0 1 147.567 664.629 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 172.239 664.629 Tm (default) Tj
+0 0 0 rg
+1 0 0 1 211.599 664.629 Tm (values,) Tj
+0 0 0 rg
+1 0 0 1 252.951 664.629 Tm (if) Tj
+0 0 0 rg
+1 0 0 1 262.287 664.629 Tm (elements) Tj
+0 0 0 rg
+1 0 0 1 314.307 664.629 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 327.651 664.629 Tm (which) Tj
+0 0 0 rg
+1 0 0 1 361.659 664.629 Tm (these) Tj
+0 0 0 rg
+1 0 0 1 394.347 664.629 Tm (attributes) Tj
+0 0 0 rg
+1 0 0 1 447.039 664.629 Tm (apply) Tj
+0 0 0 rg
+1 0 0 1 479.055 664.629 Tm (appear) Tj
+0 0 0 rg
+1 0 0 1 94.875 651.129 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 107.547 651.129 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 127.563 651.129 Tm (document) Tj
+0 0 0 rg
+1 0 0 1 183.591 651.129 Tm (without) Tj
+0 0 0 rg
+1 0 0 1 224.943 651.129 Tm (specifications) Tj
+0 0 0 rg
+1 0 0 1 300.303 651.129 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 313.647 651.129 Tm (values) Tj
+0 0 0 rg
+1 0 0 1 351.663 651.129 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 369.003 651.129 Tm (these) Tj
+0 0 0 rg
+1 0 0 1 401.691 651.129 Tm (attributes,) Tj
+0 0 0 rg
+1 0 0 1 457.719 651.129 Tm (or) Tj
+0 0 0 rg
+1 0 0 1 70.875 637.629 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 94.875 637.629 Tm (entities) Tj
+0 0 0 rg
+1 0 0 1 136.227 637.629 Tm (\(other) Tj
+0 0 0 rg
+1 0 0 1 170.907 637.629 Tm (than) Tj
+0 0 0 rg
+1 0 0 1 197.595 637.629 Tm (amp,) Tj
+0 0 0 rg
+1 0 0 1 227.607 637.629 Tm (lt,) Tj
+0 0 0 rg
+1 0 0 1 240.279 637.629 Tm (gt,) Tj
+0 0 0 rg
+1 0 0 1 256.959 637.629 Tm (apos,) Tj
+0 0 0 rg
+1 0 0 1 289.647 637.629 Tm (quot\),) Tj
+0 0 0 rg
+1 0 0 1 323.667 637.629 Tm (if) Tj
+0 0 0 rg
+1 0 0 1 333.003 637.629 Tm (references) Tj
+0 0 0 rg
+1 0 0 1 393.027 637.629 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 406.371 637.629 Tm (those) Tj
+0 0 0 rg
+1 0 0 1 439.059 637.629 Tm (entities) Tj
+0 0 0 rg
+1 0 0 1 480.411 637.629 Tm (appear) Tj
+0 0 0 rg
+1 0 0 1 94.875 624.129 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 107.547 624.129 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 127.563 624.129 Tm (document,) Tj
+0 0 0 rg
+1 0 0 1 186.927 624.129 Tm (or) Tj
+0 0 0 rg
+1 0 0 1 70.875 610.629 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 94.875 610.629 Tm (attributes) Tj
+0 0 0 rg
+1 0 0 1 147.567 610.629 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 172.239 610.629 Tm (values) Tj
+0 0 0 rg
+1 0 0 1 210.255 610.629 Tm (subject) Tj
+0 0 0 rg
+1 0 0 1 251.607 610.629 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 264.951 610.629 Tm (normalization,) Tj
+0 0 0 rg
+1 0 0 1 342.975 610.629 Tm (where) Tj
+0 0 0 rg
+1 0 0 1 378.987 610.629 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 399.003 610.629 Tm (attribute) Tj
+0 0 0 rg
+1 0 0 1 445.695 610.629 Tm (appears) Tj
+0 0 0 rg
+1 0 0 1 492.387 610.629 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 505.059 610.629 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 94.875 597.129 Tm (document) Tj
+0 0 0 rg
+1 0 0 1 150.903 597.129 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 175.575 597.129 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 185.583 597.129 Tm (value) Tj
+0 0 0 rg
+1 0 0 1 217.599 597.129 Tm (which) Tj
+0 0 0 rg
+1 0 0 1 251.607 597.129 Tm (will) Tj
+0 0 0 rg
+1 0 0 1 70.875 583.629 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 94.875 583.629 Tm (change) Tj
+0 0 0 rg
+1 0 0 1 137.571 583.629 Tm (as) Tj
+0 0 0 rg
+1 0 0 1 153.579 583.629 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 163.587 583.629 Tm (result) Tj
+0 0 0 rg
+1 0 0 1 196.263 583.629 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 209.607 583.629 Tm (normalization,) Tj
+0 0 0 rg
+1 0 0 1 287.631 583.629 Tm (or) Tj
+0 0 0 rg
+1 0 0 1 70.875 570.129 Tm (\225) Tj
+0 0 0 rg
+1 0 0 1 94.875 570.129 Tm (element) Tj
+0 0 0 rg
+1 0 0 1 140.895 570.129 Tm (types) Tj
+0 0 0 rg
+1 0 0 1 172.911 570.129 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 197.583 570.129 Tm (element) Tj
+0 0 0 rg
+1 0 0 1 243.603 570.129 Tm (content,) Tj
+0 0 0 rg
+1 0 0 1 289.635 570.129 Tm (if) Tj
+0 0 0 rg
+1 0 0 1 298.971 570.129 Tm (white) Tj
+0 0 0 rg
+1 0 0 1 330.315 570.129 Tm (space) Tj
+0 0 0 rg
+1 0 0 1 365.667 570.129 Tm (occurs) Tj
+0 0 0 rg
+1 0 0 1 404.343 570.129 Tm (directly) Tj
+0 0 0 rg
+1 0 0 1 445.683 570.129 Tm (within) Tj
+0 0 0 rg
+1 0 0 1 479.691 570.129 Tm (any) Tj
+0 0 0 rg
+1 0 0 1 94.875 556.629 Tm (instance) Tj
+0 0 0 rg
+1 0 0 1 142.899 556.629 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 156.243 556.629 Tm (those) Tj
+0 0 0 rg
+1 0 0 1 188.931 556.629 Tm (types.) Tj
+/F5 10 Tf
+0 0 0 rg
+1 0 0 1 378.915 804.815 Tm (XSL-FO) Tj
+0 0 0 rg
+1 0 0 1 416.415 804.815 Tm (Example:) Tj
+0 0 0 rg
+1 0 0 1 457.245 804.815 Tm (simple) Tj
+0 0 0 rg
+1 0 0 1 486.415 804.815 Tm (list) Tj
+0 0 0 rg
+1 0 0 1 501.145 804.815 Tm (-) Tj
+0 0 0 rg
+1 0 0 1 506.975 804.815 Tm (p.) Tj
+0 0 0 rg
+1 0 0 1 516.975 804.815 Tm (1) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 17 0 R
+>>
+endobj
+xref
+0 19
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000117 00000 n
+0000000179 00000 n
+0000000377 00000 n
+0000000488 00000 n
+0000000602 00000 n
+0000000707 00000 n
+0000000821 00000 n
+0000000929 00000 n
+0000001040 00000 n
+0000001150 00000 n
+0000001270 00000 n
+0000001383 00000 n
+0000001499 00000 n
+0000001607 00000 n
+0000001726 00000 n
+0000007545 00000 n
+trailer
+<<
+/Size 19
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+7653
+%%EOF
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 1
+/Kids [18 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] >>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 10493 >>
+stream
+BT
+0 0 1 rg
+0 0 1 RG
+70.875 731.595 453.6 -25.65 re S
+70.875 731.595 453.6 -25.65 re f
+0 0 0 RG 0 0 0 rg
+/F1 18 Tf
+1 1 1 rg
+1 0 0 1 136.602 712.671 Tm (Extensible) Tj
+1 1 1 rg
+1 0 0 1 224.64 712.671 Tm (Markup) Tj
+1 1 1 rg
+1 0 0 1 289.656 712.671 Tm (Language) Tj
+1 1 1 rg
+1 0 0 1 374.724 712.671 Tm (\(XML\)) Tj
+1 1 1 rg
+1 0 0 1 428.724 712.671 Tm (1.0) Tj
+/F1 16 Tf
+0 0 0 rg
+1 0 0 1 70.875 667.457 Tm (Abstract) Tj
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 70.875 642.029 Tm (The) Tj
+0 0 0 rg
+1 0 0 1 94.887 642.029 Tm (Extensible) Tj
+0 0 0 rg
+1 0 0 1 153.579 642.029 Tm (Markup) Tj
+0 0 0 rg
+1 0 0 1 196.923 642.029 Tm (Language) Tj
+0 0 0 rg
+1 0 0 1 253.635 642.029 Tm (\(XML\)) Tj
+0 0 0 rg
+1 0 0 1 289.635 642.029 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 301.635 642.029 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 311.643 642.029 Tm (subset) Tj
+0 0 0 rg
+1 0 0 1 350.331 642.029 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 363.675 642.029 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 401.019 642.029 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 424.371 642.029 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 436.371 642.029 Tm (completely) Tj
+0 0 0 rg
+1 0 0 1 70.875 627.929 Tm (described) Tj
+0 0 0 rg
+1 0 0 1 126.231 627.929 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 138.903 627.929 Tm (this) Tj
+0 0 0 rg
+1 0 0 1 160.911 627.929 Tm (document.) Tj
+0 0 0 rg
+1 0 0 1 220.275 627.929 Tm (Its) Tj
+0 0 0 rg
+1 0 0 1 236.283 627.929 Tm (goal) Tj
+0 0 0 rg
+1 0 0 1 262.299 627.929 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 274.299 627.929 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 287.643 627.929 Tm (enable) Tj
+0 0 0 rg
+1 0 0 1 327.003 627.929 Tm (generic) Tj
+0 0 0 rg
+1 0 0 1 369.687 627.929 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 407.031 627.929 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 420.375 627.929 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 437.055 627.929 Tm (served,) Tj
+0 0 0 rg
+1 0 0 1 70.875 613.829 Tm (received,) Tj
+0 0 0 rg
+1 0 0 1 122.895 613.829 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 146.247 613.829 Tm (processed) Tj
+0 0 0 rg
+1 0 0 1 204.939 613.829 Tm (on) Tj
+0 0 0 rg
+1 0 0 1 221.619 613.829 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 241.635 613.829 Tm (Web) Tj
+0 0 0 rg
+1 0 0 1 269.643 613.829 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 282.315 613.829 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 302.331 613.829 Tm (way) Tj
+0 0 0 rg
+1 0 0 1 327.003 613.829 Tm (that) Tj
+0 0 0 rg
+1 0 0 1 350.355 613.829 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 362.355 613.829 Tm (now) Tj
+0 0 0 rg
+1 0 0 1 387.699 613.829 Tm (possible) Tj
+0 0 0 rg
+1 0 0 1 435.051 613.829 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 459.723 613.829 Tm (HTML.) Tj
+0 0 0 rg
+1 0 0 1 499.059 613.829 Tm (XML) Tj
+0 0 0 rg
+1 0 0 1 70.875 599.729 Tm (has) Tj
+0 0 0 rg
+1 0 0 1 93.555 599.729 Tm (been) Tj
+0 0 0 rg
+1 0 0 1 123.579 599.729 Tm (designed) Tj
+0 0 0 rg
+1 0 0 1 175.611 599.729 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 192.951 599.729 Tm (ease) Tj
+0 0 0 rg
+1 0 0 1 222.303 599.729 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 235.647 599.729 Tm (implementation) Tj
+0 0 0 rg
+1 0 0 1 320.343 599.729 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 343.695 599.729 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 361.035 599.729 Tm (interoperability) Tj
+0 0 0 rg
+1 0 0 1 442.395 599.729 Tm (with) Tj
+0 0 0 rg
+1 0 0 1 467.067 599.729 Tm (both) Tj
+0 0 0 rg
+1 0 0 1 70.875 585.629 Tm (SGML) Tj
+0 0 0 rg
+1 0 0 1 108.219 585.629 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 131.571 585.629 Tm (HTML.) Tj
+/F1 16 Tf
+0 0 0 rg
+1 0 0 1 70.875 555.157 Tm (Status) Tj
+0 0 0 rg
+1 0 0 1 120.683 555.157 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 138.475 555.157 Tm (this) Tj
+0 0 0 rg
+1 0 0 1 167.819 555.157 Tm (document) Tj
+/F1 12 Tf
+0 0 0 rg
+1 0 0 1 70.875 529.729 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 96.879 529.729 Tm (document) Tj
+0 0 0 rg
+1 0 0 1 152.907 529.729 Tm (has) Tj
+0 0 0 rg
+1 0 0 1 175.587 529.729 Tm (been) Tj
+0 0 0 rg
+1 0 0 1 205.611 529.729 Tm (reviewed) Tj
+0 0 0 rg
+1 0 0 1 256.959 529.729 Tm (by) Tj
+0 0 0 rg
+1 0 0 1 272.967 529.729 Tm (W3C) Tj
+0 0 0 rg
+1 0 0 1 302.967 529.729 Tm (Members) Tj
+0 0 0 rg
+1 0 0 1 356.307 529.729 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 379.659 529.729 Tm (other) Tj
+0 0 0 rg
+1 0 0 1 410.343 529.729 Tm (interested) Tj
+0 0 0 rg
+1 0 0 1 466.371 529.729 Tm (parties) Tj
+0 0 0 rg
+1 0 0 1 70.875 515.629 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 94.227 515.629 Tm (has) Tj
+0 0 0 rg
+1 0 0 1 116.907 515.629 Tm (been) Tj
+0 0 0 rg
+1 0 0 1 146.931 515.629 Tm (endorsed) Tj
+0 0 0 rg
+1 0 0 1 200.295 515.629 Tm (by) Tj
+0 0 0 rg
+1 0 0 1 216.303 515.629 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 236.319 515.629 Tm (Director) Tj
+0 0 0 rg
+1 0 0 1 281.655 515.629 Tm (as) Tj
+0 0 0 rg
+1 0 0 1 297.663 515.629 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 307.671 515.629 Tm (W3C) Tj
+0 0 0 rg
+1 0 0 1 337.671 515.629 Tm (Recommendation.) Tj
+0 0 0 rg
+1 0 0 1 438.375 515.629 Tm (It) Tj
+0 0 0 rg
+1 0 0 1 448.383 515.629 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 460.383 515.629 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 470.391 515.629 Tm (stable) Tj
+0 0 0 rg
+1 0 0 1 70.875 501.529 Tm (document) Tj
+0 0 0 rg
+1 0 0 1 126.903 501.529 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 150.255 501.529 Tm (may) Tj
+0 0 0 rg
+1 0 0 1 176.259 501.529 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 192.939 501.529 Tm (used) Tj
+0 0 0 rg
+1 0 0 1 222.291 501.529 Tm (as) Tj
+0 0 0 rg
+1 0 0 1 238.299 501.529 Tm (reference) Tj
+0 0 0 rg
+1 0 0 1 292.323 501.529 Tm (material) Tj
+0 0 0 rg
+1 0 0 1 338.331 501.529 Tm (or) Tj
+0 0 0 rg
+1 0 0 1 352.335 501.529 Tm (cited) Tj
+0 0 0 rg
+1 0 0 1 381.015 501.529 Tm (as) Tj
+0 0 0 rg
+1 0 0 1 397.023 501.529 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 407.031 501.529 Tm (normative) Tj
+0 0 0 rg
+1 0 0 1 463.047 501.529 Tm (reference) Tj
+0 0 0 rg
+1 0 0 1 70.875 487.429 Tm (from) Tj
+0 0 0 rg
+1 0 0 1 98.211 487.429 Tm (another) Tj
+0 0 0 rg
+1 0 0 1 142.239 487.429 Tm (document.) Tj
+0 0 0 rg
+1 0 0 1 201.603 487.429 Tm (W3C's) Tj
+0 0 0 rg
+1 0 0 1 239.895 487.429 Tm (role) Tj
+0 0 0 rg
+1 0 0 1 263.235 487.429 Tm (in) Tj
+0 0 0 rg
+1 0 0 1 275.907 487.429 Tm (making) Tj
+0 0 0 rg
+1 0 0 1 317.919 487.429 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 337.935 487.429 Tm (Recommendation) Tj
+0 0 0 rg
+1 0 0 1 435.303 487.429 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 447.303 487.429 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 460.647 487.429 Tm (draw) Tj
+0 0 0 rg
+1 0 0 1 70.875 473.329 Tm (attention) Tj
+0 0 0 rg
+1 0 0 1 120.243 473.329 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 133.587 473.329 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 153.603 473.329 Tm (specification) Tj
+0 0 0 rg
+1 0 0 1 222.963 473.329 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 246.315 473.329 Tm (to) Tj
+0 0 0 rg
+1 0 0 1 259.659 473.329 Tm (promote) Tj
+0 0 0 rg
+1 0 0 1 307.011 473.329 Tm (its) Tj
+0 0 0 rg
+1 0 0 1 322.347 473.329 Tm (widespread) Tj
+0 0 0 rg
+1 0 0 1 387.039 473.329 Tm (deployment.) Tj
+0 0 0 rg
+1 0 0 1 455.739 473.329 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 70.875 459.229 Tm (enhances) Tj
+0 0 0 rg
+1 0 0 1 126.243 459.229 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 146.259 459.229 Tm (functionality) Tj
+0 0 0 rg
+1 0 0 1 212.955 459.229 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 236.307 459.229 Tm (interoperability) Tj
+0 0 0 rg
+1 0 0 1 317.667 459.229 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 331.011 459.229 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 351.027 459.229 Tm (Web.) Tj
+0 0 0 rg
+1 0 0 1 70.875 442.129 Tm (This) Tj
+0 0 0 rg
+1 0 0 1 96.879 442.129 Tm (document) Tj
+0 0 0 rg
+1 0 0 1 152.907 442.129 Tm (specifies) Tj
+0 0 0 rg
+1 0 0 1 202.923 442.129 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 212.931 442.129 Tm (syntax) Tj
+0 0 0 rg
+1 0 0 1 250.947 442.129 Tm (created) Tj
+0 0 0 rg
+1 0 0 1 294.303 442.129 Tm (by) Tj
+0 0 0 rg
+1 0 0 1 310.311 442.129 Tm (subsetting) Tj
+0 0 0 rg
+1 0 0 1 368.343 442.129 Tm (an) Tj
+0 0 0 rg
+1 0 0 1 385.023 442.129 Tm (existing,) Tj
+0 0 0 rg
+1 0 0 1 432.375 442.129 Tm (widely) Tj
+0 0 0 rg
+1 0 0 1 469.047 442.129 Tm (used) Tj
+0 0 0 rg
+1 0 0 1 70.875 428.029 Tm (international) Tj
+0 0 0 rg
+1 0 0 1 139.575 428.029 Tm (text) Tj
+0 0 0 rg
+1 0 0 1 162.255 428.029 Tm (processing) Tj
+0 0 0 rg
+1 0 0 1 223.611 428.029 Tm (standard) Tj
+0 0 0 rg
+1 0 0 1 273.639 428.029 Tm (\(Standard) Tj
+0 0 0 rg
+1 0 0 1 329.667 428.029 Tm (Generalized) Tj
+0 0 0 rg
+1 0 0 1 397.695 428.029 Tm (Markup) Tj
+0 0 0 rg
+1 0 0 1 441.039 428.029 Tm (Language,) Tj
+0 0 0 rg
+1 0 0 1 501.087 428.029 Tm (ISO) Tj
+0 0 0 rg
+1 0 0 1 70.875 413.929 Tm (8879:1986\(E\)) Tj
+0 0 0 rg
+1 0 0 1 146.919 413.929 Tm (as) Tj
+0 0 0 rg
+1 0 0 1 162.927 413.929 Tm (amended) Tj
+0 0 0 rg
+1 0 0 1 216.291 413.929 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 239.643 413.929 Tm (corrected\)) Tj
+0 0 0 rg
+1 0 0 1 296.991 413.929 Tm (for) Tj
+0 0 0 rg
+1 0 0 1 314.331 413.929 Tm (use) Tj
+0 0 0 rg
+1 0 0 1 337.011 413.929 Tm (on) Tj
+0 0 0 rg
+1 0 0 1 353.691 413.929 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 373.707 413.929 Tm (World) Tj
+0 0 0 rg
+1 0 0 1 408.375 413.929 Tm (Wide) Tj
+0 0 0 rg
+1 0 0 1 439.047 413.929 Tm (Web.) Tj
+0 0 0 rg
+1 0 0 1 470.391 413.929 Tm (It) Tj
+0 0 0 rg
+1 0 0 1 480.399 413.929 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 492.399 413.929 Tm (a) Tj
+0 0 0 rg
+1 0 0 1 70.875 399.829 Tm (product) Tj
+0 0 0 rg
+1 0 0 1 114.231 399.829 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 127.575 399.829 Tm (the) Tj
+0 0 0 rg
+1 0 0 1 147.591 399.829 Tm (W3C) Tj
+0 0 0 rg
+1 0 0 1 177.591 399.829 Tm (XML) Tj
+0 0 0 rg
+1 0 0 1 205.599 399.829 Tm (Activity,) Tj
+0 0 0 rg
+1 0 0 1 250.275 399.829 Tm (details) Tj
+0 0 0 rg
+1 0 0 1 288.291 399.829 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 301.635 399.829 Tm (which) Tj
+0 0 0 rg
+1 0 0 1 335.643 399.829 Tm (can) Tj
+0 0 0 rg
+1 0 0 1 358.323 399.829 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 375.003 399.829 Tm (found) Tj
+0 0 0 rg
+1 0 0 1 408.363 399.829 Tm (at) Tj
+0 0 0 rg
+1 0 0 1 70.875 385.729 Tm (http://www.w3.org/XML.) Tj
+0 0 0 rg
+1 0 0 1 200.919 385.729 Tm (A) Tj
+0 0 0 rg
+1 0 0 1 212.259 385.729 Tm (list) Tj
+0 0 0 rg
+1 0 0 1 230.259 385.729 Tm (of) Tj
+0 0 0 rg
+1 0 0 1 243.603 385.729 Tm (current) Tj
+0 0 0 rg
+1 0 0 1 284.283 385.729 Tm (W3C) Tj
+0 0 0 rg
+1 0 0 1 314.283 385.729 Tm (Recommendations) Tj
+0 0 0 rg
+1 0 0 1 417.651 385.729 Tm (and) Tj
+0 0 0 rg
+1 0 0 1 441.003 385.729 Tm (other) Tj
+0 0 0 rg
+1 0 0 1 471.687 385.729 Tm (technical) Tj
+0 0 0 rg
+1 0 0 1 70.875 371.629 Tm (documents) Tj
+0 0 0 rg
+1 0 0 1 132.903 371.629 Tm (can) Tj
+0 0 0 rg
+1 0 0 1 155.583 371.629 Tm (be) Tj
+0 0 0 rg
+1 0 0 1 172.263 371.629 Tm (found) Tj
+0 0 0 rg
+1 0 0 1 205.623 371.629 Tm (at) Tj
+0 0 0 rg
+1 0 0 1 218.967 371.629 Tm (http://www.w3.org/TR.) Tj
+/F5 10 Tf
+0 0 0 rg
+1 0 0 1 403.375 804.815 Tm (XML) Tj
+0 0 0 rg
+1 0 0 1 428.095 804.815 Tm (Recommendation) Tj
+0 0 0 rg
+1 0 0 1 501.145 804.815 Tm (-) Tj
+0 0 0 rg
+1 0 0 1 506.975 804.815 Tm (p.) Tj
+0 0 0 rg
+1 0 0 1 516.975 804.815 Tm (1) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 17 0 R
+>>
+endobj
+xref
+0 19
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000117 00000 n
+0000000179 00000 n
+0000000377 00000 n
+0000000488 00000 n
+0000000602 00000 n
+0000000707 00000 n
+0000000821 00000 n
+0000000929 00000 n
+0000001040 00000 n
+0000001150 00000 n
+0000001270 00000 n
+0000001383 00000 n
+0000001499 00000 n
+0000001607 00000 n
+0000001726 00000 n
+0000012272 00000 n
+trailer
+<<
+/Size 19
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+12380
+%%EOF
--- /dev/null
+%PDF-1.3
+1 0 obj
+<< /Type /Catalog
+/Pages 2 0 R >>
+endobj
+2 0 obj
+<< /Type /Pages
+/Count 1
+/Kids [18 0 R ] >>
+endobj
+3 0 obj
+<< /Type /Info
+/Producer (FOP 0.12.2 [dev]) >>
+endobj
+4 0 obj
+<<
+/Font << /F11 5 0 R /F10 6 0 R /F9 7 0 R /F8 8 0 R /F7 9 0 R /F6 10 0 R /F5 11 0 R /F4 12 0 R /F3 13 0 R /F2 14 0 R /F1 15 0 R /F12 16 0 R >>
+/ProcSet [ /PDF /ImageC /Text ] >>
+endobj
+5 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F11
+/BaseFont /Courier-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+6 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F10
+/BaseFont /Courier-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+7 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+8 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F8
+/BaseFont /Times-BoldItalic
+/Encoding /WinAnsiEncoding >>
+endobj
+9 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+10 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+11 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+12 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F4
+/BaseFont /Helvetica-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+13 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+14 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+15 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+16 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F12
+/BaseFont /Courier-BoldOblique
+/Encoding /WinAnsiEncoding >>
+endobj
+17 0 obj
+<< /Length 1827 >>
+stream
+BT
+/F3 10 Tf
+0 0 0 rg
+1 0 0 1 85.875 721.415 Tm (Content) Tj
+/F1 10 Tf
+0 0 0 rg
+1 0 0 1 86.445 708.165 Tm (A\)) Tj
+0 0 0 rg
+1 0 0 1 99.225 708.165 Tm (What) Tj
+0 0 0 rg
+1 0 0 1 125.345 708.165 Tm (is) Tj
+0 0 0 rg
+1 0 0 1 135.345 708.165 Tm (FOP?) Tj
+0 0 0 rg
+1 0 0 1 86.445 696.915 Tm (B\)) Tj
+0 0 0 rg
+1 0 0 1 99.225 696.915 Tm (Downloading) Tj
+0 0 0 rg
+1 0 0 1 159.805 696.915 Tm (FOP) Tj
+0 0 0 rg
+1 0 0 1 85.895 685.665 Tm (C\)) Tj
+0 0 0 rg
+1 0 0 1 99.225 685.665 Tm (Running) Tj
+0 0 0 rg
+1 0 0 1 139.245 685.665 Tm (FOP) Tj
+0 0 0 rg
+1 0 0 1 85.895 674.415 Tm (D\)) Tj
+0 0 0 rg
+1 0 0 1 99.225 674.415 Tm (Embedding) Tj
+0 0 0 rg
+1 0 0 1 152.585 674.415 Tm (FOP) Tj
+0 0 0 rg
+1 0 0 1 86.445 663.165 Tm (E\)) Tj
+0 0 0 rg
+1 0 0 1 99.225 663.165 Tm (What's) Tj
+0 0 0 rg
+1 0 0 1 132.255 663.165 Tm (Implemented?) Tj
+0 0 0 rg
+1 0 0 1 87.005 651.915 Tm (F\)) Tj
+0 0 0 rg
+1 0 0 1 99.225 651.915 Tm (Limitations) Tj
+0 0 0 rg
+1 0 0 1 85.335 640.665 Tm (G\)) Tj
+0 0 0 rg
+1 0 0 1 99.225 640.665 Tm (Bugs) Tj
+0 0 0 rg
+1 0 0 1 85.895 629.415 Tm (H\)) Tj
+0 0 0 rg
+1 0 0 1 99.225 629.415 Tm (Compiling) Tj
+0 0 0 rg
+1 0 0 1 146.455 629.415 Tm (FOP) Tj
+0 0 0 rg
+1 0 0 1 90.335 618.165 Tm (I\)) Tj
+0 0 0 rg
+1 0 0 1 99.225 618.165 Tm (Getting) Tj
+0 0 0 rg
+1 0 0 1 134.245 618.165 Tm (involved) Tj
+0 0 0 rg
+1 0 0 1 88.115 606.915 Tm (J\)) Tj
+0 0 0 rg
+1 0 0 1 99.225 606.915 Tm (FOP) Tj
+0 0 0 rg
+1 0 0 1 122.565 606.915 Tm (Relevant) Tj
+0 0 0 rg
+1 0 0 1 164.805 606.915 Tm (Specifications) Tj
+0 0 0 rg
+1 0 0 1 86.445 595.665 Tm (K\)) Tj
+0 0 0 rg
+1 0 0 1 99.225 595.665 Tm (Licence) Tj
+/F5 10 Tf
+0 0 0 rg
+1 0 0 1 480.305 804.815 Tm (FOP) Tj
+0 0 0 rg
+1 0 0 1 501.145 804.815 Tm (-) Tj
+0 0 0 rg
+1 0 0 1 506.975 804.815 Tm (p.) Tj
+0 0 0 rg
+1 0 0 1 516.975 804.815 Tm (1) Tj
+ET
+
+endstream
+endobj
+18 0 obj
+<< /Type /Page
+/Parent 2 0 R
+/MediaBox [ 0 0 595 841 ]
+/Resources 4 0 R
+/Contents 17 0 R
+>>
+endobj
+xref
+0 19
+0000000000 65535 f
+0000000009 00000 n
+0000000058 00000 n
+0000000117 00000 n
+0000000179 00000 n
+0000000377 00000 n
+0000000488 00000 n
+0000000602 00000 n
+0000000707 00000 n
+0000000821 00000 n
+0000000929 00000 n
+0000001040 00000 n
+0000001150 00000 n
+0000001270 00000 n
+0000001383 00000 n
+0000001499 00000 n
+0000001607 00000 n
+0000001726 00000 n
+0000003605 00000 n
+trailer
+<<
+/Size 19
+/Root 1 0 R
+/Info 3 0 R
+>>
+startxref
+3713
+%%EOF
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>FAQ Running FOP</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/faq-running-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Questions</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif"><UL><LI><A href="#faq-1">Source files for the formatting properties are missing</A></LI><LI><A href="#faq-2">Formatting object xxx doesn't work as expected</A></LI><LI><A href="#faq-3">Supporting the latest XSL working draft</A></LI><LI><A href="#faq-4">Fatal error: Root element must be root</A></LI><LI><A href="#faq-5">Char '>' inserted into page number</A></LI><LI><A href="#faq-6">Are font properties allowed here</A></LI><LI><A href="#faq-7">Supported fonts</A></LI></UL></FONT></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Answers</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif"><BR><A name="faq-1"><!--anchor--></A><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>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?</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1"><P>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.
+ </P>
+ </FONT></TD></TR></TABLE><BR><A name="faq-2"><!--anchor--></A><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Q: Feature xxx of the XSL Working Draft 27 March 2000 does not work as it should. Why?</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1"><P>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.
+ </P>
+ </FONT></TD></TR></TABLE><BR><A name="faq-3"><!--anchor--></A><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Q: When will the latest version of the XSL working draft be supported?</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1"><P>Basic conformance to the latest XSL working draft is scheduled for fall 2000.
+ </P>
+ </FONT></TD></TR></TABLE><BR><A name="faq-4"><!--anchor--></A><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>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".</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1">
+ <P>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"
+ </P>
+ </FONT></TD></TR></TABLE><BR><A name="faq-5"><!--anchor--></A><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Q: The char ">" is inserted into the page number display like this
+ "formatting FOs into areas [1] [2] [3>>>>]". Is this a bug?</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1"><P>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).</P></FONT></TD></TR></TABLE><BR><A name="faq-6"><!--anchor--></A><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>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.
+ </B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1">
+ <P>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).
+ </P>
+ <P>The dtd coming with the xsl-fo spec isn't correct in this respect.
+ </P>
+ </FONT></TD></TR></TABLE><BR><A name="faq-7"><!--anchor--></A><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>I need some additional fonts in FOP. How I can set embedding fonts?
+ </B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1">
+ <P>At present, FOP does not support any fonts other than the in-built fonts
+ Times, Helvetica and Courier.
+ </P>
+ </FONT></TD></TR></TABLE><BR></FONT></TD></TR></TABLE><BR></TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>FAQs</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/faqs-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <IMG alt="FAQs" border="0" height="12" hspace="0" src="graphics/faqs-label-1.jpg" vspace="0" width="120"><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>FAQ Running FOP</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif"><P>
+ Read the <A href="faq-running.html">FAQ Running FOP</A>
+ document or jump directly to:
+ </P><UL><LI><A href="faq-running.html#faq-1">Source files for the formatting properties are missing</A></LI><LI><A href="faq-running.html#faq-2">Formatting object xxx doesn't work as expected</A></LI><LI><A href="faq-running.html#faq-3">Supporting the latest XSL working draft</A></LI><LI><A href="faq-running.html#faq-4">Fatal error: Root element must be root</A></LI><LI><A href="faq-running.html#faq-5">Char '>' inserted into page number</A></LI><LI><A href="faq-running.html#faq-6">Are font properties allowed here</A></LI><LI><A href="faq-running.html#faq-7">Supported fonts</A></LI></UL></FONT></TD></TR></TABLE><BR></TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>Features</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/implemented-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG alt="Features" border="0" height="12" hspace="0" src="graphics/implemented-label-1.jpg" vspace="0" width="120"><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>What's Implemented?</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>The following formatting objects and properties of the xsl-fo
+ working draft (21 Apr 1999) are implemented. Please have also a look at the
+ section on <A href="limitations.html">limitations</A>
+ </P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>1) Formatting Objects</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <UL>
+ <LI>block </LI>
+ <LI>display-graphic</LI>
+ <LI>display-rule </LI>
+ <LI>display-sequence </LI>
+ <LI>flow</LI>
+ <LI>inline-graphic</LI>
+ <LI>inline-sequence </LI>
+ <LI>layout-master-set </LI>
+ <LI>list-block </LI>
+ <LI>list-item </LI>
+ <LI>list-item-body </LI>
+ <LI>list-item-label </LI>
+ <LI>page-number </LI>
+ <LI>page-sequence </LI>
+ <LI>region-after </LI>
+ <LI>region-before </LI>
+ <LI>region-body </LI>
+ <LI>root</LI>
+ <LI>sequence-specification </LI>
+ <LI>sequence-specifier-alternating </LI>
+ <LI>sequence-specifier-repeating </LI>
+ <LI>sequence-specifier-single </LI>
+ <LI>simple-page-master </LI>
+ <LI>static-content </LI>
+ <LI>table (minimal support)</LI>
+ <LI>table-body (minimal support)</LI>
+ <LI>table-cell (minimal support)</LI>
+ <LI>table-column (minimal support)</LI>
+ <LI>table-row (minimal support)</LI>
+ </UL>
+ </FONT></TD></TR></TABLE><BR>
+
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>2) Properties</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <UL>
+ <LI>background-color </LI>
+ <LI>border-after-color</LI>
+ <LI>border-after-style</LI>
+ <LI>border-after-width</LI>
+ <LI>border-before-color</LI>
+ <LI>border-before-style</LI>
+ <LI>border-before-width</LI>
+ <LI>border-bottom</LI>
+ <LI>border-bottom-color</LI>
+ <LI>border-bottom-style</LI>
+ <LI>border-bottom-width</LI>
+ <LI>border-color (only one value allowed) </LI>
+ <LI>border-end-color</LI>
+ <LI>border-end-style</LI>
+ <LI>border-end-width</LI>
+ <LI>border-left</LI>
+ <LI>border-left-color</LI>
+ <LI>border-left-style</LI>
+ <LI>border-left-width</LI>
+ <LI>border-right</LI>
+ <LI>border-right-color</LI>
+ <LI>border-right-style</LI>
+ <LI>border-right-width</LI>
+ <LI>border-start-color</LI>
+ <LI>border-start-style</LI>
+ <LI>border-start-width</LI>
+ <LI>border-style</LI>
+ <LI>border-top</LI>
+ <LI>border-top-color</LI>
+ <LI>border-top-style</LI>
+ <LI>border-top-width</LI>
+ <LI>border-width</LI>
+ <LI>bottom</LI>
+ <LI>break-after </LI>
+ <LI>break-before </LI>
+ <LI>color </LI>
+ <LI>column-width </LI>
+ <LI>end-indent </LI>
+ <LI>extent </LI>
+ <LI>flow-name </LI>
+ <LI>font-family </LI>
+ <LI>font-size </LI>
+ <LI>font-style </LI>
+ <LI>font-weight </LI>
+ <LI>height</LI>
+ <LI>href </LI>
+ <LI>id</LI>
+ <LI>initial-page-number</LI>
+ <LI>keep-with-next</LI>
+ <LI>left</LI>
+ <LI>line-height </LI>
+ <LI>margin-bottom (only on pages and regions) </LI>
+ <LI>margin-left (only on pages and regions) </LI>
+ <LI>margin-right (only on pages and regions) </LI>
+ <LI>margin-top (only on pages and regions) </LI>
+ <LI>padding (only one value allowed) </LI>
+ <LI>padding-after</LI>
+ <LI>padding-before</LI>
+ <LI>padding-bottom (only in conjunction with background color) </LI>
+ <LI>padding-end</LI>
+ <LI>padding-left (only in conjunction with background color) </LI>
+ <LI>padding-right (only in conjunction with background color) </LI>
+ <LI>padding-start</LI>
+ <LI>padding-top (only in conjunction with background color) </LI>
+ <LI>page-height </LI>
+ <LI>page-master-even </LI>
+ <LI>page-master-first </LI>
+ <LI>page-master-name </LI>
+ <LI>page-master-odd </LI>
+ <LI>page-master-repeating </LI>
+ <LI>page-width </LI>
+ <LI>position (allowed values: "static" (default),"relative", "absolute", fixed ) </LI>
+ <LI>provisional-distance-between-starts </LI>
+ <LI>provisional-label-separation </LI>
+ <LI>right</LI>
+ <LI>rule-thickness </LI>
+ <LI>space-after.optimum </LI>
+ <LI>space-before.optimum </LI>
+ <LI>start-indent </LI>
+ <LI>text-align </LI>
+ <LI>text-align-last </LI>
+ <LI>text-indent </LI>
+ <LI>top</LI>
+ <LI>white-space-treatment </LI>
+ <LI>width</LI>
+ <LI>wrap-option</LI> </UL>
+ </FONT></TD></TR></TABLE><BR>
+</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>Fop</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/index-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <IMG alt="Readme" border="0" height="12" hspace="0" src="graphics/index-label-1.jpg" vspace="0" width="120"><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>What is FOP?</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>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.
+ </P>
+ <P>FOP is part of Apache's XML project. The homepage of FOP is
+ <A href="http://xml.apache.org/fop">http://xml.apache.org/fop</A>.
+ </P>
+ </FONT></TD></TR></TABLE><BR>
+
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>FOP Objectives</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>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.
+ </P>
+
+ <P>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.
+ </P>
+
+ <P>Secondary goals of the FOP Project (also, "FOP") are desirable requirements that also have a high priority.
+ </P>
+
+ <P>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.
+ </P>
+
+ <P>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.
+ </P>
+
+ <P>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.
+ </P>
+ </FONT></TD></TR></TABLE><BR>
+
+</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>Getting involved</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/involved-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG alt="Getting involved" border="0" height="12" hspace="0" src="graphics/involved-label-1.jpg" vspace="0" width="120"><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
+
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Read the Status file</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>The Status file contains the list of features people are working on at the moment.
+ And an outline what steps are next.</P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Subscribe to the fop discussion list</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>You can subscribe to fop-dev@xml.apache.org by sending an email
+ to <A href="mailto:fop-dev-subscribe@xml.apache.org">fop-dev-subscribe@xml.apache.org</A></P>
+ <P>Sending bug reports and feature requests to the list is a welcome and important contribution to
+ developing Fop. </P>
+ <P>Read also the <A href="http://xml-archive.webweaving.org/xml-archive-fop/">archive</A>
+ of the discussion list fop-dev to get an idea of the issues being discussed. </P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Look at the developer's code using cvs</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>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 <A href="http://xml.apache.org/cvs.html">http://xml.apache.org/cvs.html</A>.
+ An introduction into cvs and the cvs manual can be found in the
+ <A href="http://xml.apache.org/library.html">reference library</A>.</P>
+ <P>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 <A href="mailto:fop-cvs-subscribe@xml.apache.org">
+ fop-cvs-subscribe@xml.apache.org</A>. If you want to contribute to the development of Fop you should subscribe,
+ because it is important that you follow changes being made. </P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Contributing code and documentation</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>If you want to contribute code (p.e. a bugfix) or documentation (p.e. an additional example), please do the following: </P>
+ <P>1) Make sure your code doesn't break the existing one and that Fop still compiles.</P>
+ <P>2) Create a file which shows the differences to the existing code.</P>
+ <P>3) Send this file to fop-dev@xml.apache.org.</P>
+ <P>One of the committers will test your code and commit it to the code repository.</P>
+ <P>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 <A href="http://xml.apache.org/roles.html">here</A>).</P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Get familiar with the Fop related standards</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>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 <A href="specs.html">website</A>.</P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Fop's architecture</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>A bird's eye view on the way Fop operates can be found in the document <A href="architecture.html">FOP Mechanics</A></P>
+ <P>If you want to extend the functionality of FOP by adding new formatting objects, you should do the following: </P>
+ <P>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)</P>
+ <P>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)</P>
+ <P>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.</P>
+ <P>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. </P>
+ </FONT></TD></TR></TABLE><BR>
+</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>License</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/license-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG alt="License" border="0" height="12" hspace="0" src="graphics/license-label-1.jpg" vspace="0" width="120"><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>The Apache Software License, Version 1.1</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P> Copyright (C) 1999 The Apache Software Foundation. All rights reserved.</P>
+ <P> Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:</P>
+ <P>1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ </P>
+
+ <P>2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ </P>
+
+ <P>3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+ </P>
+
+ <P>4. The names "FOP" and "Apache Software Foundation" must not be used to
+ endorse or promote products derived from this software without prior
+ written permission. For written permission, please contact
+ apache@apache.org.
+ </P>
+
+ <P>5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+ </P>
+ <P>THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ </P>
+
+ <P>
+ 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 <A href="http://www.apache.org/">http://www.apache.org/</A>.
+ </P>
+ </FONT></TD></TR></TABLE><BR>
+</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>Limitations</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/limitations-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG alt="Limitations" border="0" height="12" hspace="0" src="graphics/limitations-label-1.jpg" vspace="0" width="120"><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
+ <P>The main limitation at the moment is: FOP only supports the XSL working draft 21 Apr 1999,
+ not the latest from 27 March 2000. FOP implements the fo objects and properties listed
+ in <A href="implemented.html">features</A>, sometimes it does so only in a limited way.
+ </P>
+
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>list-block</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>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.</P>
+ <P>At the moment FOP only implements the second way. Therefore a list has a basic structure like this:</P>
+ <P><CODE><FONT face="courier, monospaced"><fo:list-block></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"><fo:list-item></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"><fo:list-item-label><fo:block></fo:block></fo:list-item-label></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"><fo:list-item-body><fo:block></fo:block></fo:list-item-body></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"></fo:list-item></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"></fo:list-block></FONT></CODE></P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Padding</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>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.
+ </P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Tables</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>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.
+ </P>
+ <P>A working basic example of a table looks like this: </P>
+ <P><CODE><FONT face="courier, monospaced"><fo:table></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:table-column column-width="150pt"/></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:table-column column-width="150pt"/></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:table-body font-size="10pt" font-family="sans-serif"></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:table-row></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:table-cell></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:block>text</fo:block></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> </fo:table-cell></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:table-cell></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:block>text</fo:block></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> </fo:table-cell></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> </fo:table-row></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:table-row></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:table-cell></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:block>text</fo:block></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> </fo:table-cell></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:table-cell></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:block>text</fo:block></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> </fo:table-cell></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> </fo:table-row></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:table-row></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:table-cell></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:block>text</fo:block></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> </fo:table-cell></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:table-cell></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> <fo:block>text</fo:block></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> </fo:table-cell></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> </fo:table-row></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"> </fo:table-body></FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced"></fo:table></FONT></CODE></P>
+ </FONT></TD></TR></TABLE><BR>
+
+
+
+
+</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+rolloverImagesOn=new Array();
+rolloverImagesOff=new Array();
+
+function rolloverOn(name) {
+ if(rolloverImagesOn[name]){
+ document.images[name].src=rolloverImagesOn[name].src;
+ }
+}
+
+function rolloverOff(name) {
+ if(rolloverImagesOff[name]){
+ document.images[name].src=rolloverImagesOff[name].src;
+ }
+}
+
+function rolloverLoad(name,on,off) {
+ rolloverImagesOn[name]=new Image();
+ rolloverImagesOn[name].src=on;
+ rolloverImagesOff[name]=new Image();
+ rolloverImagesOff[name].src=off;
+}
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>Running FOP</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/running-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG alt="Running FOP" border="0" height="12" hspace="0" src="graphics/running-label-1.jpg" vspace="0" width="120"><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="specs.html" onMouseOut="rolloverOff('side-specs');" onMouseOver="rolloverOn('side-specs');"><IMG alt="Specifications" border="0" height="12" hspace="0" name="side-specs" onLoad="rolloverLoad('side-specs','graphics/specs-label-2.jpg','graphics/specs-label-3.jpg');" src="graphics/specs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Prerequisites</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>Following software must be installed:</P>
+ <P>a) Java 1.1.x or later (If you want to use AWTCommandLine, you need Swing)</P>
+ <P>b) An XML parser which supports SAX and DOM like
+ <A href="http://xml.apache.org/xerces-j/index.html">Xerces-J</A>.
+ (Xerces is the default xml parser)</P>
+ <P>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
+ <A href="http://www.jclark.com/xml/xt.html">XT</A>
+ or <A href="http://xml.apache.org/xalan/index.html">XALAN</A>.
+ </P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Starting FOP as an standalone application</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>There are three ways to run FOP from the command line.</P>
+ <P>a) Batch processing formatting objects (fo) files: </P>
+ <P><CODE><FONT face="courier, monospaced">java org.apache.fop.apps.CommandLine fo-file pdf-file</FONT></CODE></P>
+ <P>b) Batch processing xml files (includes production of the fo-files):</P>
+ <P><CODE><FONT face="courier, monospaced">java org.apache.fop.apps.XTCommandLine xml-file xsl-file pdf-file</FONT></CODE></P>
+ <P>c) Previewing the fo-file:</P>
+ <P><CODE><FONT face="courier, monospaced">java org.apache.fop.apps.AWTCommandLine fo-file</FONT></CODE></P>
+ <P>Each method uses next to the fop classes other packages. The following describes
+ each method in detail.</P>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Method One</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1">
+ <P>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
+ </P>
+ <P>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:
+ </P>
+ <P><CODE><FONT face="courier, monospaced">java -cp fop.jar;xerces.jar </FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced">org.apache.fop.apps.CommandLine fo-file pdf-file</FONT></CODE></P>
+ <P>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:
+ </P>
+ <P><CODE><FONT face="courier, monospaced">java -Dorg.xml.sax.parser=com.jclark.xml.sax.Driver</FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced">-cp fop.jar;xerces.jar;xp.jar</FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced">org.apache.fop.apps.CommandLine fo-file pdf-file</FONT></CODE></P>
+ <P>Note: The xerces jar file must be included, because xp has no dom support.</P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Method Two</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1">
+ <P>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 XT in your classpath and so you might invoke
+ </P>
+ <P><CODE><FONT face="courier, monospaced">java -cp fop.jar;xt.jar;xerces.jar</FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced">org.apache.fop.apps.XTCommandLine xml-file xsl-file pdf-file</FONT></CODE></P>
+ <P>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.
+ </P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="666699" colspan="2" width="484"><TABLE border="0" cellpadding="0" cellspacing="0" width="484"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="482"><FONT color="#ffffff" face="arial,helvetica,sanserif"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Method Three</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="482"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="482"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="474"><FONT color="#000000" face="arial,helvetica,sanserif" size="-1">
+ <P>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
+ </P>
+ <P><CODE><FONT face="courier, monospaced">java -cp fop.jar;xerces.jar</FONT></CODE></P>
+ <P><CODE><FONT face="courier, monospaced">org.apache.fop.apps.AWTCommandLine fo-file </FONT></CODE></P>
+ <P>The viewer uses the swing classes.</P>
+ <P>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:
+ </P>
+ <P><CODE><FONT face="courier, monospaced">java org.apache.fop.apps.CommandLine fo-file pdf-file</FONT></CODE></P>
+ </FONT></TD></TR></TABLE><BR>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Running FOP on MacOS</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+
+ <P>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.
+ </P>
+ <P>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.
+ </P>
+ <P>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.
+ </P>
+ <P>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.
+ </P>
+ </FONT></TD></TR></TABLE><BR>
+ <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Problems</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10"> </TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
+ <P>If you have problems running FOP, please have a look at the
+ <A href="faq-running.html">FOP FAQ</A>. 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.
+ </P>
+ </FONT></TD></TR></TABLE><BR>
+</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>FOP Relevant Specifications</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/specs-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
+ <A href="../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','graphics/ext-2-label-2.jpg','graphics/ext-2-label-3.jpg');" src="graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','graphics/index-label-2.jpg','graphics/index-label-3.jpg');" src="graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="download.html" onMouseOut="rolloverOff('side-download');" onMouseOver="rolloverOn('side-download');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-download" onLoad="rolloverLoad('side-download','graphics/download-label-2.jpg','graphics/download-label-3.jpg');" src="graphics/download-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="running.html" onMouseOut="rolloverOff('side-running');" onMouseOver="rolloverOn('side-running');"><IMG alt="Running FOP" border="0" height="12" hspace="0" name="side-running" onLoad="rolloverLoad('side-running','graphics/running-label-2.jpg','graphics/running-label-3.jpg');" src="graphics/running-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="implemented.html" onMouseOut="rolloverOff('side-implemented');" onMouseOver="rolloverOn('side-implemented');"><IMG alt="Features" border="0" height="12" hspace="0" name="side-implemented" onLoad="rolloverLoad('side-implemented','graphics/implemented-label-2.jpg','graphics/implemented-label-3.jpg');" src="graphics/implemented-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="limitations.html" onMouseOut="rolloverOff('side-limitations');" onMouseOver="rolloverOn('side-limitations');"><IMG alt="Limitations" border="0" height="12" hspace="0" name="side-limitations" onLoad="rolloverLoad('side-limitations','graphics/limitations-label-2.jpg','graphics/limitations-label-3.jpg');" src="graphics/limitations-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="bugs.html" onMouseOut="rolloverOff('side-bugs');" onMouseOver="rolloverOn('side-bugs');"><IMG alt="Bugs" border="0" height="12" hspace="0" name="side-bugs" onLoad="rolloverLoad('side-bugs','graphics/bugs-label-2.jpg','graphics/bugs-label-3.jpg');" src="graphics/bugs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="examples.html" onMouseOut="rolloverOff('side-examples');" onMouseOver="rolloverOn('side-examples');"><IMG alt="Examples" border="0" height="12" hspace="0" name="side-examples" onLoad="rolloverLoad('side-examples','graphics/examples-label-2.jpg','graphics/examples-label-3.jpg');" src="graphics/examples-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="compiling.html" onMouseOut="rolloverOff('side-compiling');" onMouseOver="rolloverOn('side-compiling');"><IMG alt="Compiling" border="0" height="12" hspace="0" name="side-compiling" onLoad="rolloverLoad('side-compiling','graphics/compiling-label-2.jpg','graphics/compiling-label-3.jpg');" src="graphics/compiling-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="embedding.html" onMouseOut="rolloverOff('side-embedding');" onMouseOver="rolloverOn('side-embedding');"><IMG alt="Embedding" border="0" height="12" hspace="0" name="side-embedding" onLoad="rolloverLoad('side-embedding','graphics/embedding-label-2.jpg','graphics/embedding-label-3.jpg');" src="graphics/embedding-label-3.jpg" vspace="0" width="120"></A><BR>
+ <A href="involved.html" onMouseOut="rolloverOff('side-involved');" onMouseOver="rolloverOn('side-involved');"><IMG alt="Getting involved" border="0" height="12" hspace="0" name="side-involved" onLoad="rolloverLoad('side-involved','graphics/involved-label-2.jpg','graphics/involved-label-3.jpg');" src="graphics/involved-label-3.jpg" vspace="0" width="120"></A><BR>
+
+ <IMG border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
+ <A href="faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','graphics/faqs-label-2.jpg','graphics/faqs-label-3.jpg');" src="graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>
+ <IMG alt="Specifications" border="0" height="12" hspace="0" src="graphics/specs-label-1.jpg" vspace="0" width="120"><BR>
+ <A href="license.html" onMouseOut="rolloverOff('side-license');" onMouseOver="rolloverOn('side-license');"><IMG alt="License" border="0" height="12" hspace="0" name="side-license" onLoad="rolloverLoad('side-license','graphics/license-label-2.jpg','graphics/license-label-3.jpg');" src="graphics/license-label-3.jpg" vspace="0" width="120"></A><BR>
+
+<IMG border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
+ <UL>
+ <LI><A href="http://www.w3.org/TR/WD-xsl/">Latest XSL-FO Working Draft (27 March 2000)</A></LI>
+ <LI><A href="http://www.w3.org/TR/1999/WD-xsl-19990421/">XSL-FO Working Draft 21 Apr 1999 </A></LI>
+ <LI><A href="http://www.w3.org/TR/REC-xml">XML Recommendation</A></LI>
+ <LI><A href="http://www.w3.org/TR/xslt">XSLT Recommendation</A></LI>
+ <LI><A href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/pdfspec.pdf">Portable Document Format (PDF) 1.3 Reference Manual </A></LI>
+ <LI><A href="http://www.megginson.com/SAX/">Simple API for XML (SAX)</A></LI>
+ <LI><A href="http://www.w3.org/TR/REC-DOM-Level-1">Document Object Model (DOM)</A></LI>
+ <LI><A href="http://www.w3.org/TR/REC-xml-names/">Namespaces in XML Recommendation</A></LI>
+ <LI><A href="http://java.sun.com/products/jdk/1.1/docs/index.html">Java JDK 1.1 Documentation</A></LI>
+ </UL>
+</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
+ Copyright © 1999 The Apache Software Foundation.
+ All Rights Reserved.
+ </I></FONT></TD></TR></TABLE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+/*
+// header - edit "Data/yourJavaHeader" to customize
+// contents - edit "EventHandlers/Java file/onCreate" to customize
+//
+*/
+
+import java.util.*;
+import java.io.*;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+import java.text.DateFormat;
+
+
+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("<html><head><title>Test Results</title></head><body>\n");
+ results.println("<h2>Compare Results<br>");
+ results.println("<font size='1'>created " + dateTime + "</font></h2>");
+ results.println("<table cellpadding='10' border='2'><thead><th align='center'>reference file</th><th align='center'>test file</th>"
+ + "<th align='center'>identical?</th></thead>");
+
+
+ }
+
+ //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("<tr><td><a href='" + referenceDirectory + oldFile.getName() + "'>"
+ + oldFile.getName() + "</a> </td><td> <a href='"
+ + testDirectory + newFile.getName() +"'>"
+ + newFile.getName() +"</a>"
+ + " </td><td><font color='red'>No</font></td></tr>");
+ } else {
+ results.println("<tr><td><a href='" + referenceDirectory + oldFile.getName() + "'>"
+ + oldFile.getName() + "</a> </td><td> <a href='"
+ + testDirectory + newFile.getName() + "'>"
+ + newFile.getName() + "</a>"
+ + " </td><td>Yes</td></tr>");
+ }
+ }
+ }
+ results.println("</table></html>");
+ } catch (IOException ioe) {
+ System.err.println("ERROR: " + ioe);
+ }
+ } //end: execute()
+}
+
--- /dev/null
+// Ant
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+import org.apache.fop.apps.*;
+
+// 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.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;
+
+/* the code is adapted from Fops CommandLine class */
+public class Fop {
+ String fofile, pdffile;
+
+ public void setFofile(String fofile) {
+ this.fofile = fofile;
+ }
+
+ 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 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");
+ }
+ }
+
+ public void execute () throws BuildException {
+ boolean errors = false;
+ String version = Version.getVersion();
+ System.out.println("=======================\nTask " + version +
+ "\nconverting file " + fofile + " to " + pdffile);
+
+ if (!(new File(fofile).exists())) {
+ errors = true;
+ System.err.println("Task Fop - ERROR: Formatting objects file " + fofile + " missing.");
+ }
+
+ Parser parser = createParser();
+
+ if (parser == null) {
+ System.err.println("Task Fop - ERROR: Unable to create SAX parser");
+ errors = true;
+ }
+
+ 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.setWriter(new PrintWriter(new FileWriter(pdffile)));
+ driver.buildFOTree(parser, fileInputSource(fofile));
+ driver.format();
+ driver.render();
+ } catch (Exception e) {
+ System.err.println("Task Fop - FATAL ERROR: " + e.getMessage());
+ System.exit(1);
+ }
+ }
+ System.out.println("=======================\n");
+ }
+}
+
--- /dev/null
+/*
+ * The Apache Software License, 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
+ * <http://www.apache.org/>.
+ */
+
+//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
+ *
+ * <p>
+ * This task can take the following arguments:
+ * <ul>
+ * <li>infile
+ * <li>xsltfile
+ * <li>outfile
+ * <li>smart
+ * <li>dependent
+ * </ul>
+ * <p>
+ * Of these arguments, <b>infile, outfile</b> and <b>xsltfile</b> are required.
+ * <p>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.
+ * <p>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.
+ * <p>
+ * @author Fotis Jannidis <a href="mailto:fotis@jannidis.de">fotis@jannidis.de</a>
+ */
+
+
+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:
+ * <ul>
+ * <li>yes: check whether output file is older than input or stylesheet
+ * <li>no: (default) do conversion everytime task is called
+ * </ul>
+ */
+ public void setSmart (String smart) {
+ this.smart = smart;
+ }
+
+/**
+ * Sets the value for dependent
+ *
+ * @param option valid values:
+ * <ul>
+ * <li>none: (default)
+ * <li>comma delimited list of files whose existence and date is checked
+ * against the output file
+ * </ul>
+ */
+ 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();
+ } */
+
+}
--- /dev/null
+#! /bin/sh
+
+# Args: DIR command
+cd $1
+CMD=$2
+shift
+shift
+
+if test -f $CMD.sh; then
+ CMD="sh $CMD.sh"
+fi
+
+echo $CMD $@ | sh
--- /dev/null
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Courier-Bold</font-name>
+ <class-name>CourierBold</class-name>
+ <encoding>WinAnsiEncoding</encoding>
+ <cap-height>562</cap-height>
+ <x-height>439</x-height>
+ <ascender>626</ascender>
+ <descender>-142</descender>
+ <widths>
+ <char name="A" width="600"/>
+ <char name="AE" width="600"/>
+ <char name="Aacute" width="600"/>
+ <char name="Acircumflex" width="600"/>
+ <char name="Adieresis" width="600"/>
+ <char name="Agrave" width="600"/>
+ <char name="Aring" width="600"/>
+ <char name="Atilde" width="600"/>
+ <char name="B" width="600"/>
+ <char name="C" width="600"/>
+ <char name="Ccedilla" width="600"/>
+ <char name="D" width="600"/>
+ <char name="E" width="600"/>
+ <char name="Eacute" width="600"/>
+ <char name="Ecircumflex" width="600"/>
+ <char name="Edieresis" width="600"/>
+ <char name="Egrave" width="600"/>
+ <char name="Eth" width="600"/>
+ <char name="F" width="600"/>
+ <char name="G" width="600"/>
+ <char name="Gcaron" width="600"/>
+ <char name="H" width="600"/>
+ <char name="I" width="600"/>
+ <char name="IJ" width="600"/>
+ <char name="Iacute" width="600"/>
+ <char name="Icircumflex" width="600"/>
+ <char name="Idieresis" width="600"/>
+ <char name="Idot" width="600"/>
+ <char name="Igrave" width="600"/>
+ <char name="J" width="600"/>
+ <char name="K" width="600"/>
+ <char name="L" width="600"/>
+ <char name="LL" width="600"/>
+ <char name="Lslash" width="600"/>
+ <char name="M" width="600"/>
+ <char name="N" width="600"/>
+ <char name="Ntilde" width="600"/>
+ <char name="O" width="600"/>
+ <char name="OE" width="600"/>
+ <char name="Oacute" width="600"/>
+ <char name="Ocircumflex" width="600"/>
+ <char name="Odieresis" width="600"/>
+ <char name="Ograve" width="600"/>
+ <char name="Oslash" width="600"/>
+ <char name="Otilde" width="600"/>
+ <char name="P" width="600"/>
+ <char name="Q" width="600"/>
+ <char name="R" width="600"/>
+ <char name="S" width="600"/>
+ <char name="Scaron" width="600"/>
+ <char name="Scedilla" width="600"/>
+ <char name="T" width="600"/>
+ <char name="Thorn" width="600"/>
+ <char name="U" width="600"/>
+ <char name="Uacute" width="600"/>
+ <char name="Ucircumflex" width="600"/>
+ <char name="Udieresis" width="600"/>
+ <char name="Ugrave" width="600"/>
+ <char name="V" width="600"/>
+ <char name="W" width="600"/>
+ <char name="X" width="600"/>
+ <char name="Y" width="600"/>
+ <char name="Yacute" width="600"/>
+ <char name="Ydieresis" width="600"/>
+ <char name="Z" width="600"/>
+ <char name="Zcaron" width="600"/>
+ <char name="a" width="600"/>
+ <char name="aacute" width="600"/>
+ <char name="acircumflex" width="600"/>
+ <char name="acute" width="600"/>
+ <char name="adieresis" width="600"/>
+ <char name="ae" width="600"/>
+ <char name="agrave" width="600"/>
+ <char name="ampersand" width="600"/>
+ <char name="aring" width="600"/>
+ <char name="arrowboth" width="600"/>
+ <char name="arrowdown" width="600"/>
+ <char name="arrowleft" width="600"/>
+ <char name="arrowright" width="600"/>
+ <char name="arrowup" width="600"/>
+ <char name="asciicircum" width="600"/>
+ <char name="asciitilde" width="600"/>
+ <char name="asterisk" width="600"/>
+ <char name="at" width="600"/>
+ <char name="atilde" width="600"/>
+ <char name="b" width="600"/>
+ <char name="backslash" width="600"/>
+ <char name="bar" width="600"/>
+ <char name="braceleft" width="600"/>
+ <char name="braceright" width="600"/>
+ <char name="bracketleft" width="600"/>
+ <char name="bracketright" width="600"/>
+ <char name="breve" width="600"/>
+ <char name="brokenbar" width="600"/>
+ <char name="bullet" width="600"/>
+ <char name="c" width="600"/>
+ <char name="caron" width="600"/>
+ <char name="ccedilla" width="600"/>
+ <char name="cedilla" width="600"/>
+ <char name="cent" width="600"/>
+ <char name="center" width="600"/>
+ <char name="circumflex" width="600"/>
+ <char name="colon" width="600"/>
+ <char name="comma" width="600"/>
+ <char name="copyright" width="600"/>
+ <char name="currency" width="600"/>
+ <char name="d" width="600"/>
+ <char name="dagger" width="600"/>
+ <char name="daggerdbl" width="600"/>
+ <char name="dectab" width="600"/>
+ <char name="degree" width="600"/>
+ <char name="dieresis" width="600"/>
+ <char name="divide" width="600"/>
+ <char name="dollar" width="600"/>
+ <char name="dotaccent" width="600"/>
+ <char name="dotlessi" width="600"/>
+ <char name="down" width="600"/>
+ <char name="e" width="600"/>
+ <char name="eacute" width="600"/>
+ <char name="ecircumflex" width="600"/>
+ <char name="edieresis" width="600"/>
+ <char name="egrave" width="600"/>
+ <char name="eight" width="600"/>
+ <char name="ellipsis" width="600"/>
+ <char name="emdash" width="600"/>
+ <char name="endash" width="600"/>
+ <char name="equal" width="600"/>
+ <char name="eth" width="600"/>
+ <char name="exclam" width="600"/>
+ <char name="exclamdown" width="600"/>
+ <char name="f" width="600"/>
+ <char name="fi" width="600"/>
+ <char name="five" width="600"/>
+ <char name="fl" width="600"/>
+ <char name="florin" width="600"/>
+ <char name="format" width="600"/>
+ <char name="four" width="600"/>
+ <char name="fraction" width="600"/>
+ <char name="g" width="600"/>
+ <char name="gcaron" width="600"/>
+ <char name="germandbls" width="600"/>
+ <char name="grave" width="600"/>
+ <char name="graybox" width="600"/>
+ <char name="greater" width="600"/>
+ <char name="guillemotleft" width="600"/>
+ <char name="guillemotright" width="600"/>
+ <char name="guilsinglleft" width="600"/>
+ <char name="guilsinglright" width="600"/>
+ <char name="h" width="600"/>
+ <char name="hungarumlaut" width="600"/>
+ <char name="hyphen" width="600"/>
+ <char name="i" width="600"/>
+ <char name="iacute" width="600"/>
+ <char name="icircumflex" width="600"/>
+ <char name="idieresis" width="600"/>
+ <char name="igrave" width="600"/>
+ <char name="ij" width="600"/>
+ <char name="indent" width="600"/>
+ <char name="j" width="600"/>
+ <char name="k" width="600"/>
+ <char name="l" width="600"/>
+ <char name="largebullet" width="600"/>
+ <char name="left" width="600"/>
+ <char name="less" width="600"/>
+ <char name="lira" width="600"/>
+ <char name="ll" width="600"/>
+ <char name="logicalnot" width="600"/>
+ <char name="lslash" width="600"/>
+ <char name="m" width="600"/>
+ <char name="macron" width="600"/>
+ <char name="merge" width="600"/>
+ <char name="minus" width="600"/>
+ <char name="mu" width="600"/>
+ <char name="multiply" width="600"/>
+ <char name="n" width="600"/>
+ <char name="nine" width="600"/>
+ <char name="notegraphic" width="600"/>
+ <char name="ntilde" width="600"/>
+ <char name="numbersign" width="600"/>
+ <char name="o" width="600"/>
+ <char name="oacute" width="600"/>
+ <char name="ocircumflex" width="600"/>
+ <char name="odieresis" width="600"/>
+ <char name="oe" width="600"/>
+ <char name="ogonek" width="600"/>
+ <char name="ograve" width="600"/>
+ <char name="one" width="600"/>
+ <char name="onehalf" width="600"/>
+ <char name="onequarter" width="600"/>
+ <char name="onesuperior" width="600"/>
+ <char name="ordfeminine" width="600"/>
+ <char name="ordmasculine" width="600"/>
+ <char name="oslash" width="600"/>
+ <char name="otilde" width="600"/>
+ <char name="overscore" width="600"/>
+ <char name="p" width="600"/>
+ <char name="paragraph" width="600"/>
+ <char name="parenleft" width="600"/>
+ <char name="parenright" width="600"/>
+ <char name="percent" width="600"/>
+ <char name="period" width="600"/>
+ <char name="periodcentered" width="600"/>
+ <char name="perthousand" width="600"/>
+ <char name="plus" width="600"/>
+ <char name="plusminus" width="600"/>
+ <char name="prescription" width="600"/>
+ <char name="q" width="600"/>
+ <char name="question" width="600"/>
+ <char name="questiondown" width="600"/>
+ <char name="quotedbl" width="600"/>
+ <char name="quotedblbase" width="600"/>
+ <char name="quotedblleft" width="600"/>
+ <char name="quotedblright" width="600"/>
+ <char name="quoteleft" width="600"/>
+ <char name="quoteright" width="600"/>
+ <char name="quotesinglbase" width="600"/>
+ <char name="quotesingle" width="600"/>
+ <char name="r" width="600"/>
+ <char name="registered" width="600"/>
+ <char name="return" width="600"/>
+ <char name="ring" width="600"/>
+ <char name="s" width="600"/>
+ <char name="scaron" width="600"/>
+ <char name="scedilla" width="600"/>
+ <char name="section" width="600"/>
+ <char name="semicolon" width="600"/>
+ <char name="seven" width="600"/>
+ <char name="six" width="600"/>
+ <char name="slash" width="600"/>
+ <char name="space" width="600"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="nbsp" width="600"/>
+ <char name="square" width="600"/>
+ <char name="sterling" width="600"/>
+ <char name="stop" width="600"/>
+ <char name="t" width="600"/>
+ <char name="tab" width="600"/>
+ <char name="thorn" width="600"/>
+ <char name="three" width="600"/>
+ <char name="threequarters" width="600"/>
+ <char name="threesuperior" width="600"/>
+ <char name="tilde" width="600"/>
+ <char name="trademark" width="600"/>
+ <char name="two" width="600"/>
+ <char name="twosuperior" width="600"/>
+ <char name="u" width="600"/>
+ <char name="uacute" width="600"/>
+ <char name="ucircumflex" width="600"/>
+ <char name="udieresis" width="600"/>
+ <char name="ugrave" width="600"/>
+ <char name="underscore" width="600"/>
+ <char name="up" width="600"/>
+ <char name="v" width="600"/>
+ <char name="w" width="600"/>
+ <char name="x" width="600"/>
+ <char name="y" width="600"/>
+ <char name="yacute" width="600"/>
+ <char name="ydieresis" width="600"/>
+ <char name="yen" width="600"/>
+ <char name="z" width="600"/>
+ <char name="zcaron" width="600"/>
+ <char name="zero" width="600"/>
+ </widths>
+</font-metrics>
\ No newline at end of file
--- /dev/null
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Courier-BoldOblique</font-name>
+ <class-name>CourierBoldOblique</class-name>
+ <encoding>WinAnsiEncoding</encoding>
+ <cap-height>562</cap-height>
+ <x-height>439</x-height>
+ <ascender>626</ascender>
+ <descender>-142</descender>
+ <widths>
+ <char name="A" width="600"/>
+ <char name="AE" width="600"/>
+ <char name="Aacute" width="600"/>
+ <char name="Acircumflex" width="600"/>
+ <char name="Adieresis" width="600"/>
+ <char name="Agrave" width="600"/>
+ <char name="Aring" width="600"/>
+ <char name="Atilde" width="600"/>
+ <char name="B" width="600"/>
+ <char name="C" width="600"/>
+ <char name="Ccedilla" width="600"/>
+ <char name="D" width="600"/>
+ <char name="E" width="600"/>
+ <char name="Eacute" width="600"/>
+ <char name="Ecircumflex" width="600"/>
+ <char name="Edieresis" width="600"/>
+ <char name="Egrave" width="600"/>
+ <char name="Eth" width="600"/>
+ <char name="F" width="600"/>
+ <char name="G" width="600"/>
+ <char name="Gcaron" width="600"/>
+ <char name="H" width="600"/>
+ <char name="I" width="600"/>
+ <char name="IJ" width="600"/>
+ <char name="Iacute" width="600"/>
+ <char name="Icircumflex" width="600"/>
+ <char name="Idieresis" width="600"/>
+ <char name="Idot" width="600"/>
+ <char name="Igrave" width="600"/>
+ <char name="J" width="600"/>
+ <char name="K" width="600"/>
+ <char name="L" width="600"/>
+ <char name="LL" width="600"/>
+ <char name="Lslash" width="600"/>
+ <char name="M" width="600"/>
+ <char name="N" width="600"/>
+ <char name="Ntilde" width="600"/>
+ <char name="O" width="600"/>
+ <char name="OE" width="600"/>
+ <char name="Oacute" width="600"/>
+ <char name="Ocircumflex" width="600"/>
+ <char name="Odieresis" width="600"/>
+ <char name="Ograve" width="600"/>
+ <char name="Oslash" width="600"/>
+ <char name="Otilde" width="600"/>
+ <char name="P" width="600"/>
+ <char name="Q" width="600"/>
+ <char name="R" width="600"/>
+ <char name="S" width="600"/>
+ <char name="Scaron" width="600"/>
+ <char name="Scedilla" width="600"/>
+ <char name="T" width="600"/>
+ <char name="Thorn" width="600"/>
+ <char name="U" width="600"/>
+ <char name="Uacute" width="600"/>
+ <char name="Ucircumflex" width="600"/>
+ <char name="Udieresis" width="600"/>
+ <char name="Ugrave" width="600"/>
+ <char name="V" width="600"/>
+ <char name="W" width="600"/>
+ <char name="X" width="600"/>
+ <char name="Y" width="600"/>
+ <char name="Yacute" width="600"/>
+ <char name="Ydieresis" width="600"/>
+ <char name="Z" width="600"/>
+ <char name="Zcaron" width="600"/>
+ <char name="a" width="600"/>
+ <char name="aacute" width="600"/>
+ <char name="acircumflex" width="600"/>
+ <char name="acute" width="600"/>
+ <char name="adieresis" width="600"/>
+ <char name="ae" width="600"/>
+ <char name="agrave" width="600"/>
+ <char name="ampersand" width="600"/>
+ <char name="aring" width="600"/>
+ <char name="arrowboth" width="600"/>
+ <char name="arrowdown" width="600"/>
+ <char name="arrowleft" width="600"/>
+ <char name="arrowright" width="600"/>
+ <char name="arrowup" width="600"/>
+ <char name="asciicircum" width="600"/>
+ <char name="asciitilde" width="600"/>
+ <char name="asterisk" width="600"/>
+ <char name="at" width="600"/>
+ <char name="atilde" width="600"/>
+ <char name="b" width="600"/>
+ <char name="backslash" width="600"/>
+ <char name="bar" width="600"/>
+ <char name="braceleft" width="600"/>
+ <char name="braceright" width="600"/>
+ <char name="bracketleft" width="600"/>
+ <char name="bracketright" width="600"/>
+ <char name="breve" width="600"/>
+ <char name="brokenbar" width="600"/>
+ <char name="bullet" width="600"/>
+ <char name="c" width="600"/>
+ <char name="caron" width="600"/>
+ <char name="ccedilla" width="600"/>
+ <char name="cedilla" width="600"/>
+ <char name="cent" width="600"/>
+ <char name="center" width="600"/>
+ <char name="circumflex" width="600"/>
+ <char name="colon" width="600"/>
+ <char name="comma" width="600"/>
+ <char name="copyright" width="600"/>
+ <char name="currency" width="600"/>
+ <char name="d" width="600"/>
+ <char name="dagger" width="600"/>
+ <char name="daggerdbl" width="600"/>
+ <char name="dectab" width="600"/>
+ <char name="degree" width="600"/>
+ <char name="dieresis" width="600"/>
+ <char name="divide" width="600"/>
+ <char name="dollar" width="600"/>
+ <char name="dotaccent" width="600"/>
+ <char name="dotlessi" width="600"/>
+ <char name="down" width="600"/>
+ <char name="e" width="600"/>
+ <char name="eacute" width="600"/>
+ <char name="ecircumflex" width="600"/>
+ <char name="edieresis" width="600"/>
+ <char name="egrave" width="600"/>
+ <char name="eight" width="600"/>
+ <char name="ellipsis" width="600"/>
+ <char name="emdash" width="600"/>
+ <char name="endash" width="600"/>
+ <char name="equal" width="600"/>
+ <char name="eth" width="600"/>
+ <char name="exclam" width="600"/>
+ <char name="exclamdown" width="600"/>
+ <char name="f" width="600"/>
+ <char name="fi" width="600"/>
+ <char name="five" width="600"/>
+ <char name="fl" width="600"/>
+ <char name="florin" width="600"/>
+ <char name="format" width="600"/>
+ <char name="four" width="600"/>
+ <char name="fraction" width="600"/>
+ <char name="g" width="600"/>
+ <char name="gcaron" width="600"/>
+ <char name="germandbls" width="600"/>
+ <char name="grave" width="600"/>
+ <char name="graybox" width="600"/>
+ <char name="greater" width="600"/>
+ <char name="guillemotleft" width="600"/>
+ <char name="guillemotright" width="600"/>
+ <char name="guilsinglleft" width="600"/>
+ <char name="guilsinglright" width="600"/>
+ <char name="h" width="600"/>
+ <char name="hungarumlaut" width="600"/>
+ <char name="hyphen" width="600"/>
+ <char name="i" width="600"/>
+ <char name="iacute" width="600"/>
+ <char name="icircumflex" width="600"/>
+ <char name="idieresis" width="600"/>
+ <char name="igrave" width="600"/>
+ <char name="ij" width="600"/>
+ <char name="indent" width="600"/>
+ <char name="j" width="600"/>
+ <char name="k" width="600"/>
+ <char name="l" width="600"/>
+ <char name="largebullet" width="600"/>
+ <char name="left" width="600"/>
+ <char name="less" width="600"/>
+ <char name="lira" width="600"/>
+ <char name="ll" width="600"/>
+ <char name="logicalnot" width="600"/>
+ <char name="lslash" width="600"/>
+ <char name="m" width="600"/>
+ <char name="macron" width="600"/>
+ <char name="merge" width="600"/>
+ <char name="minus" width="600"/>
+ <char name="mu" width="600"/>
+ <char name="multiply" width="600"/>
+ <char name="n" width="600"/>
+ <char name="nine" width="600"/>
+ <char name="notegraphic" width="600"/>
+ <char name="ntilde" width="600"/>
+ <char name="numbersign" width="600"/>
+ <char name="o" width="600"/>
+ <char name="oacute" width="600"/>
+ <char name="ocircumflex" width="600"/>
+ <char name="odieresis" width="600"/>
+ <char name="oe" width="600"/>
+ <char name="ogonek" width="600"/>
+ <char name="ograve" width="600"/>
+ <char name="one" width="600"/>
+ <char name="onehalf" width="600"/>
+ <char name="onequarter" width="600"/>
+ <char name="onesuperior" width="600"/>
+ <char name="ordfeminine" width="600"/>
+ <char name="ordmasculine" width="600"/>
+ <char name="oslash" width="600"/>
+ <char name="otilde" width="600"/>
+ <char name="overscore" width="600"/>
+ <char name="p" width="600"/>
+ <char name="paragraph" width="600"/>
+ <char name="parenleft" width="600"/>
+ <char name="parenright" width="600"/>
+ <char name="percent" width="600"/>
+ <char name="period" width="600"/>
+ <char name="periodcentered" width="600"/>
+ <char name="perthousand" width="600"/>
+ <char name="plus" width="600"/>
+ <char name="plusminus" width="600"/>
+ <char name="prescription" width="600"/>
+ <char name="q" width="600"/>
+ <char name="question" width="600"/>
+ <char name="questiondown" width="600"/>
+ <char name="quotedbl" width="600"/>
+ <char name="quotedblbase" width="600"/>
+ <char name="quotedblleft" width="600"/>
+ <char name="quotedblright" width="600"/>
+ <char name="quoteleft" width="600"/>
+ <char name="quoteright" width="600"/>
+ <char name="quotesinglbase" width="600"/>
+ <char name="quotesingle" width="600"/>
+ <char name="r" width="600"/>
+ <char name="registered" width="600"/>
+ <char name="return" width="600"/>
+ <char name="ring" width="600"/>
+ <char name="s" width="600"/>
+ <char name="scaron" width="600"/>
+ <char name="scedilla" width="600"/>
+ <char name="section" width="600"/>
+ <char name="semicolon" width="600"/>
+ <char name="seven" width="600"/>
+ <char name="six" width="600"/>
+ <char name="slash" width="600"/>
+ <char name="space" width="600"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="nbsp" width="600"/>
+ <char name="square" width="600"/>
+ <char name="sterling" width="600"/>
+ <char name="stop" width="600"/>
+ <char name="t" width="600"/>
+ <char name="tab" width="600"/>
+ <char name="thorn" width="600"/>
+ <char name="three" width="600"/>
+ <char name="threequarters" width="600"/>
+ <char name="threesuperior" width="600"/>
+ <char name="tilde" width="600"/>
+ <char name="trademark" width="600"/>
+ <char name="two" width="600"/>
+ <char name="twosuperior" width="600"/>
+ <char name="u" width="600"/>
+ <char name="uacute" width="600"/>
+ <char name="ucircumflex" width="600"/>
+ <char name="udieresis" width="600"/>
+ <char name="ugrave" width="600"/>
+ <char name="underscore" width="600"/>
+ <char name="up" width="600"/>
+ <char name="v" width="600"/>
+ <char name="w" width="600"/>
+ <char name="x" width="600"/>
+ <char name="y" width="600"/>
+ <char name="yacute" width="600"/>
+ <char name="ydieresis" width="600"/>
+ <char name="yen" width="600"/>
+ <char name="z" width="600"/>
+ <char name="zcaron" width="600"/>
+ <char name="zero" width="600"/>
+ </widths>
+</font-metrics>
--- /dev/null
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Courier-Oblique</font-name>
+ <class-name>CourierOblique</class-name>
+ <encoding>WinAnsiEncoding</encoding>
+ <cap-height>562</cap-height>
+ <x-height>426</x-height>
+ <ascender>629</ascender>
+ <descender>-157</descender>
+ <widths>
+ <char name="A" width="600"/>
+ <char name="AE" width="600"/>
+ <char name="Aacute" width="600"/>
+ <char name="Acircumflex" width="600"/>
+ <char name="Adieresis" width="600"/>
+ <char name="Agrave" width="600"/>
+ <char name="Aring" width="600"/>
+ <char name="Atilde" width="600"/>
+ <char name="B" width="600"/>
+ <char name="C" width="600"/>
+ <char name="Ccedilla" width="600"/>
+ <char name="D" width="600"/>
+ <char name="E" width="600"/>
+ <char name="Eacute" width="600"/>
+ <char name="Ecircumflex" width="600"/>
+ <char name="Edieresis" width="600"/>
+ <char name="Egrave" width="600"/>
+ <char name="Eth" width="600"/>
+ <char name="F" width="600"/>
+ <char name="G" width="600"/>
+ <char name="Gcaron" width="600"/>
+ <char name="H" width="600"/>
+ <char name="I" width="600"/>
+ <char name="IJ" width="600"/>
+ <char name="Iacute" width="600"/>
+ <char name="Icircumflex" width="600"/>
+ <char name="Idieresis" width="600"/>
+ <char name="Idot" width="600"/>
+ <char name="Igrave" width="600"/>
+ <char name="J" width="600"/>
+ <char name="K" width="600"/>
+ <char name="L" width="600"/>
+ <char name="LL" width="600"/>
+ <char name="Lslash" width="600"/>
+ <char name="M" width="600"/>
+ <char name="N" width="600"/>
+ <char name="Ntilde" width="600"/>
+ <char name="O" width="600"/>
+ <char name="OE" width="600"/>
+ <char name="Oacute" width="600"/>
+ <char name="Ocircumflex" width="600"/>
+ <char name="Odieresis" width="600"/>
+ <char name="Ograve" width="600"/>
+ <char name="Oslash" width="600"/>
+ <char name="Otilde" width="600"/>
+ <char name="P" width="600"/>
+ <char name="Q" width="600"/>
+ <char name="R" width="600"/>
+ <char name="S" width="600"/>
+ <char name="Scaron" width="600"/>
+ <char name="Scedilla" width="600"/>
+ <char name="T" width="600"/>
+ <char name="Thorn" width="600"/>
+ <char name="U" width="600"/>
+ <char name="Uacute" width="600"/>
+ <char name="Ucircumflex" width="600"/>
+ <char name="Udieresis" width="600"/>
+ <char name="Ugrave" width="600"/>
+ <char name="V" width="600"/>
+ <char name="W" width="600"/>
+ <char name="X" width="600"/>
+ <char name="Y" width="600"/>
+ <char name="Yacute" width="600"/>
+ <char name="Ydieresis" width="600"/>
+ <char name="Z" width="600"/>
+ <char name="Zcaron" width="600"/>
+ <char name="a" width="600"/>
+ <char name="aacute" width="600"/>
+ <char name="acircumflex" width="600"/>
+ <char name="acute" width="600"/>
+ <char name="adieresis" width="600"/>
+ <char name="ae" width="600"/>
+ <char name="agrave" width="600"/>
+ <char name="ampersand" width="600"/>
+ <char name="aring" width="600"/>
+ <char name="arrowboth" width="600"/>
+ <char name="arrowdown" width="600"/>
+ <char name="arrowleft" width="600"/>
+ <char name="arrowright" width="600"/>
+ <char name="arrowup" width="600"/>
+ <char name="asciicircum" width="600"/>
+ <char name="asciitilde" width="600"/>
+ <char name="asterisk" width="600"/>
+ <char name="at" width="600"/>
+ <char name="atilde" width="600"/>
+ <char name="b" width="600"/>
+ <char name="backslash" width="600"/>
+ <char name="bar" width="600"/>
+ <char name="braceleft" width="600"/>
+ <char name="braceright" width="600"/>
+ <char name="bracketleft" width="600"/>
+ <char name="bracketright" width="600"/>
+ <char name="breve" width="600"/>
+ <char name="brokenbar" width="600"/>
+ <char name="bullet" width="600"/>
+ <char name="c" width="600"/>
+ <char name="caron" width="600"/>
+ <char name="ccedilla" width="600"/>
+ <char name="cedilla" width="600"/>
+ <char name="cent" width="600"/>
+ <char name="center" width="600"/>
+ <char name="circumflex" width="600"/>
+ <char name="colon" width="600"/>
+ <char name="comma" width="600"/>
+ <char name="copyright" width="600"/>
+ <char name="currency" width="600"/>
+ <char name="d" width="600"/>
+ <char name="dagger" width="600"/>
+ <char name="daggerdbl" width="600"/>
+ <char name="dectab" width="600"/>
+ <char name="degree" width="600"/>
+ <char name="dieresis" width="600"/>
+ <char name="divide" width="600"/>
+ <char name="dollar" width="600"/>
+ <char name="dotaccent" width="600"/>
+ <char name="dotlessi" width="600"/>
+ <char name="down" width="600"/>
+ <char name="e" width="600"/>
+ <char name="eacute" width="600"/>
+ <char name="ecircumflex" width="600"/>
+ <char name="edieresis" width="600"/>
+ <char name="egrave" width="600"/>
+ <char name="eight" width="600"/>
+ <char name="ellipsis" width="600"/>
+ <char name="emdash" width="600"/>
+ <char name="endash" width="600"/>
+ <char name="equal" width="600"/>
+ <char name="eth" width="600"/>
+ <char name="exclam" width="600"/>
+ <char name="exclamdown" width="600"/>
+ <char name="f" width="600"/>
+ <char name="fi" width="600"/>
+ <char name="five" width="600"/>
+ <char name="fl" width="600"/>
+ <char name="florin" width="600"/>
+ <char name="format" width="600"/>
+ <char name="four" width="600"/>
+ <char name="fraction" width="600"/>
+ <char name="g" width="600"/>
+ <char name="gcaron" width="600"/>
+ <char name="germandbls" width="600"/>
+ <char name="grave" width="600"/>
+ <char name="graybox" width="600"/>
+ <char name="greater" width="600"/>
+ <char name="guillemotleft" width="600"/>
+ <char name="guillemotright" width="600"/>
+ <char name="guilsinglleft" width="600"/>
+ <char name="guilsinglright" width="600"/>
+ <char name="h" width="600"/>
+ <char name="hungarumlaut" width="600"/>
+ <char name="hyphen" width="600"/>
+ <char name="i" width="600"/>
+ <char name="iacute" width="600"/>
+ <char name="icircumflex" width="600"/>
+ <char name="idieresis" width="600"/>
+ <char name="igrave" width="600"/>
+ <char name="ij" width="600"/>
+ <char name="indent" width="600"/>
+ <char name="j" width="600"/>
+ <char name="k" width="600"/>
+ <char name="l" width="600"/>
+ <char name="largebullet" width="600"/>
+ <char name="left" width="600"/>
+ <char name="less" width="600"/>
+ <char name="lira" width="600"/>
+ <char name="ll" width="600"/>
+ <char name="logicalnot" width="600"/>
+ <char name="lslash" width="600"/>
+ <char name="m" width="600"/>
+ <char name="macron" width="600"/>
+ <char name="merge" width="600"/>
+ <char name="minus" width="600"/>
+ <char name="mu" width="600"/>
+ <char name="multiply" width="600"/>
+ <char name="n" width="600"/>
+ <char name="nine" width="600"/>
+ <char name="notegraphic" width="600"/>
+ <char name="ntilde" width="600"/>
+ <char name="numbersign" width="600"/>
+ <char name="o" width="600"/>
+ <char name="oacute" width="600"/>
+ <char name="ocircumflex" width="600"/>
+ <char name="odieresis" width="600"/>
+ <char name="oe" width="600"/>
+ <char name="ogonek" width="600"/>
+ <char name="ograve" width="600"/>
+ <char name="one" width="600"/>
+ <char name="onehalf" width="600"/>
+ <char name="onequarter" width="600"/>
+ <char name="onesuperior" width="600"/>
+ <char name="ordfeminine" width="600"/>
+ <char name="ordmasculine" width="600"/>
+ <char name="oslash" width="600"/>
+ <char name="otilde" width="600"/>
+ <char name="overscore" width="600"/>
+ <char name="p" width="600"/>
+ <char name="paragraph" width="600"/>
+ <char name="parenleft" width="600"/>
+ <char name="parenright" width="600"/>
+ <char name="percent" width="600"/>
+ <char name="period" width="600"/>
+ <char name="periodcentered" width="600"/>
+ <char name="perthousand" width="600"/>
+ <char name="plus" width="600"/>
+ <char name="plusminus" width="600"/>
+ <char name="prescription" width="600"/>
+ <char name="q" width="600"/>
+ <char name="question" width="600"/>
+ <char name="questiondown" width="600"/>
+ <char name="quotedbl" width="600"/>
+ <char name="quotedblbase" width="600"/>
+ <char name="quotedblleft" width="600"/>
+ <char name="quotedblright" width="600"/>
+ <char name="quoteleft" width="600"/>
+ <char name="quoteright" width="600"/>
+ <char name="quotesinglbase" width="600"/>
+ <char name="quotesingle" width="600"/>
+ <char name="r" width="600"/>
+ <char name="registered" width="600"/>
+ <char name="return" width="600"/>
+ <char name="ring" width="600"/>
+ <char name="s" width="600"/>
+ <char name="scaron" width="600"/>
+ <char name="scedilla" width="600"/>
+ <char name="section" width="600"/>
+ <char name="semicolon" width="600"/>
+ <char name="seven" width="600"/>
+ <char name="six" width="600"/>
+ <char name="slash" width="600"/>
+ <char name="space" width="600"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="nbsp" width="600"/>
+ <char name="square" width="600"/>
+ <char name="sterling" width="600"/>
+ <char name="stop" width="600"/>
+ <char name="t" width="600"/>
+ <char name="tab" width="600"/>
+ <char name="thorn" width="600"/>
+ <char name="three" width="600"/>
+ <char name="threequarters" width="600"/>
+ <char name="threesuperior" width="600"/>
+ <char name="tilde" width="600"/>
+ <char name="trademark" width="600"/>
+ <char name="two" width="600"/>
+ <char name="twosuperior" width="600"/>
+ <char name="u" width="600"/>
+ <char name="uacute" width="600"/>
+ <char name="ucircumflex" width="600"/>
+ <char name="udieresis" width="600"/>
+ <char name="ugrave" width="600"/>
+ <char name="underscore" width="600"/>
+ <char name="up" width="600"/>
+ <char name="v" width="600"/>
+ <char name="w" width="600"/>
+ <char name="x" width="600"/>
+ <char name="y" width="600"/>
+ <char name="yacute" width="600"/>
+ <char name="ydieresis" width="600"/>
+ <char name="yen" width="600"/>
+ <char name="z" width="600"/>
+ <char name="zcaron" width="600"/>
+ <char name="zero" width="600"/>
+ </widths>
+</font-metrics>
\ No newline at end of file
--- /dev/null
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Courier</font-name>
+ <class-name>Courier</class-name>
+ <encoding>WinAnsiEncoding</encoding>
+ <cap-height>562</cap-height>
+ <x-height>426</x-height>
+ <ascender>629</ascender>
+ <descender>-157</descender>
+ <widths>
+ <char name="A" width="600"/>
+ <char name="AE" width="600"/>
+ <char name="Aacute" width="600"/>
+ <char name="Acircumflex" width="600"/>
+ <char name="Adieresis" width="600"/>
+ <char name="Agrave" width="600"/>
+ <char name="Aring" width="600"/>
+ <char name="Atilde" width="600"/>
+ <char name="B" width="600"/>
+ <char name="C" width="600"/>
+ <char name="Ccedilla" width="600"/>
+ <char name="D" width="600"/>
+ <char name="E" width="600"/>
+ <char name="Eacute" width="600"/>
+ <char name="Ecircumflex" width="600"/>
+ <char name="Edieresis" width="600"/>
+ <char name="Egrave" width="600"/>
+ <char name="Eth" width="600"/>
+ <char name="F" width="600"/>
+ <char name="G" width="600"/>
+ <char name="Gcaron" width="600"/>
+ <char name="H" width="600"/>
+ <char name="I" width="600"/>
+ <char name="IJ" width="600"/>
+ <char name="Iacute" width="600"/>
+ <char name="Icircumflex" width="600"/>
+ <char name="Idieresis" width="600"/>
+ <char name="Idot" width="600"/>
+ <char name="Igrave" width="600"/>
+ <char name="J" width="600"/>
+ <char name="K" width="600"/>
+ <char name="L" width="600"/>
+ <char name="LL" width="600"/>
+ <char name="Lslash" width="600"/>
+ <char name="M" width="600"/>
+ <char name="N" width="600"/>
+ <char name="Ntilde" width="600"/>
+ <char name="O" width="600"/>
+ <char name="OE" width="600"/>
+ <char name="Oacute" width="600"/>
+ <char name="Ocircumflex" width="600"/>
+ <char name="Odieresis" width="600"/>
+ <char name="Ograve" width="600"/>
+ <char name="Oslash" width="600"/>
+ <char name="Otilde" width="600"/>
+ <char name="P" width="600"/>
+ <char name="Q" width="600"/>
+ <char name="R" width="600"/>
+ <char name="S" width="600"/>
+ <char name="Scaron" width="600"/>
+ <char name="Scedilla" width="600"/>
+ <char name="T" width="600"/>
+ <char name="Thorn" width="600"/>
+ <char name="U" width="600"/>
+ <char name="Uacute" width="600"/>
+ <char name="Ucircumflex" width="600"/>
+ <char name="Udieresis" width="600"/>
+ <char name="Ugrave" width="600"/>
+ <char name="V" width="600"/>
+ <char name="W" width="600"/>
+ <char name="X" width="600"/>
+ <char name="Y" width="600"/>
+ <char name="Yacute" width="600"/>
+ <char name="Ydieresis" width="600"/>
+ <char name="Z" width="600"/>
+ <char name="Zcaron" width="600"/>
+ <char name="a" width="600"/>
+ <char name="aacute" width="600"/>
+ <char name="acircumflex" width="600"/>
+ <char name="acute" width="600"/>
+ <char name="adieresis" width="600"/>
+ <char name="ae" width="600"/>
+ <char name="agrave" width="600"/>
+ <char name="ampersand" width="600"/>
+ <char name="aring" width="600"/>
+ <char name="arrowboth" width="600"/>
+ <char name="arrowdown" width="600"/>
+ <char name="arrowleft" width="600"/>
+ <char name="arrowright" width="600"/>
+ <char name="arrowup" width="600"/>
+ <char name="asciicircum" width="600"/>
+ <char name="asciitilde" width="600"/>
+ <char name="asterisk" width="600"/>
+ <char name="at" width="600"/>
+ <char name="atilde" width="600"/>
+ <char name="b" width="600"/>
+ <char name="backslash" width="600"/>
+ <char name="bar" width="600"/>
+ <char name="braceleft" width="600"/>
+ <char name="braceright" width="600"/>
+ <char name="bracketleft" width="600"/>
+ <char name="bracketright" width="600"/>
+ <char name="breve" width="600"/>
+ <char name="brokenbar" width="600"/>
+ <char name="bullet" width="600"/>
+ <char name="c" width="600"/>
+ <char name="caron" width="600"/>
+ <char name="ccedilla" width="600"/>
+ <char name="cedilla" width="600"/>
+ <char name="cent" width="600"/>
+ <char name="center" width="600"/>
+ <char name="circumflex" width="600"/>
+ <char name="colon" width="600"/>
+ <char name="comma" width="600"/>
+ <char name="copyright" width="600"/>
+ <char name="currency" width="600"/>
+ <char name="d" width="600"/>
+ <char name="dagger" width="600"/>
+ <char name="daggerdbl" width="600"/>
+ <char name="dectab" width="600"/>
+ <char name="degree" width="600"/>
+ <char name="dieresis" width="600"/>
+ <char name="divide" width="600"/>
+ <char name="dollar" width="600"/>
+ <char name="dotaccent" width="600"/>
+ <char name="dotlessi" width="600"/>
+ <char name="down" width="600"/>
+ <char name="e" width="600"/>
+ <char name="eacute" width="600"/>
+ <char name="ecircumflex" width="600"/>
+ <char name="edieresis" width="600"/>
+ <char name="egrave" width="600"/>
+ <char name="eight" width="600"/>
+ <char name="ellipsis" width="600"/>
+ <char name="emdash" width="600"/>
+ <char name="endash" width="600"/>
+ <char name="equal" width="600"/>
+ <char name="eth" width="600"/>
+ <char name="exclam" width="600"/>
+ <char name="exclamdown" width="600"/>
+ <char name="f" width="600"/>
+ <char name="fi" width="600"/>
+ <char name="five" width="600"/>
+ <char name="fl" width="600"/>
+ <char name="florin" width="600"/>
+ <char name="format" width="600"/>
+ <char name="four" width="600"/>
+ <char name="fraction" width="600"/>
+ <char name="g" width="600"/>
+ <char name="gcaron" width="600"/>
+ <char name="germandbls" width="600"/>
+ <char name="grave" width="600"/>
+ <char name="graybox" width="600"/>
+ <char name="greater" width="600"/>
+ <char name="guillemotleft" width="600"/>
+ <char name="guillemotright" width="600"/>
+ <char name="guilsinglleft" width="600"/>
+ <char name="guilsinglright" width="600"/>
+ <char name="h" width="600"/>
+ <char name="hungarumlaut" width="600"/>
+ <char name="hyphen" width="600"/>
+ <char name="i" width="600"/>
+ <char name="iacute" width="600"/>
+ <char name="icircumflex" width="600"/>
+ <char name="idieresis" width="600"/>
+ <char name="igrave" width="600"/>
+ <char name="ij" width="600"/>
+ <char name="indent" width="600"/>
+ <char name="j" width="600"/>
+ <char name="k" width="600"/>
+ <char name="l" width="600"/>
+ <char name="largebullet" width="600"/>
+ <char name="left" width="600"/>
+ <char name="less" width="600"/>
+ <char name="lira" width="600"/>
+ <char name="ll" width="600"/>
+ <char name="logicalnot" width="600"/>
+ <char name="lslash" width="600"/>
+ <char name="m" width="600"/>
+ <char name="macron" width="600"/>
+ <char name="merge" width="600"/>
+ <char name="minus" width="600"/>
+ <char name="mu" width="600"/>
+ <char name="multiply" width="600"/>
+ <char name="n" width="600"/>
+ <char name="nine" width="600"/>
+ <char name="notegraphic" width="600"/>
+ <char name="ntilde" width="600"/>
+ <char name="numbersign" width="600"/>
+ <char name="o" width="600"/>
+ <char name="oacute" width="600"/>
+ <char name="ocircumflex" width="600"/>
+ <char name="odieresis" width="600"/>
+ <char name="oe" width="600"/>
+ <char name="ogonek" width="600"/>
+ <char name="ograve" width="600"/>
+ <char name="one" width="600"/>
+ <char name="onehalf" width="600"/>
+ <char name="onequarter" width="600"/>
+ <char name="onesuperior" width="600"/>
+ <char name="ordfeminine" width="600"/>
+ <char name="ordmasculine" width="600"/>
+ <char name="oslash" width="600"/>
+ <char name="otilde" width="600"/>
+ <char name="overscore" width="600"/>
+ <char name="p" width="600"/>
+ <char name="paragraph" width="600"/>
+ <char name="parenleft" width="600"/>
+ <char name="parenright" width="600"/>
+ <char name="percent" width="600"/>
+ <char name="period" width="600"/>
+ <char name="periodcentered" width="600"/>
+ <char name="perthousand" width="600"/>
+ <char name="plus" width="600"/>
+ <char name="plusminus" width="600"/>
+ <char name="prescription" width="600"/>
+ <char name="q" width="600"/>
+ <char name="question" width="600"/>
+ <char name="questiondown" width="600"/>
+ <char name="quotedbl" width="600"/>
+ <char name="quotedblbase" width="600"/>
+ <char name="quotedblleft" width="600"/>
+ <char name="quotedblright" width="600"/>
+ <char name="quoteleft" width="600"/>
+ <char name="quoteright" width="600"/>
+ <char name="quotesinglbase" width="600"/>
+ <char name="quotesingle" width="600"/>
+ <char name="r" width="600"/>
+ <char name="registered" width="600"/>
+ <char name="return" width="600"/>
+ <char name="ring" width="600"/>
+ <char name="s" width="600"/>
+ <char name="scaron" width="600"/>
+ <char name="scedilla" width="600"/>
+ <char name="section" width="600"/>
+ <char name="semicolon" width="600"/>
+ <char name="seven" width="600"/>
+ <char name="six" width="600"/>
+ <char name="slash" width="600"/>
+ <char name="space" width="600"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="nbsp" width="600"/>
+ <char name="square" width="600"/>
+ <char name="sterling" width="600"/>
+ <char name="stop" width="600"/>
+ <char name="t" width="600"/>
+ <char name="tab" width="600"/>
+ <char name="thorn" width="600"/>
+ <char name="three" width="600"/>
+ <char name="threequarters" width="600"/>
+ <char name="threesuperior" width="600"/>
+ <char name="tilde" width="600"/>
+ <char name="trademark" width="600"/>
+ <char name="two" width="600"/>
+ <char name="twosuperior" width="600"/>
+ <char name="u" width="600"/>
+ <char name="uacute" width="600"/>
+ <char name="ucircumflex" width="600"/>
+ <char name="udieresis" width="600"/>
+ <char name="ugrave" width="600"/>
+ <char name="underscore" width="600"/>
+ <char name="up" width="600"/>
+ <char name="v" width="600"/>
+ <char name="w" width="600"/>
+ <char name="x" width="600"/>
+ <char name="y" width="600"/>
+ <char name="yacute" width="600"/>
+ <char name="ydieresis" width="600"/>
+ <char name="yen" width="600"/>
+ <char name="z" width="600"/>
+ <char name="zcaron" width="600"/>
+ <char name="zero" width="600"/>
+ </widths>
+</font-metrics>
\ No newline at end of file
--- /dev/null
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Helvetica-Bold</font-name>
+ <class-name>HelveticaBold</class-name>
+ <encoding>WinAnsiEncoding</encoding>
+ <cap-height>718</cap-height>
+ <x-height>532</x-height>
+ <ascender>718</ascender>
+ <descender>-207</descender>
+ <widths>
+ <char name="A" width="722"/>
+ <char name="AE" width="1000"/>
+ <char name="Aacute" width="722"/>
+ <char name="Acircumflex" width="722"/>
+ <char name="Adieresis" width="722"/>
+ <char name="Agrave" width="722"/>
+ <char name="Aring" width="722"/>
+ <char name="Atilde" width="722"/>
+ <char name="B" width="722"/>
+ <char name="C" width="722"/>
+ <char name="Ccedilla" width="722"/>
+ <char name="D" width="722"/>
+ <char name="E" width="667"/>
+ <char name="Eacute" width="667"/>
+ <char name="Ecircumflex" width="667"/>
+ <char name="Edieresis" width="667"/>
+ <char name="Egrave" width="667"/>
+ <char name="Eth" width="722"/>
+ <char name="F" width="611"/>
+ <char name="G" width="778"/>
+ <char name="H" width="722"/>
+ <char name="I" width="278"/>
+ <char name="Iacute" width="278"/>
+ <char name="Icircumflex" width="278"/>
+ <char name="Idieresis" width="278"/>
+ <char name="Igrave" width="278"/>
+ <char name="J" width="556"/>
+ <char name="K" width="722"/>
+ <char name="L" width="611"/>
+ <char name="Lslash" width="611"/>
+ <char name="M" width="833"/>
+ <char name="N" width="722"/>
+ <char name="Ntilde" width="722"/>
+ <char name="O" width="778"/>
+ <char name="OE" width="1000"/>
+ <char name="Oacute" width="778"/>
+ <char name="Ocircumflex" width="778"/>
+ <char name="Odieresis" width="778"/>
+ <char name="Ograve" width="778"/>
+ <char name="Oslash" width="778"/>
+ <char name="Otilde" width="778"/>
+ <char name="P" width="667"/>
+ <char name="Q" width="778"/>
+ <char name="R" width="722"/>
+ <char name="S" width="667"/>
+ <char name="Scaron" width="667"/>
+ <char name="T" width="611"/>
+ <char name="Thorn" width="667"/>
+ <char name="U" width="722"/>
+ <char name="Uacute" width="722"/>
+ <char name="Ucircumflex" width="722"/>
+ <char name="Udieresis" width="722"/>
+ <char name="Ugrave" width="722"/>
+ <char name="V" width="667"/>
+ <char name="W" width="944"/>
+ <char name="X" width="667"/>
+ <char name="Y" width="667"/>
+ <char name="Yacute" width="667"/>
+ <char name="Ydieresis" width="667"/>
+ <char name="Z" width="611"/>
+ <char name="Zcaron" width="611"/>
+ <char name="a" width="556"/>
+ <char name="aacute" width="556"/>
+ <char name="acircumflex" width="556"/>
+ <char name="acute" width="333"/>
+ <char name="adieresis" width="556"/>
+ <char name="ae" width="889"/>
+ <char name="agrave" width="556"/>
+ <char name="ampersand" width="722"/>
+ <char name="aring" width="556"/>
+ <char name="asciicircum" width="584"/>
+ <char name="asciitilde" width="584"/>
+ <char name="asterisk" width="389"/>
+ <char name="at" width="975"/>
+ <char name="atilde" width="556"/>
+ <char name="b" width="611"/>
+ <char name="backslash" width="278"/>
+ <char name="bar" width="280"/>
+ <char name="braceleft" width="389"/>
+ <char name="braceright" width="389"/>
+ <char name="bracketleft" width="333"/>
+ <char name="bracketright" width="333"/>
+ <char name="breve" width="333"/>
+ <char name="brokenbar" width="280"/>
+ <char name="bullet" width="350"/>
+ <char name="c" width="556"/>
+ <char name="caron" width="333"/>
+ <char name="ccedilla" width="556"/>
+ <char name="cedilla" width="333"/>
+ <char name="cent" width="556"/>
+ <char name="circumflex" width="333"/>
+ <char name="colon" width="333"/>
+ <char name="comma" width="278"/>
+ <char name="copyright" width="737"/>
+ <char name="currency" width="556"/>
+ <char name="d" width="611"/>
+ <char name="dagger" width="556"/>
+ <char name="daggerdbl" width="556"/>
+ <char name="degree" width="400"/>
+ <char name="dieresis" width="333"/>
+ <char name="divide" width="584"/>
+ <char name="dollar" width="556"/>
+ <char name="dotaccent" width="333"/>
+ <char name="dotlessi" width="278"/>
+ <char name="e" width="556"/>
+ <char name="eacute" width="556"/>
+ <char name="ecircumflex" width="556"/>
+ <char name="edieresis" width="556"/>
+ <char name="egrave" width="556"/>
+ <char name="eight" width="556"/>
+ <char name="ellipsis" width="1000"/>
+ <char name="emdash" width="1000"/>
+ <char name="endash" width="556"/>
+ <char name="equal" width="584"/>
+ <char name="eth" width="611"/>
+ <char name="exclam" width="333"/>
+ <char name="exclamdown" width="333"/>
+ <char name="f" width="333"/>
+ <char name="fi" width="611"/>
+ <char name="five" width="556"/>
+ <char name="fl" width="611"/>
+ <char name="florin" width="556"/>
+ <char name="four" width="556"/>
+ <char name="fraction" width="167"/>
+ <char name="g" width="611"/>
+ <char name="germandbls" width="611"/>
+ <char name="grave" width="333"/>
+ <char name="greater" width="584"/>
+ <char name="guillemotleft" width="556"/>
+ <char name="guillemotright" width="556"/>
+ <char name="guilsinglleft" width="333"/>
+ <char name="guilsinglright" width="333"/>
+ <char name="h" width="611"/>
+ <char name="hungarumlaut" width="333"/>
+ <char name="hyphen" width="333"/>
+ <char name="i" width="278"/>
+ <char name="iacute" width="278"/>
+ <char name="icircumflex" width="278"/>
+ <char name="idieresis" width="278"/>
+ <char name="igrave" width="278"/>
+ <char name="j" width="278"/>
+ <char name="k" width="556"/>
+ <char name="l" width="278"/>
+ <char name="less" width="584"/>
+ <char name="logicalnot" width="584"/>
+ <char name="lslash" width="278"/>
+ <char name="m" width="889"/>
+ <char name="macron" width="333"/>
+ <char name="minus" width="584"/>
+ <char name="mu" width="611"/>
+ <char name="multiply" width="584"/>
+ <char name="n" width="611"/>
+ <char name="nine" width="556"/>
+ <char name="ntilde" width="611"/>
+ <char name="numbersign" width="556"/>
+ <char name="o" width="611"/>
+ <char name="oacute" width="611"/>
+ <char name="ocircumflex" width="611"/>
+ <char name="odieresis" width="611"/>
+ <char name="oe" width="944"/>
+ <char name="ogonek" width="333"/>
+ <char name="ograve" width="611"/>
+ <char name="one" width="556"/>
+ <char name="onehalf" width="834"/>
+ <char name="onequarter" width="834"/>
+ <char name="onesuperior" width="333"/>
+ <char name="ordfeminine" width="370"/>
+ <char name="ordmasculine" width="365"/>
+ <char name="oslash" width="611"/>
+ <char name="otilde" width="611"/>
+ <char name="p" width="611"/>
+ <char name="paragraph" width="556"/>
+ <char name="parenleft" width="333"/>
+ <char name="parenright" width="333"/>
+ <char name="percent" width="889"/>
+ <char name="period" width="278"/>
+ <char name="periodcentered" width="278"/>
+ <char name="perthousand" width="1000"/>
+ <char name="plus" width="584"/>
+ <char name="plusminus" width="584"/>
+ <char name="q" width="611"/>
+ <char name="question" width="611"/>
+ <char name="questiondown" width="611"/>
+ <char name="quotedbl" width="474"/>
+ <char name="quotedblbase" width="500"/>
+ <char name="quotedblleft" width="500"/>
+ <char name="quotedblright" width="500"/>
+ <char name="quoteleft" width="278"/>
+ <char name="quoteright" width="278"/>
+ <char name="quotesinglbase" width="278"/>
+ <char name="quotesingle" width="238"/>
+ <char name="r" width="389"/>
+ <char name="registered" width="737"/>
+ <char name="ring" width="333"/>
+ <char name="s" width="556"/>
+ <char name="scaron" width="556"/>
+ <char name="section" width="556"/>
+ <char name="semicolon" width="333"/>
+ <char name="seven" width="556"/>
+ <char name="six" width="556"/>
+ <char name="slash" width="278"/>
+ <char name="space" width="278"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="nbsp" width="278"/>
+ <char name="sterling" width="556"/>
+ <char name="t" width="333"/>
+ <char name="thorn" width="611"/>
+ <char name="three" width="556"/>
+ <char name="threequarters" width="834"/>
+ <char name="threesuperior" width="333"/>
+ <char name="tilde" width="333"/>
+ <char name="trademark" width="1000"/>
+ <char name="two" width="556"/>
+ <char name="twosuperior" width="333"/>
+ <char name="u" width="611"/>
+ <char name="uacute" width="611"/>
+ <char name="ucircumflex" width="611"/>
+ <char name="udieresis" width="611"/>
+ <char name="ugrave" width="611"/>
+ <char name="underscore" width="556"/>
+ <char name="v" width="556"/>
+ <char name="w" width="778"/>
+ <char name="x" width="556"/>
+ <char name="y" width="556"/>
+ <char name="yacute" width="556"/>
+ <char name="ydieresis" width="556"/>
+ <char name="yen" width="556"/>
+ <char name="z" width="500"/>
+ <char name="zcaron" width="500"/>
+ <char name="zero" width="556"/>
+ </widths>
+</font-metrics>
\ No newline at end of file
--- /dev/null
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Helvetica-BoldOblique</font-name>
+ <class-name>HelveticaBoldOblique</class-name>
+ <encoding>WinAnsiEncoding</encoding>
+ <cap-height>718</cap-height>
+ <x-height>532</x-height>
+ <ascender>718</ascender>
+ <descender>-207</descender>
+ <widths>
+ <char name="A" width="722"/>
+ <char name="AE" width="1000"/>
+ <char name="Aacute" width="722"/>
+ <char name="Acircumflex" width="722"/>
+ <char name="Adieresis" width="722"/>
+ <char name="Agrave" width="722"/>
+ <char name="Aring" width="722"/>
+ <char name="Atilde" width="722"/>
+ <char name="B" width="722"/>
+ <char name="C" width="722"/>
+ <char name="Ccedilla" width="722"/>
+ <char name="D" width="722"/>
+ <char name="E" width="667"/>
+ <char name="Eacute" width="667"/>
+ <char name="Ecircumflex" width="667"/>
+ <char name="Edieresis" width="667"/>
+ <char name="Egrave" width="667"/>
+ <char name="Eth" width="722"/>
+ <char name="F" width="611"/>
+ <char name="G" width="778"/>
+ <char name="H" width="722"/>
+ <char name="I" width="278"/>
+ <char name="Iacute" width="278"/>
+ <char name="Icircumflex" width="278"/>
+ <char name="Idieresis" width="278"/>
+ <char name="Igrave" width="278"/>
+ <char name="J" width="556"/>
+ <char name="K" width="722"/>
+ <char name="L" width="611"/>
+ <char name="Lslash" width="611"/>
+ <char name="M" width="833"/>
+ <char name="N" width="722"/>
+ <char name="Ntilde" width="722"/>
+ <char name="O" width="778"/>
+ <char name="OE" width="1000"/>
+ <char name="Oacute" width="778"/>
+ <char name="Ocircumflex" width="778"/>
+ <char name="Odieresis" width="778"/>
+ <char name="Ograve" width="778"/>
+ <char name="Oslash" width="778"/>
+ <char name="Otilde" width="778"/>
+ <char name="P" width="667"/>
+ <char name="Q" width="778"/>
+ <char name="R" width="722"/>
+ <char name="S" width="667"/>
+ <char name="Scaron" width="667"/>
+ <char name="T" width="611"/>
+ <char name="Thorn" width="667"/>
+ <char name="U" width="722"/>
+ <char name="Uacute" width="722"/>
+ <char name="Ucircumflex" width="722"/>
+ <char name="Udieresis" width="722"/>
+ <char name="Ugrave" width="722"/>
+ <char name="V" width="667"/>
+ <char name="W" width="944"/>
+ <char name="X" width="667"/>
+ <char name="Y" width="667"/>
+ <char name="Yacute" width="667"/>
+ <char name="Ydieresis" width="667"/>
+ <char name="Z" width="611"/>
+ <char name="Zcaron" width="611"/>
+ <char name="a" width="556"/>
+ <char name="aacute" width="556"/>
+ <char name="acircumflex" width="556"/>
+ <char name="acute" width="333"/>
+ <char name="adieresis" width="556"/>
+ <char name="ae" width="889"/>
+ <char name="agrave" width="556"/>
+ <char name="ampersand" width="722"/>
+ <char name="aring" width="556"/>
+ <char name="asciicircum" width="584"/>
+ <char name="asciitilde" width="584"/>
+ <char name="asterisk" width="389"/>
+ <char name="at" width="975"/>
+ <char name="atilde" width="556"/>
+ <char name="b" width="611"/>
+ <char name="backslash" width="278"/>
+ <char name="bar" width="280"/>
+ <char name="braceleft" width="389"/>
+ <char name="braceright" width="389"/>
+ <char name="bracketleft" width="333"/>
+ <char name="bracketright" width="333"/>
+ <char name="breve" width="333"/>
+ <char name="brokenbar" width="280"/>
+ <char name="bullet" width="350"/>
+ <char name="c" width="556"/>
+ <char name="caron" width="333"/>
+ <char name="ccedilla" width="556"/>
+ <char name="cedilla" width="333"/>
+ <char name="cent" width="556"/>
+ <char name="circumflex" width="333"/>
+ <char name="colon" width="333"/>
+ <char name="comma" width="278"/>
+ <char name="copyright" width="737"/>
+ <char name="currency" width="556"/>
+ <char name="d" width="611"/>
+ <char name="dagger" width="556"/>
+ <char name="daggerdbl" width="556"/>
+ <char name="degree" width="400"/>
+ <char name="dieresis" width="333"/>
+ <char name="divide" width="584"/>
+ <char name="dollar" width="556"/>
+ <char name="dotaccent" width="333"/>
+ <char name="dotlessi" width="278"/>
+ <char name="e" width="556"/>
+ <char name="eacute" width="556"/>
+ <char name="ecircumflex" width="556"/>
+ <char name="edieresis" width="556"/>
+ <char name="egrave" width="556"/>
+ <char name="eight" width="556"/>
+ <char name="ellipsis" width="1000"/>
+ <char name="emdash" width="1000"/>
+ <char name="endash" width="556"/>
+ <char name="equal" width="584"/>
+ <char name="eth" width="611"/>
+ <char name="exclam" width="333"/>
+ <char name="exclamdown" width="333"/>
+ <char name="f" width="333"/>
+ <char name="fi" width="611"/>
+ <char name="five" width="556"/>
+ <char name="fl" width="611"/>
+ <char name="florin" width="556"/>
+ <char name="four" width="556"/>
+ <char name="fraction" width="167"/>
+ <char name="g" width="611"/>
+ <char name="germandbls" width="611"/>
+ <char name="grave" width="333"/>
+ <char name="greater" width="584"/>
+ <char name="guillemotleft" width="556"/>
+ <char name="guillemotright" width="556"/>
+ <char name="guilsinglleft" width="333"/>
+ <char name="guilsinglright" width="333"/>
+ <char name="h" width="611"/>
+ <char name="hungarumlaut" width="333"/>
+ <char name="hyphen" width="333"/>
+ <char name="i" width="278"/>
+ <char name="iacute" width="278"/>
+ <char name="icircumflex" width="278"/>
+ <char name="idieresis" width="278"/>
+ <char name="igrave" width="278"/>
+ <char name="j" width="278"/>
+ <char name="k" width="556"/>
+ <char name="l" width="278"/>
+ <char name="less" width="584"/>
+ <char name="logicalnot" width="584"/>
+ <char name="lslash" width="278"/>
+ <char name="m" width="889"/>
+ <char name="macron" width="333"/>
+ <char name="minus" width="584"/>
+ <char name="mu" width="611"/>
+ <char name="multiply" width="584"/>
+ <char name="n" width="611"/>
+ <char name="nine" width="556"/>
+ <char name="ntilde" width="611"/>
+ <char name="numbersign" width="556"/>
+ <char name="o" width="611"/>
+ <char name="oacute" width="611"/>
+ <char name="ocircumflex" width="611"/>
+ <char name="odieresis" width="611"/>
+ <char name="oe" width="944"/>
+ <char name="ogonek" width="333"/>
+ <char name="ograve" width="611"/>
+ <char name="one" width="556"/>
+ <char name="onehalf" width="834"/>
+ <char name="onequarter" width="834"/>
+ <char name="onesuperior" width="333"/>
+ <char name="ordfeminine" width="370"/>
+ <char name="ordmasculine" width="365"/>
+ <char name="oslash" width="611"/>
+ <char name="otilde" width="611"/>
+ <char name="p" width="611"/>
+ <char name="paragraph" width="556"/>
+ <char name="parenleft" width="333"/>
+ <char name="parenright" width="333"/>
+ <char name="percent" width="889"/>
+ <char name="period" width="278"/>
+ <char name="periodcentered" width="278"/>
+ <char name="perthousand" width="1000"/>
+ <char name="plus" width="584"/>
+ <char name="plusminus" width="584"/>
+ <char name="q" width="611"/>
+ <char name="question" width="611"/>
+ <char name="questiondown" width="611"/>
+ <char name="quotedbl" width="474"/>
+ <char name="quotedblbase" width="500"/>
+ <char name="quotedblleft" width="500"/>
+ <char name="quotedblright" width="500"/>
+ <char name="quoteleft" width="278"/>
+ <char name="quoteright" width="278"/>
+ <char name="quotesinglbase" width="278"/>
+ <char name="quotesingle" width="238"/>
+ <char name="r" width="389"/>
+ <char name="registered" width="737"/>
+ <char name="ring" width="333"/>
+ <char name="s" width="556"/>
+ <char name="scaron" width="556"/>
+ <char name="section" width="556"/>
+ <char name="semicolon" width="333"/>
+ <char name="seven" width="556"/>
+ <char name="six" width="556"/>
+ <char name="slash" width="278"/>
+ <char name="space" width="278"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="nbsp" width="278"/>
+ <char name="sterling" width="556"/>
+ <char name="t" width="333"/>
+ <char name="thorn" width="611"/>
+ <char name="three" width="556"/>
+ <char name="threequarters" width="834"/>
+ <char name="threesuperior" width="333"/>
+ <char name="tilde" width="333"/>
+ <char name="trademark" width="1000"/>
+ <char name="two" width="556"/>
+ <char name="twosuperior" width="333"/>
+ <char name="u" width="611"/>
+ <char name="uacute" width="611"/>
+ <char name="ucircumflex" width="611"/>
+ <char name="udieresis" width="611"/>
+ <char name="ugrave" width="611"/>
+ <char name="underscore" width="556"/>
+ <char name="v" width="556"/>
+ <char name="w" width="778"/>
+ <char name="x" width="556"/>
+ <char name="y" width="556"/>
+ <char name="yacute" width="556"/>
+ <char name="ydieresis" width="556"/>
+ <char name="yen" width="556"/>
+ <char name="z" width="500"/>
+ <char name="zcaron" width="500"/>
+ <char name="zero" width="556"/>
+ </widths>
+</font-metrics>
\ No newline at end of file
--- /dev/null
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Helvetica-Oblique</font-name>
+ <class-name>HelveticaOblique</class-name>
+ <encoding>WinAnsiEncoding</encoding>
+ <cap-height>718</cap-height>
+ <x-height>523</x-height>
+ <ascender>718</ascender>
+ <descender>-207</descender>
+ <widths>
+ <char name="A" width="667"/>
+ <char name="AE" width="1000"/>
+ <char name="Aacute" width="667"/>
+ <char name="Acircumflex" width="667"/>
+ <char name="Adieresis" width="667"/>
+ <char name="Agrave" width="667"/>
+ <char name="Aring" width="667"/>
+ <char name="Atilde" width="667"/>
+ <char name="B" width="667"/>
+ <char name="C" width="722"/>
+ <char name="Ccedilla" width="722"/>
+ <char name="D" width="722"/>
+ <char name="E" width="667"/>
+ <char name="Eacute" width="667"/>
+ <char name="Ecircumflex" width="667"/>
+ <char name="Edieresis" width="667"/>
+ <char name="Egrave" width="667"/>
+ <char name="Eth" width="722"/>
+ <char name="F" width="611"/>
+ <char name="G" width="778"/>
+ <char name="H" width="722"/>
+ <char name="I" width="278"/>
+ <char name="Iacute" width="278"/>
+ <char name="Icircumflex" width="278"/>
+ <char name="Idieresis" width="278"/>
+ <char name="Igrave" width="278"/>
+ <char name="J" width="500"/>
+ <char name="K" width="667"/>
+ <char name="L" width="556"/>
+ <char name="Lslash" width="556"/>
+ <char name="M" width="833"/>
+ <char name="N" width="722"/>
+ <char name="Ntilde" width="722"/>
+ <char name="O" width="778"/>
+ <char name="OE" width="1000"/>
+ <char name="Oacute" width="778"/>
+ <char name="Ocircumflex" width="778"/>
+ <char name="Odieresis" width="778"/>
+ <char name="Ograve" width="778"/>
+ <char name="Oslash" width="778"/>
+ <char name="Otilde" width="778"/>
+ <char name="P" width="667"/>
+ <char name="Q" width="778"/>
+ <char name="R" width="722"/>
+ <char name="S" width="667"/>
+ <char name="Scaron" width="667"/>
+ <char name="T" width="611"/>
+ <char name="Thorn" width="667"/>
+ <char name="U" width="722"/>
+ <char name="Uacute" width="722"/>
+ <char name="Ucircumflex" width="722"/>
+ <char name="Udieresis" width="722"/>
+ <char name="Ugrave" width="722"/>
+ <char name="V" width="667"/>
+ <char name="W" width="944"/>
+ <char name="X" width="667"/>
+ <char name="Y" width="667"/>
+ <char name="Yacute" width="667"/>
+ <char name="Ydieresis" width="667"/>
+ <char name="Z" width="611"/>
+ <char name="Zcaron" width="611"/>
+ <char name="a" width="556"/>
+ <char name="aacute" width="556"/>
+ <char name="acircumflex" width="556"/>
+ <char name="acute" width="333"/>
+ <char name="adieresis" width="556"/>
+ <char name="ae" width="889"/>
+ <char name="agrave" width="556"/>
+ <char name="ampersand" width="667"/>
+ <char name="aring" width="556"/>
+ <char name="asciicircum" width="469"/>
+ <char name="asciitilde" width="584"/>
+ <char name="asterisk" width="389"/>
+ <char name="at" width="1015"/>
+ <char name="atilde" width="556"/>
+ <char name="b" width="556"/>
+ <char name="backslash" width="278"/>
+ <char name="bar" width="260"/>
+ <char name="braceleft" width="334"/>
+ <char name="braceright" width="334"/>
+ <char name="bracketleft" width="278"/>
+ <char name="bracketright" width="278"/>
+ <char name="breve" width="333"/>
+ <char name="brokenbar" width="260"/>
+ <char name="bullet" width="350"/>
+ <char name="c" width="500"/>
+ <char name="caron" width="333"/>
+ <char name="ccedilla" width="500"/>
+ <char name="cedilla" width="333"/>
+ <char name="cent" width="556"/>
+ <char name="circumflex" width="333"/>
+ <char name="colon" width="278"/>
+ <char name="comma" width="278"/>
+ <char name="copyright" width="737"/>
+ <char name="currency" width="556"/>
+ <char name="d" width="556"/>
+ <char name="dagger" width="556"/>
+ <char name="daggerdbl" width="556"/>
+ <char name="degree" width="400"/>
+ <char name="dieresis" width="333"/>
+ <char name="divide" width="584"/>
+ <char name="dollar" width="556"/>
+ <char name="dotaccent" width="333"/>
+ <char name="dotlessi" width="278"/>
+ <char name="e" width="556"/>
+ <char name="eacute" width="556"/>
+ <char name="ecircumflex" width="556"/>
+ <char name="edieresis" width="556"/>
+ <char name="egrave" width="556"/>
+ <char name="eight" width="556"/>
+ <char name="ellipsis" width="1000"/>
+ <char name="emdash" width="1000"/>
+ <char name="endash" width="556"/>
+ <char name="equal" width="584"/>
+ <char name="eth" width="556"/>
+ <char name="exclam" width="278"/>
+ <char name="exclamdown" width="333"/>
+ <char name="f" width="278"/>
+ <char name="fi" width="500"/>
+ <char name="five" width="556"/>
+ <char name="fl" width="500"/>
+ <char name="florin" width="556"/>
+ <char name="four" width="556"/>
+ <char name="fraction" width="167"/>
+ <char name="g" width="556"/>
+ <char name="germandbls" width="611"/>
+ <char name="grave" width="333"/>
+ <char name="greater" width="584"/>
+ <char name="guillemotleft" width="556"/>
+ <char name="guillemotright" width="556"/>
+ <char name="guilsinglleft" width="333"/>
+ <char name="guilsinglright" width="333"/>
+ <char name="h" width="556"/>
+ <char name="hungarumlaut" width="333"/>
+ <char name="hyphen" width="333"/>
+ <char name="i" width="222"/>
+ <char name="iacute" width="278"/>
+ <char name="icircumflex" width="278"/>
+ <char name="idieresis" width="278"/>
+ <char name="igrave" width="278"/>
+ <char name="j" width="222"/>
+ <char name="k" width="500"/>
+ <char name="l" width="222"/>
+ <char name="less" width="584"/>
+ <char name="logicalnot" width="584"/>
+ <char name="lslash" width="222"/>
+ <char name="m" width="833"/>
+ <char name="macron" width="333"/>
+ <char name="minus" width="584"/>
+ <char name="mu" width="556"/>
+ <char name="multiply" width="584"/>
+ <char name="n" width="556"/>
+ <char name="nine" width="556"/>
+ <char name="ntilde" width="556"/>
+ <char name="numbersign" width="556"/>
+ <char name="o" width="556"/>
+ <char name="oacute" width="556"/>
+ <char name="ocircumflex" width="556"/>
+ <char name="odieresis" width="556"/>
+ <char name="oe" width="944"/>
+ <char name="ogonek" width="333"/>
+ <char name="ograve" width="556"/>
+ <char name="one" width="556"/>
+ <char name="onehalf" width="834"/>
+ <char name="onequarter" width="834"/>
+ <char name="onesuperior" width="333"/>
+ <char name="ordfeminine" width="370"/>
+ <char name="ordmasculine" width="365"/>
+ <char name="oslash" width="611"/>
+ <char name="otilde" width="556"/>
+ <char name="p" width="556"/>
+ <char name="paragraph" width="537"/>
+ <char name="parenleft" width="333"/>
+ <char name="parenright" width="333"/>
+ <char name="percent" width="889"/>
+ <char name="period" width="278"/>
+ <char name="periodcentered" width="278"/>
+ <char name="perthousand" width="1000"/>
+ <char name="plus" width="584"/>
+ <char name="plusminus" width="584"/>
+ <char name="q" width="556"/>
+ <char name="question" width="556"/>
+ <char name="questiondown" width="611"/>
+ <char name="quotedbl" width="355"/>
+ <char name="quotedblbase" width="333"/>
+ <char name="quotedblleft" width="333"/>
+ <char name="quotedblright" width="333"/>
+ <char name="quoteleft" width="222"/>
+ <char name="quoteright" width="222"/>
+ <char name="quotesinglbase" width="222"/>
+ <char name="quotesingle" width="191"/>
+ <char name="r" width="333"/>
+ <char name="registered" width="737"/>
+ <char name="ring" width="333"/>
+ <char name="s" width="500"/>
+ <char name="scaron" width="500"/>
+ <char name="section" width="556"/>
+ <char name="semicolon" width="278"/>
+ <char name="seven" width="556"/>
+ <char name="six" width="556"/>
+ <char name="slash" width="278"/>
+ <char name="space" width="278"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="nbsp" width="278"/>
+ <char name="sterling" width="556"/>
+ <char name="t" width="278"/>
+ <char name="thorn" width="556"/>
+ <char name="three" width="556"/>
+ <char name="threequarters" width="834"/>
+ <char name="threesuperior" width="333"/>
+ <char name="tilde" width="333"/>
+ <char name="trademark" width="1000"/>
+ <char name="two" width="556"/>
+ <char name="twosuperior" width="333"/>
+ <char name="u" width="556"/>
+ <char name="uacute" width="556"/>
+ <char name="ucircumflex" width="556"/>
+ <char name="udieresis" width="556"/>
+ <char name="ugrave" width="556"/>
+ <char name="underscore" width="556"/>
+ <char name="v" width="500"/>
+ <char name="w" width="722"/>
+ <char name="x" width="500"/>
+ <char name="y" width="500"/>
+ <char name="yacute" width="500"/>
+ <char name="ydieresis" width="500"/>
+ <char name="yen" width="556"/>
+ <char name="z" width="500"/>
+ <char name="zcaron" width="500"/>
+ <char name="zero" width="556"/>
+ </widths>
+</font-metrics>
\ No newline at end of file
--- /dev/null
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Helvetica</font-name>
+ <class-name>Helvetica</class-name>
+ <encoding>WinAnsiEncoding</encoding>
+ <cap-height>718</cap-height>
+ <x-height>523</x-height>
+ <ascender>718</ascender>
+ <descender>-207</descender>
+ <widths>
+ <char name="A" width="667"/>
+ <char name="AE" width="1000"/>
+ <char name="Aacute" width="667"/>
+ <char name="Acircumflex" width="667"/>
+ <char name="Adieresis" width="667"/>
+ <char name="Agrave" width="667"/>
+ <char name="Aring" width="667"/>
+ <char name="Atilde" width="667"/>
+ <char name="B" width="667"/>
+ <char name="C" width="722"/>
+ <char name="Ccedilla" width="722"/>
+ <char name="D" width="722"/>
+ <char name="E" width="667"/>
+ <char name="Eacute" width="667"/>
+ <char name="Ecircumflex" width="667"/>
+ <char name="Edieresis" width="667"/>
+ <char name="Egrave" width="667"/>
+ <char name="Eth" width="722"/>
+ <char name="F" width="611"/>
+ <char name="G" width="778"/>
+ <char name="H" width="722"/>
+ <char name="I" width="278"/>
+ <char name="Iacute" width="278"/>
+ <char name="Icircumflex" width="278"/>
+ <char name="Idieresis" width="278"/>
+ <char name="Igrave" width="278"/>
+ <char name="J" width="500"/>
+ <char name="K" width="667"/>
+ <char name="L" width="556"/>
+ <char name="Lslash" width="556"/>
+ <char name="M" width="833"/>
+ <char name="N" width="722"/>
+ <char name="Ntilde" width="722"/>
+ <char name="O" width="778"/>
+ <char name="OE" width="1000"/>
+ <char name="Oacute" width="778"/>
+ <char name="Ocircumflex" width="778"/>
+ <char name="Odieresis" width="778"/>
+ <char name="Ograve" width="778"/>
+ <char name="Oslash" width="778"/>
+ <char name="Otilde" width="778"/>
+ <char name="P" width="667"/>
+ <char name="Q" width="778"/>
+ <char name="R" width="722"/>
+ <char name="S" width="667"/>
+ <char name="Scaron" width="667"/>
+ <char name="T" width="611"/>
+ <char name="Thorn" width="667"/>
+ <char name="U" width="722"/>
+ <char name="Uacute" width="722"/>
+ <char name="Ucircumflex" width="722"/>
+ <char name="Udieresis" width="722"/>
+ <char name="Ugrave" width="722"/>
+ <char name="V" width="667"/>
+ <char name="W" width="944"/>
+ <char name="X" width="667"/>
+ <char name="Y" width="667"/>
+ <char name="Yacute" width="667"/>
+ <char name="Ydieresis" width="667"/>
+ <char name="Z" width="611"/>
+ <char name="Zcaron" width="611"/>
+ <char name="a" width="556"/>
+ <char name="aacute" width="556"/>
+ <char name="acircumflex" width="556"/>
+ <char name="acute" width="333"/>
+ <char name="adieresis" width="556"/>
+ <char name="ae" width="889"/>
+ <char name="agrave" width="556"/>
+ <char name="ampersand" width="667"/>
+ <char name="aring" width="556"/>
+ <char name="asciicircum" width="469"/>
+ <char name="asciitilde" width="584"/>
+ <char name="asterisk" width="389"/>
+ <char name="at" width="1015"/>
+ <char name="atilde" width="556"/>
+ <char name="b" width="556"/>
+ <char name="backslash" width="278"/>
+ <char name="bar" width="260"/>
+ <char name="braceleft" width="334"/>
+ <char name="braceright" width="334"/>
+ <char name="bracketleft" width="278"/>
+ <char name="bracketright" width="278"/>
+ <char name="breve" width="333"/>
+ <char name="brokenbar" width="260"/>
+ <char name="bullet" width="350"/>
+ <char name="c" width="500"/>
+ <char name="caron" width="333"/>
+ <char name="ccedilla" width="500"/>
+ <char name="cedilla" width="333"/>
+ <char name="cent" width="556"/>
+ <char name="circumflex" width="333"/>
+ <char name="colon" width="278"/>
+ <char name="comma" width="278"/>
+ <char name="copyright" width="737"/>
+ <char name="currency" width="556"/>
+ <char name="d" width="556"/>
+ <char name="dagger" width="556"/>
+ <char name="daggerdbl" width="556"/>
+ <char name="degree" width="400"/>
+ <char name="dieresis" width="333"/>
+ <char name="divide" width="584"/>
+ <char name="dollar" width="556"/>
+ <char name="dotaccent" width="333"/>
+ <char name="dotlessi" width="278"/>
+ <char name="e" width="556"/>
+ <char name="eacute" width="556"/>
+ <char name="ecircumflex" width="556"/>
+ <char name="edieresis" width="556"/>
+ <char name="egrave" width="556"/>
+ <char name="eight" width="556"/>
+ <char name="ellipsis" width="1000"/>
+ <char name="emdash" width="1000"/>
+ <char name="endash" width="556"/>
+ <char name="equal" width="584"/>
+ <char name="eth" width="556"/>
+ <char name="exclam" width="278"/>
+ <char name="exclamdown" width="333"/>
+ <char name="f" width="278"/>
+ <char name="fi" width="500"/>
+ <char name="five" width="556"/>
+ <char name="fl" width="500"/>
+ <char name="florin" width="556"/>
+ <char name="four" width="556"/>
+ <char name="fraction" width="167"/>
+ <char name="g" width="556"/>
+ <char name="germandbls" width="611"/>
+ <char name="grave" width="333"/>
+ <char name="greater" width="584"/>
+ <char name="guillemotleft" width="556"/>
+ <char name="guillemotright" width="556"/>
+ <char name="guilsinglleft" width="333"/>
+ <char name="guilsinglright" width="333"/>
+ <char name="h" width="556"/>
+ <char name="hungarumlaut" width="333"/>
+ <char name="hyphen" width="333"/>
+ <char name="i" width="222"/>
+ <char name="iacute" width="278"/>
+ <char name="icircumflex" width="278"/>
+ <char name="idieresis" width="278"/>
+ <char name="igrave" width="278"/>
+ <char name="j" width="222"/>
+ <char name="k" width="500"/>
+ <char name="l" width="222"/>
+ <char name="less" width="584"/>
+ <char name="logicalnot" width="584"/>
+ <char name="lslash" width="222"/>
+ <char name="m" width="833"/>
+ <char name="macron" width="333"/>
+ <char name="minus" width="584"/>
+ <char name="mu" width="556"/>
+ <char name="multiply" width="584"/>
+ <char name="n" width="556"/>
+ <char name="nine" width="556"/>
+ <char name="ntilde" width="556"/>
+ <char name="numbersign" width="556"/>
+ <char name="o" width="556"/>
+ <char name="oacute" width="556"/>
+ <char name="ocircumflex" width="556"/>
+ <char name="odieresis" width="556"/>
+ <char name="oe" width="944"/>
+ <char name="ogonek" width="333"/>
+ <char name="ograve" width="556"/>
+ <char name="one" width="556"/>
+ <char name="onehalf" width="834"/>
+ <char name="onequarter" width="834"/>
+ <char name="onesuperior" width="333"/>
+ <char name="ordfeminine" width="370"/>
+ <char name="ordmasculine" width="365"/>
+ <char name="oslash" width="611"/>
+ <char name="otilde" width="556"/>
+ <char name="p" width="556"/>
+ <char name="paragraph" width="537"/>
+ <char name="parenleft" width="333"/>
+ <char name="parenright" width="333"/>
+ <char name="percent" width="889"/>
+ <char name="period" width="278"/>
+ <char name="periodcentered" width="278"/>
+ <char name="perthousand" width="1000"/>
+ <char name="plus" width="584"/>
+ <char name="plusminus" width="584"/>
+ <char name="q" width="556"/>
+ <char name="question" width="556"/>
+ <char name="questiondown" width="611"/>
+ <char name="quotedbl" width="355"/>
+ <char name="quotedblbase" width="333"/>
+ <char name="quotedblleft" width="333"/>
+ <char name="quotedblright" width="333"/>
+ <char name="quoteleft" width="222"/>
+ <char name="quoteright" width="222"/>
+ <char name="quotesinglbase" width="222"/>
+ <char name="quotesingle" width="191"/>
+ <char name="r" width="333"/>
+ <char name="registered" width="737"/>
+ <char name="ring" width="333"/>
+ <char name="s" width="500"/>
+ <char name="scaron" width="500"/>
+ <char name="section" width="556"/>
+ <char name="semicolon" width="278"/>
+ <char name="seven" width="556"/>
+ <char name="six" width="556"/>
+ <char name="slash" width="278"/>
+ <char name="space" width="278"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="nbsp" width="278"/>
+ <char name="sterling" width="556"/>
+ <char name="t" width="278"/>
+ <char name="thorn" width="556"/>
+ <char name="three" width="556"/>
+ <char name="threequarters" width="834"/>
+ <char name="threesuperior" width="333"/>
+ <char name="tilde" width="333"/>
+ <char name="trademark" width="1000"/>
+ <char name="two" width="556"/>
+ <char name="twosuperior" width="333"/>
+ <char name="u" width="556"/>
+ <char name="uacute" width="556"/>
+ <char name="ucircumflex" width="556"/>
+ <char name="udieresis" width="556"/>
+ <char name="ugrave" width="556"/>
+ <char name="underscore" width="556"/>
+ <char name="v" width="500"/>
+ <char name="w" width="722"/>
+ <char name="x" width="500"/>
+ <char name="y" width="500"/>
+ <char name="yacute" width="500"/>
+ <char name="ydieresis" width="500"/>
+ <char name="yen" width="556"/>
+ <char name="z" width="500"/>
+ <char name="zcaron" width="500"/>
+ <char name="zero" width="556"/>
+ </widths>
+</font-metrics>
\ No newline at end of file
--- /dev/null
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Times-Bold</font-name>
+ <class-name>TimesBold</class-name>
+ <encoding>WinAnsiEncoding</encoding>
+ <cap-height>676</cap-height>
+ <x-height>461</x-height>
+ <ascender>676</ascender>
+ <descender>-205</descender>
+ <widths>
+ <char name="A" width="722"/>
+ <char name="AE" width="1000"/>
+ <char name="Aacute" width="722"/>
+ <char name="Acircumflex" width="722"/>
+ <char name="Adieresis" width="722"/>
+ <char name="Agrave" width="722"/>
+ <char name="Aring" width="722"/>
+ <char name="Atilde" width="722"/>
+ <char name="B" width="667"/>
+ <char name="C" width="722"/>
+ <char name="Ccedilla" width="722"/>
+ <char name="D" width="722"/>
+ <char name="E" width="667"/>
+ <char name="Eacute" width="667"/>
+ <char name="Ecircumflex" width="667"/>
+ <char name="Edieresis" width="667"/>
+ <char name="Egrave" width="667"/>
+ <char name="Eth" width="722"/>
+ <char name="F" width="611"/>
+ <char name="G" width="778"/>
+ <char name="H" width="778"/>
+ <char name="I" width="389"/>
+ <char name="Iacute" width="389"/>
+ <char name="Icircumflex" width="389"/>
+ <char name="Idieresis" width="389"/>
+ <char name="Igrave" width="389"/>
+ <char name="J" width="500"/>
+ <char name="K" width="778"/>
+ <char name="L" width="667"/>
+ <char name="Lslash" width="667"/>
+ <char name="M" width="944"/>
+ <char name="N" width="722"/>
+ <char name="Ntilde" width="722"/>
+ <char name="O" width="778"/>
+ <char name="OE" width="1000"/>
+ <char name="Oacute" width="778"/>
+ <char name="Ocircumflex" width="778"/>
+ <char name="Odieresis" width="778"/>
+ <char name="Ograve" width="778"/>
+ <char name="Oslash" width="778"/>
+ <char name="Otilde" width="778"/>
+ <char name="P" width="611"/>
+ <char name="Q" width="778"/>
+ <char name="R" width="722"/>
+ <char name="S" width="556"/>
+ <char name="Scaron" width="556"/>
+ <char name="T" width="667"/>
+ <char name="Thorn" width="611"/>
+ <char name="U" width="722"/>
+ <char name="Uacute" width="722"/>
+ <char name="Ucircumflex" width="722"/>
+ <char name="Udieresis" width="722"/>
+ <char name="Ugrave" width="722"/>
+ <char name="V" width="722"/>
+ <char name="W" width="1000"/>
+ <char name="X" width="722"/>
+ <char name="Y" width="722"/>
+ <char name="Yacute" width="722"/>
+ <char name="Ydieresis" width="722"/>
+ <char name="Z" width="667"/>
+ <char name="Zcaron" width="667"/>
+ <char name="a" width="500"/>
+ <char name="aacute" width="500"/>
+ <char name="acircumflex" width="500"/>
+ <char name="acute" width="333"/>
+ <char name="adieresis" width="500"/>
+ <char name="ae" width="722"/>
+ <char name="agrave" width="500"/>
+ <char name="ampersand" width="833"/>
+ <char name="aring" width="500"/>
+ <char name="asciicircum" width="581"/>
+ <char name="asciitilde" width="520"/>
+ <char name="asterisk" width="500"/>
+ <char name="at" width="930"/>
+ <char name="atilde" width="500"/>
+ <char name="b" width="556"/>
+ <char name="backslash" width="278"/>
+ <char name="bar" width="220"/>
+ <char name="braceleft" width="394"/>
+ <char name="braceright" width="394"/>
+ <char name="bracketleft" width="333"/>
+ <char name="bracketright" width="333"/>
+ <char name="breve" width="333"/>
+ <char name="brokenbar" width="220"/>
+ <char name="bullet" width="350"/>
+ <char name="c" width="444"/>
+ <char name="caron" width="333"/>
+ <char name="ccedilla" width="444"/>
+ <char name="cedilla" width="333"/>
+ <char name="cent" width="500"/>
+ <char name="circumflex" width="333"/>
+ <char name="colon" width="333"/>
+ <char name="comma" width="250"/>
+ <char name="copyright" width="747"/>
+ <char name="currency" width="500"/>
+ <char name="d" width="556"/>
+ <char name="dagger" width="500"/>
+ <char name="daggerdbl" width="500"/>
+ <char name="degree" width="400"/>
+ <char name="dieresis" width="333"/>
+ <char name="divide" width="570"/>
+ <char name="dollar" width="500"/>
+ <char name="dotaccent" width="333"/>
+ <char name="dotlessi" width="278"/>
+ <char name="e" width="444"/>
+ <char name="eacute" width="444"/>
+ <char name="ecircumflex" width="444"/>
+ <char name="edieresis" width="444"/>
+ <char name="egrave" width="444"/>
+ <char name="eight" width="500"/>
+ <char name="ellipsis" width="1000"/>
+ <char name="emdash" width="1000"/>
+ <char name="endash" width="500"/>
+ <char name="equal" width="570"/>
+ <char name="eth" width="500"/>
+ <char name="exclam" width="333"/>
+ <char name="exclamdown" width="333"/>
+ <char name="f" width="333"/>
+ <char name="fi" width="556"/>
+ <char name="five" width="500"/>
+ <char name="fl" width="556"/>
+ <char name="florin" width="500"/>
+ <char name="four" width="500"/>
+ <char name="fraction" width="167"/>
+ <char name="g" width="500"/>
+ <char name="germandbls" width="556"/>
+ <char name="grave" width="333"/>
+ <char name="greater" width="570"/>
+ <char name="guillemotleft" width="500"/>
+ <char name="guillemotright" width="500"/>
+ <char name="guilsinglleft" width="333"/>
+ <char name="guilsinglright" width="333"/>
+ <char name="h" width="556"/>
+ <char name="hungarumlaut" width="333"/>
+ <char name="hyphen" width="333"/>
+ <char name="i" width="278"/>
+ <char name="iacute" width="278"/>
+ <char name="icircumflex" width="278"/>
+ <char name="idieresis" width="278"/>
+ <char name="igrave" width="278"/>
+ <char name="j" width="333"/>
+ <char name="k" width="556"/>
+ <char name="l" width="278"/>
+ <char name="less" width="570"/>
+ <char name="logicalnot" width="570"/>
+ <char name="lslash" width="278"/>
+ <char name="m" width="833"/>
+ <char name="macron" width="333"/>
+ <char name="minus" width="570"/>
+ <char name="mu" width="556"/>
+ <char name="multiply" width="570"/>
+ <char name="n" width="556"/>
+ <char name="nine" width="500"/>
+ <char name="ntilde" width="556"/>
+ <char name="numbersign" width="500"/>
+ <char name="o" width="500"/>
+ <char name="oacute" width="500"/>
+ <char name="ocircumflex" width="500"/>
+ <char name="odieresis" width="500"/>
+ <char name="oe" width="722"/>
+ <char name="ogonek" width="333"/>
+ <char name="ograve" width="500"/>
+ <char name="one" width="500"/>
+ <char name="onehalf" width="750"/>
+ <char name="onequarter" width="750"/>
+ <char name="onesuperior" width="300"/>
+ <char name="ordfeminine" width="300"/>
+ <char name="ordmasculine" width="330"/>
+ <char name="oslash" width="500"/>
+ <char name="otilde" width="500"/>
+ <char name="p" width="556"/>
+ <char name="paragraph" width="540"/>
+ <char name="parenleft" width="333"/>
+ <char name="parenright" width="333"/>
+ <char name="percent" width="1000"/>
+ <char name="period" width="250"/>
+ <char name="periodcentered" width="250"/>
+ <char name="perthousand" width="1000"/>
+ <char name="plus" width="570"/>
+ <char name="plusminus" width="570"/>
+ <char name="q" width="556"/>
+ <char name="question" width="500"/>
+ <char name="questiondown" width="500"/>
+ <char name="quotedbl" width="555"/>
+ <char name="quotedblbase" width="500"/>
+ <char name="quotedblleft" width="500"/>
+ <char name="quotedblright" width="500"/>
+ <char name="quoteleft" width="333"/>
+ <char name="quoteright" width="333"/>
+ <char name="quotesinglbase" width="333"/>
+ <char name="quotesingle" width="278"/>
+ <char name="r" width="444"/>
+ <char name="registered" width="747"/>
+ <char name="ring" width="333"/>
+ <char name="s" width="389"/>
+ <char name="scaron" width="389"/>
+ <char name="section" width="500"/>
+ <char name="semicolon" width="333"/>
+ <char name="seven" width="500"/>
+ <char name="six" width="500"/>
+ <char name="slash" width="278"/>
+ <char name="space" width="250"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="nbsp" width="250"/>
+ <char name="sterling" width="500"/>
+ <char name="t" width="333"/>
+ <char name="thorn" width="556"/>
+ <char name="three" width="500"/>
+ <char name="threequarters" width="750"/>
+ <char name="threesuperior" width="300"/>
+ <char name="tilde" width="333"/>
+ <char name="trademark" width="1000"/>
+ <char name="two" width="500"/>
+ <char name="twosuperior" width="300"/>
+ <char name="u" width="556"/>
+ <char name="uacute" width="556"/>
+ <char name="ucircumflex" width="556"/>
+ <char name="udieresis" width="556"/>
+ <char name="ugrave" width="556"/>
+ <char name="underscore" width="500"/>
+ <char name="v" width="500"/>
+ <char name="w" width="722"/>
+ <char name="x" width="500"/>
+ <char name="y" width="500"/>
+ <char name="yacute" width="500"/>
+ <char name="ydieresis" width="500"/>
+ <char name="yen" width="500"/>
+ <char name="z" width="444"/>
+ <char name="zcaron" width="444"/>
+ <char name="zero" width="500"/>
+ </widths>
+</font-metrics>
\ No newline at end of file
--- /dev/null
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Times-BoldItalic</font-name>
+ <class-name>TimesBoldItalic</class-name>
+ <encoding>WinAnsiEncoding</encoding>
+ <cap-height>669</cap-height>
+ <x-height>462</x-height>
+ <ascender>699</ascender>
+ <descender>-205</descender>
+ <widths>
+ <char name="A" width="667"/>
+ <char name="AE" width="944"/>
+ <char name="Aacute" width="667"/>
+ <char name="Acircumflex" width="667"/>
+ <char name="Adieresis" width="667"/>
+ <char name="Agrave" width="667"/>
+ <char name="Aring" width="667"/>
+ <char name="Atilde" width="667"/>
+ <char name="B" width="667"/>
+ <char name="C" width="667"/>
+ <char name="Ccedilla" width="667"/>
+ <char name="D" width="722"/>
+ <char name="E" width="667"/>
+ <char name="Eacute" width="667"/>
+ <char name="Ecircumflex" width="667"/>
+ <char name="Edieresis" width="667"/>
+ <char name="Egrave" width="667"/>
+ <char name="Eth" width="722"/>
+ <char name="F" width="667"/>
+ <char name="G" width="722"/>
+ <char name="H" width="778"/>
+ <char name="I" width="389"/>
+ <char name="Iacute" width="389"/>
+ <char name="Icircumflex" width="389"/>
+ <char name="Idieresis" width="389"/>
+ <char name="Igrave" width="389"/>
+ <char name="J" width="500"/>
+ <char name="K" width="667"/>
+ <char name="L" width="611"/>
+ <char name="Lslash" width="611"/>
+ <char name="M" width="889"/>
+ <char name="N" width="722"/>
+ <char name="Ntilde" width="722"/>
+ <char name="O" width="722"/>
+ <char name="OE" width="944"/>
+ <char name="Oacute" width="722"/>
+ <char name="Ocircumflex" width="722"/>
+ <char name="Odieresis" width="722"/>
+ <char name="Ograve" width="722"/>
+ <char name="Oslash" width="722"/>
+ <char name="Otilde" width="722"/>
+ <char name="P" width="611"/>
+ <char name="Q" width="722"/>
+ <char name="R" width="667"/>
+ <char name="S" width="556"/>
+ <char name="Scaron" width="556"/>
+ <char name="T" width="611"/>
+ <char name="Thorn" width="611"/>
+ <char name="U" width="722"/>
+ <char name="Uacute" width="722"/>
+ <char name="Ucircumflex" width="722"/>
+ <char name="Udieresis" width="722"/>
+ <char name="Ugrave" width="722"/>
+ <char name="V" width="667"/>
+ <char name="W" width="889"/>
+ <char name="X" width="667"/>
+ <char name="Y" width="611"/>
+ <char name="Yacute" width="611"/>
+ <char name="Ydieresis" width="611"/>
+ <char name="Z" width="611"/>
+ <char name="Zcaron" width="611"/>
+ <char name="a" width="500"/>
+ <char name="aacute" width="500"/>
+ <char name="acircumflex" width="500"/>
+ <char name="acute" width="333"/>
+ <char name="adieresis" width="500"/>
+ <char name="ae" width="722"/>
+ <char name="agrave" width="500"/>
+ <char name="ampersand" width="778"/>
+ <char name="aring" width="500"/>
+ <char name="asciicircum" width="570"/>
+ <char name="asciitilde" width="570"/>
+ <char name="asterisk" width="500"/>
+ <char name="at" width="832"/>
+ <char name="atilde" width="500"/>
+ <char name="b" width="500"/>
+ <char name="backslash" width="278"/>
+ <char name="bar" width="220"/>
+ <char name="braceleft" width="348"/>
+ <char name="braceright" width="348"/>
+ <char name="bracketleft" width="333"/>
+ <char name="bracketright" width="333"/>
+ <char name="breve" width="333"/>
+ <char name="brokenbar" width="220"/>
+ <char name="bullet" width="350"/>
+ <char name="c" width="444"/>
+ <char name="caron" width="333"/>
+ <char name="ccedilla" width="444"/>
+ <char name="cedilla" width="333"/>
+ <char name="cent" width="500"/>
+ <char name="circumflex" width="333"/>
+ <char name="colon" width="333"/>
+ <char name="comma" width="250"/>
+ <char name="copyright" width="747"/>
+ <char name="currency" width="500"/>
+ <char name="d" width="500"/>
+ <char name="dagger" width="500"/>
+ <char name="daggerdbl" width="500"/>
+ <char name="degree" width="400"/>
+ <char name="dieresis" width="333"/>
+ <char name="divide" width="570"/>
+ <char name="dollar" width="500"/>
+ <char name="dotaccent" width="333"/>
+ <char name="dotlessi" width="278"/>
+ <char name="e" width="444"/>
+ <char name="eacute" width="444"/>
+ <char name="ecircumflex" width="444"/>
+ <char name="edieresis" width="444"/>
+ <char name="egrave" width="444"/>
+ <char name="eight" width="500"/>
+ <char name="ellipsis" width="1000"/>
+ <char name="emdash" width="1000"/>
+ <char name="endash" width="500"/>
+ <char name="equal" width="570"/>
+ <char name="eth" width="500"/>
+ <char name="exclam" width="389"/>
+ <char name="exclamdown" width="389"/>
+ <char name="f" width="333"/>
+ <char name="fi" width="556"/>
+ <char name="five" width="500"/>
+ <char name="fl" width="556"/>
+ <char name="florin" width="500"/>
+ <char name="four" width="500"/>
+ <char name="fraction" width="167"/>
+ <char name="g" width="500"/>
+ <char name="germandbls" width="500"/>
+ <char name="grave" width="333"/>
+ <char name="greater" width="570"/>
+ <char name="guillemotleft" width="500"/>
+ <char name="guillemotright" width="500"/>
+ <char name="guilsinglleft" width="333"/>
+ <char name="guilsinglright" width="333"/>
+ <char name="h" width="556"/>
+ <char name="hungarumlaut" width="333"/>
+ <char name="hyphen" width="333"/>
+ <char name="i" width="278"/>
+ <char name="iacute" width="278"/>
+ <char name="icircumflex" width="278"/>
+ <char name="idieresis" width="278"/>
+ <char name="igrave" width="278"/>
+ <char name="j" width="278"/>
+ <char name="k" width="500"/>
+ <char name="l" width="278"/>
+ <char name="less" width="570"/>
+ <char name="logicalnot" width="606"/>
+ <char name="lslash" width="278"/>
+ <char name="m" width="778"/>
+ <char name="macron" width="333"/>
+ <char name="minus" width="606"/>
+ <char name="mu" width="576"/>
+ <char name="multiply" width="570"/>
+ <char name="n" width="556"/>
+ <char name="nine" width="500"/>
+ <char name="ntilde" width="556"/>
+ <char name="numbersign" width="500"/>
+ <char name="o" width="500"/>
+ <char name="oacute" width="500"/>
+ <char name="ocircumflex" width="500"/>
+ <char name="odieresis" width="500"/>
+ <char name="oe" width="722"/>
+ <char name="ogonek" width="333"/>
+ <char name="ograve" width="500"/>
+ <char name="one" width="500"/>
+ <char name="onehalf" width="750"/>
+ <char name="onequarter" width="750"/>
+ <char name="onesuperior" width="300"/>
+ <char name="ordfeminine" width="266"/>
+ <char name="ordmasculine" width="300"/>
+ <char name="oslash" width="500"/>
+ <char name="otilde" width="500"/>
+ <char name="p" width="500"/>
+ <char name="paragraph" width="500"/>
+ <char name="parenleft" width="333"/>
+ <char name="parenright" width="333"/>
+ <char name="percent" width="833"/>
+ <char name="period" width="250"/>
+ <char name="periodcentered" width="250"/>
+ <char name="perthousand" width="1000"/>
+ <char name="plus" width="570"/>
+ <char name="plusminus" width="570"/>
+ <char name="q" width="500"/>
+ <char name="question" width="500"/>
+ <char name="questiondown" width="500"/>
+ <char name="quotedbl" width="555"/>
+ <char name="quotedblbase" width="500"/>
+ <char name="quotedblleft" width="500"/>
+ <char name="quotedblright" width="500"/>
+ <char name="quoteleft" width="333"/>
+ <char name="quoteright" width="333"/>
+ <char name="quotesinglbase" width="333"/>
+ <char name="quotesingle" width="278"/>
+ <char name="r" width="389"/>
+ <char name="registered" width="747"/>
+ <char name="ring" width="333"/>
+ <char name="s" width="389"/>
+ <char name="scaron" width="389"/>
+ <char name="section" width="500"/>
+ <char name="semicolon" width="333"/>
+ <char name="seven" width="500"/>
+ <char name="six" width="500"/>
+ <char name="slash" width="278"/>
+ <char name="space" width="250"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="nbsp" width="250"/>
+ <char name="sterling" width="500"/>
+ <char name="t" width="278"/>
+ <char name="thorn" width="500"/>
+ <char name="three" width="500"/>
+ <char name="threequarters" width="750"/>
+ <char name="threesuperior" width="300"/>
+ <char name="tilde" width="333"/>
+ <char name="trademark" width="1000"/>
+ <char name="two" width="500"/>
+ <char name="twosuperior" width="300"/>
+ <char name="u" width="556"/>
+ <char name="uacute" width="556"/>
+ <char name="ucircumflex" width="556"/>
+ <char name="udieresis" width="556"/>
+ <char name="ugrave" width="556"/>
+ <char name="underscore" width="500"/>
+ <char name="v" width="444"/>
+ <char name="w" width="667"/>
+ <char name="x" width="500"/>
+ <char name="y" width="444"/>
+ <char name="yacute" width="444"/>
+ <char name="ydieresis" width="444"/>
+ <char name="yen" width="500"/>
+ <char name="z" width="389"/>
+ <char name="zcaron" width="389"/>
+ <char name="zero" width="500"/>
+ </widths>
+</font-metrics>
\ No newline at end of file
--- /dev/null
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Times-Italic</font-name>
+ <class-name>TimesItalic</class-name>
+ <encoding>WinAnsiEncoding</encoding>
+ <cap-height>653</cap-height>
+ <x-height>441</x-height>
+ <ascender>683</ascender>
+ <descender>-205</descender>
+ <widths>
+ <char name="A" width="611"/>
+ <char name="AE" width="889"/>
+ <char name="Aacute" width="611"/>
+ <char name="Acircumflex" width="611"/>
+ <char name="Adieresis" width="611"/>
+ <char name="Agrave" width="611"/>
+ <char name="Aring" width="611"/>
+ <char name="Atilde" width="611"/>
+ <char name="B" width="611"/>
+ <char name="C" width="667"/>
+ <char name="Ccedilla" width="667"/>
+ <char name="D" width="722"/>
+ <char name="E" width="611"/>
+ <char name="Eacute" width="611"/>
+ <char name="Ecircumflex" width="611"/>
+ <char name="Edieresis" width="611"/>
+ <char name="Egrave" width="611"/>
+ <char name="Eth" width="722"/>
+ <char name="F" width="611"/>
+ <char name="G" width="722"/>
+ <char name="H" width="722"/>
+ <char name="I" width="333"/>
+ <char name="Iacute" width="333"/>
+ <char name="Icircumflex" width="333"/>
+ <char name="Idieresis" width="333"/>
+ <char name="Igrave" width="333"/>
+ <char name="J" width="444"/>
+ <char name="K" width="667"/>
+ <char name="L" width="556"/>
+ <char name="Lslash" width="556"/>
+ <char name="M" width="833"/>
+ <char name="N" width="667"/>
+ <char name="Ntilde" width="667"/>
+ <char name="O" width="722"/>
+ <char name="OE" width="944"/>
+ <char name="Oacute" width="722"/>
+ <char name="Ocircumflex" width="722"/>
+ <char name="Odieresis" width="722"/>
+ <char name="Ograve" width="722"/>
+ <char name="Oslash" width="722"/>
+ <char name="Otilde" width="722"/>
+ <char name="P" width="611"/>
+ <char name="Q" width="722"/>
+ <char name="R" width="611"/>
+ <char name="S" width="500"/>
+ <char name="Scaron" width="500"/>
+ <char name="T" width="556"/>
+ <char name="Thorn" width="611"/>
+ <char name="U" width="722"/>
+ <char name="Uacute" width="722"/>
+ <char name="Ucircumflex" width="722"/>
+ <char name="Udieresis" width="722"/>
+ <char name="Ugrave" width="722"/>
+ <char name="V" width="611"/>
+ <char name="W" width="833"/>
+ <char name="X" width="611"/>
+ <char name="Y" width="556"/>
+ <char name="Yacute" width="556"/>
+ <char name="Ydieresis" width="556"/>
+ <char name="Z" width="556"/>
+ <char name="Zcaron" width="556"/>
+ <char name="a" width="500"/>
+ <char name="aacute" width="500"/>
+ <char name="acircumflex" width="500"/>
+ <char name="acute" width="333"/>
+ <char name="adieresis" width="500"/>
+ <char name="ae" width="667"/>
+ <char name="agrave" width="500"/>
+ <char name="ampersand" width="778"/>
+ <char name="aring" width="500"/>
+ <char name="asciicircum" width="422"/>
+ <char name="asciitilde" width="541"/>
+ <char name="asterisk" width="500"/>
+ <char name="at" width="920"/>
+ <char name="atilde" width="500"/>
+ <char name="b" width="500"/>
+ <char name="backslash" width="278"/>
+ <char name="bar" width="275"/>
+ <char name="braceleft" width="400"/>
+ <char name="braceright" width="400"/>
+ <char name="bracketleft" width="389"/>
+ <char name="bracketright" width="389"/>
+ <char name="breve" width="333"/>
+ <char name="brokenbar" width="275"/>
+ <char name="bullet" width="350"/>
+ <char name="c" width="444"/>
+ <char name="caron" width="333"/>
+ <char name="ccedilla" width="444"/>
+ <char name="cedilla" width="333"/>
+ <char name="cent" width="500"/>
+ <char name="circumflex" width="333"/>
+ <char name="colon" width="333"/>
+ <char name="comma" width="250"/>
+ <char name="copyright" width="760"/>
+ <char name="currency" width="500"/>
+ <char name="d" width="500"/>
+ <char name="dagger" width="500"/>
+ <char name="daggerdbl" width="500"/>
+ <char name="degree" width="400"/>
+ <char name="dieresis" width="333"/>
+ <char name="divide" width="675"/>
+ <char name="dollar" width="500"/>
+ <char name="dotaccent" width="333"/>
+ <char name="dotlessi" width="278"/>
+ <char name="e" width="444"/>
+ <char name="eacute" width="444"/>
+ <char name="ecircumflex" width="444"/>
+ <char name="edieresis" width="444"/>
+ <char name="egrave" width="444"/>
+ <char name="eight" width="500"/>
+ <char name="ellipsis" width="889"/>
+ <char name="emdash" width="889"/>
+ <char name="endash" width="500"/>
+ <char name="equal" width="675"/>
+ <char name="eth" width="500"/>
+ <char name="exclam" width="333"/>
+ <char name="exclamdown" width="389"/>
+ <char name="f" width="278"/>
+ <char name="fi" width="500"/>
+ <char name="five" width="500"/>
+ <char name="fl" width="500"/>
+ <char name="florin" width="500"/>
+ <char name="four" width="500"/>
+ <char name="fraction" width="167"/>
+ <char name="g" width="500"/>
+ <char name="germandbls" width="500"/>
+ <char name="grave" width="333"/>
+ <char name="greater" width="675"/>
+ <char name="guillemotleft" width="500"/>
+ <char name="guillemotright" width="500"/>
+ <char name="guilsinglleft" width="333"/>
+ <char name="guilsinglright" width="333"/>
+ <char name="h" width="500"/>
+ <char name="hungarumlaut" width="333"/>
+ <char name="hyphen" width="333"/>
+ <char name="i" width="278"/>
+ <char name="iacute" width="278"/>
+ <char name="icircumflex" width="278"/>
+ <char name="idieresis" width="278"/>
+ <char name="igrave" width="278"/>
+ <char name="j" width="278"/>
+ <char name="k" width="444"/>
+ <char name="l" width="278"/>
+ <char name="less" width="675"/>
+ <char name="logicalnot" width="675"/>
+ <char name="lslash" width="278"/>
+ <char name="m" width="722"/>
+ <char name="macron" width="333"/>
+ <char name="minus" width="675"/>
+ <char name="mu" width="500"/>
+ <char name="multiply" width="675"/>
+ <char name="n" width="500"/>
+ <char name="nine" width="500"/>
+ <char name="ntilde" width="500"/>
+ <char name="numbersign" width="500"/>
+ <char name="o" width="500"/>
+ <char name="oacute" width="500"/>
+ <char name="ocircumflex" width="500"/>
+ <char name="odieresis" width="500"/>
+ <char name="oe" width="667"/>
+ <char name="ogonek" width="333"/>
+ <char name="ograve" width="500"/>
+ <char name="one" width="500"/>
+ <char name="onehalf" width="750"/>
+ <char name="onequarter" width="750"/>
+ <char name="onesuperior" width="300"/>
+ <char name="ordfeminine" width="276"/>
+ <char name="ordmasculine" width="310"/>
+ <char name="oslash" width="500"/>
+ <char name="otilde" width="500"/>
+ <char name="p" width="500"/>
+ <char name="paragraph" width="523"/>
+ <char name="parenleft" width="333"/>
+ <char name="parenright" width="333"/>
+ <char name="percent" width="833"/>
+ <char name="period" width="250"/>
+ <char name="periodcentered" width="250"/>
+ <char name="perthousand" width="1000"/>
+ <char name="plus" width="675"/>
+ <char name="plusminus" width="675"/>
+ <char name="q" width="500"/>
+ <char name="question" width="500"/>
+ <char name="questiondown" width="500"/>
+ <char name="quotedbl" width="420"/>
+ <char name="quotedblbase" width="556"/>
+ <char name="quotedblleft" width="556"/>
+ <char name="quotedblright" width="556"/>
+ <char name="quoteleft" width="333"/>
+ <char name="quoteright" width="333"/>
+ <char name="quotesinglbase" width="333"/>
+ <char name="quotesingle" width="214"/>
+ <char name="r" width="389"/>
+ <char name="registered" width="760"/>
+ <char name="ring" width="333"/>
+ <char name="s" width="389"/>
+ <char name="scaron" width="389"/>
+ <char name="section" width="500"/>
+ <char name="semicolon" width="333"/>
+ <char name="seven" width="500"/>
+ <char name="six" width="500"/>
+ <char name="slash" width="278"/>
+ <char name="space" width="250"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="nbsp" width="250"/>
+ <char name="sterling" width="500"/>
+ <char name="t" width="278"/>
+ <char name="thorn" width="500"/>
+ <char name="three" width="500"/>
+ <char name="threequarters" width="750"/>
+ <char name="threesuperior" width="300"/>
+ <char name="tilde" width="333"/>
+ <char name="trademark" width="980"/>
+ <char name="two" width="500"/>
+ <char name="twosuperior" width="300"/>
+ <char name="u" width="500"/>
+ <char name="uacute" width="500"/>
+ <char name="ucircumflex" width="500"/>
+ <char name="udieresis" width="500"/>
+ <char name="ugrave" width="500"/>
+ <char name="underscore" width="500"/>
+ <char name="v" width="444"/>
+ <char name="w" width="667"/>
+ <char name="x" width="444"/>
+ <char name="y" width="444"/>
+ <char name="yacute" width="444"/>
+ <char name="ydieresis" width="444"/>
+ <char name="yen" width="500"/>
+ <char name="z" width="389"/>
+ <char name="zcaron" width="389"/>
+ <char name="zero" width="500"/>
+ </widths>
+</font-metrics>
\ No newline at end of file
--- /dev/null
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Times-Roman</font-name>
+ <class-name>TimesRoman</class-name>
+ <encoding>WinAnsiEncoding</encoding>
+ <cap-height>662</cap-height>
+ <x-height>450</x-height>
+ <ascender>683</ascender>
+ <descender>-217</descender>
+ <widths>
+ <char name="A" width="722"/>
+ <char name="AE" width="889"/>
+ <char name="Aacute" width="722"/>
+ <char name="Acircumflex" width="722"/>
+ <char name="Adieresis" width="722"/>
+ <char name="Agrave" width="722"/>
+ <char name="Aring" width="722"/>
+ <char name="Atilde" width="722"/>
+ <char name="B" width="667"/>
+ <char name="C" width="667"/>
+ <char name="Ccedilla" width="667"/>
+ <char name="D" width="722"/>
+ <char name="E" width="611"/>
+ <char name="Eacute" width="611"/>
+ <char name="Ecircumflex" width="611"/>
+ <char name="Edieresis" width="611"/>
+ <char name="Egrave" width="611"/>
+ <char name="Eth" width="722"/>
+ <char name="F" width="556"/>
+ <char name="G" width="722"/>
+ <char name="H" width="722"/>
+ <char name="I" width="333"/>
+ <char name="Iacute" width="333"/>
+ <char name="Icircumflex" width="333"/>
+ <char name="Idieresis" width="333"/>
+ <char name="Igrave" width="333"/>
+ <char name="J" width="389"/>
+ <char name="K" width="722"/>
+ <char name="L" width="611"/>
+ <char name="Lslash" width="611"/>
+ <char name="M" width="889"/>
+ <char name="N" width="722"/>
+ <char name="Ntilde" width="722"/>
+ <char name="O" width="722"/>
+ <char name="OE" width="889"/>
+ <char name="Oacute" width="722"/>
+ <char name="Ocircumflex" width="722"/>
+ <char name="Odieresis" width="722"/>
+ <char name="Ograve" width="722"/>
+ <char name="Oslash" width="722"/>
+ <char name="Otilde" width="722"/>
+ <char name="P" width="556"/>
+ <char name="Q" width="722"/>
+ <char name="R" width="667"/>
+ <char name="S" width="556"/>
+ <char name="Scaron" width="556"/>
+ <char name="T" width="611"/>
+ <char name="Thorn" width="556"/>
+ <char name="U" width="722"/>
+ <char name="Uacute" width="722"/>
+ <char name="Ucircumflex" width="722"/>
+ <char name="Udieresis" width="722"/>
+ <char name="Ugrave" width="722"/>
+ <char name="V" width="722"/>
+ <char name="W" width="944"/>
+ <char name="X" width="722"/>
+ <char name="Y" width="722"/>
+ <char name="Yacute" width="722"/>
+ <char name="Ydieresis" width="722"/>
+ <char name="Z" width="611"/>
+ <char name="Zcaron" width="611"/>
+ <char name="a" width="444"/>
+ <char name="aacute" width="444"/>
+ <char name="acircumflex" width="444"/>
+ <char name="acute" width="333"/>
+ <char name="adieresis" width="444"/>
+ <char name="ae" width="667"/>
+ <char name="agrave" width="444"/>
+ <char name="ampersand" width="778"/>
+ <char name="aring" width="444"/>
+ <char name="asciicircum" width="469"/>
+ <char name="asciitilde" width="541"/>
+ <char name="asterisk" width="500"/>
+ <char name="at" width="921"/>
+ <char name="atilde" width="444"/>
+ <char name="b" width="500"/>
+ <char name="backslash" width="278"/>
+ <char name="bar" width="200"/>
+ <char name="braceleft" width="480"/>
+ <char name="braceright" width="480"/>
+ <char name="bracketleft" width="333"/>
+ <char name="bracketright" width="333"/>
+ <char name="breve" width="333"/>
+ <char name="brokenbar" width="200"/>
+ <char name="bullet" width="350"/>
+ <char name="c" width="444"/>
+ <char name="caron" width="333"/>
+ <char name="ccedilla" width="444"/>
+ <char name="cedilla" width="333"/>
+ <char name="cent" width="500"/>
+ <char name="circumflex" width="333"/>
+ <char name="colon" width="278"/>
+ <char name="comma" width="250"/>
+ <char name="copyright" width="760"/>
+ <char name="currency" width="500"/>
+ <char name="d" width="500"/>
+ <char name="dagger" width="500"/>
+ <char name="daggerdbl" width="500"/>
+ <char name="degree" width="400"/>
+ <char name="dieresis" width="333"/>
+ <char name="divide" width="564"/>
+ <char name="dollar" width="500"/>
+ <char name="dotaccent" width="333"/>
+ <char name="dotlessi" width="278"/>
+ <char name="e" width="444"/>
+ <char name="eacute" width="444"/>
+ <char name="ecircumflex" width="444"/>
+ <char name="edieresis" width="444"/>
+ <char name="egrave" width="444"/>
+ <char name="eight" width="500"/>
+ <char name="ellipsis" width="1000"/>
+ <char name="emdash" width="1000"/>
+ <char name="endash" width="500"/>
+ <char name="equal" width="564"/>
+ <char name="eth" width="500"/>
+ <char name="exclam" width="333"/>
+ <char name="exclamdown" width="333"/>
+ <char name="f" width="333"/>
+ <char name="fi" width="556"/>
+ <char name="five" width="500"/>
+ <char name="fl" width="556"/>
+ <char name="florin" width="500"/>
+ <char name="four" width="500"/>
+ <char name="fraction" width="167"/>
+ <char name="g" width="500"/>
+ <char name="germandbls" width="500"/>
+ <char name="grave" width="333"/>
+ <char name="greater" width="564"/>
+ <char name="guillemotleft" width="500"/>
+ <char name="guillemotright" width="500"/>
+ <char name="guilsinglleft" width="333"/>
+ <char name="guilsinglright" width="333"/>
+ <char name="h" width="500"/>
+ <char name="hungarumlaut" width="333"/>
+ <char name="hyphen" width="333"/>
+ <char name="i" width="278"/>
+ <char name="iacute" width="278"/>
+ <char name="icircumflex" width="278"/>
+ <char name="idieresis" width="278"/>
+ <char name="igrave" width="278"/>
+ <char name="j" width="278"/>
+ <char name="k" width="500"/>
+ <char name="l" width="278"/>
+ <char name="less" width="564"/>
+ <char name="logicalnot" width="564"/>
+ <char name="lslash" width="278"/>
+ <char name="m" width="778"/>
+ <char name="macron" width="333"/>
+ <char name="minus" width="564"/>
+ <char name="mu" width="500"/>
+ <char name="multiply" width="564"/>
+ <char name="n" width="500"/>
+ <char name="nine" width="500"/>
+ <char name="ntilde" width="500"/>
+ <char name="numbersign" width="500"/>
+ <char name="o" width="500"/>
+ <char name="oacute" width="500"/>
+ <char name="ocircumflex" width="500"/>
+ <char name="odieresis" width="500"/>
+ <char name="oe" width="722"/>
+ <char name="ogonek" width="333"/>
+ <char name="ograve" width="500"/>
+ <char name="one" width="500"/>
+ <char name="onehalf" width="750"/>
+ <char name="onequarter" width="750"/>
+ <char name="onesuperior" width="300"/>
+ <char name="ordfeminine" width="276"/>
+ <char name="ordmasculine" width="310"/>
+ <char name="oslash" width="500"/>
+ <char name="otilde" width="500"/>
+ <char name="p" width="500"/>
+ <char name="paragraph" width="453"/>
+ <char name="parenleft" width="333"/>
+ <char name="parenright" width="333"/>
+ <char name="percent" width="833"/>
+ <char name="period" width="250"/>
+ <char name="periodcentered" width="250"/>
+ <char name="perthousand" width="1000"/>
+ <char name="plus" width="564"/>
+ <char name="plusminus" width="564"/>
+ <char name="q" width="500"/>
+ <char name="question" width="444"/>
+ <char name="questiondown" width="444"/>
+ <char name="quotedbl" width="408"/>
+ <char name="quotedblbase" width="444"/>
+ <char name="quotedblleft" width="444"/>
+ <char name="quotedblright" width="444"/>
+ <char name="quoteleft" width="333"/>
+ <char name="quoteright" width="333"/>
+ <char name="quotesinglbase" width="333"/>
+ <char name="quotesingle" width="180"/>
+ <char name="r" width="333"/>
+ <char name="registered" width="760"/>
+ <char name="ring" width="333"/>
+ <char name="s" width="389"/>
+ <char name="scaron" width="389"/>
+ <char name="section" width="500"/>
+ <char name="semicolon" width="278"/>
+ <char name="seven" width="500"/>
+ <char name="six" width="500"/>
+ <char name="slash" width="278"/>
+ <char name="space" width="250"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="nbsp" width="250"/>
+ <char name="sterling" width="500"/>
+ <char name="t" width="278"/>
+ <char name="thorn" width="500"/>
+ <char name="three" width="500"/>
+ <char name="threequarters" width="750"/>
+ <char name="threesuperior" width="300"/>
+ <char name="tilde" width="333"/>
+ <char name="trademark" width="980"/>
+ <char name="two" width="500"/>
+ <char name="twosuperior" width="300"/>
+ <char name="u" width="500"/>
+ <char name="uacute" width="500"/>
+ <char name="ucircumflex" width="500"/>
+ <char name="udieresis" width="500"/>
+ <char name="ugrave" width="500"/>
+ <char name="underscore" width="500"/>
+ <char name="v" width="500"/>
+ <char name="w" width="722"/>
+ <char name="x" width="500"/>
+ <char name="y" width="500"/>
+ <char name="yacute" width="500"/>
+ <char name="ydieresis" width="500"/>
+ <char name="yen" width="500"/>
+ <char name="z" width="444"/>
+ <char name="zcaron" width="444"/>
+ <char name="zero" width="500"/>
+ </widths>
+</font-metrics>
\ No newline at end of file
--- /dev/null
+<!-- JKT: these mappings were kindly produced by Fotis Jannidis -->
+<font-mappings>
+ <map adobe-name="A" win-ansi="0x0041" unicode="0x0041"/>
+ <map adobe-name="AE" win-ansi="0x00C6" unicode="0x00C6"/>
+ <map adobe-name="Aacute" win-ansi="0x00C1" unicode="0x00C1"/>
+ <map adobe-name="Acircumflex" win-ansi="0x00C2" unicode="0x00C2"/>
+ <map adobe-name="Adieresis" win-ansi="0x00C4" unicode="0x00C4"/>
+ <map adobe-name="Agrave" win-ansi="0x00C0" unicode="0x00C0"/>
+ <map adobe-name="Aring" win-ansi="0x00C5" unicode="0x00C5"/>
+ <map adobe-name="Atilde" win-ansi="0x00C3" unicode="0x00C3"/>
+ <map adobe-name="B" win-ansi="0x0042" unicode="0x0042"/>
+ <map adobe-name="C" win-ansi="0x0043" unicode="0x0043"/>
+ <map adobe-name="Ccedilla" win-ansi="0x00C7" unicode="0x00C7"/>
+ <map adobe-name="D" win-ansi="0x0044" unicode="0x0044"/>
+ <map adobe-name="E" win-ansi="0x0045" unicode="0x0045"/>
+ <map adobe-name="Eacute" win-ansi="0x00C9" unicode="0x00C9"/>
+ <map adobe-name="Ecircumflex" win-ansi="0x00CA" unicode="0x00CA"/>
+ <map adobe-name="Edieresis" win-ansi="0x00CB" unicode="0x00CB"/>
+ <map adobe-name="Egrave" win-ansi="0x00C8" unicode="0x00C8"/>
+ <map adobe-name="Eth" win-ansi="0x00D0" unicode="0x00D0"/>
+ <map adobe-name="F" win-ansi="0x0046" unicode="0x0046"/>
+ <map adobe-name="G" win-ansi="0x0047" unicode="0x0047"/>
+ <map adobe-name="Gcaron" win-ansi="-1" unicode="0x01E6"/>
+ <map adobe-name="H" win-ansi="0x0048" unicode="0x0048"/>
+ <map adobe-name="I" win-ansi="0x0049" unicode="0x0049"/>
+ <map adobe-name="Iacute" win-ansi="0x00CD" unicode="0x00CD"/>
+ <map adobe-name="Icircumflex" win-ansi="0x00CE" unicode="0x00CE"/>
+ <map adobe-name="Idieresis" win-ansi="0x00CF" unicode="0x00CF"/>
+ <map adobe-name="Idot" win-ansi="-1" unicode="0x0130"/>
+ <map adobe-name="Igrave" win-ansi="0x00CC" unicode="0x00CC"/>
+ <map adobe-name="IJ" win-ansi="-1" unicode="0x0132"/>
+ <map adobe-name="J" win-ansi="0x004A" unicode="0x004A"/>
+ <map adobe-name="K" win-ansi="0x004B" unicode="0x004B"/>
+ <map adobe-name="L" win-ansi="0x004C" unicode="0x004C"/>
+ <map adobe-name="Lslash" win-ansi="-1" unicode="0x0141"/>
+ <map adobe-name="M" win-ansi="0x004D" unicode="0x004D"/>
+ <map adobe-name="N" win-ansi="0x004E" unicode="0x004E"/>
+ <map adobe-name="Ntilde" win-ansi="0x00D1" unicode="0x00D1"/>
+ <map adobe-name="O" win-ansi="0x004F" unicode="0x004F"/>
+ <map adobe-name="OE" win-ansi="0x008C" unicode="0x0152"/>
+ <map adobe-name="Oacute" win-ansi="0x00D3" unicode="0x00D3"/>
+ <map adobe-name="Ocircumflex" win-ansi="0x00D4" unicode="0x00D4"/>
+ <map adobe-name="Odieresis" win-ansi="0x00D6" unicode="0x00D6"/>
+ <map adobe-name="Ograve" win-ansi="0x00D2" unicode="0x00D2"/>
+ <map adobe-name="Oslash" win-ansi="0x00D8" unicode="0x00D8"/>
+ <map adobe-name="Otilde" win-ansi="0x00D5" unicode="0x00D5"/>
+ <map adobe-name="P" win-ansi="0x0050" unicode="0x0050"/>
+ <map adobe-name="Q" win-ansi="0x0051" unicode="0x0051"/>
+ <map adobe-name="R" win-ansi="0x0052" unicode="0x0052"/>
+ <map adobe-name="S" win-ansi="0x0053" unicode="0x0053"/>
+ <map adobe-name="Scaron" win-ansi="0x008A" unicode="0x0160"/>
+ <map adobe-name="Scedilla" win-ansi="-1" unicode="0x015E"/>
+ <map adobe-name="T" win-ansi="0x0054" unicode="0x0054"/>
+ <map adobe-name="Thorn" win-ansi="0x00DE" unicode="0x00DE"/>
+ <map adobe-name="U" win-ansi="0x0055" unicode="0x0055"/>
+ <map adobe-name="Uacute" win-ansi="0x00DA" unicode="0x00DA"/>
+ <map adobe-name="Ucircumflex" win-ansi="0x00DB" unicode="0x00DB"/>
+ <map adobe-name="Udieresis" win-ansi="0x00DC" unicode="0x00DC"/>
+ <map adobe-name="Ugrave" win-ansi="0x00D9" unicode="0x00D9"/>
+ <map adobe-name="V" win-ansi="0x0056" unicode="0x0056"/>
+ <map adobe-name="W" win-ansi="0x0057" unicode="0x0057"/>
+ <map adobe-name="X" win-ansi="0x0058" unicode="0x0058"/>
+ <map adobe-name="Y" win-ansi="0x0059" unicode="0x0059"/>
+ <map adobe-name="Yacute" win-ansi="0x00DD" unicode="0x00DD"/>
+ <map adobe-name="Ydieresis" win-ansi="0x009F" unicode="0x0178"/>
+ <map adobe-name="Z" win-ansi="0x005A" unicode="0x005A"/>
+ <map adobe-name="Zcaron" win-ansi="-1" unicode="0x017D"/>
+ <map adobe-name="a" win-ansi="0x0061" unicode="0x0061"/>
+ <map adobe-name="aacute" win-ansi="0x00E1" unicode="0x00E1"/>
+ <map adobe-name="acircumflex" win-ansi="0x00E2" unicode="0x00E2"/>
+ <map adobe-name="acute" win-ansi="0x00B4" unicode="0x00B4"/>
+ <map adobe-name="adieresis" win-ansi="0x00E4" unicode="0x00E4"/>
+ <map adobe-name="ae" win-ansi="0x00E6" unicode="0x00E6"/>
+ <map adobe-name="agrave" win-ansi="0x00E0" unicode="0x00E0"/>
+ <map adobe-name="ampersand" win-ansi="0x0026" unicode="0x0026"/>
+ <map adobe-name="aring" win-ansi="0x00E5" unicode="0x00E5"/>
+ <map adobe-name="arrowboth" win-ansi="-1" unicode="0x2195"/>
+ <map adobe-name="arrowdown" win-ansi="-1" unicode="0x2193"/>
+ <map adobe-name="arrowleft" win-ansi="-1" unicode="0x2194"/>
+ <map adobe-name="arrowright" win-ansi="-1" unicode="0x2192"/>
+ <map adobe-name="arrowup" win-ansi="-1" unicode="0x2191"/>
+ <map adobe-name="asciicircum" win-ansi="0x005E" unicode="0x005E"/>
+ <map adobe-name="asciitilde" win-ansi="0x007E" unicode="0x007E"/>
+ <map adobe-name="asterisk" win-ansi="0x002A" unicode="0x002A"/>
+ <map adobe-name="at" win-ansi="0x0040" unicode="0x0040"/>
+ <map adobe-name="atilde" win-ansi="0x00E3" unicode="0x00E3"/>
+ <map adobe-name="b" win-ansi="0x0062" unicode="0x0062"/>
+ <map adobe-name="backslash" win-ansi="0x005C" unicode="0x005C"/>
+ <map adobe-name="bar" win-ansi="0x007C" unicode="0x007C"/>
+ <map adobe-name="braceleft" win-ansi="0x007B" unicode="0x007B"/>
+ <map adobe-name="braceright" win-ansi="0x007D" unicode="0x007D"/>
+ <map adobe-name="bracketleft" win-ansi="0x005B" unicode="0x005B"/>
+ <map adobe-name="bracketright" win-ansi="0x005D" unicode="0x005D"/>
+ <map adobe-name="breve" win-ansi="-1" unicode="0x02D8"/>
+ <map adobe-name="brokenbar" win-ansi="0x00A6" unicode="0x00A6"/>
+ <map adobe-name="bullet" win-ansi="0x0095" unicode="0x2022"/>
+ <map adobe-name="c" win-ansi="0x0063" unicode="0x0063"/>
+ <map adobe-name="caron" win-ansi="-1" unicode="0x02C7"/>
+ <map adobe-name="ccedilla" win-ansi="0x00E7" unicode="0x00E7"/>
+ <map adobe-name="cedilla" win-ansi="0x00B8" unicode="0x00B8"/>
+ <map adobe-name="cent" win-ansi="0x00A2" unicode="0x00A2"/>
+ <map adobe-name="circumflex" win-ansi="0x0088" unicode="0x02C6"/>
+ <map adobe-name="colon" win-ansi="0x003A" unicode="0x003A"/>
+ <map adobe-name="comma" win-ansi="0x002C" unicode="0x002C"/>
+ <map adobe-name="copyright" win-ansi="0x00A9" unicode="0x00A9"/>
+ <map adobe-name="currency" win-ansi="0x00A4" unicode="0x00A4"/>
+ <map adobe-name="d" win-ansi="0x0064" unicode="0x0064"/>
+ <map adobe-name="dagger" win-ansi="0x0086" unicode="0x2020"/>
+ <map adobe-name="daggerdbl" win-ansi="0x0087" unicode="0x2021"/>
+ <map adobe-name="degree" win-ansi="0x00B0" unicode="0x00B0"/>
+ <map adobe-name="dieresis" win-ansi="0x00A8" unicode="0x00A8"/>
+ <map adobe-name="divide" win-ansi="0x00F7" unicode="0x00F7"/>
+ <map adobe-name="dollar" win-ansi="0x0024" unicode="0x0024"/>
+ <map adobe-name="dotaccent" win-ansi="-1" unicode="0x02D9"/>
+ <map adobe-name="dotlessi" win-ansi="-1" unicode="0x0269"/>
+ <map adobe-name="e" win-ansi="0x0065" unicode="0x0065"/>
+ <map adobe-name="eacute" win-ansi="0x00E9" unicode="0x00E9"/>
+ <map adobe-name="ecircumflex" win-ansi="0x00EA" unicode="0x00EA"/>
+ <map adobe-name="edieresis" win-ansi="0x00EB" unicode="0x00EB"/>
+ <map adobe-name="egrave" win-ansi="0x00E8" unicode="0x00E8"/>
+ <map adobe-name="eight" win-ansi="0x0038" unicode="0x0038"/>
+ <map adobe-name="ellipsis" win-ansi="0x0085" unicode="0x2026"/>
+ <map adobe-name="emdash" win-ansi="0x0097" unicode="0x2014"/>
+ <map adobe-name="endash" win-ansi="0x0096" unicode="0x2013"/>
+ <map adobe-name="equal" win-ansi="0x003D" unicode="0x003D"/>
+ <map adobe-name="eth" win-ansi="0x00F0" unicode="0x00F0"/>
+ <map adobe-name="exclam" win-ansi="0x0021" unicode="0x0021"/>
+ <map adobe-name="exclamdown" win-ansi="0x00A1" unicode="0x00A1"/>
+ <map adobe-name="f" win-ansi="0x0066" unicode="0x0066"/>
+ <map adobe-name="fi" win-ansi="-1" unicode="-1"/>
+ <map adobe-name="five" win-ansi="0x0035" unicode="0x0035"/>
+ <map adobe-name="fl" win-ansi="-1" unicode="-1"/>
+ <map adobe-name="florin" win-ansi="0x0083" unicode="0x0083"/>
+ <map adobe-name="four" win-ansi="0x0034" unicode="0x0034"/>
+ <map adobe-name="fraction" win-ansi="-1" unicode="0x2044"/>
+ <map adobe-name="g" win-ansi="0x0067" unicode="0x0067"/>
+ <map adobe-name="gcaron" win-ansi="-1" unicode="0x01E7"/>
+ <map adobe-name="germandbls" win-ansi="0x00DF" unicode="0x00DF"/>
+ <map adobe-name="grave" win-ansi="0x0060" unicode="0x0060"/>
+ <map adobe-name="greater" win-ansi="0x003E" unicode="0x003E"/>
+ <map adobe-name="guillemotleft" win-ansi="0x00AB" unicode="0x00AB"/>
+ <map adobe-name="guillemotright" win-ansi="0x00BB" unicode="0x00BB"/>
+ <map adobe-name="guilsinglleft" win-ansi="0x008B" unicode="0x2039"/>
+ <map adobe-name="guilsinglright" win-ansi="0x009B" unicode="0x203A"/>
+ <map adobe-name="h" win-ansi="0x0068" unicode="0x0068"/>
+ <map adobe-name="hungarumlaut" win-ansi="-1" unicode="0x02DD"/>
+ <map adobe-name="hyphen" win-ansi="0x002D" unicode="0x002D"/>
+ <map adobe-name="i" win-ansi="0x0069" unicode="0x0069"/>
+ <map adobe-name="iacute" win-ansi="0x00ED" unicode="0x00ED"/>
+ <map adobe-name="icircumflex" win-ansi="0x00EE" unicode="0x00EE"/>
+ <map adobe-name="idieresis" win-ansi="0x00EF" unicode="0x00EF"/>
+ <map adobe-name="igrave" win-ansi="0x00EC" unicode="0x00EC"/>
+ <map adobe-name="ij" win-ansi="-1" unicode="0x0133"/>
+ <map adobe-name="j" win-ansi="0x006A" unicode="0x006A"/>
+ <map adobe-name="k" win-ansi="0x006B" unicode="0x006B"/>
+ <map adobe-name="l" win-ansi="0x006C" unicode="0x006C"/>
+ <map adobe-name="less" win-ansi="0x003C" unicode="0x003C"/>
+ <map adobe-name="lira" win-ansi="-1" unicode="0x20A4"/>
+ <map adobe-name="logicalnot" win-ansi="0x00AC" unicode="0x00AC"/>
+ <map adobe-name="lslash" win-ansi="-1" unicode="0x0142"/>
+ <map adobe-name="m" win-ansi="0x006D" unicode="0x006D"/>
+ <map adobe-name="macron" win-ansi="0x00AF" unicode="0x00AF"/>
+ <map adobe-name="minus" win-ansi="-1" unicode="0x2212"/>
+ <map adobe-name="mu" win-ansi="0x00B5" unicode="0x00B5"/>
+ <map adobe-name="multiply" win-ansi="0x00D7" unicode="0x00D7"/>
+ <map adobe-name="n" win-ansi="0x006E" unicode="0x006E"/>
+<!-- JKT: the following is not actually an adobe named character -->
+ <map adobe-name="nbsp" win-ansi="0x00A0" unicode="0x00A0"/>
+ <map adobe-name="nine" win-ansi="0x0039" unicode="0x0039"/>
+ <map adobe-name="ntilde" win-ansi="0x00F1" unicode="0x00F1"/>
+ <map adobe-name="numbersign" win-ansi="0x0023" unicode="0x0023"/>
+ <map adobe-name="o" win-ansi="0x006F" unicode="0x006F"/>
+ <map adobe-name="oacute" win-ansi="0x00F3" unicode="0x00F3"/>
+ <map adobe-name="ocircumflex" win-ansi="0x00F4" unicode="0x00F4"/>
+ <map adobe-name="odieresis" win-ansi="0x00F6" unicode="0x00F6"/>
+ <map adobe-name="oe" win-ansi="0x009C" unicode="0x0153"/>
+ <map adobe-name="ogonek" win-ansi="-1" unicode="0x02DB"/>
+ <map adobe-name="ograve" win-ansi="0x00F2" unicode="0x00F2"/>
+ <map adobe-name="one" win-ansi="0x0031" unicode="0x0031"/>
+ <map adobe-name="onehalf" win-ansi="0x00BD" unicode="0x00BD"/>
+ <map adobe-name="onequarter" win-ansi="0x00BC" unicode="0x00BC"/>
+ <map adobe-name="onesuperior" win-ansi="0x00B9" unicode="0x00B9"/>
+ <map adobe-name="ordfeminine" win-ansi="0x00AA" unicode="0x00AA"/>
+ <map adobe-name="ordmasculine" win-ansi="0x00BA" unicode="0x00BA"/>
+ <map adobe-name="oslash" win-ansi="0x00F8" unicode="0x00F8"/>
+ <map adobe-name="otilde" win-ansi="0x00F5" unicode="0x00F5"/>
+ <map adobe-name="p" win-ansi="0x0070" unicode="0x0070"/>
+ <map adobe-name="paragraph" win-ansi="0x00B6" unicode="0x00B6"/>
+ <map adobe-name="parenleft" win-ansi="0x0028" unicode="0x0028"/>
+ <map adobe-name="parenright" win-ansi="0x0029" unicode="0x0029"/>
+ <map adobe-name="percent" win-ansi="0x0025" unicode="0x0025"/>
+ <map adobe-name="period" win-ansi="0x002E" unicode="0x002E"/>
+ <map adobe-name="periodcentered" win-ansi="0x00B7" unicode="0x00B7"/>
+ <map adobe-name="perthousand" win-ansi="0x0089" unicode="0x2030"/>
+ <map adobe-name="plus" win-ansi="0x002B" unicode="0x002B"/>
+ <map adobe-name="plusminus" win-ansi="0x00B1" unicode="0x00B1"/>
+ <map adobe-name="q" win-ansi="0x0071" unicode="0x0071"/>
+ <map adobe-name="question" win-ansi="0x003F" unicode="0x003F"/>
+ <map adobe-name="questiondown" win-ansi="0x00BF" unicode="0x00BF"/>
+ <map adobe-name="quotedbl" win-ansi="0x0022" unicode="0x0022"/>
+ <map adobe-name="quotedblbase" win-ansi="0x0084" unicode="0x201E"/>
+ <map adobe-name="quotedblleft" win-ansi="0x0093" unicode="0x201C"/>
+ <map adobe-name="quotedblright" win-ansi="0x0094" unicode="0x201D"/>
+ <map adobe-name="quoteleft" win-ansi="0x0091" unicode="0x2018"/>
+ <map adobe-name="quoteright" win-ansi="0x0092" unicode="0x2019"/>
+ <map adobe-name="quotesinglbase" win-ansi="0x0082" unicode="0x201A"/>
+ <map adobe-name="quotesingle" win-ansi="0x0027" unicode="0x0027"/>
+ <map adobe-name="r" win-ansi="0x0072" unicode="0x0072"/>
+ <map adobe-name="registered" win-ansi="0x00AE" unicode="0x00AE"/>
+ <map adobe-name="ring" win-ansi="0x00B0" unicode="0x00B0"/>
+ <map adobe-name="s" win-ansi="0x0073" unicode="0x0073"/>
+ <map adobe-name="scaron" win-ansi="0x009A" unicode="0x0161"/>
+ <map adobe-name="scedilla" win-ansi="-1" unicode="0x015F"/>
+ <map adobe-name="section" win-ansi="0x00A7" unicode="0x00A7"/>
+ <map adobe-name="semicolon" win-ansi="0x003B" unicode="0x003B"/>
+ <map adobe-name="seven" win-ansi="0x0037" unicode="0x0037"/>
+ <map adobe-name="six" win-ansi="0x0036" unicode="0x0036"/>
+ <map adobe-name="slash" win-ansi="0x002F" unicode="0x002F"/>
+ <map adobe-name="space" win-ansi="0x0020" unicode="0x0020"/>
+ <map adobe-name="sterling" win-ansi="0x00A3" unicode="0x00A3"/>
+ <map adobe-name="t" win-ansi="0x0074" unicode="0x0074"/>
+ <map adobe-name="thorn" win-ansi="0x00FE" unicode="0x00FE"/>
+ <map adobe-name="three" win-ansi="0x0033" unicode="0x0033"/>
+ <map adobe-name="threequarters" win-ansi="0x00BE" unicode="0x00BE"/>
+ <map adobe-name="threesuperior" win-ansi="0x00B3" unicode="0x00B3"/>
+ <map adobe-name="tilde" win-ansi="0x0098" unicode="0x02DC"/>
+ <map adobe-name="trademark" win-ansi="0x0099" unicode="0x2122"/>
+ <map adobe-name="two" win-ansi="0x0032" unicode="0x0032"/>
+ <map adobe-name="twosuperior" win-ansi="0x00B2" unicode="0x00B2"/>
+ <map adobe-name="u" win-ansi="0x0075" unicode="0x0075"/>
+ <map adobe-name="uacute" win-ansi="0x00FA" unicode="0x00FA"/>
+ <map adobe-name="ucircumflex" win-ansi="0x00FB" unicode="0x00FB"/>
+ <map adobe-name="udieresis" win-ansi="0x00FC" unicode="0x00FC"/>
+ <map adobe-name="ugrave" win-ansi="0x00F9" unicode="0x00F9"/>
+ <map adobe-name="underscore" win-ansi="0x005F" unicode="0x005F"/>
+ <map adobe-name="v" win-ansi="0x0076" unicode="0x0076"/>
+ <map adobe-name="w" win-ansi="0x0077" unicode="0x0077"/>
+ <map adobe-name="x" win-ansi="0x0078" unicode="0x0078"/>
+ <map adobe-name="y" win-ansi="0x0079" unicode="0x0079"/>
+ <map adobe-name="yacute" win-ansi="0x00FD" unicode="0x00FD"/>
+ <map adobe-name="ydieresis" win-ansi="0x00FF" unicode="0x00FF"/>
+ <map adobe-name="yen" win-ansi="0x00A5" unicode="0x00A5"/>
+ <map adobe-name="z" win-ansi="0x007A" unicode="0x007A"/>
+ <map adobe-name="zcaron" win-ansi="-1" unicode="0x017E"/>
+ <map adobe-name="zero" win-ansi="0x0030" unicode="0x0030"/>
+</font-mappings>
+
+<!-- I couldn't find the following characters in the unicode tables -->
+
+<!--
+ <map adobe-name="center" win-ansi="-1" unicode=""/>
+ <map adobe-name="dectab" win-ansi="-1" unicode=""/>
+ <map adobe-name="down" win-ansi="-1" unicode=""/>
+ <map adobe-name="format" win-ansi="-1" unicode=""/>
+ <map adobe-name="graybox" win-ansi="-1" unicode=""/>
+ <map adobe-name="indent" win-ansi="-1" unicode=""/>
+ <map adobe-name="largebullet" win-ansi="-1" unicode=""/>
+ <map adobe-name="left" win-ansi="-1" unicode=""/>
+ <map adobe-name="ll" win-ansi="-1" unicode=""/>
+ <map adobe-name="LL" win-ansi="-1" unicode=""/>
+ <map adobe-name="merge" win-ansi="-1" unicode=""/>
+ <map adobe-name="notegraphic" win-ansi="-1" unicode=""/>
+ <map adobe-name="overscore" win-ansi="-1" unicode=""/>
+ <map adobe-name="prescription" win-ansi="-1" unicode=""/>
+ <map adobe-name="return" win-ansi="-1" unicode=""/>
+ <map adobe-name="square" win-ansi="-1" unicode=""/>
+ <map adobe-name="stop" win-ansi="-1" unicode=""/>
+ <map adobe-name="tab" win-ansi="-1" unicode=""/>
+ <map adobe-name="up" win-ansi="-1" unicode=""/>
+ <map adobe-name="zer" win-ansi="-1" unicode=""/>
+
+-->
\ No newline at end of file
--- /dev/null
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
+ extension-element-prefixes="redirect">
+<xsl:output method="text" />
+
+<xsl:template match="font-mappings">
+<!-- <redirect:write file="org/apache/fop/render/pdf/CodePointMapping.java"> -->
+package org.apache.fop.render.pdf;
+
+public class CodePointMapping {
+ public static char[] map;
+
+ static {
+ map = new char[65536];
+<xsl:for-each select="map[@unicode!='-1' and @win-ansi!='-1']"> map[<xsl:value-of select="@unicode"/>] = <xsl:value-of select="@win-ansi"/>;
+</xsl:for-each>
+ }
+}
+<!-- </redirect:write>-->
+</xsl:template>
+</xsl:stylesheet>
+
--- /dev/null
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
+ extension-element-prefixes="redirect">
+<xsl:output method="text" />
+
+<xsl:template match="font-metrics">
+<xsl:variable name="class-name" select="class-name"/>
+<!--<redirect:write select="concat('org/apache/fop/render/pdf/fonts/', $class-name, '.java')">-->
+package org.apache.fop.render.pdf.fonts;
+
+import org.apache.fop.render.pdf.Font;
+
+public class <xsl:value-of select="class-name"/> extends Font {
+ private final static String fontName = "<xsl:value-of select="font-name"/>";
+ private final static String encoding = "<xsl:value-of select="encoding"/>";
+ private final static int capHeight = <xsl:value-of select="cap-height"/>;
+ private final static int xHeight = <xsl:value-of select="x-height"/>;
+ private final static int ascender = <xsl:value-of select="ascender"/>;
+ private final static int descender = <xsl:value-of select="descender"/>;
+ private final static int[] width;
+
+ static {
+ width = new int[256];
+<xsl:for-each select="widths/char"><xsl:variable name="char-name" select="@name"/><xsl:variable name="char-num" select="document('charlist.xml')/font-mappings/map[@adobe-name=$char-name]/@win-ansi"/><xsl:if test="$char-num!='-1'"> width[<xsl:value-of select="$char-num"/>] = <xsl:value-of select="@width"/>;
+</xsl:if></xsl:for-each>
+ }
+
+ 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];
+ }
+}
+<!--</redirect:write>-->
+</xsl:template>
+</xsl:stylesheet>
+
--- /dev/null
+<?xml version="1.0" ?>
+<property-list>
+ <property>
+ <name>font-size</name>
+ <class-name>FontSize</class-name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>12pt</default>
+ </property>
+ <property>
+ <name>start-indent</name>
+ <class-name>StartIndent</class-name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>font-style</name>
+ <class-name>FontStyle</class-name>
+ <inherited>true</inherited>
+ <datatype>String</datatype>
+ <default>normal</default>
+ </property>
+ <property>
+ <name>flow-name</name>
+ <class-name>FlowName</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>page-master-first</name>
+ <class-name>PageMasterFirst</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>page-master-odd</name>
+ <class-name>PageMasterOdd</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>extent</name>
+ <class-name>Extent</class-name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>font-weight</name>
+ <class-name>FontWeight</class-name>
+ <inherited>true</inherited>
+ <datatype>String</datatype>
+ <default>normal</default>
+ </property>
+ <property>
+ <name>margin-left</name>
+ <class-name>MarginLeft</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>font-family</name>
+ <class-name>FontFamily</class-name>
+ <inherited>true</inherited>
+ <datatype>String</datatype>
+ <default>sans-serif</default>
+ </property>
+ <property>
+ <name>page-master-even</name>
+ <class-name>PageMasterEven</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>margin-top</name>
+ <class-name>MarginTop</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>page-master-name</name>
+ <class-name>PageMasterName</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>end-indent</name>
+ <class-name>EndIndent</class-name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>color</name>
+ <class-name>Color</class-name>
+ <inherited>true</inherited>
+ <datatype>ColorType</datatype>
+ <default>black</default>
+ </property>
+ <property>
+ <name>margin-bottom</name>
+ <class-name>MarginBottom</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>page-height</name>
+ <class-name>PageHeight</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>11in</default>
+ </property>
+ <property>
+ <name>space-before.optimum</name>
+ <class-name>SpaceBeforeOptimum</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>provisional-label-separation</name>
+ <class-name>ProvisionalLabelSeparation</class-name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>6pt</default>
+ </property>
+ <property>
+ <name>id</name>
+ <class-name>ID</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>margin-right</name>
+ <class-name>MarginRight</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>rule-thickness</name>
+ <class-name>RuleThickness</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>1pt</default>
+ </property>
+ <property>
+ <name>page-width</name>
+ <class-name>PageWidth</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>8in</default>
+ </property>
+ <property>
+ <name>page-master-repeating</name>
+ <class-name>PageMasterRepeating</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>provisional-distance-between-starts</name>
+ <class-name>ProvisionalDistanceBetweenStarts</class-name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>24pt</default>
+ </property>
+ <property>
+ <name>line-height</name>
+ <class-name>LineHeight</class-name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>12pt</default>
+ </property>
+ <property>
+ <name>space-after.optimum</name>
+ <class-name>SpaceAfterOptimum</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>text-align</name>
+ <class-name>TextAlign</class-name>
+ <inherited>true</inherited>
+ <datatype>
+ <enumeration>
+ <value const="CENTERED">centered</value>
+ <value const="END">end</value>
+ <value const="START">start</value>
+ <value const="JUSTIFIED">justified</value>
+ </enumeration>
+ </datatype>
+ <default>start</default>
+ </property>
+ <property>
+ <name>white-space-treatment</name>
+ <class-name>WhiteSpaceTreatment</class-name>
+ <inherited>true</inherited>
+ <datatype>
+ <enumeration>
+ <value const="PRESERVE">preserve</value>
+ <value const="COLLAPSE">collapse</value>
+ <value const="IGNORE">ignore</value>
+ </enumeration>
+ </datatype>
+ <default>collapse</default>
+ </property>
+ <property>
+ <name>break-after</name>
+ <class-name>BreakAfter</class-name>
+ <inherited>false</inherited>
+ <datatype>
+ <enumeration>
+ <value const="AUTO">auto</value>
+ <value const="COLUMN">column</value>
+ <value const="PAGE">page</value>
+ <value const="EVEN_PAGE">even-page</value>
+ <value const="ODD_PAGE">odd-page</value>
+ </enumeration>
+ </datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>break-before</name>
+ <class-name>BreakBefore</class-name>
+ <inherited>false</inherited>
+ <datatype>
+ <enumeration>
+ <value const="AUTO">auto</value>
+ <value const="COLUMN">column</value>
+ <value const="PAGE">page</value>
+ <value const="EVEN_PAGE">even-page</value>
+ <value const="ODD_PAGE">odd-page</value>
+ </enumeration>
+ </datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>wrap-option</name>
+ <class-name>WrapOption</class-name>
+ <inherited>true</inherited>
+ <datatype>
+ <enumeration>
+ <value const="WRAP">wrap</value>
+ <value const="NO_WRAP">no-wrap</value>
+ </enumeration>
+ </datatype>
+ <default>wrap</default>
+ </property>
+ <property>
+ <name>text-align-last</name>
+ <class-name>TextAlignLast</class-name>
+ <inherited>true</inherited>
+ <datatype>
+ <enumeration>
+ <value const="CENTERED">centered</value>
+ <value const="END">end</value>
+ <value const="START">start</value>
+ <value const="JUSTIFIED">justified</value>
+ </enumeration>
+ </datatype>
+ <default>start</default>
+ <derive from="text-align">
+ <if match="TextAlign.JUSTIFIED">START</if>
+ <if match="TextAlign.END">END</if>
+ <if match="TextAlign.START">START</if>
+ <if match="TextAlign.CENTERED">CENTERED</if>
+ </derive>
+ </property>
+ <property>
+ <name>line-height</name>
+ <class-name>LineHeight</class-name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>normal</default>
+ <make>
+ <to-double/>
+ <if match="normal">1.2,propertyList.get("font-size")</if>
+ <else-if-number>d,propertyList.get("font-size")</else-if-number>
+ <else>value</else>
+ </make>
+ </property>
+ <property>
+ <name>text-indent</name>
+ <class-name>TextIndent</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>href</name>
+ <class-name>HRef</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>column-width</name>
+ <class-name>ColumnWidth</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>keep-with-next</name>
+ <class-name>KeepWithNext</class-name>
+ <inherited>false</inherited>
+ <datatype>
+ <enumeration>
+ <value const="TRUE">true</value>
+ <value const="FALSE">false</value>
+ </enumeration>
+ </datatype>
+ <default>false</default>
+ </property>
+ <property>
+ <name>background-color</name>
+ <class-name>BackgroundColor</class-name>
+ <inherited>false</inherited>
+ <datatype>ColorType</datatype>
+ <default>transparent</default>
+ </property>
+ <property>
+ <name>padding</name>
+ <class-name>Padding</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>padding-before</name>
+ <class-name>PaddingBefore</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>padding-after</name>
+ <class-name>PaddingAfter</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>padding-start</name>
+ <class-name>PaddingStart</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>padding-end</name>
+ <class-name>PaddingEnd</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>padding-top</name>
+ <class-name>PaddingTop</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>padding-left</name>
+ <class-name>PaddingLeft</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>padding-bottom</name>
+ <class-name>PaddingBottom</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>padding-right</name>
+ <class-name>PaddingRight</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>external-destination</name>
+ <class-name>ExternalDestination</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>border-before-color</name>
+ <class-name>BorderBeforeColor</class-name>
+ <inherited>false</inherited>
+ <datatype>ColorType</datatype>
+ <default>black</default>
+ </property>
+ <property>
+ <name>border-before-style</name>
+ <class-name>BorderBeforeStyle</class-name>
+ <inherited>false</inherited>
+ <datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="HIDDEN">hidden</value>
+ <value const="DOTTED">dotted</value>
+ <value const="DASHED">dashed</value>
+ <value const="SOLID">solid</value>
+ <value const="DOUBLE">double</value>
+ <value const="GROOVE">groove</value>
+ <value const="RIDGE">ridge</value>
+ <value const="INSET">inset</value>
+ <value const="OUTSET">outset</value>
+ </enumeration>
+ </datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>border-before-width</name>
+ <class-name>BorderBeforeWidth</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>border-after-color</name>
+ <class-name>BorderAfterColor</class-name>
+ <inherited>false</inherited>
+ <datatype>ColorType</datatype>
+ <default>black</default>
+ </property>
+ <property>
+ <name>border-after-style</name>
+ <class-name>BorderAfterStyle</class-name>
+ <inherited>false</inherited>
+ <datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="HIDDEN">hidden</value>
+ <value const="DOTTED">dotted</value>
+ <value const="DASHED">dashed</value>
+ <value const="SOLID">solid</value>
+ <value const="DOUBLE">double</value>
+ <value const="GROOVE">groove</value>
+ <value const="RIDGE">ridge</value>
+ <value const="INSET">inset</value>
+ <value const="OUTSET">outset</value>
+ </enumeration>
+ </datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>border-after-width</name>
+ <class-name>BorderAfterWidth</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>border-start-color</name>
+ <class-name>BorderStartColor</class-name>
+ <inherited>false</inherited>
+ <datatype>ColorType</datatype>
+ <default>black</default>
+ </property>
+ <property>
+ <name>border-start-style</name>
+ <class-name>BorderStartStyle</class-name>
+ <inherited>false</inherited>
+ <datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="HIDDEN">hidden</value>
+ <value const="DOTTED">dotted</value>
+ <value const="DASHED">dashed</value>
+ <value const="SOLID">solid</value>
+ <value const="DOUBLE">double</value>
+ <value const="GROOVE">groove</value>
+ <value const="RIDGE">ridge</value>
+ <value const="INSET">inset</value>
+ <value const="OUTSET">outset</value>
+ </enumeration>
+ </datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>border-start-width</name>
+ <class-name>BorderStartWidth</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>border-end-color</name>
+ <class-name>BorderEndColor</class-name>
+ <inherited>false</inherited>
+ <datatype>ColorType</datatype>
+ <default>black</default>
+ </property>
+ <property>
+ <name>border-end-style</name>
+ <class-name>BorderEndStyle</class-name>
+ <inherited>false</inherited>
+ <datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="HIDDEN">hidden</value>
+ <value const="DOTTED">dotted</value>
+ <value const="DASHED">dashed</value>
+ <value const="SOLID">solid</value>
+ <value const="DOUBLE">double</value>
+ <value const="GROOVE">groove</value>
+ <value const="RIDGE">ridge</value>
+ <value const="INSET">inset</value>
+ <value const="OUTSET">outset</value>
+ </enumeration>
+ </datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>border-end-width</name>
+ <class-name>BorderEndWidth</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>border-top-color</name>
+ <class-name>BorderTopColor</class-name>
+ <inherited>false</inherited>
+ <datatype>ColorType</datatype>
+ <default>black</default>
+ </property>
+ <property>
+ <name>border-top-style</name>
+ <class-name>BorderTopStyle</class-name>
+ <inherited>false</inherited>
+ <datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="HIDDEN">hidden</value>
+ <value const="DOTTED">dotted</value>
+ <value const="DASHED">dashed</value>
+ <value const="SOLID">solid</value>
+ <value const="DOUBLE">double</value>
+ <value const="GROOVE">groove</value>
+ <value const="RIDGE">ridge</value>
+ <value const="INSET">inset</value>
+ <value const="OUTSET">outset</value>
+ </enumeration>
+ </datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>border-top-width</name>
+ <class-name>BorderTopWidth</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>border-bottom-color</name>
+ <class-name>BorderBottomColor</class-name>
+ <inherited>false</inherited>
+ <datatype>ColorType</datatype>
+ <default>black</default>
+ </property>
+ <property>
+ <name>border-bottom-style</name>
+ <class-name>BorderBottomStyle</class-name>
+ <inherited>false</inherited>
+ <datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="HIDDEN">hidden</value>
+ <value const="DOTTED">dotted</value>
+ <value const="DASHED">dashed</value>
+ <value const="SOLID">solid</value>
+ <value const="DOUBLE">double</value>
+ <value const="GROOVE">groove</value>
+ <value const="RIDGE">ridge</value>
+ <value const="INSET">inset</value>
+ <value const="OUTSET">outset</value>
+ </enumeration>
+ </datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>border-bottom-width</name>
+ <class-name>BorderBottomWidth</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>border-left-color</name>
+ <class-name>BorderLeftColor</class-name>
+ <inherited>false</inherited>
+ <datatype>ColorType</datatype>
+ <default>black</default>
+ </property>
+ <property>
+ <name>border-left-style</name>
+ <class-name>BorderLeftStyle</class-name>
+ <inherited>false</inherited>
+ <datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="HIDDEN">hidden</value>
+ <value const="DOTTED">dotted</value>
+ <value const="DASHED">dashed</value>
+ <value const="SOLID">solid</value>
+ <value const="DOUBLE">double</value>
+ <value const="GROOVE">groove</value>
+ <value const="RIDGE">ridge</value>
+ <value const="INSET">inset</value>
+ <value const="OUTSET">outset</value>
+ </enumeration>
+ </datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>border-left-width</name>
+ <class-name>BorderLeftWidth</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>border-right-color</name>
+ <class-name>BorderRightColor</class-name>
+ <inherited>false</inherited>
+ <datatype>ColorType</datatype>
+ <default>black</default>
+ </property>
+ <property>
+ <name>border-right-style</name>
+ <class-name>BorderRightStyle</class-name>
+ <inherited>false</inherited>
+ <datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="HIDDEN">hidden</value>
+ <value const="DOTTED">dotted</value>
+ <value const="DASHED">dashed</value>
+ <value const="SOLID">solid</value>
+ <value const="DOUBLE">double</value>
+ <value const="GROOVE">groove</value>
+ <value const="RIDGE">ridge</value>
+ <value const="INSET">inset</value>
+ <value const="OUTSET">outset</value>
+ </enumeration>
+ </datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>border-right-width</name>
+ <class-name>BorderRightWidth</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>border-color</name>
+ <class-name>BorderColor</class-name>
+ <inherited>false</inherited>
+ <datatype>ColorType</datatype>
+ <default>black</default>
+ </property>
+ <property>
+ <name>border-style</name>
+ <class-name>BorderStyle</class-name>
+ <inherited>false</inherited>
+ <datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="HIDDEN">hidden</value>
+ <value const="DOTTED">dotted</value>
+ <value const="DASHED">dashed</value>
+ <value const="SOLID">solid</value>
+ <value const="DOUBLE">double</value>
+ <value const="GROOVE">groove</value>
+ <value const="RIDGE">ridge</value>
+ <value const="INSET">inset</value>
+ <value const="OUTSET">outset</value>
+ <value const="TRANSPARENT">transparent</value>
+ </enumeration>
+ </datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>border-width</name>
+ <class-name>BorderWidth</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>border-top</name>
+ <class-name>BorderTop</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default>normal</default>
+ </property>
+ <property>
+ <name>border-bottom</name>
+ <class-name>BorderBottom</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default>normal</default>
+ </property>
+ <property>
+ <name>border-left</name>
+ <class-name>BorderLeft</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default>normal</default>
+ </property>
+ <property>
+ <name>border-right</name>
+ <class-name>BorderRight</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default>normal</default>
+ </property>
+ <property>
+ <name>position</name>
+ <class-name>Position</class-name>
+ <inherited>false</inherited>
+ <datatype>
+ <enumeration>
+ <value const="STATIC">static</value>
+ <value const="RELATIVE">relative</value>
+ <value const="ABSOLUTE">absolute</value>
+ <value const="FIXED">fixed</value>
+ </enumeration>
+ </datatype>
+ <default>static</default>
+ </property>
+ <property>
+ <name>top</name>
+ <class-name>Top</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>right</name>
+ <class-name>Right</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>bottom</name>
+ <class-name>Bottom</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>left</name>
+ <class-name>Left</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>width</name>
+ <class-name>Width</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>height</name>
+ <class-name>Height</class-name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>initial-page-number</name>
+ <class-name>InitialPageNumber</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default>auto</default>
+ </property>
+</property-list>
+
--- /dev/null
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
+ extension-element-prefixes="redirect">
+<xsl:output method="text" />
+
+<xsl:template match="property" priority="-1">
+<xsl:variable name="classname" select="class-name"/>
+<redirect:write select="concat('@org/apache/fop@/fo/properties/', $classname, '.java')">
+package org.apache.fop.fo.properties;
+
+import org.apache.fop.datatypes.*;
+import org.apache.fop.fo.*;
+import org.apache.fop.apps.FOPException;
+
+public class <xsl:value-of select="class-name"/> extends Property {
+
+ public static class Maker extends Property.Maker {
+ public boolean isInherited() { return <xsl:value-of select="inherited"/>; }
+
+ public Property make(PropertyList propertyList, String value) throws FOPException {
+<xsl:choose>
+<xsl:when test="make">
+ <xsl:variable name="datatype" select="datatype"/>
+ <xsl:value-of select="$datatype"/> v;
+<xsl:if test="make/to-double">
+ double d = toDouble(value);
+</xsl:if>
+<xsl:for-each select="make/if">
+ if (value.equals("<xsl:value-of select="@match"/>")) {
+ v = new <xsl:value-of select="$datatype"/>(<xsl:value-of select="."/>);
+ }
+</xsl:for-each>
+<xsl:for-each select="make/else-if-number">
+ else if (!Double.isNaN(d)) {
+ v = new <xsl:value-of select="$datatype"/>( <xsl:value-of select="."/>);
+ }
+</xsl:for-each>
+ else {
+ v = new <xsl:value-of select="datatype"/>(<xsl:value-of select="make/else"/>);
+ }
+ return new <xsl:value-of select="class-name"/>(propertyList, v);
+</xsl:when>
+<xsl:otherwise>
+ return new <xsl:value-of select="class-name"/>(propertyList, new <xsl:value-of select="datatype"/>(value));
+</xsl:otherwise>
+</xsl:choose>
+ }
+
+ public Property make(PropertyList propertyList) throws FOPException {
+ return make(propertyList, "<xsl:value-of select="default"/>");
+ }
+ }
+
+ public static Property.Maker maker() {
+ return new <xsl:value-of select="class-name"/>.Maker();
+ }
+
+ private <xsl:value-of select="datatype"/> value;
+
+ public <xsl:value-of select="class-name"/>(PropertyList propertyList, <xsl:value-of select="datatype"/> explicitValue) {
+ this.propertyList = propertyList;
+ this.value = explicitValue;
+ }
+
+ public <xsl:value-of select="datatype"/> get<xsl:value-of select="datatype"/>() {
+ return this.value;
+ }
+
+}
+</redirect:write>
+</xsl:template>
+
+<xsl:template match="property[datatype/enumeration]">
+<xsl:variable name="classname" select="class-name"/>
+<redirect:write select="concat('@org/apache/fop@/fo/properties/', $classname, '.java')">
+package org.apache.fop.fo.properties;
+
+import org.apache.fop.datatypes.*;
+import org.apache.fop.fo.*;
+import org.apache.fop.apps.FOPException;
+
+public class <xsl:value-of select="class-name"/> extends Property {
+<xsl:for-each select="datatype/enumeration/value">
+ public final static int <xsl:value-of select="@const"/> = <xsl:number/>;</xsl:for-each>
+
+ public static class Maker extends Property.Maker {
+ public boolean isInherited() { return <xsl:value-of select="inherited"/>; }
+
+ public Property make(PropertyList propertyList, String value) throws FOPException {
+ int v;
+ <xsl:for-each select="datatype/enumeration/value">
+ if (value.equals("<xsl:value-of select="."/>")) { v = <xsl:value-of select="@const"/>; }
+ else</xsl:for-each>
+ {
+ System.err.println("WARNING: Unknown value for <xsl:value-of select="name"/>: " + value);
+ return make(propertyList, "<xsl:value-of select="default"/>");
+ }
+ return new <xsl:value-of select="class-name"/>(propertyList, v);
+ }
+
+ public Property make(PropertyList propertyList) throws FOPException {
+ return make(propertyList, "<xsl:value-of select="default"/>");
+ }
+ <xsl:if test="derive">
+ public Property compute(PropertyList propertyList) {
+ Property computedProperty = null;
+ Property correspondingProperty = propertyList.get("<xsl:value-of select="derive/@from"/>");
+ if (correspondingProperty != null) {
+ int correspondingValue = correspondingProperty.getEnum();
+ <xsl:for-each select="derive/if">
+ if (correspondingValue == <xsl:value-of select="@match"/>)
+ computedProperty = new <xsl:value-of select="$classname"/>(propertyList, <xsl:value-of select="."/>);
+ else</xsl:for-each>
+ ;
+ }
+ return computedProperty;
+ }
+ </xsl:if>
+ }
+
+ public static Property.Maker maker() {
+ return new <xsl:value-of select="class-name"/>.Maker();
+ }
+
+ private int value;
+
+ public <xsl:value-of select="class-name"/>(PropertyList propertyList, int explicitValue) {
+ this.propertyList = propertyList;
+ this.value = explicitValue;
+ }
+
+ public int getEnum() {
+ return this.value;
+ }
+
+}
+</redirect:write>
+</xsl:template>
+</xsl:stylesheet>
+
+
--- /dev/null
+
+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.viewer.*;
+import org.apache.fop.render.awt.*;
+
+import javax.swing.UIManager;
+import java.awt.*;
+
+// 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.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") + " ...");
+ Parser parser = createParser();
+
+
+ if (parser == null) {
+ System.err.println("ERROR: Unable to create SAX parser");
+ 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");
+
+// 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"));
+
+ } catch (Exception e) {
+ System.err.println("FATAL ERROR: " + e.getMessage());
+ e.printStackTrace();
+ System.exit(1);
+ }
+ }
+
+
+ static Parser createParser() {
+ String parserClassName =
+ System.getProperty("org.xml.sax.parser");
+ if (parserClassName == null) {
+ parserClassName = "com.jclark.xml.sax.Driver";
+ }
+ 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;
+ }
+
+
+
+ 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) {
+ System.out.println("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;
+
+ System.err.println(Version.getVersion());
+ if (args.length < 1 || args.length > 3) {
+ System.err.println("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
+
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.apps;
+
+// 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.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;
+
+/**
+ * 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 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");
+ }
+ }
+
+ /**
+ * 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();
+ System.err.println(version);
+
+ if (args.length != 2) {
+ System.err.println("usage: java "
+ + "org.apache.fop.apps.CommandLine "
+ + "formatting-object-file pdf-file");
+ System.exit(1);
+ }
+
+ Parser parser = createParser();
+
+ if (parser == null) {
+ System.err.println("ERROR: Unable to create SAX parser");
+ 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.setWriter(new PrintWriter(new FileWriter(args[1])));
+ driver.buildFOTree(parser, fileInputSource(args[0]));
+ driver.format();
+ driver.render();
+ } catch (Exception e) {
+ System.err.println("FATAL ERROR: " + e.getMessage());
+ System.exit(1);
+ }
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.apps;
+
+// FOP
+import org.apache.fop.fo.FOTreeBuilder;
+import org.apache.fop.fo.ElementMapping;
+import org.apache.fop.layout.AreaTree;
+import org.apache.fop.layout.FontInfo;
+import org.apache.fop.render.Renderer;
+
+// 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.AttributeListImpl;
+
+// Java
+import java.io.PrintWriter;
+import java.io.IOException;
+
+/**
+ * <P>Primary class that drives overall FOP process.
+ *
+ * <P>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).
+ *
+ * <P>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.
+ *
+ * <P>A third possibility may be used to build the FO Tree, namely
+ * calling getDocumentHandler() and firing the SAX events yourself.
+ *
+ * <P>Once the FO Tree is built, the format() and render() methods may be
+ * called in that order.
+ *
+ * <P>Here is an example use of Driver from CommandLine.java:
+ *
+ * <PRE>
+ * 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();
+ * </PRE>
+ */
+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) {
+ System.err.println("using renderer " + rendererClassName);
+
+ try {
+ return (Renderer)
+ Class.forName(rendererClassName).newInstance();
+ } catch (ClassNotFoundException e) {
+ System.err.println("Could not find " + rendererClassName);
+ } catch (InstantiationException e) {
+ System.err.println("Could not instantiate "
+ + rendererClassName);
+ } catch (IllegalAccessException e) {
+ System.err.println("Could not access " + rendererClassName);
+ } catch (ClassCastException e) {
+ System.err.println(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) {
+ System.err.println("using element mapping " + mappingClassName);
+
+ try {
+ return (ElementMapping)
+ Class.forName(mappingClassName).newInstance();
+ } catch (ClassNotFoundException e) {
+ System.err.println("Could not find " + mappingClassName);
+ } catch (InstantiationException e) {
+ System.err.println("Could not instantiate "
+ + mappingClassName);
+ } catch (IllegalAccessException e) {
+ System.err.println("Could not access " + mappingClassName);
+ } catch (ClassCastException e) {
+ System.err.println(mappingClassName + " is not an element mapping");
+ }
+ 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;
+ AttributeListImpl currentAtts;
+
+ /* temporary array for making Strings into character arrays */
+ char[] array = null;
+
+ currentAtts = new AttributeListImpl();
+
+ /* 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 {
+ this.renderer.render(areaTree, this.writer);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.apps;
+
+/** not implemented yet */
+public interface ErrorHandler {}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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);
+ }
+}
--- /dev/null
+package org.apache.fop.apps;
+
+import org.xml.sax.*;
+import com.jclark.xsl.sax.*;
+import java.io.*;
+
+// FOP
+import org.apache.fop.fo.FOTreeBuilder;
+import org.apache.fop.fo.ElementMapping;
+import org.apache.fop.layout.AreaTree;
+import org.apache.fop.layout.FontInfo;
+import org.apache.fop.render.Renderer;
+
+//////////////////////////////////////////////////////////////////////////////////////
+/**
+ * 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
+ * <xsl:output method="fop:org.apache.fop.apps.PDFOutputHandler"
+ * xmlns:fop="http://www.jclark.com/xt/java"/>
+ * to your stylesheet. Now XT will automatically call FOP.
+ *
+ */
+public class PDFOutputHandler extends FOTreeBuilder 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 {
+ this.renderer.render(areaTree, this.writer);
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////////
+ /**
+ * add the given element mapping.
+ *
+ * an element mapping maps element names to Java classes
+ */
+ public void addElementMapping(ElementMapping 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 ElementMapping createElementMapping(String mappingClassName) {
+ System.err.println("using element mapping " + mappingClassName);
+
+ try {
+ return (ElementMapping)
+ Class.forName(mappingClassName).newInstance();
+ } catch (ClassNotFoundException e) {
+ System.err.println("Could not find " + mappingClassName);
+ } catch (InstantiationException e) {
+ System.err.println("Could not instantiate "
+ + mappingClassName);
+ } catch (IllegalAccessException e) {
+ System.err.println("Could not access " + mappingClassName);
+ } catch (ClassCastException e) {
+ System.err.println(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) {
+ System.err.println("using renderer " + rendererClassName);
+
+ try {
+ return (Renderer)
+ Class.forName(rendererClassName).newInstance();
+ } catch (ClassNotFoundException e) {
+ System.err.println("Could not find " + rendererClassName);
+ } catch (InstantiationException e) {
+ System.err.println("Could not instantiate "
+ + rendererClassName);
+ } catch (IllegalAccessException e) {
+ System.err.println("Could not access " + rendererClassName);
+ } catch (ClassCastException e) {
+ System.err.println(rendererClassName + " is not a renderer");
+ }
+ return null;
+ }
+}
+
--- /dev/null
+package org.apache.fop.apps;
+
+/*
+ originally contributed by
+ Stanislav Gorkhover: stanislav.gorkhover@jcatalog.com
+ jCatalog Software AG
+ */
+
+
+import org.xml.sax.Parser;
+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;
+
+
+/**
+ * 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();
+ System.err.println(version);
+
+ if (args.length != 1) {
+ System.err.println("usage: java [-Dstart=i] [-Dend=i]"
+ + " [-Dcopies=i] [-Deven=true|false]"
+ + " org.apache.fop.apps.PrintCommandLine formatting-object-file");
+ System.exit(1);
+ }
+
+ Parser parser = createParser();
+
+ if (parser == null) {
+ System.err.println("ERROR: Unable to create SAX parser");
+ System.exit(1);
+ }
+
+ 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.buildFOTree(parser, fileInputSource(args[0]));
+ driver.format();
+ driver.render();
+ } catch (Exception e) {
+ System.err.println("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
+
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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 0.12.2 [dev]";
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.apps;
+
+import org.apache.fop.render.pdf.PDFRenderer;
+import org.apache.fop.fo.StandardElementMapping;
+import org.apache.fop.svg.SVGElementMapping;
+
+// 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.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 extends CommandLine {
+
+ /**
+ * 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();
+ System.err.println(version);
+
+ if (args.length != 3) {
+ System.err.println("usage: java org.apache.fop.apps.XTCommandLine xml-file xsl-stylesheet pdf-file");
+ System.exit(1);
+ }
+
+ Parser parser = createParser();
+
+ if (parser == null) {
+ System.err.println("ERROR: Unable to create SAX parser");
+ System.exit(1);
+ }
+
+ XSLProcessor xslProcessor = new XSLProcessorImpl();
+ xslProcessor.setParser(parser);
+
+ try {
+ xslProcessor.loadStylesheet(fileInputSource(args[1]));
+
+ 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[2])));
+ driver.buildFOTree(xslProcessor, fileInputSource(args[0]));
+ driver.format();
+ driver.render();
+ } catch (Exception e) {
+ System.err.println("FATAL ERROR: " + e.getMessage());
+ System.exit(1);
+ }
+ }
+}
--- /dev/null
+<HTML>
+<TITLE>org.apache.fop.apps Package</TITLE>
+<BODY>
+<P>Application classes used for running FOP both on the command line and
+embedded in other applications.</P>
+</BODY>
+</HTML>
\ No newline at end of file
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.datatypes;
+
+import java.util.*;
+
+/**
+ * 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;
+ System.err.println("ERROR: unknown colour format. Must be #RGB or #RRGGBB");
+ }
+ } catch (Exception e) {
+ this.red = 0;
+ this.green = 0;
+ this.blue = 0;
+ System.err.println("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;
+ System.err.println("ERROR: unknown colour format. Must be #RGB or #RRGGBB");
+ }
+ }
+ } else if (value.startsWith("url(")) {
+ // refers to a gradient
+ } else {
+ 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;
+ System.err.println("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;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.datatypes;
+
+import org.apache.fop.fo.Property;
+
+/**
+ * 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) {
+ System.err.println("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;
+ System.err.println("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 String toString() {
+ String s = millipoints + "mpt";
+ return s;
+ }
+}
--- /dev/null
+<HTML>
+<TITLE>org.apache.fop.datatypes Package</TITLE>
+<BODY>
+<P>XSL Datatypes</P>
+</BODY>
+</HTML>
\ No newline at end of file
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.fo;
+
+public interface ElementMapping {
+
+ public void addToBuilder(FOTreeBuilder builder);
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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;
+ protected Vector children = new Vector();
+
+ /** 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;
+ }
+
+ public LinkSet getLinkSet() {
+ return this.linkSet;
+ }
+
+ abstract public Status layout(Area area)
+ throws FOPException;
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.fo;
+
+// FOP
+import org.apache.fop.layout.Area;
+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)) {
+ System.err.println("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);
+ }
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.fo;
+
+// FOP
+import org.apache.fop.layout.AreaTree;
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.fo.pagination.Root;
+
+// SAX
+import org.xml.sax.HandlerBase;
+import org.xml.sax.SAXException;
+import org.xml.sax.InputSource;
+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 FOTreeBuilder extends HandlerBase {
+
+ /**
+ * 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 PropertyListBuilder propertyListBuilder = new
+ PropertyListBuilder();
+
+ /**
+ * 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);
+ }
+
+ /** 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 name) {
+ 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() {
+ System.err.println("building formatting object tree");
+ }
+
+ /** SAX Handler for the start of an element */
+ public void startElement(String name, AttributeList 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.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));
+ }
+ }
+ String fullName = mapName(name);
+
+ fobjMaker = (FObj.Maker) fobjTable.get(fullName);
+
+ if (fobjMaker == null) {
+ if (!this.unknownFOs.containsKey(fullName)) {
+ this.unknownFOs.put(fullName, "");
+ System.err.println("WARNING: Unknown formatting object "
+ + fullName);
+ }
+ fobjMaker = new FObjMixed.Maker(); // fall back
+ }
+
+ try {
+ fobj =
+ fobjMaker.make(currentFObj,
+ this.propertyListBuilder.makeList(attlist,
+ (currentFObj == null) ? null : currentFObj.properties));
+ } 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 {
+ System.err.println("formatting FOs into areas");
+ ((Root) this.rootFObj).format(areaTree);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.fo;
+
+// FOP
+import org.apache.fop.layout.Area;
+import org.apache.fop.apps.FOPException;
+
+// 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;
+ protected String name;
+
+ protected FObj(FObj parent, PropertyList propertyList) {
+ super(parent);
+ this.properties = propertyList;
+ this.name = "default FO";
+ }
+
+ protected void addCharacters(char data[], int start, int length) {
+ // ignore
+ }
+
+ public Status layout(Area area) throws FOPException {
+ // should always be overridden
+ return new Status(Status.OK);
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ protected void start() {
+ // do nothing by default
+ }
+
+ protected void end() {
+ // do nothing by default
+ }
+}
+
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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.marker == START) {
+ this.marker = 0;
+ }
+
+ 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);
+ }
+}
+
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+ }
+
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.fo;
+
+import java.util.Hashtable;
+
+import org.apache.fop.apps.FOPException;
+
+public class PropertyList extends Hashtable {
+ private PropertyListBuilder builder;
+ private PropertyList parentPropertyList = null;
+
+ public PropertyList(PropertyList parentPropertyList) {
+ this.parentPropertyList = parentPropertyList;
+ }
+
+ public Property get(String propertyName) {
+
+ if (builder == null)
+ System.err.println("OH OH, builder has not been set");
+ Property p = (Property)super.get(propertyName);
+
+ if (p == null) { // if not explicit
+ p = this.builder.computeProperty(this,propertyName);
+ if (p == null) { // else inherit
+ if ((this.parentPropertyList != null)&&(this.builder.isInherited(propertyName))) { // check for parent
+ p = this.parentPropertyList.get(propertyName); // retrieve parent's value
+ } else { // default
+ try {
+ p = this.builder.makeProperty(this,propertyName);
+ } catch (FOPException e) {
+ // don't know what to do here
+ }
+ }
+ }
+ }
+ return p;
+ }
+
+ public void setBuilder(PropertyListBuilder builder) {
+ this.builder = builder;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.fo;
+
+import org.apache.fop.fo.properties.*;
+import org.apache.fop.svg.*;
+
+import org.apache.fop.apps.FOPException;
+
+import org.xml.sax.AttributeList;
+
+import java.util.Hashtable;
+
+public class PropertyListBuilder {
+
+ private Hashtable propertyTable;
+
+ public PropertyListBuilder() {
+ this.propertyTable = new Hashtable();
+
+ propertyTable.put("end-indent",EndIndent.maker());
+ propertyTable.put("page-master-name",PageMasterName.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("href",HRef.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("height",SVGLength.maker());
+ propertyTable.put("width",SVGLength.maker());
+ propertyTable.put("x",SVGLength.maker());
+ propertyTable.put("y",SVGLength.maker());
+ propertyTable.put("x1",SVGLength.maker());
+ propertyTable.put("x2",SVGLength.maker());
+ propertyTable.put("y1",SVGLength.maker());
+ propertyTable.put("y2",SVGLength.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());
+ }
+
+ public Property computeProperty(PropertyList propertyList, String propertyName) {
+
+ Property p = null;
+
+ Property.Maker propertyMaker = (Property.Maker)propertyTable.get(propertyName);
+ if (propertyMaker != null) {
+ p = propertyMaker.compute(propertyList);
+ } else {
+ System.err.println("WARNING: property " + propertyName + " ignored");
+ }
+ return p;
+ }
+
+ public boolean isInherited(String propertyName) {
+ boolean b;
+
+ Property.Maker propertyMaker = (Property.Maker)propertyTable.get(propertyName);
+ if (propertyMaker != null) {
+ b = propertyMaker.isInherited();
+ } else {
+ //System.err.println("WARNING: Unknown property " + propertyName);
+ b = true;
+ }
+ return b;
+ }
+
+ public PropertyList makeList(AttributeList attributes, PropertyList parentPropertyList) throws FOPException {
+
+ PropertyList p = new PropertyList(parentPropertyList);
+ p.setBuilder(this);
+
+ for (int i = 0; i < attributes.getLength(); i++) {
+ String attributeName = attributes.getName(i);
+ Property.Maker propertyMaker = (Property.Maker)propertyTable.get(attributeName);
+ if (propertyMaker != null) {
+ p.put(attributeName,propertyMaker.make(p,attributes.getValue(i)));
+ } else {
+ //System.err.println("WARNING: property " + attributeName + " ignored");
+ }
+ }
+
+ return p;
+ }
+
+ public Property makeProperty(PropertyList propertyList, String propertyName) throws FOPException {
+
+ Property p = null;
+
+ Property.Maker propertyMaker = (Property.Maker)propertyTable.get(propertyName);
+ if (propertyMaker != null) {
+ p = propertyMaker.make(propertyList);
+ } else {
+ System.err.println("WARNING: property " + propertyName + " ignored");
+ }
+ return p;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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(FOTreeBuilder 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, "sequence-specification",
+ SequenceSpecification.maker());
+ builder.addMapping(uri, "sequence-specifier-single",
+ SequenceSpecifierSingle.maker());
+ builder.addMapping(uri, "sequence-specifier-repeating",
+ SequenceSpecifierRepeating.maker());
+ builder.addMapping(uri, "sequence-specifier-alternating",
+ SequenceSpecifierAlternating.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, "display-sequence",
+ DisplaySequence.maker());
+ builder.addMapping(uri, "inline-sequence",
+ InlineSequence.maker());
+ builder.addMapping(uri, "display-rule", DisplayRule.maker());
+ builder.addMapping(uri, "display-graphic",
+ DisplayGraphic.maker());
+ builder.addMapping(uri, "inline-graphic",
+ InlineGraphic.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());
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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.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;
+
+ 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 {
+ // System.err.print(" 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();
+
+ if (area instanceof BlockArea) {
+ area.end();
+ }
+ if (this.isInLabel) {
+ startIndent += bodyIndent;
+ endIndent += (area.getAllocationWidth()
+ - distanceBetweenStarts - startIndent)
+ + labelSeparation;
+ }
+
+ if (this.isInListBody) {
+ startIndent += bodyIndent + distanceBetweenStarts;
+ }
+
+ 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;
+ }
+
+ 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();
+
+ 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());
+ anythingLaidOut = true;
+ return status;
+ }
+ anythingLaidOut = true;
+ }
+
+ blockArea.end();
+ area.addChild(blockArea);
+
+ /* should this be combined into above? */
+ area.increaseHeight(blockArea.getHeight());
+
+ 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);
+ }
+
+ //System.err.print(" b:OK" + marker + " ");
+ return new Status(Status.OK);
+ }
+
+ public int getAreaHeight() {
+ return blockArea.getHeight();
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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();
+ }
+
+ 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();
+
+ 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;
+ }
+ }
+ areaContainer.end();
+ if (position == Position.ABSOLUTE)
+ areaContainer.setHeight(height);
+ area.addChild(areaContainer);
+
+ return new Status(Status.OK);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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;
+import org.apache.fop.image.*;
+
+// Java
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+public class DisplayGraphic extends FObj {
+ public static class Maker extends FObj.Maker {
+ public FObj make(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ return new DisplayGraphic(parent, propertyList);
+ }
+ }
+
+ public static FObj.Maker maker() {
+ return new DisplayGraphic.Maker();
+ }
+
+ FontState fs;
+ int align;
+ int startIndent;
+ int endIndent;
+ int spaceBefore;
+ int spaceAfter;
+ String href;
+ int height;
+ int width;
+
+ ImageArea imageArea;
+
+ public DisplayGraphic(FObj parent, PropertyList propertyList) {
+ super(parent, propertyList);
+ this.name = "fo:display-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();
+
+ 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;
+ }
+
+ if ((spaceBefore != 0) && (this.marker == 0)) {
+ area.addDisplaySpace(spaceBefore);
+ }
+
+ FopImage img = FopImageFactory.Make(href, 0, 0, width, height);
+
+ this.imageArea = new ImageArea(fs,
+ img,
+ area.getAllocationWidth(),
+ img.getWidth(),
+ img.getHeight(),
+ startIndent, endIndent,
+ align);
+
+ imageArea.start();
+ imageArea.end();
+ area.addChild(imageArea);
+ area.increaseHeight(imageArea.getHeight());
+
+ if (spaceAfter != 0) {
+ area.addDisplaySpace(spaceAfter);
+ }
+
+ if (area instanceof BlockArea) {
+ area.start();
+ }
+
+ return new Status(Status.OK);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+
+public class DisplayRule extends FObj {
+
+ public static class Maker extends FObj.Maker {
+ public FObj make(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ return new DisplayRule(parent, propertyList);
+ }
+ }
+
+ public static FObj.Maker maker() {
+ return new DisplayRule.Maker();
+ }
+
+ public DisplayRule(FObj parent, PropertyList propertyList) {
+ super(parent, propertyList);
+ this.name = "fo:display-rule";
+ }
+
+ public Status layout(Area area) throws FOPException {
+ // FIXME: doesn't check to see if it will fit
+
+ 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 = 0; // not used;
+
+ 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;
+ }
+
+ 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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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) {
+ 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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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 Flow(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ super(parent, propertyList);
+ this.name = "fo:flow";
+
+ 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());
+ }
+ pageSequence.setFlow(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();
+ 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;
+ }
+ }
+ return new Status(Status.OK);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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;
+import org.apache.fop.image.*;
+
+// Java
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+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;
+
+ 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();
+
+ 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;
+ }
+
+ if ((spaceBefore != 0) && (this.marker == 0)) {
+ area.addDisplaySpace(spaceBefore);
+ }
+
+
+ FopImage img = new GifJpegImage(href, 0, 0, width, height);
+
+ this.imageArea = new ImageArea(fs,
+ img,
+ area.getAllocationWidth(),
+ img.getWidth(),
+ img.getHeight(),
+ startIndent, endIndent,
+ align);
+
+ imageArea.start();
+ imageArea.end();
+ area.addChild(imageArea);
+ area.increaseHeight(imageArea.getHeight());
+
+ if (spaceAfter != 0) {
+ area.addDisplaySpace(spaceAfter);
+ }
+
+ if (area instanceof BlockArea) {
+ area.start();
+ }
+
+ return new Status(Status.OK);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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 InlineSequence extends FObjMixed {
+
+ public static class Maker extends FObj.Maker {
+ public FObj make(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ return new InlineSequence(parent, propertyList);
+ }
+ }
+
+ public static FObj.Maker maker() {
+ return new InlineSequence.Maker();
+ }
+
+ public InlineSequence(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ super(parent, propertyList);
+ this.name = "fo:inline-sequence";
+
+ if (parent.getName().equals("fo:flow")) {
+ throw new FOPException("inline-sequence can't be directly"
+ + " under flow");
+ }
+ }
+
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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.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;
+ }
+ }
+
+ BlockArea blockArea =
+ new BlockArea(fs, area.getAllocationWidth(),
+ area.spaceLeft(), startIndent, endIndent, 0,
+ align, alignLast, lineHeight);
+ blockArea.setPage(area.getPage());
+ blockArea.setBackgroundColor(backgroundColor);
+ blockArea.start();
+
+ int numChildren = this.children.size();
+ for (int i = this.marker; i < numChildren; i++) {
+ if (!(children.elementAt(i) instanceof ListItem)) {
+ System.err.println("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());
+ return status;
+ }
+ }
+
+ blockArea.end();
+ area.addChild(blockArea);
+ area.increaseHeight(blockArea.getHeight());
+
+ if (spaceAfter != 0) {
+ area.addDisplaySpace(spaceAfter);
+ }
+
+ if (area instanceof BlockArea) {
+ area.start();
+ }
+
+ return new Status(Status.OK);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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;
+
+ 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.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();
+
+ 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) {
+ 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());
+ this.marker = 1;
+ return status;
+ }
+
+ blockArea.end();
+ area.addChild(blockArea);
+ area.increaseHeight(blockArea.getHeight());
+
+ 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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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;
+ }
+ 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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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");
+ }
+ 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;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.fo.flow;
+
+// FOP
+import org.apache.fop.fo.*;
+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)) {
+ System.err.println("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;
+ }
+ 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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+/* 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 externalDest =
+ this.properties.get("external-destination").getString();
+
+ if (this.marker == START) {
+ this.marker = 0;
+ }
+
+ // new LinkedArea to gather up inlines
+ LinkSet ls = new LinkSet(externalDest, area);
+
+ 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);
+
+ // 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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+
+ 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();
+
+ pageSequence.setStaticContent(flowName, this);
+ }
+
+ public Status layout(Area area) throws FOPException {
+ int numChildren = this.children.size();
+ for (int i = 0; i < numChildren; i++) {
+ FObj fo = (FObj) children.elementAt(i);
+ fo.layout(area);
+ }
+ resetMarker();
+ return new Status(Status.OK);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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.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;
+
+
+ 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();
+
+ if (area instanceof BlockArea) {
+ area.end();
+ }
+
+ 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);
+ }
+
+ 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();
+
+ // 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) {
+ System.err.println("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());
+ 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());
+
+ 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();
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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;
+
+ 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();
+
+ if (area instanceof BlockArea) {
+ area.end();
+ }
+
+ //if (this.isInListBody) {
+ //startIndent += bodyIndent + distanceBetweenStarts;
+ //}
+
+ this.marker = 0;
+
+ }
+
+ if ((spaceBefore != 0) && (this.marker ==0)) {
+ area.addDisplaySpace(spaceBefore);
+ }
+
+ this.areaContainer =
+ new AreaContainer(fs, -area.borderWidthLeft, -area.borderWidthTop, area.getAllocationWidth(),
+ area.spaceLeft(), Position.RELATIVE);
+ areaContainer.setPage(area.getPage());
+ areaContainer.setBackgroundColor(backgroundColor);
+ areaContainer.start();
+
+ 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());
+ return status;
+ }
+ }
+ area.addChild(areaContainer);
+ areaContainer.end();
+
+ /* should this be combined into above? */
+ area.increaseHeight(areaContainer.getHeight());
+
+ if (spaceAfter != 0) {
+ area.addDisplaySpace(spaceAfter);
+ }
+
+ if (area instanceof BlockArea) {
+ area.start();
+ }
+
+ return new Status(Status.OK);
+ }
+
+ public int getAreaHeight() {
+ return areaContainer.getHeight();
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+
+ 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();
+
+ if (area instanceof BlockArea) {
+ area.end();
+ }
+
+ //if (this.isInListBody) {
+ //startIndent += bodyIndent + distanceBetweenStarts;
+ //}
+
+ this.marker = 0;
+
+ }
+
+ if ((spaceBefore != 0) && (this.marker ==0)) {
+ area.addDisplaySpace(spaceBefore);
+ }
+
+ 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();
+
+ 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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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();
+ }
+
+ 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);
+ }
+
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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 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;
+
+ 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();
+
+ if (area instanceof BlockArea) {
+ area.end();
+ }
+
+ this.marker = 0;
+
+ }
+
+ if ((spaceBefore != 0) && (this.marker ==0)) {
+ area.addDisplaySpace(spaceBefore);
+ }
+
+ 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();
+
+ int numChildren = this.children.size();
+ if (numChildren != columns.size()) {
+ System.err.println("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.addChild(areaContainer);
+ //areaContainer.end();
+ area.addDisplaySpace(areaContainer.getHeight());
+ 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();
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.fo.pagination;
+
+// FOP
+import org.apache.fop.fo.*;
+import org.apache.fop.fo.properties.*;
+import org.apache.fop.apps.FOPException;
+
+// Java
+import java.util.Hashtable;
+
+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 layoutMasters;
+ private Root root;
+
+ protected LayoutMasterSet(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ super(parent, propertyList);
+ this.name = "fo:layout-master-set";
+
+ this.layoutMasters = 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());
+ }
+ }
+
+ protected void addLayoutMaster(String masterName, SimplePageMaster layoutMaster) {
+ this.layoutMasters.put(masterName, layoutMaster);
+ }
+
+ protected SimplePageMaster getLayoutMaster(String masterName) {
+ return (SimplePageMaster)this.layoutMasters.get(masterName);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.fo.pagination;
+
+// FOP
+import org.apache.fop.fo.*;
+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.layout.PageMasterFactory;
+import org.apache.fop.apps.FOPException;
+
+// Java
+import java.util.Hashtable;
+import java.util.Vector;
+
+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 SequenceSpecification sequenceSpecification;
+ protected Flow flow;
+ protected StaticContent staticBefore;
+ protected StaticContent staticAfter;
+ protected LayoutMasterSet layoutMasterSet;
+
+ 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";
+
+ if ( parent.getName().equals("fo:root") )
+ {
+ 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();
+ 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");
+ }
+ }
+ }
+
+ protected Page makePage(AreaTree areaTree) throws FOPException {
+ PageMaster pageMaster;
+ // layout this page sequence
+
+ // while there is still stuff in the flow, ask the
+ // sequence-specification for a new page
+
+ if ( this.sequenceSpecification == null )
+ {
+ throw new FOPException("page-sequence is missing an"
+ + " sequence-specification");
+ }
+
+ PageMasterFactory pmf =
+ this.sequenceSpecification.getFirstPageMasterFactory();
+
+ pageMaster = pmf.getNextPageMaster();
+
+ while ( pageMaster == null )
+ {
+ /* move on to next sequence specifier */
+ pmf = pmf.getNext();
+ if ( pmf == null )
+ {
+ throw new FOPException("out of sequence specifiers"
+ + " (FOP will eventually allow this)");
+ }
+ pageMaster = pmf.getNextPageMaster();
+ }
+ return pageMaster.makePage(areaTree);
+ }
+
+ public void format(AreaTree areaTree) throws FOPException {
+ Status status = new Status(Status.OK);
+
+ do
+ {
+ currentPage = makePage(areaTree);
+
+ if ( 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;
+ }
+
+ currentPage.setNumber(++this.currentPageNumber);
+ this.runningPageNumberCounter=this.currentPageNumber;
+
+ System.err.print(" [" + currentPageNumber);
+ if ( (this.staticBefore != null) &&
+ (currentPage.getBefore() != null) )
+ {
+ AreaContainer beforeArea = currentPage.getBefore();
+ this.staticBefore.layout(beforeArea);
+ }
+ if ( (this.staticAfter != null) &&
+ (currentPage.getAfter() != null) )
+ {
+ AreaContainer afterArea = currentPage.getAfter();
+ this.staticAfter.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();
+ status = this.flow.layout(bodyArea);
+ }
+ System.err.print("]");
+ areaTree.addPage(currentPage);
+ } while ( status.isIncomplete() );
+ System.err.println();
+ }
+
+ public void setFlow(Flow flow) {
+ this.flow = flow;
+ }
+
+ protected void setSequenceSpecification(SequenceSpecification sequenceSpecification) {
+ this.sequenceSpecification = sequenceSpecification;
+ sequenceSpecification.setLayoutMasterSet(this.layoutMasterSet);
+ }
+
+ public void setStaticContent(String name, StaticContent staticContent) {
+ if ( name.equals("xsl-before") )
+ {
+ this.staticBefore = staticContent;
+ }
+ else if ( name.equals("xsl-after") )
+ {
+ this.staticAfter = staticContent;
+ }
+ else
+ {
+ System.err.println("WARNING: this version of FOP only supports "
+ + "static-content in region-before and region-after");
+ }
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+
+ protected RegionAfter(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ super(parent, propertyList);
+ this.name = "fo:region-after";
+
+ 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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+
+ protected RegionBefore(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ super(parent, propertyList);
+ this.name = "fo:region-before";
+
+ 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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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();
+ }
+
+ protected RegionBody(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ super(parent, propertyList);
+ this.name = "fo:region-body";
+
+ 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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.fo.pagination;
+
+// FOP
+import org.apache.fop.fo.*;
+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;
+
+ 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 {
+ if (layoutMasterSet == null) {
+ throw new FOPException("No layout master set.");
+ }
+ Enumeration e = pageSequences.elements();
+ while (e.hasMoreElements()) {
+ ((PageSequence) e.nextElement()).format(areaTree);
+ }
+ }
+
+ public void setLayoutMasterSet(LayoutMasterSet layoutMasterSet) {
+ this.layoutMasterSet = layoutMasterSet;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.fo.pagination;
+
+// FOP
+import org.apache.fop.fo.*;
+import org.apache.fop.fo.properties.*;
+import org.apache.fop.layout.PageMasterFactory;
+import org.apache.fop.apps.FOPException;
+
+public class SequenceSpecification extends FObj {
+
+ public static class Maker extends FObj.Maker {
+ public FObj make(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ return new SequenceSpecification(parent, propertyList);
+ }
+ }
+
+ public static FObj.Maker maker() {
+ return new SequenceSpecification.Maker();
+ }
+
+ private PageSequence pageSequence;
+ private LayoutMasterSet layoutMasterSet;
+ private PageMasterFactory firstPMF;
+ private PageMasterFactory currentPMF;
+
+ protected SequenceSpecification(FObj parent,
+ PropertyList propertyList)
+ throws FOPException {
+ super(parent, propertyList);
+ this.name = "fo:sequence-specification";
+
+ if (parent.getName().equals("fo:page-sequence")) {
+ this.pageSequence = (PageSequence) parent;
+ this.pageSequence.setSequenceSpecification(this);
+ } else {
+ throw new FOPException("sequence-specification must be child"
+ + " of page-sequence, not "
+ + parent.getName());
+ }
+ this.firstPMF = null;
+ this.currentPMF = null;
+
+}
+
+ protected void addSequenceSpecifier(SequenceSpecifier sequenceSpecifier) {
+ if (this.firstPMF == null) {
+ this.firstPMF = sequenceSpecifier.getPageMasterFactory();
+ } else {
+ this.currentPMF.setNext(sequenceSpecifier.getPageMasterFactory());
+ }
+ this.currentPMF = sequenceSpecifier.getPageMasterFactory();
+ }
+
+ protected PageMasterFactory getFirstPageMasterFactory() {
+ return this.firstPMF;
+ }
+
+ LayoutMasterSet getLayoutMasterSet() {
+ return this.layoutMasterSet;
+ }
+
+ protected void setLayoutMasterSet(LayoutMasterSet layoutMasterSet) {
+ this.layoutMasterSet = layoutMasterSet;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.fo.pagination;
+
+import org.apache.fop.fo.*;
+import org.apache.fop.layout.PageMasterFactory;
+
+abstract public class SequenceSpecifier extends FObj {
+
+ protected SequenceSpecifier(FObj parent, PropertyList propertyList) {
+ super(parent, propertyList);
+ }
+
+ public abstract PageMasterFactory getPageMasterFactory();
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.fo.pagination;
+
+// FOP
+import org.apache.fop.fo.*;
+import org.apache.fop.fo.properties.*;
+import org.apache.fop.layout.PageMasterFactory;
+import org.apache.fop.layout.AlternatingPageMasterFactory;
+import org.apache.fop.layout.PageMaster;
+import org.apache.fop.apps.FOPException;
+
+public class SequenceSpecifierAlternating extends SequenceSpecifier {
+
+ public static class Maker extends FObj.Maker {
+ public FObj make(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ return new SequenceSpecifierAlternating(parent, propertyList);
+ }
+ }
+
+ public static FObj.Maker maker() {
+ return new SequenceSpecifierAlternating.Maker();
+ }
+
+ private SequenceSpecification sequenceSpecification;
+ private LayoutMasterSet layoutMasterSet;
+ private AlternatingPageMasterFactory pageMasterFactory;
+
+ protected SequenceSpecifierAlternating(FObj parent,
+ PropertyList propertyList)
+ throws FOPException {
+ super(parent, propertyList);
+ PageMaster pf, pe, po;
+
+ this.name = "fo:sequence-specifer-alternating";
+
+ if (parent.getName().equals("fo:sequence-specification")) {
+ this.sequenceSpecification = (SequenceSpecification) parent;
+ this.layoutMasterSet = this.sequenceSpecification.getLayoutMasterSet();
+ } else {
+ throw new FOPException("fo:sequence-specifier-alternating must be "
+ + " child of fo:sequence-specification, not "
+ + parent.getName());
+ }
+
+ String pageMasterFirst = this.properties.get("page-master-first").getString();
+ String pageMasterOdd = this.properties.get("page-master-odd").getString();
+ String pageMasterEven = this.properties.get("page-master-even").getString();
+
+ try {
+ pf = this.layoutMasterSet.getLayoutMaster(pageMasterFirst).getPageMaster();
+ pe = this.layoutMasterSet.getLayoutMaster(pageMasterEven).getPageMaster();
+ po = this.layoutMasterSet.getLayoutMaster(pageMasterOdd).getPageMaster();
+ this.pageMasterFactory = new AlternatingPageMasterFactory(pf,pe,po);
+ } catch (java.lang.NullPointerException e) {
+ throw new FOPException("at least one of the page-master names in"
+ + " sequence-specifier-alternating is not in"
+ + " layout-master-set");
+ }
+ this.sequenceSpecification.addSequenceSpecifier(this);
+ }
+
+ public PageMasterFactory getPageMasterFactory() {
+ return this.pageMasterFactory;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.fo.pagination;
+
+// FOP
+import org.apache.fop.fo.*;
+import org.apache.fop.fo.properties.*;
+import org.apache.fop.layout.PageMasterFactory;
+import org.apache.fop.layout.RepeatingPageMasterFactory;
+import org.apache.fop.layout.PageMaster;
+import org.apache.fop.apps.FOPException;
+
+public class SequenceSpecifierRepeating extends SequenceSpecifier {
+
+ public static class Maker extends FObj.Maker {
+ public FObj make(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ return new SequenceSpecifierRepeating(parent, propertyList);
+ }
+ }
+
+ public static FObj.Maker maker() {
+ return new SequenceSpecifierRepeating.Maker();
+ }
+
+ private SequenceSpecification sequenceSpecification;
+ private LayoutMasterSet layoutMasterSet;
+ private RepeatingPageMasterFactory pageMasterFactory;
+
+ protected SequenceSpecifierRepeating(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ super(parent, propertyList);
+ PageMaster pf, pr;
+
+ this.name = "fo:sequence-specifer-repeating";
+
+ if (parent.getName().equals("fo:sequence-specification")) {
+ this.sequenceSpecification = (SequenceSpecification) parent;
+ this.layoutMasterSet = this.sequenceSpecification.getLayoutMasterSet();
+ } else {
+ throw new FOPException("sequence-specifier-repeating must be "
+ + "child of fo:sequence-specification, "
+ + "not " + parent.getName());
+ }
+
+ String pageMasterFirst = this.properties.get("page-master-first").getString();
+ String pageMasterRepeating = this.properties.get("page-master-repeating").getString();
+ try {
+ pf = this.layoutMasterSet.getLayoutMaster(pageMasterFirst).getPageMaster();
+ pr = this.layoutMasterSet.getLayoutMaster(pageMasterRepeating).getPageMaster();
+ this.pageMasterFactory = new RepeatingPageMasterFactory(pf, pr);
+ } catch (java.lang.NullPointerException e) {
+ throw new FOPException("at least one of the page-master names in "
+ + "sequence-specifier-repeating is not in "
+ + "layout-master-set");
+ }
+ this.sequenceSpecification.addSequenceSpecifier(this);
+ }
+
+ public PageMasterFactory getPageMasterFactory() {
+ return this.pageMasterFactory;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.fo.pagination;
+
+// FOP
+import org.apache.fop.fo.*;
+import org.apache.fop.fo.properties.*;
+import org.apache.fop.layout.PageMasterFactory;
+import org.apache.fop.layout.SinglePageMasterFactory;
+import org.apache.fop.layout.PageMaster;
+import org.apache.fop.apps.FOPException;
+
+public class SequenceSpecifierSingle extends SequenceSpecifier {
+
+ public static class Maker extends FObj.Maker {
+ public FObj make(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ return new SequenceSpecifierSingle(parent, propertyList);
+ }
+ }
+
+ public static FObj.Maker maker() {
+ return new SequenceSpecifierSingle.Maker();
+ }
+
+ private SequenceSpecification sequenceSpecification;
+ private LayoutMasterSet layoutMasterSet;
+ private SinglePageMasterFactory pageMasterFactory;
+
+ protected SequenceSpecifierSingle(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ super(parent, propertyList);
+ this.name = "fo:sequence-specifer-single";
+
+ if (parent.getName().equals("fo:sequence-specification")) {
+ this.sequenceSpecification = (SequenceSpecification) parent;
+ this.layoutMasterSet = this.sequenceSpecification.getLayoutMasterSet();
+ } else {
+ throw new FOPException("sequence-specifier-single must be "
+ + "child of fo:sequence-specification, "
+ + "not " + parent.getName());
+ }
+
+ String pageMasterName = this.properties.get("page-master-name").getString();
+ try {
+ this.pageMasterFactory = new SinglePageMasterFactory(this.layoutMasterSet.getLayoutMaster(pageMasterName).getPageMaster());
+ } catch (java.lang.NullPointerException e) {
+ throw new FOPException("page-master-name " +
+ pageMasterName + " must be in layout-master-set");
+ }
+ this.sequenceSpecification.addSequenceSpecifier(this);
+ }
+
+ public PageMasterFactory getPageMasterFactory() {
+ return this.pageMasterFactory;
+ }
+
+ public String getPageMasterName() {
+ return this.properties.get("page-master-name").getString();
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+
+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;
+
+ LayoutMasterSet layoutMasterSet;
+ PageMaster pageMaster;
+
+ protected SimplePageMaster(FObj parent, PropertyList propertyList)
+ throws FOPException {
+ super(parent, propertyList);
+ this.name = "fo:simple-page-master";
+
+ if (parent.getName().equals("fo:layout-master-set")) {
+ this.layoutMasterSet = (LayoutMasterSet) parent;
+ String pm = this.properties.get("page-master-name").getString();
+ if (pm == null) {
+ System.err.println("WARNING: simple-page-master does not have "
+ + "a page-master-name and so is being ignored");
+ } else {
+ this.layoutMasterSet.addLayoutMaster(pm, this);
+ }
+ } 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));
+ }
+
+ PageMaster getPageMaster() {
+ return this.pageMaster;
+ }
+
+ protected void setRegionAfter(RegionAfter region) {
+ this.regionAfter = region;
+ }
+
+ protected void setRegionBefore(RegionBefore region) {
+ this.regionBefore = region;
+ }
+
+ protected void setRegionBody(RegionBody region) {
+ this.regionBody = region;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+/* modified by JKT to integrate into 0.12.0 */
+
+//Title: BoBoGi FOP
+//Version:
+//Copyright: Copyright (c) 1999
+//Author: Sergio Botti
+//Company: Dibe Elsag
+//Description: xml to pdf converter
+
+package org.apache.fop.image;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class BmpBwImage implements FopImage {
+ int X;
+ int Y;
+ int width;
+ int height;
+ int pixelwidth;
+ int pixelheight;
+ String ref;
+ boolean color;
+ int bitperpixel;
+ int[] imagemap;
+ int imagestart;
+ /*
+ Costructor read the header of the bmp file to get the size
+ and the other data
+ SB
+ */
+ public BmpBwImage(String href,int x,int y,int w,int h)
+ {
+ this.ref=href;
+ this.X=x;
+ this.Y=y;
+
+ int wpos=18;
+ int hpos=22; //offset positioning for w and height in bmp files
+ int [] headermap = new int[54];
+ try{
+ FileInputStream file=new FileInputStream(ref);
+ boolean eof=false;
+ int count=0;
+ while ((!eof) && (count<54) ) {
+ int input =file.read();
+ if (input==-1)
+ eof=true;
+ else
+ headermap[count++]=input;
+ }
+ file.close();
+ }catch (IOException e) {System.err.println("Image not found");}
+ // gets h & w from headermap
+ this.pixelwidth = headermap[wpos]+headermap[wpos+1]*256+headermap[wpos+2]*256*256+headermap[wpos+3]*256*256*256;
+ this.pixelheight = headermap[hpos]+headermap[hpos+1]*256+headermap[hpos+2]*256*256+headermap[hpos+3]*256*256*256;
+ if (w==0)
+ this.width=this.pixelwidth*1000;
+ else
+ this.width=w;
+ if (h==0)
+ this.height=this.pixelheight*1000;
+ else
+ this.height=h;
+
+ this.imagestart =headermap[10]+headermap[11]*256+headermap[12]*256*256+headermap[13]*256*256*256;
+ this.bitperpixel=headermap[28];
+ }
+
+ public String gethref() { return this.ref; }
+ public int getWidth() { return this.width; }
+ public int getHeight() { return this.height; }
+ public int getpixelwidth() { return this.pixelwidth; }
+ public int getpixelheight() { return this.pixelheight; }
+ public int getX(){ return this.X; }
+ public int getY(){ return this.Y; }
+
+ public int[] getimagemap(){
+ int input;
+ int[] temp = new int[nextfourdiv(this.pixelwidth)*(this.pixelheight)];
+ try {
+ FileInputStream file = new FileInputStream(this.ref);
+ int count = 0;
+ file.skip((long) this.imagestart);
+ while ((input = file.read()) != -1) {
+ temp[count++] = input;
+ }
+ file.close();
+ } catch (IOException e) {
+ System.err.println("Image not found");
+ }
+ int[] map = new int[this.pixelheight * this.pixelwidth];
+ int k = 0;
+ for (int y = 0; y < this.pixelheight; y++) {
+ for (int x = 0; x < this.pixelwidth; x++)
+ map[k++] = temp[y * nextfourdiv(this.pixelwidth) + x];
+ }
+ return map;
+ }
+
+ public boolean getcolor(){return false;}
+ public int getbitperpixel() {return this.bitperpixel;}
+
+ private int nextfourdiv(int number) {
+ return ((number/4)+1)*4;
+ }
+
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+/* modified by JKT to integrate into 0.12.0 */
+
+//Title: BoBoGi FOP
+//Version:
+//Copyright: Copyright (c) 1999
+//Author: Sergio Botti
+//Company: Dibe Elsag
+//Description: xml to pdf converter
+
+package org.apache.fop.image;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class BmpColImage implements FopImage {
+ int X;
+ int Y;
+ int width;
+ int height;
+ int pixelwidth;
+ int pixelheight;
+ String ref;
+ boolean color=true;
+ int bitperpixel;
+ int[] imagemap;
+ int imagestart;
+ /*
+ Costructor read the header of the bmp file to get the size
+ and the other data
+ SB
+ */
+public BmpColImage(String href,int x,int y,int w,int h)
+{
+ this.ref=href;
+ this.X=x;
+ this.Y=y;
+
+ int wpos=18;
+ int hpos=22; //offset positioning for w and height in bmp files
+ int [] headermap = new int[54];
+ try{
+ FileInputStream file=new FileInputStream(ref);
+ boolean eof=false;
+ int count=0;
+ while ((!eof) && (count<54) ) {
+ int input =file.read();
+ if (input==-1)
+ eof=true;
+ else
+ headermap[count++]=input;
+ }
+ file.close();
+ }catch (IOException e) {System.err.println("Image not found");}
+ // gets h & w from headermap
+ this.pixelwidth = headermap[wpos]+headermap[wpos+1]*256+headermap[wpos+2]*256*256+headermap[wpos+3]*256*256*256;
+ this.pixelheight = headermap[hpos]+headermap[hpos+1]*256+headermap[hpos+2]*256*256+headermap[hpos+3]*256*256*256;
+ if (w==0)
+ this.width=this.pixelwidth*1000;
+ else
+ this.width=w;
+ if (h==0)
+ this.height=this.pixelheight*1000;
+ else
+ this.height=h;
+
+ this.imagestart =headermap[10]+headermap[11]*256+headermap[12]*256*256+headermap[13]*256*256*256;
+ this.bitperpixel=headermap[28];
+}
+
+ public String gethref() { return this.ref; }
+ public int getWidth() { return this.width; }
+ public int getHeight() { return this.height; }
+ public int getpixelwidth() { return this.pixelwidth; }
+ public int getpixelheight() { return this.pixelheight; }
+ public int getX(){ return this.X; }
+ public int getY(){ return this.Y; }
+
+ public int[] getimagemap(){
+ int[] temp = new int[nextfourdiv(this.pixelwidth*3)*(this.pixelheight)];
+ try{
+ FileInputStream file=new FileInputStream(this.ref);
+ boolean eof=false;
+ int count=0;
+ file.skip((long)this.imagestart);
+ while (!eof) {
+ int input = file.read();
+ if (input==-1) {
+ eof=true;
+ } else {
+ temp[count++]=input;
+ }
+ }
+ file.close();
+ } catch (IOException e) {
+ System.err.println("Image not found");
+ }
+
+ int[] map =new int[this.pixelheight*this.pixelwidth*3];
+ int k=0;
+
+ for (int y=0;y<this.pixelheight;y++) {
+ for (int x=0;x<(this.pixelwidth);x++) {
+ map[k++]=temp[y*nextfourdiv(this.pixelwidth*3)+x*3+2];
+ map[k++]=temp[y*nextfourdiv(this.pixelwidth*3)+x*3+1];
+ map[k++]=temp[y*nextfourdiv(this.pixelwidth*3)+x*3];
+
+ //map[k++]=temp[y*nextfourdiv(this.pixelwidth*3)+x];
+ }
+ }
+ return map;
+ }
+
+
+ public boolean getcolor(){return true;}
+ public int getbitperpixel() {return this.bitperpixel;}
+
+ //
+ private int nextfourdiv(int number) {
+ int n = number;
+ while((n%4)!=0) {
+ n++;
+ }
+ return n;
+ }
+
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+/* modified by JKT to integrate into 0.12.0 */
+
+//Title: BoBoGi FOP
+//Version:
+//Copyright: Copyright (c) 1999
+//Author: Sergio Botti
+//Company: Dibe Elsag
+//Description: Part in xml to pdf converter
+
+
+package org.apache.fop.image;
+
+public interface FopImage {
+ public int getpixelwidth();
+ public int getpixelheight();
+ public int getWidth();
+ public int getHeight();
+ public int getX();
+ public int getY();
+ public String gethref();
+ public int[] getimagemap();
+ public boolean getcolor();
+ public int getbitperpixel();
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+/* modified by JKT to integrate into 0.12.0 */
+
+//Title: BoBoGi FOP
+//Version: x
+//Copyright: Copyright (c) 1999
+//Author: Sergio Botti
+//Company: Dibe Elsag
+//Description: xml to pdf converter
+
+
+package org.apache.fop.image;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+
+public class FopImageFactory {
+
+ public static FopImage Make(String ref,int x,int y, int width, int height) {
+
+
+ int colorpos=28; //offset positioning for w and height in bmp files
+ int [] headermap = new int[54];
+ try{
+ FileInputStream file=new FileInputStream(ref);
+ boolean eof=false;
+ int count=0;
+ while ((!eof) && (count<54) ) {
+ int input =file.read();
+ if (input==-1)
+ eof=true;
+ else
+ headermap[count++]=input;
+ }
+ file.close();
+ } catch (IOException e) {System.err.println("Image not found");}
+ int bpp=headermap[28];
+ if (bpp==8) {
+ return (new BmpBwImage(ref,x,y,width,height));
+ } else if (bpp==24) {
+ return (new BmpColImage(ref,x,y,width,height));
+ }
+ System.err.println("Unsupported bmp format");
+
+ return null;
+
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+/* originally contributed by Sergio Botti, with modifications by James
+ Tauber and Kelly Campbell */
+
+package org.apache.fop.image;
+
+import java.util.Hashtable;
+import java.net.URL;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.awt.image.*;
+import java.awt.Image;
+import java.awt.Toolkit;
+
+public class GifJpegImage implements FopImage {
+
+ int X;
+ int Y;
+ int width;
+ int height;
+ int pixelwidth;
+ int pixelheight;
+ String ref;
+ boolean color = true;
+ int bitperpixel = 8;
+ int[] imagemap;
+ int[] tempmap;
+
+ /** synchronization object */
+ protected Integer imageWait = new Integer(0);
+
+ public GifJpegImage(String href, int x, int y, int w, int h) {
+
+ this.ref = href;
+ this.X = x;
+ this.Y = y;
+ this.pixelheight = -1;
+ this.pixelwidth = -1;
+
+ try {
+ URL url = new URL(href);
+ ImageProducer ip = (ImageProducer)url.getContent();
+ FopImageConsumer consumer = new FopImageConsumer(this);
+ ip.startProduction(consumer);
+ synchronized (imageWait) {
+ imageWait.wait();
+ }
+
+ while ((this.pixelheight = consumer.getHeight())==-1) {}
+ while ((this.pixelwidth = consumer.getWidth())==-1) {}
+
+ this.tempmap = new int[this.pixelwidth * this.pixelheight];
+
+ PixelGrabber pg = new
+ PixelGrabber(ip, 0, 0,
+ this.pixelwidth, this.pixelheight,
+ this.tempmap, 0, this.pixelwidth);
+ try {
+ pg.grabPixels();
+ } catch (InterruptedException e) {
+ System.err.println("Image grabbing interrupted");
+ }
+ } catch (ClassCastException e) {
+ System.err.println("Image format not supported: " + href);
+ } catch (Exception e) {
+ System.err.println("Error loading image " + href +
+ " : " + e);
+ }
+
+ if (w==0) {
+ this.width=this.pixelwidth*1000;
+ } else {
+ this.width=w;
+ }
+
+ if (h==0) {
+ this.height=this.pixelheight*1000;
+ } else {
+ this.height=h;
+ }
+ }
+
+ public static class FopImageConsumer implements ImageConsumer {
+ int width = -1;
+ int height = -1;
+ GifJpegImage graphic;
+
+ public FopImageConsumer(GifJpegImage graphic) {
+ this.graphic = graphic;
+ }
+
+ public void imageComplete(int status) {
+ synchronized(graphic.imageWait) {
+ graphic.imageWait.notifyAll();
+ }
+ }
+
+ public void setColorModel(ColorModel model) {}
+
+ public void setDimensions(int width, int height) {
+ this.width = width;
+ this.height = height;
+ }
+
+ public void setHints(int hintflags) {}
+
+ 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 void setProperties(Hashtable props) {}
+
+ public int getWidth() {
+ return this.width;
+ }
+
+ public int getHeight() {
+ return this.height;
+ }
+ }
+
+ public String gethref() {
+ return this.ref;
+ }
+
+ public int getWidth() {
+ return this.width;
+ }
+
+ public int getHeight() {
+ return this.height;
+ }
+
+ public int getpixelwidth() {
+ return this.pixelwidth;
+ }
+
+ public int getpixelheight() {
+ return this.pixelheight;
+ }
+
+ public int getX() {
+ return this.X;
+ }
+
+ public int getY() {
+ return this.Y;
+ }
+
+ public int[] getimagemap() {
+ this.imagemap=new int[this.pixelheight * this.pixelwidth * 3];
+ int count = 0;
+ int x = 0;
+ int y = 0;
+
+ for ( y = (this.pixelheight - 1) * this.pixelwidth; y >= 0; y -= this.pixelwidth) {
+ for ( x = 0; x < this.pixelwidth; x++) {
+
+ int p = this.tempmap[y + x];
+
+ this.imagemap[count++] = ((p >>16) & 0xff);
+ this.imagemap[count++] = ((p >> 8) & 0xff);
+ this.imagemap[count++] = (p & 0xff);
+ }
+ }
+ return imagemap;
+ }
+
+ public boolean getcolor() {
+ return true;
+ }
+
+ public int getbitperpixel() {
+ return this.bitperpixel;
+ }
+}
+
+
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+/* 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;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.layout;
+
+public class AlternatingPageMasterFactory extends PageMasterFactory {
+
+ private PageMaster pageMasterFirst;
+ private PageMaster pageMasterEven;
+ private PageMaster pageMasterOdd;
+
+ private static final int FIRST = 0;
+ private static final int EVEN = 1;
+ private static final int ODD = 2;
+
+ private int state;
+
+ public AlternatingPageMasterFactory(PageMaster first, PageMaster even, PageMaster odd) {
+ this.pageMasterFirst = first;
+ this.pageMasterEven = even;
+ this.pageMasterOdd = odd;
+ this.state = FIRST;
+ }
+
+ public int getHeight() {
+ return this.pageMasterFirst.getHeight();
+ }
+
+ public PageMaster getNextPageMaster() {
+ PageMaster pm;
+
+ switch (this.state) {
+ case EVEN: pm = this.pageMasterEven; this.state = ODD; break;
+ case ODD: pm = this.pageMasterOdd; this.state = EVEN; break;
+ default: pm = this.pageMasterFirst; this.state = EVEN;
+ }
+
+ return pm;
+ }
+
+ public int getWidth() {
+ return this.pageMasterFirst.getWidth();
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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;
+
+ protected int contentRectangleWidth;
+
+ protected int allocationWidth;
+
+ /* the page this area is on */
+ protected Page page;
+
+ protected ColorType backgroundColor;
+
+ 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.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 void increaseHeight(int amount) {
+ this.currentHeight += amount;
+ }
+
+ protected void removeChild(Area area) {
+ this.currentHeight -= 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;
+ if (currentHeight > getMaxHeight())
+ currentHeight = getMaxHeight();
+ }
+
+ public void setMaxHeight(int height) {
+ this.maxHeight = height;
+ }
+
+ public Area getParent() {
+ return this.parent;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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 int getYPosition() {
+ return yPosition + this.paddingTop + this.borderWidthTop;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+
+// 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();
+
+ 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;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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 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;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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);
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.layout;
+
+import java.util.Hashtable;
+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");
+ }
+ System.err.println("WARNING: defaulted font to any,normal,normal");
+ }
+ System.err.println("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));
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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);
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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 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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.layout;
+
+import org.apache.fop.render.Renderer;
+
+public class InlineArea extends Area {
+
+ private String text;
+ 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;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.layout;
+
+import org.apache.fop.render.Renderer;
+
+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
+
+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 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 addText(char data[], int start, int end, LinkSet ls) {
+ boolean overrun = false;
+
+ wordStart = start;
+ wordLength = 0;
+ wordWidth = 0;
+
+ /* iterate over each character */
+ for (int i = start; i < end; i++) {
+ int charWidth;
+ /* get the character */
+ char c = data[i];
+
+ if (c > 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 {
+ System.err.print("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(startIndent +
+ finalWidth,
+ 0,
+ inlineArea.getContentWidth(),
+ lineHeight);
+ 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(startIndent +
+ finalWidth,
+ 0,
+ ia.getContentWidth(),
+ lineHeight);
+ ls.addRect(lr, this);
+ }
+ finalWidth += wordWidth;
+
+ // reset word width
+ wordWidth = 0;
+ }
+
+ // deal with this new whitespace following the
+ // word we just added
+
+ prev = WHITESPACE;
+
+ 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)
+ System.err.print(">");
+ 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(startIndent + finalWidth + spaceWidth,
+ spaceWidth,
+ pia.getContentWidth(),
+ lineHeight);
+ ls.addRect(lr, this);
+ }
+
+ pendingAreas.addElement(pia);
+ pendingWidth += wordWidth;
+ wordWidth = 0;
+ }
+
+ if (overrun)
+ System.err.print(">");
+ 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.CENTERED: // center
+ padding = (this.getContentWidth() - finalWidth)/2;
+ startIndent += padding;
+ endIndent += padding;
+ break;
+ case TextAlign.JUSTIFIED: // 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;
+ }
+
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+/* 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 externalDestination;
+
+ /** the set of rectangles */
+ Vector rects = new Vector();
+
+ private int xoffset = 0;
+ private int yoffset = 0;
+
+ protected int startIndent;
+ protected int endIndent;
+
+ private Area area;
+
+ // property required for alignment adjustments
+ int contentRectangleWidth = 0;
+
+ public LinkSet(String externalDest, Area area) {
+ this.externalDestination = externalDest;
+ this.area = area;
+ }
+
+ public void addRect(Rectangle r, LineArea lineArea) {
+ LinkedRectangle linkedRectangle =
+ new LinkedRectangle(r, lineArea);
+ linkedRectangle.setY(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) {
+ Enumeration re = rects.elements();
+ while (re.hasMoreElements()) {
+ LinkedRectangle r = (LinkedRectangle)re.nextElement();
+ r.setX( r.getX() + ac.getXPosition() );
+ r.setY( ac.getYPosition() - ac.getHeight() - r.getY() );
+ }
+ }
+
+ // 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.externalDestination;
+ }
+
+ public Vector getRects() {
+ return this.rects;
+ }
+
+ public int getEndIndent() {
+ return endIndent;
+ }
+
+ public int getStartIndent() {
+ return startIndent;
+ }
+
+ public Area getArea() {
+ return area;
+ }
+}
--- /dev/null
+/*--
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ endorse or promote products derived from this software without prior
+ written permission. For written permission, please contact
+ apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ 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/>.
+
+ */
+
+/* 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;
+ }
+
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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();
+
+ 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());
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.layout;
+
+abstract public class PageMasterFactory {
+
+ private PageMasterFactory next;
+
+ abstract public int getHeight();
+
+ abstract public int getWidth();
+
+ public PageMasterFactory getNext() {
+ return this.next;
+ }
+
+ abstract public PageMaster getNextPageMaster();
+
+ public void setNext(PageMasterFactory pmf) {
+ this.next = pmf;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.layout;
+
+public class RepeatingPageMasterFactory extends PageMasterFactory {
+
+ private PageMaster pageMasterFirst;
+ private PageMaster pageMasterRepeating;
+
+ private static final int FIRST = 0;
+ private static final int REST = 1;
+
+ private int state;
+
+ public RepeatingPageMasterFactory(PageMaster first, PageMaster repeating) {
+ this.pageMasterFirst = first;
+ this.pageMasterRepeating = repeating;
+ this.state = FIRST;
+ }
+
+ public int getHeight() {
+ return this.pageMasterFirst.getHeight();
+ }
+
+ public PageMaster getNextPageMaster() {
+ PageMaster pm;
+
+ switch (this.state) {
+ case REST: pm = this.pageMasterRepeating; this.state = REST; break;
+ default: pm = this.pageMasterFirst; this.state = REST;
+ }
+
+ return pm;
+ }
+
+ public int getWidth() {
+ return this.pageMasterFirst.getWidth();
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.layout;
+
+public class SinglePageMasterFactory extends PageMasterFactory {
+
+ private PageMaster pageMaster;
+
+ private static final int FIRST = 0;
+ private static final int DONE = 1;
+
+ private int state;
+
+ public SinglePageMasterFactory(PageMaster pageMaster) {
+ this.pageMaster = pageMaster;
+ this.state = FIRST;
+ }
+
+ public int getHeight() {
+ return this.pageMaster.getHeight();
+ }
+
+ public PageMaster getNextPageMaster() {
+ PageMaster pm;
+
+ switch (this.state) {
+ case FIRST: pm = this.pageMaster; this.state = DONE; break;
+ default: pm = null;
+ }
+
+ return pm;
+ }
+ public int getWidth() {
+ return this.pageMaster.getWidth();
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.layout;
+
+abstract public class Space extends Box {
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.pdf;
+
+/**
+ * class representing a /Action object.
+ */
+public class PDFAction extends PDFObject {
+
+ /** the file specification */
+ protected PDFFileSpec fileSpec;
+
+ /**
+ * create an /Action object.
+ *
+ * @param number the object's number
+ * @param fileSpec the fileSpec associated with the action
+ */
+ public PDFAction(int number, PDFFileSpec fileSpec) {
+
+ /* generic creation of object */
+ super(number);
+
+ this.fileSpec = fileSpec;
+ }
+
+ /**
+ * 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 " + fileSpec.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
+ */
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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
+ */
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+ }
+
+ 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 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
+
+ //output RGB
+ if(fillNotStroke)
+ { //fill
+ p.append(pdfNumber.doubleOut(this.red)+" "
+ +pdfNumber.doubleOut(this.green)+" "
+ +pdfNumber.doubleOut(this.blue)+" "
+ +" rg \n");
+ }
+ else
+ {//stroke/border
+ 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
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+/* 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.datatypes.ColorSpace;
+
+// Java
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Vector;
+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 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();
+
+ /**
+ * 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()-2;
+
+
+ //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) {
+ PDFXObject xObject = new PDFXObject(++this.objectcount,
+ ++this.xObjectCount, img);
+ this.objects.addElement(xObject);
+ this.xObjects.addElement(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) {
+
+ /* create a PDFPage with the next object number, the given
+ resources, contents and dimensions */
+ PDFPage page = new PDFPage(++this.objectcount, resources,
+ contents,
+ pagewidth, pageheight);
+
+ /* 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
+ *
+ * @return the PDFLink object created
+ */
+ public PDFLink makeLink(Rectangle rect, String destination) {
+
+ PDFLink link = new PDFLink(++this.objectcount, rect);
+ this.objects.addElement(link);
+
+ PDFFileSpec fileSpec = new PDFFileSpec(++this.objectcount,
+ destination);
+ this.objects.addElement(fileSpec);
+
+ PDFAction action = new PDFAction(++this.objectcount,
+ fileSpec);
+ this.objects.addElement(action);
+ link.setAction(action);
+
+ 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();
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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
+ */
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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 <vectorSize; tempInt++)
+ {
+ p.append("/"+((String)this.filter.elementAt(0))+" ");
+ }
+ p.append("] \n");
+ }
+ }
+ p.append(">> \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());
+
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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.referencePDF() + "\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
+ */
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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();
+ 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(".");
+ p.append(doubleString.substring(0, decimal));
+
+ if ((doubleString.length() - decimal) > 6)
+ {
+ p.append(doubleString.substring(decimal,decimal+6));
+ }
+ else
+ {
+ p.append(doubleString.substring(decimal));
+ }
+ }
+ return(p.toString());
+ }
+
+ public String doubleOut(double doubleDown)
+ {
+
+ StringBuffer p = new StringBuffer();
+ 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(".");
+ p.append(doubleString.substring(0, decimal));
+
+ if ((doubleString.length() - decimal) > 6)
+ {
+ p.append(doubleString.substring(decimal,decimal+6));
+ }
+ else
+ {
+ p.append(doubleString.substring(decimal));
+ }
+ }
+ return(p.toString());
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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
+ }
+ /**
+ * 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
+ */
+ protected String referencePDF() {
+ String p = this.number + " " + this.generation + " R";
+ return p;
+ }
+
+ /**
+ * represent object as PDF
+ *
+ * @return PDF string
+ */
+ abstract String toPDF();
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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();
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.pdf;
+
+// Java
+import java.io.PrintWriter;
+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++;
+ // System.out.println("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();
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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());
+ }
+
+}
+
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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());
+
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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();
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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());
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+/* modified by JKT to integrate with 0.12.0 */
+
+package org.apache.fop.pdf;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+// shouldn't have to do this
+import org.apache.fop.image.*;
+
+/**
+ * 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[] map;
+ 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)
+ System.err.println("FISH");
+ this.map = img.getimagemap();
+ fopimage=img;
+ }
+
+ /**
+ * represent as PDF
+ */
+ protected int output(PrintWriter writer) throws IOException {
+ int length=0;
+ int i=0;
+ int x,y;
+ int ncc=(fopimage.getcolor()? 3 : 1);//Number of Color Channels
+ int size=(fopimage.getpixelwidth())*(fopimage.getpixelheight()*ncc);
+ String p;
+ String pdf = this.toPDF();
+ // push the pdf dictionary on the writer
+ writer.write(pdf);
+ length +=pdf.length();
+ p = (size*2+1) + " >>\n";
+ p = p + "stream\n";
+ writer.write(p);
+ length +=p.length();
+ // push all the image data on the writer and takes care of length for trailer
+ for (y=fopimage.getpixelheight()-1;y>=0;y--)
+ {
+ for (x=0;x<fopimage.getpixelwidth()*ncc;x++)
+ {
+ i=y*fopimage.getpixelwidth()*ncc+x;
+ if (this.map[i]<16)
+ {
+ writer.write("0");
+ writer.write(Integer.toHexString(this.map[i]));
+ length++;
+ length++;
+ }else
+ {
+ writer.write(Integer.toHexString(this.map[i]));
+ length++;
+ length++;
+ }
+ }
+ }
+ // close the object
+ p = ">";
+ p += "\nendstream\nendobj\n";
+ writer.write(p);
+ length +=p.length();
+ return length;
+ }
+
+ String toPDF() {
+ String p = this.number + " " + this.generation + " obj\n";
+ p = p + "<</Type /XObject\n";
+ p = p + "/Subtype /Image\n";
+ p = p + "/Name /Im"+Xnum+"\n";
+ p = p + "/Width "+fopimage.getpixelwidth()+"\n";
+ p = p + "/Height "+fopimage.getpixelheight()+"\n";
+ p = p + "/BitsPerComponent 8\n";
+ if (fopimage.getcolor())
+ p = p + "/ColorSpace /DeviceRGB\n";
+ else
+ p = p + "/ColorSpace /DeviceGray\n";
+ p = p + "/Filter /ASCIIHexDecode\n";
+ p = p + "/Length ";
+ return p;
+ }
+}
--- /dev/null
+<HTML>
+<TITLE>org.apache.fop.pdf Package</TITLE>
+<BODY>
+<P>Classes for handling the low-level creation of PDF documents</P>
+<P>These classes were developed for FOP, but could be used by other
+applications wishing to produce PDF.</P>
+</BODY>
+</HTML>
\ No newline at end of file
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.render;
+
+// FOP
+import org.apache.fop.svg.SVGArea;
+import org.apache.fop.image.ImageArea;
+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;
+
+ /** 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 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);
+}
--- /dev/null
+
+
+package org.apache.fop.render.awt;
+
+/*
+ originally contributed by
+ Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
+ Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
+ Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
+ */
+
+import org.apache.fop.layout.*;
+import org.apache.fop.datatypes.*;
+import org.apache.fop.image.*;
+import org.apache.fop.svg.*;
+import org.apache.fop.render.pdf.*;
+import org.apache.fop.viewer.*;
+import org.apache.fop.apps.*;
+import org.apache.fop.render.Renderer;
+
+import java.awt.*;
+import java.awt.image.*;
+import java.awt.geom.*;
+import java.awt.font.*;
+import java.util.*;
+import java.io.*;
+import java.beans.*;
+import javax.swing.*;
+import java.awt.print.*;
+import java.awt.image.BufferedImage;
+
+
+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.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.fill3DRect((int) (x/1000f), pageHeight - (int) (y/1000f),
+ (int) (w/1000f), -(int) (h/1000f),false);
+ }
+
+ /**
+ * 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);
+ }
+
+ /**
+ * Vor dem Druck einzustellen:
+ *
+ * Seite/Seiten wählen
+ * Zoomfaktor
+ * Seitenformat / Quer- oder Hoch
+ **/
+ 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) {
+ // 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);
+ }
+ }
+
+ 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) {
+ System.out.println("area.getImage() is null");
+ }
+
+ int[] map = img.getimagemap();
+
+ String path = img.gethref();
+
+ 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;
+ }
+
+ 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();
+ this.currentYPosition -= h;
+
+// Enumeration e = area.getChildren().elements();
+// while (e.hasMoreElements()) {
+// Object o = e.nextElement();
+// if (o instanceof RectGraphic) {
+// int rx = ((RectGraphic)o).x;
+// int ry = ((RectGraphic)o).y;
+// int rw = ((RectGraphic)o).width;
+// int rh = ((RectGraphic)o).height;
+// addRect(x+rx,y-ry,rw,-rh,0,0,0);
+// } else if (o instanceof LineGraphic) {
+// int x1 = ((LineGraphic)o).x1;
+// int y1 = ((LineGraphic)o).y1;
+// int x2 = ((LineGraphic)o).x2;
+// int y2 = ((LineGraphic)o).y2;
+// addLine(x+x1,y-y1,x+x2,y-y2,0,0,0,0);
+// } else if (o instanceof TextGraphic) {
+// int tx = ((TextGraphic)o).x;
+// int ty = ((TextGraphic)o).y;
+// String s = ((TextGraphic)o).s;
+// currentStream.add("1 0 0 1 "
+// + ((x+tx)/1000f) + " "
+// + ((y-ty)/1000f) + " Tm "
+// + "(" + s + ") Tj\n");
+// }
+// }
+ }
+
+ 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());
+ }
+
+}
+
--- /dev/null
+<HTML>
+<TITLE>org.apache.fop.render Package</TITLE>
+<BODY>
+<P>generic renderer interface</P>
+</BODY>
+</HTML>
\ No newline at end of file
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+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();
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.render.pdf;
+
+// FOP
+import org.apache.fop.render.pdf.fonts.*;
+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) {
+ System.err.println("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());
+
+ /* 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");
+
+ /* 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()
+ )
+ );
+ }
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.render.pdf;
+
+// FOP
+import org.apache.fop.render.Renderer;
+import org.apache.fop.image.ImageArea;
+import org.apache.fop.image.FopImage;
+import org.apache.fop.fo.properties.*;
+import org.apache.fop.layout.*;
+import org.apache.fop.datatypes.*;
+import org.apache.fop.svg.*;
+import org.apache.fop.pdf.*;
+
+// Java
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+import java.awt.Rectangle;
+import java.util.Vector;
+
+/**
+ * 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 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;
+
+ /**
+ * 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 {
+ System.err.println("rendering areas to PDF");
+ this.pdfResources = this.pdfDoc.getResources();
+ Enumeration e = areaTree.getPages().elements();
+ while (e.hasMoreElements()) {
+ this.renderPage((Page) e.nextElement());
+ }
+ System.err.println("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 stroke the stroke color/gradient
+ */
+ protected void addLine(int x1, int y1, int x2, int y2, int th,
+ PDFPathPaint stroke) {
+
+ currentStream.add(stroke.getColorSpaceOut(false)
+ + (x1/1000f) + " " + (y1/1000f) + " m "
+ + (x2/1000f) + " " + (y2/1000f) + " l "
+ + (th/1000f) + " w S\n"
+ + "0 0 0 RG\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(stroke.getColorSpaceOut(false)
+ + (x/1000f) + " " + (y/1000f) + " "
+ + (w/1000f) + " " + (h/1000f) + " re S\n"
+ + "0 0 0 RG\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(fill.getColorSpaceOut(true)
+ + stroke.getColorSpaceOut(false)
+ + (x/1000f) + " " + (y/1000f) + " "
+ + (w/1000f) + " " + (h/1000f) + " re S\n"
+ + (x/1000f) + " " + (y/1000f) + " "
+ + (w/1000f) + " " + (h/1000f) + " re f\n"
+ + "0 0 0 RG 0 0 0 rg\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;
+ }
+
+ 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" + (img.getWidth()/1000f) + " 0 0 " +
+ (img.getHeight()/1000f) + " " +
+ ((x + img.getX())/1000f) + " " +
+ (((y - h) - img.getY())/1000f) + " cm\n" +
+ "/Im" + xObjectNum + " Do\nQ\nBT\n");
+ }
+
+ /**
+ * render SVG area to PDF
+ *
+ * @param area the SVG area to render
+ */
+ public void renderSVGArea(SVGArea area) {
+ int x = this.currentAreaContainerXPosition;
+ int y = this.currentYPosition;
+ int w = area.getContentWidth();
+ int h = area.getHeight();
+ this.currentYPosition -= h;
+ Enumeration e = area.getChildren().elements();
+ while (e.hasMoreElements()) {
+ Object o = e.nextElement();
+ if (o instanceof RectGraphic) {
+ int rx = ((RectGraphic)o).x;
+ int ry = ((RectGraphic)o).y;
+ int rw = ((RectGraphic)o).width;
+ int rh = ((RectGraphic)o).height;
+ addRect(x+rx,y-ry,rw,-rh,new PDFColor(0,0,0));
+ } else if (o instanceof LineGraphic) {
+ int x1 = ((LineGraphic)o).x1;
+ int y1 = ((LineGraphic)o).y1;
+ int x2 = ((LineGraphic)o).x2;
+ int y2 = ((LineGraphic)o).y2;
+ addLine(x+x1,y-y1,x+x2,y-y2,0,new PDFColor(0,0,0));
+ } else if (o instanceof TextGraphic) {
+ int tx = ((TextGraphic)o).x;
+ int ty = ((TextGraphic)o).y;
+ String s = ((TextGraphic)o).s;
+ currentStream.add("1 0 0 1 "
+ + ((x+tx)/1000f) + " "
+ + ((y-ty)/1000f) + " Tm "
+ + "(" + s + ") Tj\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 = 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();
+ b.render(this);
+ }
+
+ this.currentYPosition = ry-h;
+ }
+
+ /**
+ * 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);
+
+ 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();
+ Enumeration f = linkSet.getRects().elements();
+ while (f.hasMoreElements()) {
+ LinkedRectangle lrect = (LinkedRectangle) f.nextElement();
+ currentAnnotList.addLink(
+ this.pdfDoc.makeLink(lrect.getRectangle(), dest));
+ }
+ }
+ } 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);
+ }
+}
+
--- /dev/null
+<HTML>
+<TITLE>org.apache.fop.render.pdf.fonts Package</TITLE>
+<BODY>
+<P>PDF font information/metrics</P>
+<P>Generated entirely from XML files.</P>
+</BODY>
+</HTML>
\ No newline at end of file
--- /dev/null
+<HTML>
+<TITLE>org.apache.fop.render.pdf Package</TITLE>
+<BODY>
+<P>classes for rendering to PDF</P>
+</BODY>
+</HTML>
\ No newline at end of file
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.render.xml;
+
+// FOP
+import org.apache.fop.svg.*;
+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 {
+ System.err.println("rendering areas to XML");
+ this.writer = writer;
+ this.writer.write("<?xml version=\"1.0\"?>\n<!-- produced by "
+ + this.producer + " -->\n");
+ writeStartTag("<AreaTree>");
+ Enumeration e = areaTree.getPages().elements();
+ while (e.hasMoreElements()) {
+ this.renderPage((Page) e.nextElement());
+ }
+ writeEndTag("</AreaTree>");
+ this.writer.flush();
+ System.err.println("written out XML");
+ }
+
+ /**
+ * write out spaces to make indent
+ */
+ protected void writeIndent() {
+ StringBuffer s = new StringBuffer();
+ for (int i= 0; i<this.indent; i++) {
+ s = s.append(" ");
+ }
+ this.writer.write(s.toString());
+ }
+
+ /**
+ * write out an element
+ *
+ * @param element the full text of the element including tags
+ */
+ protected void writeElement(String element) {
+ writeIndent();
+ this.writer.write(element+"\n");
+ }
+
+ /**
+ * write out an empty-element-tag
+ *
+ * @param tag the text of the tag
+ */
+ protected void writeEmptyElementTag(String tag) {
+ writeIndent();
+ this.writer.write(tag + "\n");
+ }
+
+ /**
+ * write out an end tag
+ *
+ * @param tag the text of the tag
+ */
+ protected void writeEndTag(String tag) {
+ this.indent--;
+ writeIndent();
+ this.writer.write(tag + "\n");
+ }
+
+ /**
+ * write out a start tag
+ *
+ * @param tag the text of the tag
+ */
+ protected void writeStartTag(String tag) {
+ writeIndent();
+ this.writer.write(tag + "\n");
+ this.indent++;
+ }
+
+ /**
+ * set up the font info
+ *
+ * @param fontInfo the font info object to set up
+ */
+ public void setupFontInfo(FontInfo fontInfo) {
+
+ /* use PDF's font setup to get PDF metrics */
+ org.apache.fop.render.pdf.FontSetup.setup(fontInfo);
+ }
+
+ /**
+ * render an area container to XML
+ *
+ * @param area the area container to render
+ */
+ public void renderAreaContainer(AreaContainer area) {
+ writeStartTag("<AreaContainer>");
+ Enumeration e = area.getChildren().elements();
+ while (e.hasMoreElements()) {
+ Box b = (Box) e.nextElement();
+ b.render(this);
+ }
+ writeEndTag("</AreaContainer>");
+ }
+
+ /**
+ * render a block area to XML
+ *
+ * @param area the block area to render
+ */
+ public void renderBlockArea(BlockArea area) {
+ writeStartTag("<BlockArea start-indent=\""
+ + area.getStartIndent()
+ + "\" end-indent=\""
+ + area.getEndIndent() + "\">");
+ Enumeration e = area.getChildren().elements();
+ while (e.hasMoreElements()) {
+ Box b = (Box) e.nextElement();
+ b.render(this);
+ }
+ writeEndTag("</BlockArea>");
+ }
+
+ /**
+ * render a display space to XML
+ *
+ * @param space the space to render
+ */
+ public void renderDisplaySpace(DisplaySpace space) {
+ writeEmptyElementTag("<DisplaySpace size=\""
+ + space.getSize() +"\"/>");
+ }
+
+ /**
+ * render an SVG area to XML
+ *
+ * @param area the area to render
+ */
+ public void renderSVGArea(SVGArea area) {
+ writeEmptyElementTag("<SVG/>");
+ }
+
+ /**
+ * render an image area to XML
+ *
+ * @param area the area to render
+ */
+ public void renderImageArea(ImageArea area) {
+ writeEmptyElementTag("<ImageArea/>");
+ }
+
+ /**
+ * 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("<InlineArea font-weight=\""
+ + fontWeight + "\" red=\""
+ + area.getRed() + "\" green=\""
+ + area.getGreen() + "\" blue = \""
+ + area.getBlue() + " width = \""
+ + area.getContentWidth() + "\">" + sb.toString()
+ + "</InlineArea>");
+ }
+
+ /**
+ * render an inline space to XML
+ *
+ * @param space the space to render
+ */
+ public void renderInlineSpace(InlineSpace space) {
+ writeEmptyElementTag("<InlineSpace size=\""
+ + space.getSize() +"\"/>");
+ }
+
+ /**
+ * render a line area to XML
+ *
+ * @param area the area to render
+ */
+ public void renderLineArea(LineArea area) {
+ String fontWeight = area.getFontState().getFontWeight();
+ writeStartTag("<LineArea font-weight=\""
+ + fontWeight + "\">");
+ Enumeration e = area.getChildren().elements();
+ while (e.hasMoreElements()) {
+ Box b = (Box)e.nextElement();
+ b.render(this);
+ }
+ writeEndTag("</LineArea>");
+ }
+
+ /**
+ * render a page to XML
+ *
+ * @param page the page to render
+ */
+ public void renderPage(Page page) {
+ AreaContainer body, before, after;
+ writeStartTag("<Page>");
+ body = page.getBody();
+ before = page.getBefore();
+ after = page.getAfter();
+ if (before != null) {
+ renderAreaContainer(before);
+ }
+ renderAreaContainer(body);
+ if (after != null) {
+ renderAreaContainer(after);
+ }
+ writeEndTag("</Page>");
+ }
+
+ /**
+ * render a rule area to XML
+ *
+ * @param area the area to render
+ */
+ public void renderRuleArea(RuleArea area) {
+ writeEmptyElementTag("<Rule start-indent=\""
+ + area.getStartIndent()
+ + "\" end-indent=\""
+ + area.getEndIndent()
+ + "\" rule-thickness=\""
+ + area.getRuleThickness()
+ + "\" red=\"" + area.getRed()
+ + "\" green=\"" + area.getGreen()
+ + "\" blue = \"" + area.getBlue()
+ + "\"/>");
+ }
+}
--- /dev/null
+<HTML>
+<TITLE>org.apache.fop.render.xml Package</TITLE>
+<BODY>
+<P>classes for rendering to XML for debugging</P>
+</BODY>
+</HTML>
\ No newline at end of file
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.svg;
+
+/**
+ * base class for SVG graphic objects.
+ *
+ * Graphic objects include rectangles, lines and text
+ */
+public abstract class Graphic {}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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.FontState;
+import org.apache.fop.apps.FOPException;
+
+/**
+ * class representing svg:line pseudo flow object.
+ */
+public class Line extends FObj {
+
+ /**
+ * 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";
+ }
+
+ /**
+ * 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 {
+
+ /* retrieve properties */
+ int x1 = this.properties.get("x1").getLength().mvalue();
+ int x2 = this.properties.get("x2").getLength().mvalue();
+ int y1 = this.properties.get("y1").getLength().mvalue();
+ int y2 = this.properties.get("y2").getLength().mvalue();
+
+ /* if the area this is being put into is an SVGArea */
+ if (area instanceof SVGArea) {
+ /* add a line to the SVGArea */
+ ((SVGArea) area).addGraphic(new LineGraphic(x1, y1, x2, y2));
+ } else {
+ /* otherwise generate a warning */
+ System.err.println("WARNING: svg:line outside svg:svg");
+ }
+
+ /* return status */
+ return new Status(Status.OK);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.svg;
+
+/**
+ * class representing a line in an SVG Area
+ */
+public class LineGraphic extends Graphic {
+
+ /** x-coordinate of start */
+ public int x1;
+
+ /** y-coordinate of start */
+ public int y1;
+
+ /** x-coordinate of end */
+ public int x2;
+
+ /** y-coordinate of end */
+ public int 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 LineGraphic(int x1, int y1, int x2, int y2) {
+ this.x1 = x1;
+ this.y1 = y1;
+ this.x2 = x2;
+ this.y2 = y2;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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.FontState;
+import org.apache.fop.apps.FOPException;
+
+/**
+ * class representing svg:rect pseudo flow object.
+ */
+public class Rect extends FObj {
+
+ /**
+ * 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";
+ }
+
+ /**
+ * 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 {
+
+ /* retrieve properties */
+ int width = this.properties.get("width").getLength().mvalue();
+ int height = this.properties.get("height").getLength().mvalue();
+ int x = this.properties.get("x").getLength().mvalue();
+ int y = this.properties.get("y").getLength().mvalue();
+
+ /* if the area this is being put into is an SVGArea */
+ if (area instanceof SVGArea) {
+ /* add a rectangle to the SVGArea */
+ ((SVGArea) area).addGraphic(new RectGraphic(x, y, width, height));
+ } else {
+ /* otherwise generate a warning */
+ System.err.println("WARNING: svg:rect outside svg:svg");
+ }
+
+ /* return status */
+ return new Status(Status.OK);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.svg;
+
+/**
+ * class representing a rectangle in an SVG Area
+ */
+public class RectGraphic extends Graphic {
+
+ /** x-coordinate of corner */
+ public int x;
+
+ /** y-coordinate of corner */
+ public int y;
+
+ /** width of rectangle */
+ public int width;
+
+ /** height of rectangle */
+ public int 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 RectGraphic(int x, int y, int width, int height) {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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.BlockArea;
+import org.apache.fop.layout.FontState;
+import org.apache.fop.apps.FOPException;
+
+/**
+ * class representing svg:svg pseudo flow object.
+ */
+public class SVG 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 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;
+ int breakBefore;
+ int breakAfter;
+ int width;
+ int height;
+ int spaceBefore;
+ int spaceAfter;
+
+ /**
+ * 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";
+ }
+
+ /**
+ * 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 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.width = this.properties.get("width").getLength().mvalue();
+ this.height = this.properties.get("height").getLength().mvalue();
+
+ this.spaceBefore =
+ this.properties.get("space-before.optimum").getLength().mvalue();
+ this.spaceAfter =
+ this.properties.get("space-after.optimum").getLength().mvalue();
+ /* if the SVG is embedded in a block area */
+ if (area instanceof BlockArea) {
+ /* temporarily end the block area */
+ area.end();
+ }
+
+ 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 there is a space-before */
+ if (spaceBefore != 0) {
+ /* add a display space */
+ area.addDisplaySpace(spaceBefore);
+ }
+
+ /* create an SVG area */
+ SVGArea svgArea = new SVGArea(fs, width, height);
+ svgArea.start();
+
+ /* add the SVG area to the containing area */
+ area.addChild(svgArea);
+
+ /* iterate over the child formatting objects and lay them out
+ into the SVG area */
+ int numChildren = this.children.size();
+ for (int i = 0; i < numChildren; i++) {
+ FONode fo = (FONode) children.elementAt(i);
+ Status status;
+ if ((status = fo.layout(svgArea)).isIncomplete()) {
+ return status;
+ }
+ }
+
+ /* finish off the SVG area */
+ svgArea.end();
+
+ /* increase the height of the containing area accordingly */
+ area.increaseHeight(svgArea.getHeight());
+
+ /* if there is a space-after */
+ if (spaceAfter != 0) {
+ /* add a display space */
+ area.addDisplaySpace(spaceAfter);
+ }
+
+ /* if the SVG 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);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.svg;
+
+// FOP
+import org.apache.fop.render.Renderer;
+import org.apache.fop.layout.FontState;
+import org.apache.fop.layout.Area;
+
+/**
+ * class representing an SVG area in which the SVG graphics sit
+ */
+public class SVGArea extends Area {
+
+ /**
+ * 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, int width, int height) {
+ super(fontState, width, height);
+ currentHeight = height;
+ contentRectangleWidth = width;
+ }
+
+ /**
+ * add a graphic.
+ *
+ * Graphics include SVG Rectangles, Lines and Text
+ *
+ * @param graphic the Graphic to add
+ */
+ public void addGraphic(Graphic graphic) {
+ this.children.addElement(graphic);
+ }
+
+ /**
+ * render the SVG.
+ *
+ * @param renderer the Renderer to use
+ */
+ public void render(Renderer renderer) {
+ renderer.renderSVGArea(this);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.svg;
+
+import org.apache.fop.fo.FOTreeBuilder;
+import org.apache.fop.fo.ElementMapping;
+
+public class SVGElementMapping implements ElementMapping {
+
+ public void addToBuilder(FOTreeBuilder builder) {
+ String uri = "http://www.w3.org/Graphics/SVG/SVG-19990812.dtd";
+ builder.addMapping(uri, "svg", SVG.maker());
+ builder.addMapping(uri, "rect", Rect.maker());
+ builder.addMapping(uri, "line", Line.maker());
+ builder.addMapping(uri, "text", Text.maker());
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.svg;
+
+// FOP
+import org.apache.fop.fo.*;
+import org.apache.fop.datatypes.*;
+import org.apache.fop.apps.FOPException;
+
+/**
+ * a class representing all the length properties in SVG
+ */
+public class SVGLength 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 SVGLength(propertyList, new Length(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, "0pt");
+ }
+ }
+
+ /**
+ * returns the maker for this object.
+ *
+ * @return the maker for SVG Length objects
+ */
+ public static Property.Maker maker() {
+ return new SVGLength.Maker();
+ }
+
+ /** the length as a Length object */
+ protected Length 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 SVGLength(PropertyList propertyList, Length explicitValue) {
+ this.propertyList = propertyList;
+ this.value = explicitValue;
+ }
+
+ /**
+ * get the length
+ *
+ * @return the length as a Length object
+ */
+ public Length getLength() {
+ return this.value;
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+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.FontState;
+import org.apache.fop.apps.FOPException;
+
+/**
+ * class representing svg:text pseudo flow object.
+ */
+public class Text extends FObjMixed {
+
+ /**
+ * 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
+ */
+ protected String text = "";
+
+ /**
+ * 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";
+ }
+
+ /**
+ * 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);
+ }
+
+ /**
+ * 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 {
+
+ /* retrieve properties */
+ int x = this.properties.get("x").getLength().mvalue();
+ int y = this.properties.get("y").getLength().mvalue();
+
+ /* if the area this is being put into is an SVGArea */
+ if (area instanceof SVGArea) {
+ /* add the text to the SVGArea */
+ ((SVGArea) area).addGraphic(new TextGraphic(x, y, text));
+ } else {
+ /* otherwise generate a warning */
+ System.err.println("WARNING: svg:text outside svg:svg");
+ }
+
+ /* return status */
+ return new Status(Status.OK);
+ }
+}
--- /dev/null
+/*-- $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 <jtauber@jtauber.com>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+package org.apache.fop.svg;
+
+/**
+ * class representing text in an SVG Area
+ */
+public class TextGraphic extends Graphic {
+
+ /** x-coordinate of text */
+ public int x;
+
+ /** y-coordinate of text */
+ public int y;
+
+ /** the text string itself */
+ public String s;
+
+ /**
+ * construct a text graphic
+ *
+ * @param x x-coordinate of text
+ * @param y y-coordinate of text
+ * @param s the text string
+ */
+ public TextGraphic(int x, int y, String s) {
+ this.x = x;
+ this.y = y;
+ this.s = s;
+ }
+}
--- /dev/null
+<HTML>
+<TITLE>org.apache.fop.svg Package</TITLE>
+<BODY>
+<P>Classes that add basic SVG support to FOP</P>
+<P>This includes flow objects, areas and properties.</P>
+</BODY>
+</HTML>
\ No newline at end of file
--- /dev/null
+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 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.<br>
+ * <code>Commands</code> unterstützen mehrsprachigkeit.<br>
+ * Durch überschreiben der Methode <code>doit<code> kann die Klasse customisiert werden.
+ * Über die Methode <code>undoit</code> kann Undo-Funktionalität unterstützt werden.<br>
+ *
+ * @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) {
+ System.err.println("Icon not found: " + path);
+ }
+ else
+ putValue(SMALL_ICON, new ImageIcon(url));
+ }
+
+
+ public void actionPerformed(ActionEvent e) {
+ doit();
+ }
+
+ public void doit() {
+ System.err.println("Not implemented.");
+ }
+
+ public void undoit() {
+ System.err.println("Not implemented.");
+ }
+}
--- /dev/null
+package org.apache.fop.viewer;
+
+/*
+ originally contributed by
+ Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
+ Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
+ Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
+ */
+
+
+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;
+ }
+}
+
+
--- /dev/null
+package org.apache.fop.viewer;
+
+import java.io.*;
+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@af-software.de
+ *
+ */
+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 {
+ System.out.println(getClass().getName() + ": load(): invalid line " +
+ str + "." + " Character '=' missed.");
+ return false;
+ }
+ }
+
+ private String getNextLine(BufferedReader br) {
+ try {
+ return br.readLine();
+ } catch (Exception e) {
+ return null;
+ }
+
+ }
+
+
+}
--- /dev/null
+package org.apache.fop.viewer;
+
+import java.lang.Exception;
+
+/**
+ * Die Klasse <code>MessageException</code> 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@af-software.de
+ * @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;
+ }
+}
--- /dev/null
+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 <code>MessagesDialog</code> dient der Anzeige von Meldungen.
+ * Die Klasse erweitert <code>JOptionPane</code> um die Möglichkeit, auf Knopfdruck
+ * eine Detailanzeige einzublenden, in der z.B. bei Fehlern der StackTrace ausgegeben
+ * werden kann.
+ *
+ * @author Juergen.Verwohlt@af-software.de
+ * @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;
+ }
+}
--- /dev/null
+package org.apache.fop.viewer;
+
+/*
+ originally contributed by
+ Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
+ Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
+ Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
+ */
+
+
+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.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 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();
+ 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);
+ }
+} // class PreviewDialog
+
--- /dev/null
+
+package org.apache.fop.viewer;
+
+/*
+ originally contributed by
+ Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
+ Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
+ Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
+ */
+
+
+
+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();
+ }
+ }
+}
+
--- /dev/null
+package org.apache.fop.viewer;
+
+/*
+ originally contributed by
+ Juergen Verwohlt: Juergen.Verwohlt@af-software.de,
+ Rainer Steinkuhle: Rainer.Steinkuhle@af-software.de,
+ Stanislav Gorkhover: Stanislav.Gorkhover@af-software.de
+ */
+
+
+
+public interface ProgressListener {
+ public void progress(int percentage);
+ public void progress(String message);
+ public void progress(int percentage, String message);
+}
+
--- /dev/null
+package org.apache.fop.viewer;
+
+import java.util.*;
+import java.io.*;
+
+
+/**
+ * Die Klasse <code>SecureResourceBundle</code> ist ein Resourceundle, das im Falle eines fehlenden
+ * Eintrages keinen Absturz verursacht, sondern die Meldung
+ * <strong>Key <i>key</i> not found</strong> zurückgibt.
+ * @see PropertyResourceBundle
+ *
+ * @author Stanislav.Gorkhover@af-software.de
+ * @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 <strong>in</strong>.
+ */
+
+ public SecureResourceBundle(InputStream in) {
+ try {
+ lookup.load(in);
+ } catch(Exception ex) {
+ System.out.println("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 <strong>null</strong> wird nie zurückgegeben.
+ * Schreibt die fehlenden Suchschlüssel in die Protokoll-Datei.
+ * @return <code>Object</code><UL>
+ * <LI>den zu dem Suchschlüssel <strong>key</strong> gefundenen Wert, falls vorhanden, <br>
+ * <LI>Meldung <strong>Key <i>key</i> not found</strong>, falls der Suchschlüssel fehlt
+ * und die Eigenschaft "jCatalog.DevelopmentStartModus" in der ini-Datei aus true gesetzt ist.
+ * <LI>Meldung <strong>Key is null</strong>, falls der Suchschlüssel <code>null</code> ist.
+ * </UL>
+ *
+ */
+ 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) {
+ System.out.println(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 "<!" + str + "!>";
+ }
+
+ public boolean isSourceFound() {
+ return isSourceFound;
+ }
+
+}
\ No newline at end of file
--- /dev/null
+package org.apache.fop.viewer;
+
+
+/**
+ * Definition für die Übersetzer-Klassen.
+ *
+ * @version 03.12.99
+ * @author Stanislav.Gorkhover@af-software.de
+ *
+ */
+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
--- /dev/null
+package org.apache.fop.viewer;
+
+import java.awt.*;
+import java.io.*;
+import java.awt.event.*;
+import java.util.*;
+import javax.swing.*;
+import javax.swing.JComponent.*;
+
+
+
+/**
+ * Klasse <code>UserMessage</code> ist ein utility zum Abfragen oder zum Informieren des Benutzers.<br>
+ * 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@af-software.de
+ * @subject Weitere Ausgabemethoden: show(String, String) und show(String,String,Frame)
+ *
+ * @changed 28.05.99 Juergen.Verwohlt@af-software.de
+ * @subject MessageException unterstützen
+ *
+ * @changed 09.06.99 Juergen.Verwohlt@af-software.de
+ * @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) {
+ System.out.println("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) {
+ System.out.println("prepareMessage(): " + rawText + ", parameter: " + par);
+ int index = rawText.indexOf(PARAMETER_TAG);
+ String composedMess = "";
+ if ((index == -1) && (par == null)) return rawText;
+ if ((index != -1) && (par == null)) {
+ System.out.println("Message " + actMessId+ " erwartet Parameter. Aufgerufen ohne Parameter");
+ return rawText;
+ }
+ if ((index == -1) && (par != null)) {
+ System.out.println("Message " + actMessId + " erwartet keine Parameter. Aufgerufen mit folgenden Parametern:");
+ for(int i = 0; i < par.length; ++i)
+ System.out.println(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) {
+ System.out.println("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)
+ System.out.println("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) {
+ System.out.println("FALSCHES FORMAT: MESSAGE: " + textID);
+ }
+ }
+ else { // Message not found
+ System.out.println("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
+ System.out.println("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 <code>frame</code>.
+ * @param <UL>
+ * <LI> textID - Suchschlüssel der Meldung im Meldungspool,
+ * <LI> param - Array der in die Meldung einzusetztenden Parameter,
+ * <LI> frame - das Fenster, zu dem der Dialog modal ist.
+ * </UL>
+ * @return <UL>
+ * <LI> -1 wenn keine Rückgabe möglich ist oder Dialog NICHT MODAL ist.
+ * <LI> ButtonDialog.YES = 2
+ * <LI> ButtonDialog.NO = 4
+ * <LI> ButtonDialog.CANCEL = 8
+ * <LI> Wird das Dialog-Fenster ohne Buttonklick geschlossen (Kreuzchen oben rechts), so ist die Rückgabe gleich ButtonDialog.CANCEL.
+ * </UL>
+ */
+ 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);
+ }
+
+}
+
--- /dev/null
+###############################################################################
+#
+# 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:
+# <MESSAGE_ID>=<iconType>:<buttonType>:<Meldungstext>
+#
+# 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
+
--- /dev/null
+###############################################################################
+#
+# 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:
+# =======
+# <MESSAGE_ID>=<iconType>:<buttonType>:<message text>
+#
+#
+# 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.
+
--- /dev/null
+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
+
--- /dev/null
+# 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.
--- /dev/null
+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
+
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
+
--- /dev/null
+File=Ôàéë
+Exit=Çàêîí÷èòü
+View=Âèä
+First page=Ïåðâàÿ ñòðàíèöà
+Previous page=Ïðåäûäóùàÿ ñòðàíèöà
+Next page=Ñëåäóþùàÿ ñòðàíèöà
+Last page=Ïîñëåäíÿÿ ñòðàíèöà
+Help=Ïîìîùü
+Default zoom=Ñòàíäàðòíûé ìàñøòàá
+Introduction=Ââåäåíèå
+About=Î ïðîãðàììå
+Show=Ïîêàç
+Preview=Ïðîñìîòð
+Print=Ïå÷àòàòü
+Page=Ñòðàíèöà
+of=èç
+Zoom=Ìàñøòàá
+Close=Çàêðûòü
--- /dev/null
+<HTML>
+<TITLE>FOP Overview</TITLE>
+<BODY>
+<P>FOP is an XSL formatter and renderer that works with an XSLT transformer to
+produce PDF (and eventually other output formats) from XML documents.</P>
+
+<P>To get an overview of the FOP process, begin with the class <A HREF="org/apache/fop/apps/Driver.html">org.apache.fop.apps.Driver</A>.</P>
+</BODY>
+</HTML>
\ No newline at end of file