gmazza      2004/07/06 18:51:50

  Modified:    src/java/org/apache/fop/area AreaTree.java
                        AreaTreeModel.java CachedRenderPagesModel.java
                        RenderPagesModel.java StorePagesModel.java
               src/java/org/apache/fop/fo FObj.java
               src/java/org/apache/fop/fo/pagination Title.java
  Removed:     src/java/org/apache/fop/tools AreaTreeBuilder.java
  Log:
  1.) Moved the Renderer creation further down from AreaTree to RenderPagesModel 
(subclass of AreaTreeModel).  Still have the issue of the four-param constructor a bit 
messy, also some of the exceptions I have to declare to be thrown may not be necessary.
  
  2.) Removed encapsulation-breaking methods from AreaTree; dropped the 
AreaTreeBuilder class as it wasn't conformant with our API and required too many 
objects to expose internal functionality.
  
  3.) Validity checking added for fo:title, however still won't work as #PCDATA needs 
<fo:blocks> around it within FOP, but the Recommendation bans those for fo:title.
  
  4.) isInlineItem() added to FObj, as a quick check for the %inline; parameter entity 
as defined in spec.
  
  Revision  Changes    Path
  1.15      +16 -97    xml-fop/src/java/org/apache/fop/area/AreaTree.java
  
  Index: AreaTree.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/AreaTree.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- AreaTree.java     6 Jul 2004 05:25:09 -0000       1.14
  +++ AreaTree.java     7 Jul 2004 01:51:50 -0000       1.15
  @@ -18,7 +18,6 @@
   package org.apache.fop.area;
   
   // Java
  -import java.io.IOException;
   import java.io.OutputStream;
   import java.util.ArrayList;
   import java.util.List;
  @@ -35,11 +34,9 @@
   import org.apache.fop.apps.FOPException;
   import org.apache.fop.apps.FOUserAgent;
   import org.apache.fop.area.extensions.BookmarkData;
  -import org.apache.fop.fo.Constants;
   import org.apache.fop.fo.extensions.Outline;
   import org.apache.fop.fo.extensions.Bookmarks;
   import org.apache.fop.fonts.FontInfo;
  -import org.apache.fop.render.Renderer;
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   
  @@ -52,12 +49,12 @@
    * The area tree needs to be simple to render and follow the spec
    * closely.
    * This area tree has the concept of page sequences.
  - * Where ever possible information is discarded or optimised to
  - * keep memory use low. The data is also organised to make it
  - * possible for renderers to minimise their output.
  + * Where ever possible information is discarded or optimized to
  + * keep memory use low. The data is also organized to make it
  + * possible for renderers to minimize their output.
    * A page can be saved if not fully resolved and once rendered
    * a page contains only size and id reference information.
  - * The area tree pages are organised in a model that depends on the
  + * The area tree pages are organized in a model that depends on the
    * type of renderer.
    */
   public class AreaTree {
  @@ -67,8 +64,10 @@
   
       // hashmap of arraylists containing pages with id area
       private Map idLocations = new HashMap();
  +
       // list of id's yet to be resolved and arraylists of pages
       private Map resolve = new HashMap();
  +
       private List treeExtensions = new ArrayList();
   
       private static Log log = LogFactory.getLog(AreaTree.class);
  @@ -76,97 +75,22 @@
       private FOUserAgent foUserAgent;
   
       /**
  -     * the renderer to use to output the area tree
  -     */
  -    private Renderer renderer;
  -
  -    /**
        * Constructor.
  +     * @param userAgent FOUserAgent object for process
  +     * @param renderType Desired fo.Constants output type (RENDER_PDF, 
  +     *   RENDER_PS, etc.)
  +     * @param fontInfo FontInfo object
  +     * @param stream OutputStream
        */
       public AreaTree (FOUserAgent userAgent, int renderType, 
           FontInfo fontInfo, OutputStream stream) throws FOPException {
   
           foUserAgent = userAgent;
  -
  -        if (foUserAgent.getRendererOverride() != null) {
  -            renderer = foUserAgent.getRendererOverride();
  -        } else {
  -            renderer = createRenderer(renderType);
  -            renderer.setUserAgent(foUserAgent);
  -        }
  -
  -        try {
  -            renderer.setupFontInfo(fontInfo);
  -            // check that the "any,normal,400" font exists
  -            if (!fontInfo.isSetupValid()) {
  -                throw new FOPException(
  -                    "No default font defined by OutputConverter");
  -            }
  -            renderer.startRenderer(stream);
  -        } catch (IOException e) {
  -            throw new FOPException(e);
  -        }
  -
  -        // this.atModel = new CachedRenderPagesModel(renderer);
  -        setTreeModel(new RenderPagesModel(renderer));
  -    }
  -
  -
  -    /**
  -     * Creates a Renderer object based on render-type desired
  -     * @param renderType the type of renderer to use
  -     * @return Renderer the new Renderer instance
  -     * @throws IllegalArgumentException if an unsupported renderer type was 
requested
  -     */
  -    private Renderer createRenderer(int renderType) throws IllegalArgumentException 
{
  -
  -        switch (renderType) {
  -        case Constants.RENDER_PDF:
  -            return new org.apache.fop.render.pdf.PDFRenderer();
  -        case Constants.RENDER_AWT:
  -            return new org.apache.fop.render.awt.AWTRenderer();
  -        case Constants.RENDER_PRINT:
  -            return new org.apache.fop.render.awt.AWTPrintRenderer();
  -        case Constants.RENDER_PCL:
  -            return new org.apache.fop.render.pcl.PCLRenderer();
  -        case Constants.RENDER_PS:
  -            return new org.apache.fop.render.ps.PSRenderer();
  -        case Constants.RENDER_TXT:
  -            return new org.apache.fop.render.txt.TXTRenderer();
  -        case Constants.RENDER_XML:
  -            return new org.apache.fop.render.xml.XMLRenderer();
  -        case Constants.RENDER_SVG:
  -            return new org.apache.fop.render.svg.SVGRenderer();
  -        default:
  -            throw new IllegalArgumentException("Invalid renderer type " 
  -                + renderType);
  -        }
  -    }
  -
  -    /**
  -     * Temporary accessor for renderer for tools.AreaTreeBuilder
  -     * @return renderer The renderer being used by this area tree
  -     */
  -    public Renderer getRenderer() {
  -        return renderer;
  -    }
  -
  -    /**
  -     * Create a new store pages model.
  -     * @return StorePagesModel the new model
  -     */
  -    public static StorePagesModel createStorePagesModel() {
  -        return new StorePagesModel();
  -    }
  -
  -    /**
  -     * Set the tree model to use for this area tree.
  -     * The different models can have different behaviour
  -     * when pages area added and other changes.
  -     * @param m the area tree model
  -     */
  -    public void setTreeModel(AreaTreeModel m) {
  -        model = m;
  +        
  +        // model = new CachedRenderPagesModel(userAgent, renderType,
  +        //  fontInfo, stream);
  +        model = new RenderPagesModel(userAgent, renderType, fontInfo,
  +            stream);
       }
   
       /**
  @@ -297,11 +221,6 @@
               }
           }
           model.endDocument();
  -        try {
  -            renderer.stopRenderer();
  -        } catch (IOException ex) {
  -            throw new SAXException(ex);
  -        }        
       }
   
       /**
  
  
  
  1.3       +5 -2      xml-fop/src/java/org/apache/fop/area/AreaTreeModel.java
  
  Index: AreaTreeModel.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/AreaTreeModel.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AreaTreeModel.java        27 Feb 2004 17:41:26 -0000      1.2
  +++ AreaTreeModel.java        7 Jul 2004 01:51:50 -0000       1.3
  @@ -18,11 +18,14 @@
    
   package org.apache.fop.area;
   
  +// XML
  +import org.xml.sax.SAXException;
  +
   /**
    * This is the model for the area tree object.
    * The model implementation can handle the page sequence,
    * page and extensions.
  - * The mathods to acces the page viewports can only
  + * The methods to access the page viewports can only
    * assume the PageViewport is valid as it remains for
    * the life of the area tree model.
    */
  @@ -49,7 +52,7 @@
       /**
        * Signal the end of the document for any processing.
        */
  -    public abstract void endDocument();
  +    public abstract void endDocument() throws SAXException;
   
       /**
        * Get the page sequence count.
  
  
  
  1.4       +9 -4      xml-fop/src/java/org/apache/fop/area/CachedRenderPagesModel.java
  
  Index: CachedRenderPagesModel.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/area/CachedRenderPagesModel.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CachedRenderPagesModel.java       27 Feb 2004 17:41:26 -0000      1.3
  +++ CachedRenderPagesModel.java       7 Jul 2004 01:51:50 -0000       1.4
  @@ -18,6 +18,9 @@
    
   package org.apache.fop.area;
   
  +import org.apache.fop.apps.FOPException;
  +import org.apache.fop.apps.FOUserAgent;
  +import org.apache.fop.fonts.FontInfo;
   import org.apache.fop.render.Renderer;
   
   import java.util.Map;
  @@ -29,6 +32,7 @@
   import java.io.FileInputStream;
   import java.io.ObjectOutputStream;
   import java.io.ObjectInputStream;
  +import java.io.OutputStream;
   import java.io.BufferedOutputStream;
   import java.io.BufferedInputStream;
   
  @@ -42,11 +46,12 @@
       private Map pageMap = new HashMap();
   
       /**
  -     * Create a new render pages model with the given renderer.
  -     * @param rend the renderer to render pages to
  +     * Constructor
  +     * @see org.apache.fop.area.RenderPagesModel(FOUserAgent, int, FontInfo, 
OutputStream)
        */
  -    public CachedRenderPagesModel(Renderer rend) {
  -        super(rend);
  +    public CachedRenderPagesModel (FOUserAgent userAgent, int renderType, 
  +        FontInfo fontInfo, OutputStream stream) throws FOPException {
  +        super(userAgent, renderType, fontInfo, stream);
       }
   
       /**
  
  
  
  1.3       +77 -7     xml-fop/src/java/org/apache/fop/area/RenderPagesModel.java
  
  Index: RenderPagesModel.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/RenderPagesModel.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- RenderPagesModel.java     27 Feb 2004 17:41:26 -0000      1.2
  +++ RenderPagesModel.java     7 Jul 2004 01:51:50 -0000       1.3
  @@ -18,13 +18,22 @@
    
   package org.apache.fop.area;
   
  -// FOP
  -import org.apache.fop.render.Renderer;
  -
   // Java
  +import java.io.IOException;
  +import java.io.OutputStream;
   import java.util.List;
   import java.util.Iterator;
   
  +// XML
  +import org.xml.sax.SAXException;
  +
  +// FOP
  +import org.apache.fop.apps.FOPException;
  +import org.apache.fop.apps.FOUserAgent;
  +import org.apache.fop.fo.Constants;
  +import org.apache.fop.fonts.FontInfo;
  +import org.apache.fop.render.Renderer;
  +
   /**
    * This uses the store pages model to store the pages
    * each page is either rendered if ready or prepared
  @@ -38,6 +47,7 @@
        * The renderer that will render the pages.
        */
       protected Renderer renderer;
  +    
       /**
        * Pages that have been prepared but not rendered yet.
        */
  @@ -47,10 +57,64 @@
   
       /**
        * Create a new render pages model with the given renderer.
  -     * @param rend the renderer to render pages to
  +     * @param userAgent FOUserAgent object for process
  +     * @param renderType Desired fo.Constants output type (RENDER_PDF, 
  +     *   RENDER_PS, etc.)
  +     * @param fontInfo FontInfo object
  +     * @param stream OutputStream
        */
  -    public RenderPagesModel(Renderer rend) {
  -        renderer = rend;
  +    public RenderPagesModel (FOUserAgent userAgent, int renderType, 
  +        FontInfo fontInfo, OutputStream stream) throws FOPException {
  +
  +        if (userAgent.getRendererOverride() != null) {
  +            renderer = userAgent.getRendererOverride();
  +        } else {
  +            renderer = createRenderer(renderType);
  +            renderer.setUserAgent(userAgent);
  +        }
  +
  +        try {
  +            renderer.setupFontInfo(fontInfo);
  +            // check that the "any,normal,400" font exists
  +            if (!fontInfo.isSetupValid()) {
  +                throw new FOPException(
  +                    "No default font defined by OutputConverter");
  +            }
  +            renderer.startRenderer(stream);
  +        } catch (IOException e) {
  +            throw new FOPException(e);
  +        }
  +    }
  +
  +    /**
  +     * Creates a Renderer object based on render-type desired
  +     * @param renderType the type of renderer to use
  +     * @return Renderer the new Renderer instance
  +     * @throws IllegalArgumentException if an unsupported renderer type was 
requested
  +     */
  +    private Renderer createRenderer(int renderType) throws IllegalArgumentException 
{
  +
  +        switch (renderType) {
  +        case Constants.RENDER_PDF:
  +            return new org.apache.fop.render.pdf.PDFRenderer();
  +        case Constants.RENDER_AWT:
  +            return new org.apache.fop.render.awt.AWTRenderer();
  +        case Constants.RENDER_PRINT:
  +            return new org.apache.fop.render.awt.AWTPrintRenderer();
  +        case Constants.RENDER_PCL:
  +            return new org.apache.fop.render.pcl.PCLRenderer();
  +        case Constants.RENDER_PS:
  +            return new org.apache.fop.render.ps.PSRenderer();
  +        case Constants.RENDER_TXT:
  +            return new org.apache.fop.render.txt.TXTRenderer();
  +        case Constants.RENDER_XML:
  +            return new org.apache.fop.render.xml.XMLRenderer();
  +        case Constants.RENDER_SVG:
  +            return new org.apache.fop.render.svg.SVGRenderer();
  +        default:
  +            throw new IllegalArgumentException("Invalid renderer type " 
  +                + renderType);
  +        }
       }
   
       /**
  @@ -178,7 +242,7 @@
       /**
        * End the document. Render any end document extensions.
        */
  -    public void endDocument() {
  +    public void endDocument() throws SAXException {
           // render any pages that had unresolved ids
           checkPreparedPages(null);
   
  @@ -186,6 +250,12 @@
           pendingExt.clear();
   
           renderExtensions(endDocExt);
  +        
  +        try {
  +            renderer.stopRenderer();
  +        } catch (IOException ex) {
  +            throw new SAXException(ex);
  +        }        
       }
   }
   
  
  
  
  1.4       +5 -1      xml-fop/src/java/org/apache/fop/area/StorePagesModel.java
  
  Index: StorePagesModel.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/StorePagesModel.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- StorePagesModel.java      27 Feb 2004 17:41:26 -0000      1.3
  +++ StorePagesModel.java      7 Jul 2004 01:51:50 -0000       1.4
  @@ -21,6 +21,10 @@
   // Java
   import java.util.List;
   
  +// XML
  +import org.xml.sax.SAXException;
  +
  +
   /**
    * This class stores all the pages in the document
    * for interactive agents.
  @@ -142,6 +146,6 @@
       /**
        * End document, do nothing.
        */
  -    public void endDocument() {
  +    public void endDocument() throws SAXException {
       }
   }
  
  
  
  1.49      +30 -4     xml-fop/src/java/org/apache/fop/fo/FObj.java
  
  Index: FObj.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FObj.java,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- FObj.java 4 Jul 2004 04:50:54 -0000       1.48
  +++ FObj.java 7 Jul 2004 01:51:50 -0000       1.49
  @@ -445,7 +445,7 @@
        * Convenience method for validity checking.  Checks if the
        * incoming node is a member of the "%block;" parameter entity
        * as defined in Sect. 6.2 of the XSL 1.0 & 1.1 Recommendations
  -     * @param nsURI namespace URI of incoming invalid node
  +     * @param nsURI namespace URI of incoming node
        * @param lName local name (i.e., no prefix) of incoming node 
        * @return true if a member, false if not
        */
  @@ -456,15 +456,40 @@
               || lName.equals("table-and-caption") 
               || lName.equals("block-container")
               || lName.equals("list-block") 
  -            || lName.equals("float")))
  -            || isNeutralItem(nsURI, lName);
  +            || lName.equals("float")
  +            || isNeutralItem(nsURI, lName)));
  +    }
  +
  +    /**
  +     * Convenience method for validity checking.  Checks if the
  +     * incoming node is a member of the "%inline;" parameter entity
  +     * as defined in Sect. 6.2 of the XSL 1.0 & 1.1 Recommendations
  +     * @param nsURI namespace URI of incoming node
  +     * @param lName local name (i.e., no prefix) of incoming node 
  +     * @return true if a member, false if not
  +     */
  +    protected static boolean isInlineItem(String nsURI, String lName) {
  +        return (nsURI == FOElementMapping.URI && 
  +            (lName.equals("bidi-override") 
  +            || lName.equals("character") 
  +            || lName.equals("external-graphic") 
  +            || lName.equals("instream-foreign-object")
  +            || lName.equals("inline") 
  +            || lName.equals("inline-container")
  +            || lName.equals("leader") 
  +            || lName.equals("page-number") 
  +            || lName.equals("page-number-citation")
  +            || lName.equals("basic-link")
  +            || lName.equals("multi-toggle")
  +            || lName.equals("footnote") // temp only -- not always correct (see 
spec)
  +            || isNeutralItem(nsURI, lName)));
       }
   
       /**
        * Convenience method for validity checking.  Checks if the
        * incoming node is a member of the neutral item list
        * as defined in Sect. 6.2 of the XSL 1.0 & 1.1 Recommendations
  -     * @param nsURI namespace URI of incoming invalid node
  +     * @param nsURI namespace URI of incoming node
        * @param lName local name (i.e., no prefix) of incoming node 
        * @return true if a member, false if not
        */
  @@ -473,6 +498,7 @@
               (lName.equals("multi-switch") 
               || lName.equals("multi-properties")
               || lName.equals("wrapper") 
  +            || lName.equals("float") // temp only -- not always correct (see spec)
               || lName.equals("retrieve-marker")));
       }
   }
  
  
  
  1.20      +15 -1     xml-fop/src/java/org/apache/fop/fo/pagination/Title.java
  
  Index: Title.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/pagination/Title.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- Title.java        18 Jun 2004 04:13:53 -0000      1.19
  +++ Title.java        7 Jul 2004 01:51:50 -0000       1.20
  @@ -18,6 +18,10 @@
   
   package org.apache.fop.fo.pagination;
   
  +// XML
  +import org.xml.sax.Attributes;
  +import org.xml.sax.Locator;
  +
   // FOP
   import org.apache.fop.datatypes.ColorType;
   import org.apache.fop.datatypes.Length;
  @@ -44,6 +48,16 @@
        */
       public Title(FONode parent) {
           super(parent);
  +    }
  +
  +    /**
  +     * @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String)
  +        XSL/FOP: (#PCDATA|%inline;)*
  +     */
  +    protected void validateChildNode(Locator loc, String nsURI, String localName) {
  +        if (!isInlineItem(nsURI, localName)) {
  +            invalidChildError(loc, nsURI, localName);
  +        }
       }
   
       private void setup() {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to