]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
PR:
authorjtauber <jtauber@unknown>
Tue, 16 Nov 1999 14:21:50 +0000 (14:21 +0000)
committerjtauber <jtauber@unknown>
Tue, 16 Nov 1999 14:21:50 +0000 (14:21 +0000)
Obtained from:
Submitted by:
Reviewed by:

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193223 13f79535-47bb-0310-9956-ffa450edef68

108 files changed:
src/org/apache/fop/apps/CommandLine.java
src/org/apache/fop/apps/Driver.java
src/org/apache/fop/apps/ErrorHandler.java
src/org/apache/fop/apps/FOPException.java
src/org/apache/fop/apps/Version.java
src/org/apache/fop/apps/XTCommandLine.java
src/org/apache/fop/apps/package.html
src/org/apache/fop/datatypes/ColorType.java
src/org/apache/fop/datatypes/Length.java
src/org/apache/fop/datatypes/package.html
src/org/apache/fop/fo/ElementMapping.java
src/org/apache/fop/fo/FONode.java
src/org/apache/fop/fo/FOText.java
src/org/apache/fop/fo/FOTreeBuilder.java
src/org/apache/fop/fo/FObj.java
src/org/apache/fop/fo/FObjMixed.java
src/org/apache/fop/fo/Property.java
src/org/apache/fop/fo/PropertyList.java
src/org/apache/fop/fo/PropertyListBuilder.java
src/org/apache/fop/fo/StandardElementMapping.java
src/org/apache/fop/fo/flow/Block.java
src/org/apache/fop/fo/flow/DisplayGraphic.java
src/org/apache/fop/fo/flow/DisplayRule.java
src/org/apache/fop/fo/flow/DisplaySequence.java
src/org/apache/fop/fo/flow/Flow.java
src/org/apache/fop/fo/flow/InlineSequence.java
src/org/apache/fop/fo/flow/ListBlock.java
src/org/apache/fop/fo/flow/ListItem.java
src/org/apache/fop/fo/flow/ListItemBody.java
src/org/apache/fop/fo/flow/ListItemLabel.java
src/org/apache/fop/fo/flow/PageNumber.java
src/org/apache/fop/fo/flow/StaticContent.java
src/org/apache/fop/fo/flow/Table.java
src/org/apache/fop/fo/flow/TableBody.java
src/org/apache/fop/fo/flow/TableCell.java
src/org/apache/fop/fo/flow/TableColumn.java
src/org/apache/fop/fo/flow/TableRow.java
src/org/apache/fop/fo/pagination/LayoutMasterSet.java
src/org/apache/fop/fo/pagination/PageSequence.java
src/org/apache/fop/fo/pagination/RegionAfter.java
src/org/apache/fop/fo/pagination/RegionBefore.java
src/org/apache/fop/fo/pagination/RegionBody.java
src/org/apache/fop/fo/pagination/Root.java
src/org/apache/fop/fo/pagination/SequenceSpecification.java
src/org/apache/fop/fo/pagination/SequenceSpecifier.java
src/org/apache/fop/fo/pagination/SequenceSpecifierAlternating.java
src/org/apache/fop/fo/pagination/SequenceSpecifierRepeating.java
src/org/apache/fop/fo/pagination/SequenceSpecifierSingle.java
src/org/apache/fop/fo/pagination/SimplePageMaster.java
src/org/apache/fop/image/BmpBwImage.java
src/org/apache/fop/image/BmpColImage.java
src/org/apache/fop/image/FopImage.java
src/org/apache/fop/image/FopImageFactory.java
src/org/apache/fop/image/GifJpegImage.java
src/org/apache/fop/image/ImageArea.java
src/org/apache/fop/layout/AlternatingPageMasterFactory.java
src/org/apache/fop/layout/Area.java
src/org/apache/fop/layout/AreaContainer.java
src/org/apache/fop/layout/AreaTree.java
src/org/apache/fop/layout/BlockArea.java
src/org/apache/fop/layout/Box.java
src/org/apache/fop/layout/DisplaySpace.java
src/org/apache/fop/layout/FontInfo.java
src/org/apache/fop/layout/FontMetric.java
src/org/apache/fop/layout/FontState.java
src/org/apache/fop/layout/InlineArea.java
src/org/apache/fop/layout/InlineSpace.java
src/org/apache/fop/layout/LineArea.java
src/org/apache/fop/layout/Page.java
src/org/apache/fop/layout/PageMaster.java
src/org/apache/fop/layout/PageMasterFactory.java
src/org/apache/fop/layout/Region.java
src/org/apache/fop/layout/RepeatingPageMasterFactory.java
src/org/apache/fop/layout/RuleArea.java
src/org/apache/fop/layout/SinglePageMasterFactory.java
src/org/apache/fop/layout/Space.java
src/org/apache/fop/pdf/PDFDocument.java
src/org/apache/fop/pdf/PDFFont.java
src/org/apache/fop/pdf/PDFInfo.java
src/org/apache/fop/pdf/PDFObject.java
src/org/apache/fop/pdf/PDFPage.java
src/org/apache/fop/pdf/PDFPages.java
src/org/apache/fop/pdf/PDFResources.java
src/org/apache/fop/pdf/PDFRoot.java
src/org/apache/fop/pdf/PDFStream.java
src/org/apache/fop/pdf/PDFXObject.java
src/org/apache/fop/pdf/package.html
src/org/apache/fop/render/Renderer.java
src/org/apache/fop/render/package.html
src/org/apache/fop/render/pdf/Font.java
src/org/apache/fop/render/pdf/FontSetup.java
src/org/apache/fop/render/pdf/PDFRenderer.java
src/org/apache/fop/render/pdf/fonts/package.html
src/org/apache/fop/render/pdf/package.html
src/org/apache/fop/render/xml/XMLRenderer.java
src/org/apache/fop/render/xml/package.html
src/org/apache/fop/svg/Graphic.java
src/org/apache/fop/svg/Line.java
src/org/apache/fop/svg/LineGraphic.java
src/org/apache/fop/svg/Rect.java
src/org/apache/fop/svg/RectGraphic.java
src/org/apache/fop/svg/SVG.java
src/org/apache/fop/svg/SVGArea.java
src/org/apache/fop/svg/SVGElementMapping.java
src/org/apache/fop/svg/SVGLength.java
src/org/apache/fop/svg/Text.java
src/org/apache/fop/svg/TextGraphic.java
src/org/apache/fop/svg/package.html

index b453e120f9ef707f500ac28ad4ba7f02f3c480e0..ffba2f6958e0cd70e9edb0501d7dc210f05171f0 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.apps;
+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 XP).
+
  * 
+
  */
+
 public class CommandLine {
 
+
+
     /**
+
      * creates a SAX parser, using the value of org.xml.sax.parser
+
      * defaulting to com.jclark.xml.sax.Driver 
+
      *
+
      * @return the created SAX parser
+
      */
+
     static Parser createParser() {
+
        String parserClassName =
+
            System.getProperty("org.xml.sax.parser");
+
        if (parserClassName == null) {
+
            parserClassName = "com.jclark.xml.sax.Driver";
+
        }
+
        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.xml.fop.apps.CommandLine "
+
+                              + "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.xml.fop.render.pdf.PDFRenderer", version);
-           driver.addElementMapping("org.apache.xml.fop.fo.StandardElementMapping");
-           driver.addElementMapping("org.apache.xml.fop.svg.SVGElementMapping");
+
+           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);
+
        }
+
     }
+
 }
+
index e038b893e22fd59c6148d398762aec40ab9f85a4..e163405fba820402cd442f1750bd6987be35420a 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.apps;
+package org.apache.fop.apps;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.FOTreeBuilder;
-import org.apache.xml.fop.fo.ElementMapping; 
-import org.apache.xml.fop.layout.AreaTree;
-import org.apache.xml.fop.layout.FontInfo;
-import org.apache.xml.fop.render.Renderer;
+
+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;
 
+
+
 public class Driver {
 
+
+
     protected FOTreeBuilder treeBuilder;
+
     protected AreaTree areaTree;
+
     protected Renderer renderer;
+
     protected PrintWriter writer;
 
+
+
     public Driver() {
+
        this.treeBuilder = new FOTreeBuilder();
+
     }
+
    
+
     public void setRenderer(Renderer renderer) {
+
        this.renderer = renderer;
+
     }
 
+
+
     public void setRenderer(String rendererClassName, String producer) {
+
        this.renderer = createRenderer(rendererClassName);
+
        this.renderer.setProducer(producer);
+
     }
 
+
+
     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;
+
     }
+
     
+
     public void addElementMapping(ElementMapping mapping) {
+
        mapping.addToBuilder(this.treeBuilder);
+
     }
+
     
+
     public void addElementMapping(String mappingClassName) {
+
        createElementMapping(mappingClassName).addToBuilder(this.treeBuilder);
+
     }
 
+
+
     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;
+
     }
 
+
+
     public DocumentHandler getDocumentHandler() {
+
        return this.treeBuilder;
+
     }
 
+
+
     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());
+
        }
+
     }
 
+
+
     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());
+
        }
+
     }
 
+
+
     public void setWriter(PrintWriter writer) {
+
        this.writer = writer;
+
     }
 
+
+
     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);
+
     }
 
+
+
     public void render()
+
        throws IOException {
+
        this.renderer.render(areaTree, this.writer);
+
     }
+
 }
+
index 0d920301cf8cc810ee6076e5bb484416c2e520e4..ea9d1e400d7ada1c06b4406eb3f72b8372fca78d 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.apps;
+package org.apache.fop.apps;
+
+
 
 /** not implemented yet */
+
 public interface ErrorHandler {}
+
index fd7552e02270f7b6dcec4dcf6f8ea6c99f253356..07347278e7064d7aae5978d062facb6648ed57d2 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.apps;
+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);
+
     }
+
 }
+
index 5d6b6dc666eb61a857d6f5f45fc73aac78f22ba1..7222db46d97366de16b428d972e1bd679c06c62d 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.apps;
+package org.apache.fop.apps;
+
+
 
 /**
+
  * class representing the version of FOP.
+
  *
+
  * added at the request of Stefano Mazzocchi for use by Fop.
+
  */
+
 public class Version {
 
+
+
     /**
+
      * get the version of FOP
+
      *
+
      * @return the version string
+
      */
+
     public static String getVersion() {
+
        return "FOP 0.12.0pre5";
+
     }
+
 }
+
index 73ed10adb1fe5c12737e90122ce9d5bd1bb9eac2..db3ab2927cfba835284a25212da35f3bf3226ab6 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.apps;
+package org.apache.fop.apps;
+
+
+
+import org.apache.fop.render.pdf.PDFRenderer;
+
+import org.apache.fop.fo.StandardElementMapping;
+
+import org.apache.fop.svg.SVGElementMapping;
+
 
-import org.apache.xml.fop.render.pdf.PDFRenderer;
-import org.apache.xml.fop.fo.StandardElementMapping;
-import org.apache.xml.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.xml.fop.apps.XTCommandLine xml-file xsl-stylesheet pdf-file");
+
+           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.xml.fop.render.pdf.PDFRenderer",
+
+           driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer",
+
                               version);
-           driver.addElementMapping("org.apache.xml.fop.fo.StandardElementMapping");
-           driver.addElementMapping("org.apache.xml.fop.svg.SVGElementMapping");
+
+           driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
+
+           driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");
+
            driver.setWriter(new PrintWriter(new FileWriter(args[2])));
+
            driver.buildFOTree(parser, fileInputSource(args[0]));
+
            driver.format();
+
            driver.render();
+
        } catch (Exception e) {
+
            System.err.println("FATAL ERROR: " + e.getMessage());
+
            System.exit(1);
+
        }
+
     }
+
 }
+
index 1832867a54a37fbbc481883f4e2a183b7f7ace45..c8a9798d551ba247aaf7b3a31fb214437d23f77a 100644 (file)
@@ -1,5 +1,5 @@
 <HTML>
-<TITLE>org.apache.xml.fop.apps Package</TITLE>
+<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>
index f8615d57eca3f7516f393a419d696d9a43094eb1..cbd7f03c646d568b50fdc1756133b53717538c45 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.datatypes;
+package org.apache.fop.datatypes;
+
+
 
 /**
+
  * 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;
 
+
+
     /**
+
      * 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.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 {
+
                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;
+
     }
+
 }
+
index 418e09cae8dbf984eb0c082271c1441e82258bfc..cfb3db774c251f64d85f139b3f0e4aac19d03aef 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.datatypes;
+package org.apache.fop.datatypes;
+
+
+
+import org.apache.fop.fo.Property;
+
 
-import org.apache.xml.fop.fo.Property;
 
 /**
+
  * a length quantity in XSL
+
  */
+
 public class Length {
 
+
+
     protected int millipoints = 0;
 
+
+
     protected double fontsize = 12;
 
+
+
     /**
+
      * 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 {
+
            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;
+
     }
+
 }
+
index 04f65b164bebb729f6a2dfad9f034905cfe85074..05d2020856ba240fc39534621f6807473dbfad38 100644 (file)
@@ -1,5 +1,5 @@
 <HTML>
-<TITLE>org.apache.xml.fop.datatypes Package</TITLE>
+<TITLE>org.apache.fop.datatypes Package</TITLE>
 <BODY>
 <P>XSL Datatypes</P>
 </BODY>
index f319fe8e568023ffd44fb1791dfb8b14a894a5ff..e59cc61feb63bffb7851e5698f0f8ffa35ff37e5 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo;
+package org.apache.fop.fo;
+
+
 
 public interface ElementMapping {
 
+
+
     public void addToBuilder(FOTreeBuilder builder);
+
 }
+
index 4e8576d741d5506ea45321673f8413c931dc868a..04b60601e3c63414890a487fbcab3d3e71343621 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo;
+package org.apache.fop.fo;
+
+
 
 // FOP
-import org.apache.xml.fop.apps.FOPException;
-import org.apache.xml.fop.layout.Area;
+
+import org.apache.fop.apps.FOPException;
+
+import org.apache.fop.layout.Area;
+
+
 
 // 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 FONode(FObj parent) {
+
        this.parent = parent;
+
     }
 
+
+
     public void setIsInLabel() {
+
        this.isInLabel = true;
+
     }
 
+
+
     public void setIsInListBody() {
+
        this.isInListBody = true;
+
     }
 
+
+
     public void setIsInTableCell() {
+
        this.isInTableCell = true;
+
     }
 
+
+
     public void setDistanceBetweenStarts(int distance) {
+
        this.distanceBetweenStarts = distance;
+
     }
 
+
+
     public void setLabelSeparation(int separation) {
+
        this.labelSeparation = separation;
+
     }
 
+
+
     public void setBodyIndent(int indent) {
+
        this.bodyIndent = indent;
+
     }
 
+
+
     public void forceStartOffset(int offset) {
+
        this.forcedStartOffset = offset;
+
     }
 
+
+
     public void forceWidth(int width) {
+
        this.forcedWidth = width;
+
     }
 
+
+
     public void resetMarker() {
+
        this.marker = START;
+
        int numChildren = this.children.size();
+
        for (int i = 0; i < numChildren; i++) {
+
            ((FONode) children.elementAt(i)).resetMarker();
+
        }
+
     }
 
+
+
     protected void addChild(FONode child) {
+
        children.addElement(child);
+
     }
 
+
+
     public FObj getParent() {
+
        return this.parent;
+
     }
 
+
+
     /* status */
+
     /* layout was fully completed */
+
     public final static int OK = 1;
+
     /* none of the formatting object could be laid out because the
+
        containing area was full (end of page) */
+
     public final static int AREA_FULL_NONE = 2;
+
     /* some of the formatting object could not be laid out because the
+
        containing area was full (end of page) */
+
     public final static int AREA_FULL_SOME = 3;
+
     /* force page break */
+
     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;
 
+
+
     abstract public int layout(Area area)
+
        throws FOPException;
+
 }
+
index 359636ca7cd804070e3ed58bba1a5f1740694040..1fe2fb1a09d973cfa022beb46da8c67bbbe02b05 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo;
+package org.apache.fop.fo;
+
+
 
 // FOP
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.layout.BlockArea;
-import org.apache.xml.fop.layout.FontState;
-import org.apache.xml.fop.datatypes.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.apps.FOPException;
+
+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 int layout(Area area) throws FOPException {
+
        if (!(area instanceof BlockArea)) {
+
            System.err.println("WARNING: text outside block area" + new String(ca, start, length));
+
            return 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,
+
                                                 whiteSpaceTreatment,
+
                                                 ca, this.marker, length);
+
        if (this.marker == -1) {
+
            return OK;
+
        } else if (this.marker != orig_start) {
+
            return AREA_FULL_SOME;
+
        } else {
+
            return AREA_FULL_NONE;
+
        }
+
     }
+
 }
+
index bfe386e118dac52cd5d6c056b670514a37ff70f6..bd8c87d77963a3254429d1876c51fba37245b6c4 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo;
+package org.apache.fop.fo;
+
+
 
 // FOP
-import org.apache.xml.fop.layout.AreaTree;
-import org.apache.xml.fop.apps.FOPException;
-import org.apache.xml.fop.fo.pagination.Root;
+
+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);
+
     }
+
 }
+
index 7454d9ab5cb9c3166f71951ec5646693c68da62d..73aaddaae2a196e3b2b0845fa24be8547a622d8e 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo;
+package org.apache.fop.fo;
+
+
 
 // FOP
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.apps.FOPException;
+
+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 int layout(Area area) throws FOPException {
+
        // should always be overridden
+
        return OK;
+
     }
 
+
+
     public String getName() {
+
        return this.name;
+
     }
 
+
+
     protected void start() {
+
        // do nothing by default
+
     }
 
+
+
     protected void end() {
+
        // do nothing by default
+
     }
+
 }
 
+
+
index bb2901ea33f2e1aa6e1f8696c8746b5ea9f9f677..53d74a6e2cd790c25446abb28ba11a0e96bd7e6b 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo;
+package org.apache.fop.fo;
+
+
+
+import org.apache.fop.layout.Area;
+
+import org.apache.fop.apps.FOPException;
+
 
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.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 int 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);
+
            int status;
+
            if ((status = fo.layout(area)) != OK) {
+
                this.marker = i;
+
                return status;
+
            }
+
        }
+
        return OK;
+
     }
+
 }
 
+
+
index a0f3ea75dea9bdf3b26b9e927aafa1ade2e0bba8..65851aa2dbd9b952dacd07fb77def909f6988dfe 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo;
+package org.apache.fop.fo;
+
+
+
+import org.apache.fop.datatypes.*;
+
+import org.apache.fop.apps.FOPException;
+
 
-import org.apache.xml.fop.datatypes.*;
-import org.apache.xml.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;
+
   }
 
+
+
 }
+
index c8b954461beaad810087010218ff3b06864894ff..d34ed50ccba6731958e1a051ce1bfa40bb5ce92f 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo;
+package org.apache.fop.fo;
+
+
 
 import java.util.Hashtable;
 
-import org.apache.xml.fop.apps.FOPException;
+
+
+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;
+
   }
+
 }
+
index ccca94bbf12f3164bacb5063dd3f781d6881e7f2..c9c898f7de70b4f476ccbabbad32f528a4430eb4 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo;
+package org.apache.fop.fo;
+
+
+
+import org.apache.fop.fo.properties.*;
+
+import org.apache.fop.svg.*;
+
+
+
+import org.apache.fop.apps.FOPException;
 
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.svg.*;
 
-import org.apache.xml.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("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());
+
   }
 
+
+
   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;
+
   }
+
 }
+
index 6efc042f65ab8a284bfe470d646d6dd62b48ba1b..16e7f47d4a36aa182b9a5b5d492ad13301bd6c35 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo;
+package org.apache.fop.fo;
+
+
+
+import org.apache.fop.fo.flow.*;
+
+import org.apache.fop.fo.pagination.*;
+
 
-import org.apache.xml.fop.fo.flow.*;
-import org.apache.xml.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, "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, "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());
+
     }
+
 }
+
index f19f4c20e8e8a8f269da084e975190482501ae21..55e115c3510bc59b2715f9b509040f35672fc741 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.*;
-import org.apache.xml.fop.apps.FOPException;
+
+import org.apache.fop.fo.*;
+
+import org.apache.fop.fo.properties.*;
+
+import org.apache.fop.layout.*;
+
+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;
 
+
+
     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 int layout(Area area) throws FOPException {
+
        // System.err.print(" b:LAY[" + marker + "] ");
 
+
+
        if (this.marker == BREAK_AFTER) {
+
            return 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(); 
 
+
+
            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() - startIndent -
+
                    forcedWidth;
+
            }
 
+
+
            this.marker = 0;
 
+
+
            if (breakBefore == BreakBefore.PAGE) {
+
                return FORCE_PAGE_BREAK;
+
            }
 
+
+
            if (breakBefore == BreakBefore.ODD_PAGE) {
+
                return FORCE_PAGE_BREAK_ODD;
+
            }
+
        
+
            if (breakBefore == BreakBefore.EVEN_PAGE) {
+
                return 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.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);
+
            }
+
            int status;
+
            if ((status = fo.layout(blockArea)) != OK) {
+
                this.marker = i;
+
                if ((i != 0) && (status == AREA_FULL_NONE)) {
+
                    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 FORCE_PAGE_BREAK;
+
        }
 
+
+
        if (breakAfter == BreakAfter.ODD_PAGE) {
+
            this.marker = BREAK_AFTER;
+
            return FORCE_PAGE_BREAK_ODD;
+
        }
+
        
+
        if (breakAfter == BreakAfter.EVEN_PAGE) {
+
            this.marker = BREAK_AFTER;
+
            return FORCE_PAGE_BREAK_EVEN;
+
        }
 
+
+
        //System.err.print(" b:OK" + marker + " ");
+
        return OK;
+
     }
 
+
+
     public int getAreaHeight() {
+
        return blockArea.getHeight();
+
     }
+
 }
+
index ebbd8613554690c9798482a39ea4a43084ce3f06..a424a9b71f12fa9d06d93e3563d144da2759fb9b 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.layout.BlockArea;
-import org.apache.xml.fop.layout.FontState;
-import org.apache.xml.fop.apps.FOPException;
-import org.apache.xml.fop.image.*;
+
+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 int 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() - startIndent -
+
                    forcedWidth;
+
            }
 
+
+
            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 OK;
+
     }
+
 }
+
index 0e89dc0e2ba7575de39c6a3824df1173ba8ea255..4e988fb03f432b4365f27c9dbd17968484e8376b 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.datatypes.*;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.layout.BlockArea;
-import org.apache.xml.fop.layout.RuleArea;
-import org.apache.xml.fop.layout.FontState;
-import org.apache.xml.fop.apps.FOPException;
+
+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 int 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);
+
        }
 
+
+
        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 OK;
+
     }
+
 }
+
index 20aa47a7a7a89285ddf987dda4141be41ea6424a..c838071402c3d0b1918f57955bef528d637f7abe 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.apps.FOPException;
+
+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 int 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);
+
            int status;
+
            if ((status = fo.layout(area)) != OK) {
+
                /* message from child */
+
                if (status > OK) {
+
                    /* child still successful */
+
                    this.marker = i+1;
+
                } else {
+
                    /* child unsucessful */
+
                    this.marker = i;
+
                }
+
                return status;
+
            }
+
        }
+
        return OK;
+
     }
+
 }
+
index e8962fa4d88532ed31d3f3488f1598cf43e83fc5..66d7e4781110af231207e0803ea3710e16fa75d0 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.fo.pagination.PageSequence;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.apps.FOPException;
+
+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 int 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);
+
            int status;
+
            if ((status = fo.layout(area)) != OK) {
+
                this.marker = i;
+
                return status;
+
            }
+
        }
+
        return OK;
+
     }
+
 }
+
index a9de79efbcac3b49aafbe63afa99f3318354dcf8..04aeb2be5a2abb660092330b195a8b6eba8cf448 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.apps.FOPException;
+
+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"); 
+
        }
+
     }
 
+
+
 }
+
index 236ff1311e9121c8eaf6e5d1fa03eaf1cde3c6a8..99f351c5a23fd4722ff79d52783b7859fd3bb00b 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.layout.BlockArea;
-import org.apache.xml.fop.layout.FontState;
-import org.apache.xml.fop.apps.FOPException;
+
+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 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;
 
+
+
     public ListBlock(FObj parent, PropertyList propertyList) {
+
        super(parent, propertyList);
+
        this.name = "fo:list-block";
+
     }
 
+
+
     public int 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.marker = 0;
 
+
+
            if (area instanceof BlockArea) {
+
                area.end();
+
            }
 
+
+
            if (spaceBefore != 0) {
+
                area.addDisplaySpace(spaceBefore);
+
            }
 
+
+
            if (this.isInListBody) {
+
                startIndent += bodyIndent + distanceBetweenStarts;
+
                bodyIndent = startIndent;
+
            }
+
        }
 
+
+
        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();
+
        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 OK;
+
            }
+
            ListItem listItem = (ListItem) children.elementAt(i);
+
            listItem.setDistanceBetweenStarts(this.provisionalDistanceBetweenStarts);
+
            listItem.setLabelSeparation(this.provisionalLabelSeparation);
+
            listItem.setBodyIndent(this.bodyIndent);
+
            int status;
+
            if ((status = listItem.layout(blockArea)) != OK) {
+
                /* message from child */
+
                if (status > OK) {
+
                    /* child still successful */
+
                    this.marker = i+1;
+
                } else {
+
                    /* child unsucessful */
+
                    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 OK;
+
     }
+
 }
+
index 34f54aa83aa69baa8a7fa62bf1519353f349bac4..cf43f72a3f12773781c8954b046542b0dea4e8e6 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.layout.BlockArea;
-import org.apache.xml.fop.layout.FontState;
-import org.apache.xml.fop.apps.FOPException;
+
+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 int 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);
 
+
+
        int 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 != OK) {
+
                return status;
+
            }
+
        }
 
+
+
        status = body.layout(blockArea);
+
        if (status != OK) {
+
            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 OK;
+
     }
+
 }
+
index 8ec649b6083a134b2437cc630e7bb20e4a8f4691..f629628893cd3574f55b1328dbf32cbc8b74bbbb 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.layout.FontState;
-import org.apache.xml.fop.apps.FOPException;
+
+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 int 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);
+
            int status;
+
            if ((status = fo.layout(area)) != OK) {
+
                this.marker = i;
+
                if ((i == 0) && (status == AREA_FULL_NONE)) {
+
                    return AREA_FULL_NONE;
+
                } else {
+
                    return AREA_FULL_SOME;
+
                }
+
            }
+
        }
+
        return OK;
+
     }
+
 }
+
index 46b83b6a93eaf445e379d44fc6cb3864cfcf2dff..b2ecb6eb7358fdf1461e0aff07435008ebab2c32 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.layout.FontState;
-import org.apache.xml.fop.apps.FOPException;
+
+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 int 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);
 
+
+
        int status;
+
        status = block.layout(area);
+
        area.addDisplaySpace(-block.getAreaHeight());
+
        return status;
+
     }
+
 }
+
index 1a8ade6ae73d318229f0936697fc027becb22438..338929aff678e772fdbe53b97b7f97083c64ada6 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.datatypes.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.*;
-import org.apache.xml.fop.apps.FOPException;
+
+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 int layout(Area area) throws FOPException {
+
        if (!(area instanceof BlockArea)) {
+
            System.err.println("WARNING: page-number outside block area");
+
            return 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, whiteSpaceTreatment, p.toCharArray(), 0, p.length());
+
        return OK;
+
     }
+
 }
+
index e2f060e321b40097978fcb875c5da75ac53546c9..22a983ce97209a8cf43e4fb52ab9a4a28ace77f6 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.fo.pagination.PageSequence;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.apps.FOPException;                              
+
+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 int 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 OK;
+
     }
+
 }
+
index d1cf8a960eb24b5ffbe95bbd58964b4eb06dce2e..61e6fd530c89d15477be905f19cb1259c18773d2 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.*;
-import org.apache.xml.fop.apps.FOPException;
+
+import org.apache.fop.fo.*;
+
+import org.apache.fop.fo.properties.*;
+
+import org.apache.fop.layout.*;
+
+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 startIndent;
+
     int endIndent;
+
     int spaceBefore;
+
     int spaceAfter;
 
+
+
     Vector columns = new Vector();
+
     int currentColumnNumber = 0;
 
+
+
     BlockArea blockArea;
 
+
+
     public Table(FObj parent, PropertyList propertyList) {
+
        super(parent, propertyList);
+
        this.name = "fo:table";
+
     }
 
+
+
     public int layout(Area area) throws FOPException {
+
        if (this.marker == BREAK_AFTER) {
+
            return 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.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(); 
+
            if (area instanceof BlockArea) {
+
                area.end();
+
            }
 
+
+
            if (this.isInListBody) {
+
                startIndent += bodyIndent + distanceBetweenStarts;
+
            }
 
+
+
            this.marker = 0;
 
+
+
            if (breakBefore == BreakBefore.PAGE) {
+
                return FORCE_PAGE_BREAK;
+
            }
 
+
+
            if (breakBefore == BreakBefore.ODD_PAGE) {
+
                return FORCE_PAGE_BREAK_ODD;
+
            }
+
        
+
            if (breakBefore == BreakBefore.EVEN_PAGE) {
+
                return FORCE_PAGE_BREAK_EVEN;
+
            }
+
        }
 
+
+
        if ((spaceBefore != 0) && (this.marker ==0)) {
+
            area.addDisplaySpace(spaceBefore);
+
        }
 
+
+
        this.blockArea =
+
            new BlockArea(fs, area.getAllocationWidth(), 
+
                          area.spaceLeft(), startIndent, endIndent, 0,
+
                          0, 0, 0);
+
        blockArea.setPage(area.getPage());
+
        blockArea.start();
 
+
+
        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);
+
            } 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 OK;
+
                }
+
                
+
                //if (this.isInListBody) {
+
                //fo.setIsInListBody();
+
                //fo.setDistanceBetweenStarts(this.distanceBetweenStarts);
+
                //fo.setBodyIndent(this.bodyIndent);
+
                //}
 
+
+
                ((TableBody) fo).setColumns(columns);
 
+
+
                int status;
+
                if ((status = fo.layout(blockArea)) != OK) {
+
                    this.marker = i;
+
                    if ((i != 0) && (status == AREA_FULL_NONE)) {
+
                        status = AREA_FULL_SOME;
+
                    }
+
                    //blockArea.end();
+
                    area.addChild(blockArea);
+
                    area.increaseHeight(blockArea.getHeight());
+
                    return status;
+
                }
+
            }
+
        }
 
+
+
        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 FORCE_PAGE_BREAK;
+
        }
 
+
+
        if (breakAfter == BreakAfter.ODD_PAGE) {
+
            this.marker = BREAK_AFTER;
+
            return FORCE_PAGE_BREAK_ODD;
+
        }
+
        
+
        if (breakAfter == BreakAfter.EVEN_PAGE) {
+
            this.marker = BREAK_AFTER;
+
            return FORCE_PAGE_BREAK_EVEN;
+
        }
 
+
+
        return OK;
+
     }
 
+
+
     public int getAreaHeight() {
+
        return blockArea.getHeight();
+
     }
+
 }
+
index b7291424945e9f1a97debb67616db82c9d3e8dee..c87546ed2101f689dbcb946d8f097f4cf9c6ec1c 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.*;
-import org.apache.xml.fop.apps.FOPException;
+
+import org.apache.fop.fo.*;
+
+import org.apache.fop.fo.properties.*;
+
+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 startIndent;
+
     int endIndent;
+
     int spaceBefore;
+
     int spaceAfter;
 
+
+
     Vector columns;
 
+
+
     BlockArea blockArea;
 
+
+
     public TableBody(FObj parent, PropertyList propertyList) {
+
        super(parent, propertyList);
+
        this.name = "fo:table-body";
+
     }
 
+
+
     public void setColumns(Vector columns) {
+
        this.columns = columns;
+
     }
 
+
+
     public int layout(Area area) throws FOPException {
+
        if (this.marker == BREAK_AFTER) {
+
            return 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.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(); 
+
            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.blockArea =
+
            new BlockArea(fs, area.getAllocationWidth(), 
+
                          area.spaceLeft(), startIndent, endIndent, 0,
+
                          0, 0, 0);
+
        blockArea.setPage(area.getPage());
+
        blockArea.start();
 
+
+
        int numChildren = this.children.size();
+
        for (int i = this.marker; i < numChildren; i++) {
+
            TableRow row = (TableRow) children.elementAt(i);
 
+
+
            //if (this.isInListBody) {
+
            //fo.setIsInListBody();
+
            //fo.setDistanceBetweenStarts(this.distanceBetweenStarts);
+
            //fo.setBodyIndent(this.bodyIndent);
+
            //}
 
+
+
            row.setColumns(columns);
 
+
+
            int status;
+
            if ((status = row.layout(blockArea)) != OK) {
+
                this.marker = i;
+
                if ((i != 0) && (status == AREA_FULL_NONE)) {
+
                    status = AREA_FULL_SOME;
+
                }
+
                //blockArea.end();
+
                area.addChild(blockArea);
+
                area.increaseHeight(blockArea.getHeight());
+
                return status;
+
            }
+
        }
 
+
+
        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();
+
        }
 
+
+
        return OK;
+
     }
 
+
+
     public int getAreaHeight() {
+
        return blockArea.getHeight();
+
     }
+
 }
+
index 2e15e2d47fd7572552e84fe1a94749ca2b766934..694364a7d569039b4f908f2d6eb6fda81354aa23 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.*;
-import org.apache.xml.fop.apps.FOPException;
+
+import org.apache.fop.fo.*;
+
+import org.apache.fop.fo.properties.*;
+
+import org.apache.fop.layout.*;
+
+import org.apache.fop.apps.FOPException;
+
+
 
 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();
+
     }
 
+
+
     FontState fs;
+
     int startIndent;
+
     int endIndent;
+
     int spaceBefore;
+
     int spaceAfter;
 
+
+
     protected int startOffset;
+
     protected int width;
+
     protected int height = 0;
 
+
+
     BlockArea blockArea;
 
+
+
     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 int layout(Area area) throws FOPException {
+
        if (this.marker == BREAK_AFTER) {
+
            return 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.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(); 
+
            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.blockArea =
+
            new BlockArea(fs, area.getAllocationWidth(), 
+
                          area.spaceLeft(), startIndent, endIndent, 0,
+
                          0, 0, 0);
+
        blockArea.setPage(area.getPage());
+
        blockArea.start();
 
+
+
        int numChildren = this.children.size();
+
        for (int i = this.marker; i < numChildren; i++) {
+
            FObj fo = (FObj) children.elementAt(i);
+
            fo.setIsInTableCell();
+
            fo.forceStartOffset(startOffset);
+
            fo.forceWidth(width);
+
            int status;
+
            if ((status = fo.layout(blockArea)) != OK) {
+
                this.marker = i;
+
                if ((i == 0) && (status == AREA_FULL_NONE)) {
+
                    return AREA_FULL_NONE;
+
                } else {
+
                    return AREA_FULL_SOME;
+
                }
+
            }
+
            height += blockArea.getHeight();
 
+
+
        }
+
        blockArea.end();
+
        area.addChild(blockArea);
 
+
+
        return OK;
+
     }
 
+
+
     public int getHeight() {
+
        return height;
+
     }
+
 }
+
index 9414cc08124894ea308caf9c40bc84263191c6f2..1fa05aab6eea6278eecf7c042af689f16ec90c6a 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.*;
-import org.apache.xml.fop.apps.FOPException;
+
+import org.apache.fop.fo.*;
+
+import org.apache.fop.fo.properties.*;
+
+import org.apache.fop.layout.*;
+
+import org.apache.fop.apps.FOPException;
+
+
 
 public class TableColumn extends FObj {
+
        
+
     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 this.properties.get("column-width").getLength().mvalue();
+
     }
 
+
+
     public int getColumnNumber() {
+
        return 0; // not implemented yet
+
     }
+
 }
+
index 3310581d2f08908a9e7597a297c2a1b73714ba99..3f80f0c00da205718a0ce09e9bc548a8a297dd04 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.flow;
+package org.apache.fop.fo.flow;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.*;
-import org.apache.xml.fop.apps.FOPException;
+
+import org.apache.fop.fo.*;
+
+import org.apache.fop.fo.properties.*;
+
+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 startIndent;
+
     int endIndent;
+
     int spaceBefore;
+
     int spaceAfter;
 
+
+
     int widthOfCellsSoFar = 0;
+
     int largestCellHeight = 0;
 
+
+
     Vector columns;
 
+
+
     BlockArea blockArea;
 
+
+
     public TableRow(FObj parent, PropertyList propertyList) {
+
        super(parent, propertyList);
+
        this.name = "fo:table-row";
+
     }
 
+
+
     public void setColumns(Vector columns) {
+
        this.columns = columns;
+
     }
 
+
+
     public int layout(Area area) throws FOPException {
+
        if (this.marker == BREAK_AFTER) {
+
            return 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.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(); 
+
            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.blockArea =
+
            new BlockArea(fs, area.getAllocationWidth(), 
+
                          area.spaceLeft(), startIndent, endIndent, 0,
+
                          0, 0, 0);
+
        blockArea.setPage(area.getPage());
+
        blockArea.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 OK;
+
        }
 
+
+
        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;
 
+
+
            int status;
+
            if ((status = cell.layout(blockArea)) != OK) {
+
                this.marker = i;
+
                if ((i != 0) && (status == AREA_FULL_NONE)) {
+
                    status = AREA_FULL_SOME;
+
                }
+
                //blockArea.end();
+
                area.addChild(blockArea);
+
                area.increaseHeight(blockArea.getHeight());
+
                return status;
+
            }
 
+
+
            int h = cell.getHeight();
+
            blockArea.addDisplaySpace(-h);
+
            if (h > largestCellHeight) {
+
                largestCellHeight = h;
+
            }
 
+
+
        }
 
+
+
        blockArea.end();
+
        area.addChild(blockArea);
+
        area.addDisplaySpace(largestCellHeight);
+
        area.increaseHeight(largestCellHeight);
 
+
+
        if (spaceAfter != 0) {
+
            area.addDisplaySpace(spaceAfter);
+
        }
 
+
+
        if (area instanceof BlockArea) {
+
            area.start();
+
        }
 
+
+
        return OK;
+
     }
 
+
+
     public int getAreaHeight() {
+
        return blockArea.getHeight();
+
     }
+
 }
+
index 098af40786c58e8c0fa94c7965053e738d9b82e8..05d5836dbc21885fe67d32db49b565b2a1e36386 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.pagination;
+package org.apache.fop.fo.pagination;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.apps.FOPException;                              
+
+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);
+
     }
+
 }
+
index d7bd6415aad0cc3ab489aaa210c53e2934d842e7..0e6f454d82cb2c1a1431761c6be7b11cbdc4a07c 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.pagination;
+package org.apache.fop.fo.pagination;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.fo.flow.Flow;
-import org.apache.xml.fop.fo.flow.StaticContent;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.layout.AreaContainer;
-import org.apache.xml.fop.layout.AreaTree;
-import org.apache.xml.fop.layout.Page;
-import org.apache.xml.fop.layout.PageMaster;
-import org.apache.xml.fop.layout.PageMasterFactory;
-import org.apache.xml.fop.apps.FOPException;                              
+
+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();
+
     }
 
+
+
     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 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();
+
     }
 
+
+
     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 {
+
        int status = OK;
 
+
+
        do {
+
            currentPage = makePage(areaTree);
+
            currentPage.setNumber(++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 == FORCE_PAGE_BREAK_EVEN) &&
+
                ((currentPageNumber % 2) == 1)) {
+
            } else if ((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 != OK);
+
        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"); 
+
        }
+
     }
+
 }
+
index 5ac37a52c1ce95fd79b4b37bea246c30debe554e..78dcecc939abd4fac2db8b7f579eafee762ba171 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.pagination;
+package org.apache.fop.fo.pagination;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.Region;
-import org.apache.xml.fop.apps.FOPException;                              
+
+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);
+
     }
+
 }
+
index 32c8344cdce85a0976ebb12cbf0bf6089a3fa62d..258ec88dc19f3b85ec612e9c167d7a8281b93aa7 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.pagination;
+package org.apache.fop.fo.pagination;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.Region;
-import org.apache.xml.fop.apps.FOPException;                              
+
+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);
+
     }
+
 }
+
index f98f0cf300cdc0db559abb7fa8c97cb2534a49bc..314be56c7f3d87db7fede112f40427ea71d383ab 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.pagination;
+package org.apache.fop.fo.pagination;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.Region;
-import org.apache.xml.fop.apps.FOPException;                              
+
+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); 
+
     }
+
 }
+
index b98c65e71a4bc66f90f04f486688da65eb9adc58..91cb009942cbef90c1e4fe9b85e7040f2442b043 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.pagination;
+package org.apache.fop.fo.pagination;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.AreaTree;
-import org.apache.xml.fop.apps.FOPException;                              
+
+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;
+
     }
+
 }
+
index a038e171a2f3a46cfa4d9b9bd9cdb16d279ba7fa..a620ff5f453ac83bacaf6b20443484a556614544 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.pagination;
+package org.apache.fop.fo.pagination;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.PageMasterFactory;
-import org.apache.xml.fop.apps.FOPException;                              
+
+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;
+
     }
+
 }
+
index 2e0f2e415461efb50ee42ec0b3979f061bb46d87..9e977efc941e061b50bcaa68e32354720f2df53a 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.pagination;
+package org.apache.fop.fo.pagination;
+
+
+
+import org.apache.fop.fo.*;
+
+import org.apache.fop.layout.PageMasterFactory;
+
 
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.layout.PageMasterFactory;
 
 abstract public class SequenceSpecifier extends FObj {
+
        
+
     protected SequenceSpecifier(FObj parent, PropertyList propertyList) {
+
        super(parent, propertyList);
+
     }
 
+
+
     public abstract PageMasterFactory getPageMasterFactory();
+
 }
+
index 9a8c1a8f07ab37017e9733d50cc523b27970b890..51b8a88c7c03a55670ac2a90d75b0c8c49085b6c 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.pagination;
+package org.apache.fop.fo.pagination;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.PageMasterFactory;
-import org.apache.xml.fop.layout.AlternatingPageMasterFactory;
-import org.apache.xml.fop.layout.PageMaster;
-import org.apache.xml.fop.apps.FOPException;                              
+
+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;
+
     }
+
 }
+
index 944f7f248ac4e05c989397c1f5d4b0e6f239bd34..bddbac7c3bda7c04f4cfead86e2e94f2e3d9577a 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.pagination;
+package org.apache.fop.fo.pagination;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.PageMasterFactory;
-import org.apache.xml.fop.layout.RepeatingPageMasterFactory;
-import org.apache.xml.fop.layout.PageMaster;
-import org.apache.xml.fop.apps.FOPException;                              
+
+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;
+
     }
+
 }
+
index 14a5117cba0e846535235e2c60135e347c2d5845..a062f03156393c7f842b7abab813f3f3ef25deba 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.pagination;
+package org.apache.fop.fo.pagination;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.PageMasterFactory;
-import org.apache.xml.fop.layout.SinglePageMasterFactory;
-import org.apache.xml.fop.layout.PageMaster;
-import org.apache.xml.fop.apps.FOPException;                              
+
+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();
+
     }
+
 }
+
index 5e4adb17ab5b515935f1a3f1e4d4179d852c6b52..11fcffd2c876dfac64928ac5ee1af5532ef45f6d 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.fo.pagination;
+package org.apache.fop.fo.pagination;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.PageMaster;
-import org.apache.xml.fop.layout.Region;
-import org.apache.xml.fop.apps.FOPException;                              
+
+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;
+
     }
+
 }
+
index e68f219762ca48a024b531b696099e8f6402f652..3885ad2a714354e22a9029fc48a299276d0df2a4 100644 (file)
  */
 /* 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.xml.fop.image;
+
+
+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;
+
     }
+
     
+
 }
+
index 1e3419dc569d8e0ddde3febc811a8ef344cfe32b..b8c21d9f00cb96ba0336ff1e811b4432bfd01113 100644 (file)
  */
 /* 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.xml.fop.image;
+
+
+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;
+
     }
 
+
+
 }
+
index 564dab649a0ef84056351f087b63ac0af4901188..e46286aad934db0d4e5fa3d079d10d6965cb7656 100644 (file)
  */
 /* 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.xml.fop.image;
+
+
+
+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();
+
 }
+
index b3c5fae18541715ca6a61d5e16b8954011a5cf3a..06b9c95ef900a0dba623c5cd7ecfa0e56beb3e1b 100644 (file)
  */
 /* 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.xml.fop.image;
+
+
+
+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;
+
        
+
     }
+
 } 
+
index ef6fb4aa48e65f2c4c7f500d0760f9b0b11c5c9c..4d5d66e65c8263aa3d47f600c73bb2ceffd9a443 100644 (file)
  */
 /* 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.xml.fop.image;
+
+
+
+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;
+
     /*
+
     Costructor read the header of the bmp file to get the size
+
     and the other data
+
     SB
+
   */
 
+
+
 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();
+
            ip.startProduction(consumer);
+
            while ((this.pixelheight = consumer.getHeight())==-1) {}
+
            while ((this.pixelwidth = consumer.getWidth())==-1) {}
+
            this.tempmap = new int[this.pixelwidth*this.pixelheight];
+
       //Image img=Toolkit.getDefaultToolkit().getImage("prova.gif");
+
     //  Image img=Toolkit.getDefaultToolkit().getImage(url);
+
            PixelGrabber pg = new PixelGrabber(ip,0,0,this.pixelwidth,this.pixelheight,this.tempmap,0,w);
+
            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;
+
        public void imageComplete(int status) {}
+
        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 i;
+
          for(i=0;i<(this.pixelheight*this.pixelwidth);i++)
+
                  {
+
                  int red   = ((this.tempmap[i]>>16) & 0xff);
+
                  int green = ((this.tempmap[i]>> 8) & 0xff);
+
                  int blue  = ((this.tempmap[i]    ) & 0xff);
+
                  this.imagemap[count++]=red;
+
                  this.imagemap[count++]=green;
+
                  this.imagemap[count++]=blue;
+
                  }
+
   return imagemap;
+
   }
 
 
+
+
+
   public boolean getcolor(){return true;}
+
   public int getbitperpixel() {return this.bitperpixel;}
+
   }
 
 
+
+
+
index 5e6d3fea6fc4863060936e5df702c9094899360a..b8edcdf0b5dbaf65f91d008c7364c453d06790d5 100644 (file)
  */
 /* modified by JKT to integrate into 0.12.0 */
 
-package org.apache.xml.fop.image;
 
-import org.apache.xml.fop.layout.*;
-import org.apache.xml.fop.render.Renderer;
+
+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;
+
     }
+
 }
+
index f4499f5093c1b11c720415cf0ad3ac1d96045007..23e1739b4e4c3d0d6929c1d4f851a0a6f57914c5 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+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();
+
     }
+
 }
+
index 2d9324673fcb3e8ce8f32897826168f3014a1f4d..a0b4281a63bd27885cf0ec574c3ff31230b9e633 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
 
 // 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 inner-most area container the area is in */
+
     protected AreaContainer areaContainer;
 
+
+
     /* the page this area is on */
+
     protected Page page;
 
+
+
     public Area (FontState fontState) {
+
        this.fontState = fontState;
+
     }
 
+
+
     public Area (FontState fontState, int allocationWidth, int maxHeight) {
+
        this.fontState = fontState;
+
        this.allocationWidth = 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;
+
     }
+
     
+
     public Vector getChildren() {
+
        return this.children;
+
     }
+
        
+
     public int getContentWidth() {
+
        return this.contentRectangleWidth;
+
     }
 
+
+
     public FontState getFontState() {
+
        return this.fontState;
+
     }
 
+
+
     public int getHeight() {
+
        return this.currentHeight;
+
     }
 
+
+
     public int getMaxHeight() {
+
        return this.maxHeight;
+
     }
 
+
+
     public Page getPage() {
+
        return this.page;
+
     }
 
+
+
     public void increaseHeight(int amount) {
+
        this.currentHeight += amount;
+
     }
+
        
+
     public void setPage(Page page) {
+
        this.page = page;
+
     }
 
+
+
     public int spaceLeft() {
+
        return maxHeight - currentHeight;
+
     }
 
+
+
     public void start() {
+
     }
+
 }
+
index 4fc15e284887b65edf480dd08fbf2bf6aa7d15a7..30182f4d61430f1d4fd04b74c6c21fe9842f280e 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
 
 // FOP
-import org.apache.xml.fop.render.Renderer;
+
+import org.apache.fop.render.Renderer;
+
+
 
 // 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
 
+
+
     AreaContainer(int xPosition, int yPosition, int allocationWidth, int maxHeight) {
+
        super(null, allocationWidth, maxHeight);
+
        this.xPosition = xPosition;
+
        this.yPosition = yPosition;
+
     }
 
+
+
     public void render(Renderer renderer) {
+
        renderer.renderAreaContainer(this);
+
     }
 
+
+
     public int getXPosition() {
+
        return xPosition;
+
     }
 
+
+
     public int getYPosition() {
+
        return yPosition;
+
     }
+
 }
+
index 2ce586c20eb9c3067ef5f4f047617ee9d087a768..6f0ba0bddfb89ec6163d42e564da514abffa8873 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
 
 // FOP
-import org.apache.xml.fop.apps.FOPException;                              
-import org.apache.xml.fop.fo.flow.StaticContent;
-import org.apache.xml.fop.svg.*;
-import org.apache.xml.fop.render.Renderer;
+
+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;
+
     }
+
 }
+
index b16b081d350a04bc58c50224a643329107dabeb9..ded113146098e14b1586416c62cf9b2cf05ba50c 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
 
 // FOP
-import org.apache.xml.fop.render.Renderer;
+
+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;
 
+
+
     /* 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;
 
+
+
        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,
+
                       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);
+
        ts = this.currentLineArea.addText(ca, ts, te);
+
        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);
+
            ts = this.currentLineArea.addText(ca, ts, te);
+
        }
+
        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;
+
     }
 
+
+
     public int spaceLeft() {
+
        return maxHeight - currentHeight;
+
     }
+
 }
+
index 6dbe031a60a1e7245137111f8dd88ba34c46141f..e02193befb4ad3bc327086b63df96c62615614fb 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
+
+import org.apache.fop.render.Renderer;
+
 
-import org.apache.xml.fop.render.Renderer;
 
 abstract public class Box {
+
     protected Area parent;
+
     protected AreaTree areaTree;
+
     abstract public void render(Renderer renderer);
+
 }
+
index b71e4b5eacb4974acd071cc49eec799a92644510..5cc50fbf43c57382a5924b37e95ba1115a076582 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
+
+import org.apache.fop.render.Renderer;
+
 
-import org.apache.xml.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);
+
     }
+
 }
+
index ac5099b75d4ee706a860199814cda172cec0c8a0..dc6d778fb2bd112b8d5b10b586114a6420211753 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
 
 import java.util.Hashtable;
+
 import java.util.Enumeration;
 
-import org.apache.xml.fop.apps.FOPException;
+
+
+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));
+
   }
+
 }
+
index 4184adefb34c2149409886c41df0d1308cfbdd95..3ef8f64363795a73b8e49891e862a9aea5aa6736 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+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);
+
 }
+
index d4f4119d8502566e9fe193026735d392d871ddb9..4dbdaa7b1d12242c1e132380c012f7851a482a32 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
+
+import org.apache.fop.apps.FOPException;
+
 
-import org.apache.xml.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);
+
     }
+
 }
+
index babc5abf74e0bf20d3620e65af0e39faf2efc5c4..37bff3339500d691e11656a7b2384ddf17b9dc99 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
+
+import org.apache.fop.render.Renderer;
+
 
-import org.apache.xml.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;
+
     }
+
 }
+
index 4fba71d6829ab87eddcdb8a9d7e247f812a82b46..2fc059832c9c342ee9b1d6706ea8f159206e8b0d 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
+
+import org.apache.fop.render.Renderer;
+
 
-import org.apache.xml.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);
+
     }
+
 }
+
index 23316d6c2a53b4e1bc32e3df25a9f8684d7b6a1b..7ac928800002d10bfca5ffb6316710a0a355a940 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
+
+import org.apache.fop.render.Renderer;
+
 
-import org.apache.xml.fop.render.Renderer;
 
 import java.util.Vector;
+
 import java.util.Enumeration;
 
-import org.apache.xml.fop.fo.properties.WrapOption; // for enumerated
+
+
+import org.apache.fop.fo.properties.WrapOption; // for enumerated
+
 // values 
-import org.apache.xml.fop.fo.properties.WhiteSpaceTreatment; // for
+
+import org.apache.fop.fo.properties.WhiteSpaceTreatment; // for
+
 // enumerated values 
-import org.apache.xml.fop.fo.properties.TextAlign; // for enumerated
+
+import org.apache.fop.fo.properties.TextAlign; // for enumerated
+
 // values 
-import org.apache.xml.fop.fo.properties.TextAlignLast; // for enumerated
+
+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) {
+
        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.xml.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();
+
                        addChild(inlineArea);
+
                    }
+
                    finalWidth += pendingWidth;
 
+
+
                    // reset pending areas array
+
                    pendingWidth = 0;
+
                    pendingAreas = new Vector();
 
+
+
                    // add the current word
 
+
+
                    if (wordLength > 0) {
+
                        addChild(new InlineArea(currentFontState,
+
                                                this.red, this.green,
+
                                                this.blue, new
+
                                                String(data, wordStart,
+
                                                       wordLength),
+
                                                wordWidth)); 
+
                        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.contentRectangleWidth) { 
+
                        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.contentRectangleWidth) { 
+
                    
+
                    // 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) {
+
            pendingAreas.addElement(new InlineArea(currentFontState, this.red,
+
                                    this.green, this.blue, new
+
                                    String(data, wordStart,
+
                                           wordLength), wordWidth)); 
+
            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;
+
        
+
        switch (type) {
+
        case TextAlign.START: // left
+
            padding = this.contentRectangleWidth - finalWidth;
+
            endIndent += padding;
+
            break;
+
        case TextAlign.END: // right
+
            padding = this.contentRectangleWidth - finalWidth;
+
            startIndent += padding;
+
            break;
+
        case TextAlign.CENTERED: // center
+
            padding = (this.contentRectangleWidth - 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.contentRectangleWidth - 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;
+
     }
+
 }
+
index dc33cc5b84f064847268fa25eb919d1ba5d41c08..beedcda4f45572b18ed3d7f993a2fe87e5521562 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
 
 // FOP
-import org.apache.xml.fop.render.Renderer;
+
+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;
 
+
+
     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();
+
     }
+
 }
+
index 0370cd728353195d2296c5bf83abc52bac2f7373..3b44785ae489457e23b322b11836580e24a8c59f 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+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;
+
     }
+
 }
+
index 497829628235cf0e81187b3eaa4345e9bf2f0c57..e7499f78a819631d42ff42024fdab473f1e79e5b 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+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;
+
     }
+
 }
+
index 5ba6aae93842849886dc55e5d280f1d72b1e47b8..e40891e065ca2fe581754dbdbe1a75961b2f5a5c 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
 
 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(xPosition, yPosition, width, height);
+
     }
+
 }
+
index 2f1b37cd87a2934342758155f52f9b5821048865..51a38ec6e47768861cdb6addcee74f4fba3b43af 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+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();
+
     }
+
 }
+
index 348f239830fda34a973911c2d140bddf7f36b26e..26c8fee0b572d6108d89befdec294d6050dc4020 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
+
+import org.apache.fop.render.Renderer;
+
 
-import org.apache.xml.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;
+
        }
+
 }
+
index 90d749a09489608999b3b1eaaee8c2cd711a731c..a26bfae0265d1a2893820fe5867fdbdc7b8a1770 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+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();
+
     }
+
 }
+
index d4000ff3c10d1bdb90cc1d50f94e678f9bdc4076..bbc2f138abcf0373f7ff7ae15ca08b6d94aae29d 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.layout;
+package org.apache.fop.layout;
+
+
 
 abstract public class Space extends Box {
+
 }
+
index cb7c3ec46ba20e6c0c4fec8dbb69e213feddf115..7cbf8bd3f35421cbc67237bd59c6b11e10d798f2 100644 (file)
  */
 /* image support modified from work of BoBoGi */
 
-package org.apache.xml.fop.pdf;
+
+
+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.xml.fop.image.FopImage;
+
+import org.apache.fop.image.FopImage;
+
+
 
 // Java
+
 import java.io.IOException;
+
 import java.io.PrintWriter;
+
 import java.util.Vector;
+
                                                           
+
 /**
+
  * 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.2";
 
+
+
     /** 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;
+
     
+
     protected int xObjectCount = 0;
+
     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 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 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;
+
     }
 
+
+
     /**
+
      * 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();
+
     }
+
 }
+
index f81aad6437cc79c672bed26c0348ba1d4d46312b..562bddf2e8b7cc55be7ce29832e2e2ef5645b3c5 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.pdf;
+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;
+
     }
+
 }
+
index 48e6716d189384a895a34caf74d95f0c36f3bcf9..e469546e1af3c98327cebcfa5de8a0ee024b92a3 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.pdf;
+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;
+
     }
+
 }
+
index f80224a1d7380349975bd75f383fe20ed5144eff..9c283ec749f4acb12c4b22fae2ea0598c4fb2c08 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.pdf;
+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;
+
     }
 
+
+
     /**
+
      * 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();
+
 }
+
index 2e4f9d5705e848ac1e182f1329e3d035e7d5985b..e96a2211c489786feee013833ce4313ebd73b00b 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.pdf;
+package org.apache.fop.pdf;
+
+
 
 // Java
+
 import java.io.PrintWriter;
+
 import java.util.Vector;
 
+
+
 /**
+
  * 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;
 
+
+
     /**
+
      * 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;
+
     }
 
+
+
     /**
+
      * set this page's parent
+
      *
+
      * @param parent the /Pages object that is this page's parent
+
      */
+
     public void setParent(PDFPages parent) {
+
        this.parent = parent;
+
     }
 
+
+
     /**
+
      * represent this object as PDF
+
      *
+
      * @return the PDF string
+
      */
+
     public String toPDF() {
+
        String p = 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() + " >>\nendobj\n";
+
        return p;
+
     }
+
 }
+
index 9b5411b60dd5d1407660e4443469f7cb1e10bfd2..c4dcf1f4d9620fc8dc47c11f8915424237b8d206 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.pdf;
+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);
+
     }
 
+
+
     /**
+
      * get the count of /Page objects
+
      *
+
      * @return the number of pages
+
      */
+
     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<< /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();
+
     }
+
 }
+
index 2e328b79921a1ebbdbfe4eecf186d3d673eb4cbf..64b54dea70cf9a389c64f2e1ffd85d02d09f10c0 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.pdf;
+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;
 
+
+
     /**
+
      * 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 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<< /Font << ");
 
+
+
        /* construct PDF dictionary of font object references */
+
        Enumeration fontEnumeration = fonts.keys();
+
        while (fontEnumeration.hasMoreElements()) {
+
            String fontName = (String) fontEnumeration.nextElement();
+
            p = p.append("/" + fontName + " " 
+
                         + ((PDFFont) fonts.get(fontName)).referencePDF()
+
                         + "\n");  
+
        }
 
+
+
        p = p.append(">>\n/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(">>\nendobj\n");
 
+
+
        return p.toString();
+
     }
+
 }
+
index 534a04c3f76fc640504b7b2a0834711b8c602950..67f5e45fbd6207851cf0b6572f6dd7060c0deff3 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.pdf;
+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;
+
     }
+
 }
+
index 808dd6c21d3f43c818cd15c5dc5f45e972332bfa..a8d163a4085e8a5836da2b1a25b1d9d17ca905e6 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.pdf;
+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;
+
     }
+
 }
+
index ceff6fc55303aa6ee96510c652c0a93c2c23247e..ab92c5df6dc6f7fafb596f7d652340902641d910 100644 (file)
  */
 /* modified by JKT to integrate with 0.12.0 */
 
-package org.apache.xml.fop.pdf;
+
+
+package org.apache.fop.pdf;
+
+
 
 import java.io.IOException;
+
 import java.io.PrintWriter;
 
+
+
 // shouldn't have to do this
+
 import org.apache.xml.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;
+
     }
+
 }
+
index 6b4c7f24ffb555326e6ff30f0368fd1d56661c84..1fd09411dd3f850d10e73a322cf743f5b9517ba9 100644 (file)
@@ -1,5 +1,5 @@
 <HTML>
-<TITLE>org.apache.xml.fop.pdf Package</TITLE>
+<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
index 1c5710842d7d52ba27373acc9716ff637846a11a..30780169abadce742d0b9ab4c8b5e7e4521473dd 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.render;
+package org.apache.fop.render;
+
+
 
 // FOP
-import org.apache.xml.fop.svg.SVGArea;
-import org.apache.xml.fop.image.ImageArea;
-import org.apache.xml.fop.layout.*;
+
+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);
+
 }
+
index 0e31dbd072cffc7c92c0f3326f7c15f18967f04f..25daa021eb80c765e505d346bb66c2494d4afb0c 100644 (file)
@@ -1,5 +1,5 @@
 <HTML>
-<TITLE>org.apache.xml.fop.render Package</TITLE>
+<TITLE>org.apache.fop.render Package</TITLE>
 <BODY>
 <P>generic renderer interface</P>
 </BODY>
index 00b74a4cd08b8e347963448bc4cab9c6e0674bca..49a75270389c818e3536fa88252bc927b6121124 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.render.pdf;
+package org.apache.fop.render.pdf;
+
+
 
 // FOP
-import org.apache.xml.fop.layout.FontMetric;
+
+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();
+
 }
+
index 7bf5f96a15facda64c7aede51899bab798112468..d9750da30d71b9813d96040fb6cc4331cabc2855 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.render.pdf;
+package org.apache.fop.render.pdf;
+
+
 
 // FOP
-import org.apache.xml.fop.render.pdf.fonts.*;
-import org.apache.xml.fop.layout.FontInfo;
-import org.apache.xml.fop.pdf.PDFDocument;
-import org.apache.xml.fop.pdf.PDFResources;
+
+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()
+
                                           )
+
                              );
+
        }
+
     }
+
 }
+
index fad2e566945e4236fc24443e82093e726b54751a..32498cfd82492ba149f9e3f74b840cb10ffa663d 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.render.pdf;
+package org.apache.fop.render.pdf;
+
+
 
 // FOP
-import org.apache.xml.fop.render.Renderer;
-import org.apache.xml.fop.image.ImageArea;
-import org.apache.xml.fop.image.FopImage;
-import org.apache.xml.fop.layout.*;
-import org.apache.xml.fop.svg.*;
-import org.apache.xml.fop.pdf.*;
+
+import org.apache.fop.render.Renderer;
+
+import org.apache.fop.image.ImageArea;
+
+import org.apache.fop.image.FopImage;
+
+import org.apache.fop.layout.*;
+
+import org.apache.fop.svg.*;
+
+import org.apache.fop.pdf.*;
+
+
 
 // Java
+
 import java.io.IOException;
+
 import java.io.PrintWriter;
+
 import java.util.Enumeration;
 
+
+
 /**
+
  * 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 (internal) font name */
+
     protected String currentFontName;
 
+
+
     /** the current font size in millipoints */
+
     protected int currentFontSize;
 
+
+
     /** 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 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) {
+
        currentStream.add(r + " " + g + " " + b + " RG\n"
+
                          + (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 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) { 
+
        currentStream.add(r + " " + g + " " + b + " RG\n"
+
                          + (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 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) {
+
        currentStream.add(fr + " " + fg + " " + fb + " rg\n"
+
                          + r + " " + g + " " + b + " RG\n"
+
                          + (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) {
 
+
+
        /* move into position */
+
        currentStream.add("1 0 0 1 "
+
                          + (area.getXPosition()/1000f) + " "
+
                          + (area.getYPosition()/1000f) + " Tm\n");
 
+
+
        this.currentYPosition = area.getYPosition();
+
        this.currentAreaContainerXPosition = area.getXPosition();
 
+
+
        Enumeration e = area.getChildren().elements();
+
        while (e.hasMoreElements()) {
+
            Box b = (Box) e.nextElement();
+
            b.render(this);
+
        }
+
     }
 
+
+
     /**
+
      * render block area to PDF
+
      *
+
      * @param area the block area to render
+
      */
+
     public void renderBlockArea(BlockArea area) {
+
        int rx = this.currentAreaContainerXPosition
+
            + area.getStartIndent();
+
        int ry = this.currentYPosition;
+
        int w = area.getContentWidth();
+
        int h = area.getHeight();
+
        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*1000;
 
+
+
        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,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");
+
            }
+
        }
+
     }
 
+
+
     /**
+
      * 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();
 
+
+
        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;
+
            pdf = pdf.append("/" + name + " " + (size/1000) + " Tf\n");
+
        }
 
+
+
        if ((red != this.currentRed)
+
            || (green != this.currentGreen)
+
            || (blue != this.currentBlue)) {
+
            this.currentRed = red;
+
            this.currentGreen = green;
+
            this.currentBlue = blue;
+
            pdf = pdf.append(red + " " + green + " " + blue + " rg\n");
+
        }
+
                
+
        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");
 
+
+
        this.pdfDoc.makePage(this.pdfResources, currentStream,
+
                             page.getWidth()/1000, page.getHeight()/1000);
+
     }
 
+
+
     /**
+
      * 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();
+
        
+
        addLine(rx, ry, rx+w, ry, th, r, g, b);
+
     }
 
+
+
     /**
+
      * 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);
+
     }
+
 }
+
index dbd584a22d3bb17610d075694eed82dd9ab6cdc7..f3e5c6652dfe21f4e5a630b2038260ce6892f004 100644 (file)
@@ -1,5 +1,5 @@
 <HTML>
-<TITLE>org.apache.xml.fop.render.pdf.fonts Package</TITLE>
+<TITLE>org.apache.fop.render.pdf.fonts Package</TITLE>
 <BODY>
 <P>PDF font information/metrics</P>
 <P>Generated entirely from XML files.</P>
index ec19c7cc2afe7b825bb5970db81f60487ddbb493..1bcf2644febc2b6e8aebebac82cd5ad3d9860baa 100644 (file)
@@ -1,5 +1,5 @@
 <HTML>
-<TITLE>org.apache.xml.fop.render.pdf Package</TITLE>
+<TITLE>org.apache.fop.render.pdf Package</TITLE>
 <BODY>
 <P>classes for rendering to PDF</P>
 </BODY>
index b5b05277b6e37b8fe77d19c6acbccf9c6c916427..875e6b0754bef22bf95d27e03fe8236b03b0f138 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.render.xml;
+package org.apache.fop.render.xml;
+
+
 
 // FOP
-import org.apache.xml.fop.svg.*;
-import org.apache.xml.fop.render.Renderer;
-import org.apache.xml.fop.image.ImageArea;
-import org.apache.xml.fop.layout.*;
-import org.apache.xml.fop.pdf.*;
+
+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.xml.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()
+
                             + "\"/>");
+
     }
+
 }
+
index 4459f9e94f1b7940591f7e7206662f14ae82cb46..ecabe354740f0700f44a06f7b1851a5a2b286585 100644 (file)
@@ -1,5 +1,5 @@
 <HTML>
-<TITLE>org.apache.xml.fop.render.xml Package</TITLE>
+<TITLE>org.apache.fop.render.xml Package</TITLE>
 <BODY>
 <P>classes for rendering to XML for debugging</P>
 </BODY>
index 243fa1b7299db8c0c687218bec7c16e7e8cc8c15..28fa409ffc300cda2536c9b544dc5d494c559f0d 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.svg;
+package org.apache.fop.svg;
+
+
 
 /**
+
  * base class for SVG graphic objects.
+
  *
+
  * Graphic objects include rectangles, lines and text
+
  */
+
 public abstract class Graphic {}
+
index 6b815f588f7425bcb41a520bdc2e399f3e5887ec..d2a6c191fe465d88ba9a11c4a38b7d93514504a3 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.svg;
+package org.apache.fop.svg;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.layout.FontState;
-import org.apache.xml.fop.apps.FOPException;
+
+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 int 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 OK;
+
     }
+
 }
+
index 8fa0b193dc6681f7dd93ef377be26d58f8d34e78..6e9dd52eb5da575631ad836d905ad585922b1018 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.svg;
+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;
+
     }
+
 }
+
index c7c455ce6128dd2f62425926efe4e5b90c75ce6a..ac2e58e41d0808a736f2c95543097bd95311ecfc 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.svg;
+package org.apache.fop.svg;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.layout.FontState;
-import org.apache.xml.fop.apps.FOPException;
+
+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 int 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 OK;
+
     }
+
 }
+
index 8c49a3ac8798bb1ad864f25bea7f19514e294159..0f6106d85d8bde7aaf4a1c6d72374f050bc2cd32 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.svg;
+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;
+
     }
+
 }
+
index 3a68db672edbf95b69170b57e516982d55105fbc..61596262dcbb7fa2862e49c09fe0eb2d15cb2c5d 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.svg;
+package org.apache.fop.svg;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.layout.BlockArea;
-import org.apache.xml.fop.layout.FontState;
-import org.apache.xml.fop.apps.FOPException;
+
+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 int layout(Area area) throws FOPException {
+
        
+
        if (this.marker == BREAK_AFTER) {
+
            return 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 FORCE_PAGE_BREAK;
+
            }
 
+
+
            if (breakBefore == BreakBefore.ODD_PAGE) {
+
                return FORCE_PAGE_BREAK_ODD;
+
            }
 
+
+
            if (breakBefore == BreakBefore.EVEN_PAGE) {
+
                return 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);
+
            int status;
+
            if ((status = fo.layout(svgArea)) != OK) {
+
                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 FORCE_PAGE_BREAK;
+
        }
 
+
+
        if (breakAfter == BreakAfter.ODD_PAGE) {
+
            this.marker = BREAK_AFTER;
+
            return FORCE_PAGE_BREAK_ODD;
+
        }
+
        
+
        if (breakAfter == BreakAfter.EVEN_PAGE) {
+
            this.marker = BREAK_AFTER;
+
            return FORCE_PAGE_BREAK_EVEN;
+
        }
 
+
+
        /* return status */
+
        return OK;
+
     }
+
 }
+
index 41bc9ead88a48afff459ea9c7d0fdff8f2507c8d..927d13de2d89c368a7eaede355d6c4b6fc9d7c41 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.svg;
+package org.apache.fop.svg;
+
+
 
 // FOP
-import org.apache.xml.fop.render.Renderer;
-import org.apache.xml.fop.layout.FontState;
-import org.apache.xml.fop.layout.Area;
+
+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);
+
     }
+
 }
+
index 66f8d6544c8931a266b19622ce21530f8df149e8..96db2ce0694035bbffb686151afc9b0ccad0a5ef 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.svg;
+package org.apache.fop.svg;
+
+
+
+import org.apache.fop.fo.FOTreeBuilder;
+
+import org.apache.fop.fo.ElementMapping;
+
 
-import org.apache.xml.fop.fo.FOTreeBuilder;
-import org.apache.xml.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());
+
     }
+
 }
+
index 7b6648c6a8afabfbdbf73ff539f4e24b7bca41da..aade265bcbca48e3033275ef3faf79596f422b1e 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.svg;
+package org.apache.fop.svg;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.datatypes.*;
-import org.apache.xml.fop.apps.FOPException;
+
+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;
+
     }
+
 }
+
index 5a46f42054acff5fb27c47839b962b25115ad499..786d65de9e12cc410ecaf3e29733bd26d95182cf 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.svg;
+package org.apache.fop.svg;
+
+
 
 // FOP
-import org.apache.xml.fop.fo.*;
-import org.apache.xml.fop.fo.properties.*;
-import org.apache.xml.fop.layout.Area;
-import org.apache.xml.fop.layout.FontState;
-import org.apache.xml.fop.apps.FOPException;
+
+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 int 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 OK;
+
     }
+
 }
+
index 8972ecaa32efaad354f541b7a7d9a1863ed42595..736c748976db98de3a5800d94bbff467a78d3a23 100644 (file)
  Software Foundation, please see <http://www.apache.org/>.
  
  */
-package org.apache.xml.fop.svg;
+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;
+
     }
+
 }
+
index 695f0699c315f33b74455478158c19256cfaf518..537adb42d26d7e4c1f95b21098a4635f6ebbcdb8 100644 (file)
@@ -1,5 +1,5 @@
 <HTML>
-<TITLE>org.apache.xml.fop.svg Package</TITLE>
+<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>