You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by pb...@apache.org on 2004/09/12 08:57:12 UTC

cvs commit: xml-fop/src/java/org/apache/fop/fo FoRoot.java

pbwest      2004/09/11 23:57:12

  Modified:    src/java/org/apache/fop/fo/flow Tag: FOP_0-20-0_Alt-Design
                        FoPageSequence.java
               src/java/org/apache/fop/fo Tag: FOP_0-20-0_Alt-Design
                        FoRoot.java
  Log:
  Work in progress
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.1.2.19  +90 -30    xml-fop/src/java/org/apache/fop/fo/flow/Attic/FoPageSequence.java
  
  Index: FoPageSequence.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/Attic/FoPageSequence.java,v
  retrieving revision 1.1.2.18
  retrieving revision 1.1.2.19
  diff -u -r1.1.2.18 -r1.1.2.19
  --- FoPageSequence.java	3 Jun 2004 13:28:47 -0000	1.1.2.18
  +++ FoPageSequence.java	12 Sep 2004 06:57:12 -0000	1.1.2.19
  @@ -36,17 +36,19 @@
   import org.apache.fop.area.Area;
   import org.apache.fop.area.Page;
   import org.apache.fop.area.PageList;
  -import org.apache.fop.area.PageListElement;
  -import org.apache.fop.area.PageSet;
  -import org.apache.fop.area.PageSetElement;
   import org.apache.fop.datastructs.TreeException;
  +import org.apache.fop.datatypes.EnumType;
  +import org.apache.fop.datatypes.IntegerType;
  +import org.apache.fop.datatypes.Numeric;
  +import org.apache.fop.datatypes.PropertyValue;
   import org.apache.fop.fo.FONode;
   import org.apache.fop.fo.FOPageSeqNode;
   import org.apache.fop.fo.FOTree;
   import org.apache.fop.fo.FObjectNames;
  +import org.apache.fop.fo.FoRoot;
   import org.apache.fop.fo.PropNames;
   import org.apache.fop.fo.expr.PropertyException;
  -import org.apache.fop.fo.pagination.FoLayoutMasterSet;
  +import org.apache.fop.fo.properties.InitialPageNumber;
   import org.apache.fop.xml.FoXmlEvent;
   import org.apache.fop.xml.XmlEvent;
   import org.apache.fop.xml.XmlEventReader;
  @@ -129,6 +131,7 @@
       private int flowChild = -1;
       /** The page currently being processed by this page-sequence */
       private Page page = null;
  +    
       /**
        * Gets the current page of this page-sequence
        * @return the page
  @@ -137,22 +140,30 @@
           return page;
       }
   
  -    /** The <code>PageList</code> for this page-sequence */
  -    private PageList pagelist = null;
  -    /** The index of the current element in the pagelist */
  +    /** The <code>PageList</code> containing the flattened
  +     * <code>pageTree</code> for this page-sequence.  This PageList contains
  +     * only <code>Page</code> elements. */
  +    private ArrayList pageArray = new ArrayList();
  +    /** The index of the current element in the pageList */
       private int pgListIndex = -1;
   
  +    /** The tree of all layout attempts for this page-sequence */
  +    private PageList pageList = null;
  +    /** An array of indicies mapping the path through the
  +     * <code>pageTree</code> to the current element  */
  +    private ArrayList pageTreeMap = null;
  +
       /**
  -     * @return the pagelist
  +     * @return the pageList
        */
  -    public PageList getPagelist() {
  -        return pagelist;
  +    public PageList getPageList() {
  +        return pageList;
       }
       /**
  -     * @param pagelist to set
  +     * @param pageList to set
        */
  -    public void setPagelist(PageList pagelist) {
  -        this.pagelist = pagelist;
  +    public void setPagelist(PageList pageList) {
  +        this.pageList = pageList;
       }
       /**
        * @return the pgListIndex
  @@ -167,22 +178,69 @@
           this.pgListIndex = pgListIndex;
       }
   
  +    public Page getCurr1stPage() {
  +        if (pageArray == null) {
  +            return null;
  +        }
  +        return (Page)(pageArray.get(0));
  +    }
  +
       /**
  -     * Gets the current first page
  -     * @return the first page
  +     * The number of the page being laid out
        */
  -    public Page getCurr1stPage() {
  -        PageListElement firstPage = pagelist.get(0);
  -        while (firstPage.isPageSet()) {
  -            PageSet pageset = (PageSet)firstPage;
  -            PageSetElement setEl = pageset.get(pageset.getCurrentElement());
  -            if (setEl.isPageList()) {
  -                firstPage = ((PageList)setEl).get(0);
  +    private int currPageNumber = 0;
  +
  +    private FoRoot root;
  +
  +    private void getInitialPageNumber() {
  +        PropertyValue pv;
  +        try {
  +            pv = getPropertyValue(PropNames.INITIAL_PAGE_NUMBER);
  +        } catch (PropertyException e) {
  +            throw new RuntimeException(
  +                    "Unable to obtain InitialPageNumber value");
  +        }
  +        int i = 0;
  +        int lastnum = root.getLastPageNumber();
  +        switch (pv.getType()) {
  +        case PropertyValue.AUTO:
  +            currPageNumber = lastnum + 1;
  +            break;
  +        case PropertyValue.ENUM:
  +            i = ((EnumType)pv).getEnumValue();
  +            switch (i) {
  +            case InitialPageNumber.AUTO_ODD:
  +                currPageNumber = 
  +                    ((lastnum % 2 == 0) ? lastnum + 1 : lastnum + 2);
  +                break;
  +            case InitialPageNumber.AUTO_EVEN:
  +                currPageNumber = 
  +                    ((lastnum % 2 == 0) ? lastnum + 2 : lastnum + 1);
  +                break;
  +            default:
  +                throw new RuntimeException(
  +                        "Unknown InitialPageNumber enum value: " + i);
  +            }
  +        case PropertyValue.INTEGER:
  +            i = ((IntegerType)pv).getInt();
  +            if (i < 0) {
  +                currPageNumber = 1;
  +            } else {
  +                currPageNumber = i;
  +            }
  +            break;
  +        case PropertyValue.NUMERIC:
  +            i = ((Numeric)pv).asInt();
  +            if (i < 0) {
  +                currPageNumber = 1;
               } else {
  -                firstPage = (Page)setEl;
  +                currPageNumber = i;
               }
  +            break;
  +        default:
  +            throw new RuntimeException("Invalid property value type "
  +                    + PropertyValue.propertyTypes.get(pv.getType()));
           }
  -        return (Page)firstPage;
       }
   
       /** Maps flownames to fo:flow and fo:static-content objects */
  @@ -233,14 +291,16 @@
        * @param parent the parent FONode of this node
        * @param event the <tt>XmlEvent</tt> that triggered the creation of
        * this node
  -     * @param layoutMasters the layout master set
  +     * @param pageSeqMasters a <code>Map</code> of the page sequence masters
  +     * from the layout master set
        */
       public FoPageSequence(FOTree foTree, FONode parent, FoXmlEvent event,
  -            FoLayoutMasterSet layoutMasters)
  +            Map pageSeqMasters)
           throws TreeException, FOPException
       {
           super(foTree, FObjectNames.PAGE_SEQUENCE, parent, event,
                 FONode.PAGESEQ_SET, sparsePropsMap, sparseIndices);
  +        root = (FoRoot)parent;
           // Set up the graphics environment
           pageSpread =
               new BufferedImage(20*72, 12*72, BufferedImage.TYPE_INT_RGB);
  @@ -306,7 +366,7 @@
               // Generate a null page for the flow(s)
               page = Page.setupNullPage(this, foTree.getNextPageId());
               // Intialize the PageList for this page-sequence
  -            pagelist = new PageList(page);
  +            pageList = new PageList(page);
               pgListIndex = 0;
   
               // Look for one or more fo:flow
  
  
  
  No                   revision
  No                   revision
  1.1.2.14  +26 -7     xml-fop/src/java/org/apache/fop/fo/Attic/FoRoot.java
  
  Index: FoRoot.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/Attic/FoRoot.java,v
  retrieving revision 1.1.2.13
  retrieving revision 1.1.2.14
  diff -u -r1.1.2.13 -r1.1.2.14
  --- FoRoot.java	18 May 2004 23:05:27 -0000	1.1.2.13
  +++ FoRoot.java	12 Sep 2004 06:57:12 -0000	1.1.2.14
  @@ -81,6 +81,25 @@
       /** Offset of first page-sequence child node. */
       private int firstPageSeq = -1;
   
  +    /** The page number of the last laid-out page */
  +    private int lastPageNumber = 0;
  +    /**
  +     * Gets the last laid-out page number.  This is generally set by the
  +     * page-sequence.
  +     * @return the page number
  +     */
  +    public int getLastPageNumber() {
  +        return lastPageNumber;
  +    }
  +    /**
  +     * Sets the last generated page number.  This is generally set from the
  +     * page-sequence processing.
  +     * @param number the last generated number
  +     */
  +    public void setLastPageNumber(int number) {
  +        lastPageNumber = number; 
  +    }
  +
       /**
        * @param foTree the FO tree being built
        * @param event the <tt>XmlEvent</tt> that triggered the creation of this
  @@ -159,16 +178,16 @@
               if (ev == null)
                   throw new FOPException("No page-sequence found.");
               firstPageSeq = numChildren();
  -            new FoPageSequence(
  -                    getFOTree(), this, (FoXmlEvent)ev, layoutMasters);
  +            new FoPageSequence(getFOTree(), this, (FoXmlEvent)ev,
  +                    layoutMasters.getPageSequenceMasters());
               ev = xmlevents.getEndElement(XmlEventReader.DISCARD_EV, ev);
               namespaces.relinquishEvent(ev);
               while ((ev = xmlevents.expectStartElement
                       (FObjectNames.PAGE_SEQUENCE, XmlEvent.DISCARD_W_SPACE))
                      != null) {
                   // Loop over remaining fo:page-sequences
  -                new FoPageSequence(
  -                        getFOTree(), this, (FoXmlEvent)ev, layoutMasters);
  +                new FoPageSequence(getFOTree(), this, (FoXmlEvent)ev,
  +                        layoutMasters.getPageSequenceMasters());
                   ev = xmlevents.getEndElement(XmlEventReader.DISCARD_EV, ev);
                   namespaces.relinquishEvent(ev);
               }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org