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 fo...@locus.apache.org on 2000/05/23 19:50:37 UTC

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

fotis       00/05/23 10:50:36

  Modified:    src/org/apache/fop/fo/pagination Tag: release-0-13-0
                        PageSequence.java
  Log:
  fix: initial-page-number started with page number 1 at each page sequence
  added: initial-page-number now completely implemented
  (author: Jordan Naftolin)
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.9.2.1   +174 -93   xml-fop/src/org/apache/fop/fo/pagination/PageSequence.java
  
  Index: PageSequence.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/pagination/PageSequence.java,v
  retrieving revision 1.9
  retrieving revision 1.9.2.1
  diff -u -r1.9 -r1.9.2.1
  --- PageSequence.java	2000/04/20 08:55:33	1.9
  +++ PageSequence.java	2000/05/23 17:50:34	1.9.2.1
  @@ -1,4 +1,4 @@
  -/*-- $Id: PageSequence.java,v 1.9 2000/04/20 08:55:33 arved Exp $ -- 
  +/*-- $Id: PageSequence.java,v 1.9.2.1 2000/05/23 17:50:34 fotis Exp $ -- 
   
    ============================================================================
                      The Apache Software License, Version 1.1
  @@ -62,25 +62,32 @@
   import org.apache.fop.layout.Page;
   import org.apache.fop.layout.PageMaster;
   import org.apache.fop.layout.PageMasterFactory;
  -import org.apache.fop.apps.FOPException;				   
  +import org.apache.fop.apps.FOPException;                   
   
   // Java
   import java.util.Hashtable;
   import java.util.Vector;
   
  -public class PageSequence extends FObj { 
  +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 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();
  +        return new PageSequence.Maker();
       }
   
  +    static final int EXPLICIT = 0;
  +    static final int AUTO = 1;
  +    static final int AUTO_EVEN = 2;
  +    static final int AUTO_ODD = 3;
  +
       protected Root root;
       protected SequenceSpecification sequenceSpecification;
       protected Flow flow;
  @@ -90,105 +97,179 @@
   
       protected Page currentPage;
       protected int currentPageNumber = 0;
  +    protected static int runningPageNumberCounter = 0;  //keeps count of page number from previous PageSequence
  +    protected int pageNumberType;  // specifies page numbering type (auto|auto-even|auto-odd|explicit)
  +    protected boolean thisIsFirstPage; // used to determine whether to calculate auto, auto-even, auto-odd
   
       protected PageSequence(FObj parent, PropertyList propertyList)
  -	throws FOPException {
  -	super(parent, propertyList);
  -	this.name = "fo:page-sequence";
  -
  -	if (parent.getName().equals("fo:root")) {
  -	    this.root = (Root) parent;
  -	    this.root.addPageSequence(this);
  -	} else {
  -	    throw
  -		new FOPException("page-sequence must be child of root, not "
  -				 + parent.getName());
  -	}
  -	layoutMasterSet = root.getLayoutMasterSet();
  -
  -	InitialPageNumber ipn = (InitialPageNumber) this.properties.get("initial-page-number");
  -	int pageStart = ipn.getInteger().intValue();
  -	this.currentPageNumber =
  -	    (pageStart > 0) ? pageStart - 1 : 0;
  +    throws FOPException {
  +        super(parent, propertyList);
  +        this.name = "fo:page-sequence";
  +
  +        if ( parent.getName().equals("fo:root") )
  +        {
  +            this.root = (Root) parent;
  +            this.root.addPageSequence(this);
  +        }
  +        else
  +        {
  +            throw
  +            new FOPException("page-sequence must be child of root, not "
  +            + parent.getName());
  +        }
  +        layoutMasterSet = root.getLayoutMasterSet();
  +        thisIsFirstPage=true; // we are now on the first page of the page sequence
  +        InitialPageNumber ipn = (InitialPageNumber) this.properties.get("initial-page-number");
  +        String ipnValue=ipn.getString();
  +
  +        if ( ipnValue.equals("auto") )
  +        {
  +            pageNumberType=AUTO;            
  +        }
  +        else if ( ipnValue.equals("auto-even") )
  +        {
  +            pageNumberType=AUTO_EVEN;            
  +        }
  +        else if ( ipnValue.equals("auto-odd") )
  +        {
  +            pageNumberType=AUTO_ODD;            
  +        }
  +        else
  +        {
  +            pageNumberType=EXPLICIT;            
  +            try
  +            {
  +                int pageStart = new Integer(ipnValue).intValue();                                 
  +                this.currentPageNumber = (pageStart > 0) ? pageStart - 1 : 0;
  +            }
  +            catch ( NumberFormatException nfe )
  +            {
  +                throw new FOPException("\""+ipnValue+"\" is not a valid value for initial-page-number");
  +            }
  +        }
       }
   
       protected Page makePage(AreaTree areaTree) throws FOPException {
  -	PageMaster pageMaster;
  -	// layout this page sequence
  -		
  -	// while there is still stuff in the flow, ask the
  -	// sequence-specification for a new page 
  -	    
  -	if (this.sequenceSpecification == null) {
  -	    throw new FOPException("page-sequence is missing an"
  -				   + " sequence-specification");
  -	}
  -		
  -	PageMasterFactory pmf =
  -	    this.sequenceSpecification.getFirstPageMasterFactory();
  -
  -	pageMaster = pmf.getNextPageMaster();
  -
  -	while (pageMaster == null) {
  -	    /* move on to next sequence specifier */
  -	    pmf = pmf.getNext();
  -	    if (pmf == null) {
  -		throw new FOPException("out of sequence specifiers"
  -				       + " (FOP will eventually allow this)");
  -	    }
  -	    pageMaster = pmf.getNextPageMaster();
  -	}
  -	return pageMaster.makePage(areaTree);
  +        PageMaster pageMaster;
  +        // layout this page sequence
  +
  +        // while there is still stuff in the flow, ask the
  +        // sequence-specification for a new page 
  +
  +        if ( this.sequenceSpecification == null )
  +        {
  +            throw new FOPException("page-sequence is missing an"
  +            + " sequence-specification");
  +        }
  +
  +        PageMasterFactory pmf =
  +        this.sequenceSpecification.getFirstPageMasterFactory();
  +
  +        pageMaster = pmf.getNextPageMaster();
  +
  +        while ( pageMaster == null )
  +        {
  +            /* move on to next sequence specifier */
  +            pmf = pmf.getNext();
  +            if ( pmf == null )
  +            {
  +                throw new FOPException("out of sequence specifiers"
  +                + " (FOP will eventually allow this)");
  +            }
  +            pageMaster = pmf.getNextPageMaster();
  +        }
  +        return pageMaster.makePage(areaTree);
       }
   
       public void format(AreaTree areaTree) throws FOPException {
  -	Status status = new Status(Status.OK);
  +        Status status = new Status(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.getCode() == Status.FORCE_PAGE_BREAK_EVEN) &&
  -		((currentPageNumber % 2) == 1)) {
  -	    } else if ((status.getCode() == Status.FORCE_PAGE_BREAK_ODD) &&
  -		       ((currentPageNumber % 2) == 0)) {
  -	    } else {
  -		AreaContainer bodyArea = currentPage.getBody();
  -		status = this.flow.layout(bodyArea);
  -	    }
  -	    System.err.print("]");
  -	    areaTree.addPage(currentPage);
  -	} while (status.isIncomplete());
  -	System.err.println();
  +        do
  +        {
  +            currentPage = makePage(areaTree);            
  +
  +            if ( thisIsFirstPage )
  +            {
  +                if ( pageNumberType==AUTO )
  +                {
  +                    this.currentPageNumber=this.runningPageNumberCounter;
  +                }
  +                else if ( pageNumberType==AUTO_ODD )
  +                {
  +                    this.currentPageNumber=this.runningPageNumberCounter;
  +                    if ( this.currentPageNumber % 2== 1 )
  +                    {
  +                        this.currentPageNumber++;
  +                    }
  +                }
  +                else if ( pageNumberType==AUTO_EVEN )
  +                {
  +                    this.currentPageNumber=this.runningPageNumberCounter;
  +                    if ( this.currentPageNumber % 2 == 0 )
  +                    {
  +                        this.currentPageNumber++;
  +                    }
  +                }
  +                thisIsFirstPage=false;
  +            }
  +
  +            currentPage.setNumber(++this.currentPageNumber);
  +            this.runningPageNumberCounter=this.currentPageNumber;            
  +
  +            System.err.print(" [" + currentPageNumber);
  +            if ( (this.staticBefore != null) &&
  +            (currentPage.getBefore() != null) )
  +            {
  +                AreaContainer beforeArea = currentPage.getBefore();
  +                this.staticBefore.layout(beforeArea);
  +            }
  +            if ( (this.staticAfter != null) &&
  +            (currentPage.getAfter() != null) )
  +            {
  +                AreaContainer afterArea = currentPage.getAfter();
  +                this.staticAfter.layout(afterArea);
  +            }
  +            if ( (status.getCode() == Status.FORCE_PAGE_BREAK_EVEN) &&
  +            ((currentPageNumber % 2) == 1) )
  +            {
  +            }
  +            else if ( (status.getCode() == Status.FORCE_PAGE_BREAK_ODD) &&
  +            ((currentPageNumber % 2) == 0) )
  +            {
  +            }
  +            else
  +            {
  +                AreaContainer bodyArea = currentPage.getBody();
  +                status = this.flow.layout(bodyArea);
  +            }
  +            System.err.print("]");
  +            areaTree.addPage(currentPage);
  +        } while ( status.isIncomplete() );
  +        System.err.println();
       }
   
       public void setFlow(Flow flow) {
  -	this.flow = flow;
  +        this.flow = flow;
       }
  -    
  +
       protected void setSequenceSpecification(SequenceSpecification sequenceSpecification) {
  -	this.sequenceSpecification = sequenceSpecification;
  -	sequenceSpecification.setLayoutMasterSet(this.layoutMasterSet);
  +        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"); 
  -	}
  +        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"); 
  +        }
       }
   }