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 ke...@apache.org on 2001/06/22 10:52:08 UTC

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

keiron      01/06/22 01:52:08

  Modified:    src/org/apache/fop/fo/pagination PageSequence.java Root.java
  Log:
  should handle page number properly, with threads
  and multiple page sequences
  also cleaned up code
  Submitted by: Jeremias Maerki <je...@outline.ch>
  
  Revision  Changes    Path
  1.29      +353 -386  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.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- PageSequence.java	2001/05/01 01:00:32	1.28
  +++ PageSequence.java	2001/06/22 08:52:08	1.29
  @@ -1,8 +1,7 @@
  -/*-- $Id: PageSequence.java,v 1.28 2001/05/01 01:00:32 arved Exp $ -- 
  - *
  +/*-- $Id: PageSequence.java,v 1.29 2001/06/22 08:52:08 keiron Exp $ --
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
  - * For details on use and redistribution please refer to the 
  - * LICENSE file included with these sources."
  + * For details on use and redistribution please refer to the
  + * LICENSE file included with these sources.
    */
   
   package org.apache.fop.fo.pagination;
  @@ -19,7 +18,7 @@
   import org.apache.fop.layout.AreaTree;
   import org.apache.fop.layout.Page;
   import org.apache.fop.layout.PageMaster;
  -import org.apache.fop.apps.FOPException;                   
  +import org.apache.fop.apps.FOPException;
   
   // Java
   import java.util.*;
  @@ -29,15 +28,13 @@
    * This provides pagination of flows onto pages. Much of the logic for paginating
    * flows is contained in this class. The main entry point is the format method.
    */
  -public class PageSequence extends FObj
  -{
  +public class PageSequence extends FObj {
       //
       // Factory methods
       //
  -    public static class Maker extends FObj.Maker
  -    {
  -        public FObj make(FObj parent, PropertyList propertyList)
  -        throws FOPException {
  +    public static class Maker extends FObj.Maker {
  +        public FObj make(FObj parent,
  +                         PropertyList propertyList) throws FOPException {
               return new PageSequence(parent, propertyList);
           }
       }
  @@ -74,11 +71,11 @@
       /** the "master-name" attribute */
       private String masterName;
   
  -	// according to communication from Paul Grosso (XSL-List,
  -	// 001228, Number 406), confusion in spec section 6.4.5 about
  -	// multiplicity of fo:flow in XSL 1.0 is cleared up - one (1)
  -	// fo:flow per fo:page-sequence only.
  -	private boolean isFlowSet = false;
  +    // according to communication from Paul Grosso (XSL-List,
  +    // 001228, Number 406), confusion in spec section 6.4.5 about
  +    // multiplicity of fo:flow in XSL 1.0 is cleared up - one (1)
  +    // fo:flow per fo:page-sequence only.
  +    private boolean isFlowSet = false;
   
       //
       // state attributes used during layout
  @@ -88,9 +85,6 @@
   
       private int currentPageNumber = 0;
   
  -    /** keeps count of page number from previous PageSequence */
  -    private int runningPageNumberCounter = 0;
  -
       /** specifies page numbering type (auto|auto-even|auto-odd|explicit) */
       private int pageNumberType;
   
  @@ -107,78 +101,65 @@
       private String currentPageMasterName;
   
   
  -    protected PageSequence(FObj parent, PropertyList propertyList)
  -    throws FOPException {
  +    protected PageSequence(FObj parent,
  +                           PropertyList propertyList) throws FOPException {
           super(parent, propertyList);
           this.name = "fo:page-sequence";
   
  -        if ( parent.getName().equals("fo:root") )
  -        {
  -            this.runningPageNumberCounter=0; //else not initialized correctly
  +        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());
  +        } else {
  +            throw new FOPException(
  +              "page-sequence must be child of root, not " +
  +              parent.getName());
           }
  -	
  +
           layoutMasterSet = root.getLayoutMasterSet();
   
  -	// best time to run some checks on LayoutMasterSet
  +        // best time to run some checks on LayoutMasterSet
           layoutMasterSet.checkRegionNames();
  -
  -	_flowMap = new Hashtable();
   
  -        thisIsFirstPage=true; // we are now on the first page of the page sequence
  -        String ipnValue= this.properties.get("initial-page-number").getString();
  +        _flowMap = new Hashtable();
   
  -        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
  -            {
  +        thisIsFirstPage = true; // we are now on the first page of the page sequence
  +        String ipnValue =
  +          this.properties.get("initial-page-number").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");
  +                this.currentPageNumber =
  +                  (pageStart > 0) ? pageStart - 1 : 0;
  +            } catch (NumberFormatException nfe) {
  +                throw new FOPException("\""+ipnValue + "\" is not a valid value for initial-page-number");
               }
           }
   
           masterName = this.properties.get("master-name").getString();
  -	
   
  +
       }
  -    
  -    public void addFlow(Flow flow) 
  -	throws FOPException
  -    {
  -	if (_flowMap.containsKey(flow.getFlowName())) {
  -	    throw new FOPException("flow-names must be unique within an fo:page-sequence");
  -	}
  -	if (!this.layoutMasterSet.regionNameExists(flow.getFlowName())) {
  -	    MessageHandler.errorln("WARNING: region-name '"+flow.getFlowName()+"' doesn't exist in the layout-master-set.");
  -	}
  -	_flowMap.put(flow.getFlowName(), flow);
  -	setIsFlowSet(true);
  +
  +    public void addFlow(Flow flow) throws FOPException {
  +        if (_flowMap.containsKey(flow.getFlowName())) {
  +            throw new FOPException("flow-names must be unique within an fo:page-sequence");
  +        }
  +        if (!this.layoutMasterSet.regionNameExists(flow.getFlowName())) {
  +            MessageHandler.errorln("WARNING: region-name '"+
  +                                   flow.getFlowName() + "' doesn't exist in the layout-master-set.");
  +        }
  +        _flowMap.put(flow.getFlowName(), flow);
  +        setIsFlowSet(true);
       }
  -    
  +
   
       /**
        * Runs the formatting of this page sequence into the given area tree
  @@ -186,105 +167,95 @@
       public void format(AreaTree areaTree) throws FOPException {
           Status status = new Status(Status.OK);
   
  -		this.layoutMasterSet.resetPageMasters();
  +        this.layoutMasterSet.resetPageMasters();
   
  -        do
  -        {
  -	    // makePage() moved to after the page-number computations,
  -	    // but store the page-number at this point for that method,
  -	    // since we want the 'current' current page-number...
  -	    int firstAvailPageNumber = this.runningPageNumberCounter;
  -	    boolean tempIsFirstPage = false;
  -         
  -            if ( thisIsFirstPage )
  -            {
  -				tempIsFirstPage = thisIsFirstPage;
  -                if ( pageNumberType==AUTO )
  -                {
  -                    this.currentPageNumber=this.runningPageNumberCounter;
  -                }
  -                else if ( pageNumberType==AUTO_ODD )
  -                {
  -                    this.currentPageNumber=this.runningPageNumberCounter;
  -                    if ( this.currentPageNumber % 2== 1 )
  -                    {
  +        do {
  +            // makePage() moved to after the page-number computations,
  +            // but store the page-number at this point for that method,
  +            // since we want the 'current' current page-number...
  +            int firstAvailPageNumber =
  +              this.root.getRunningPageNumberCounter();
  +            boolean tempIsFirstPage = false;
  +
  +            if (thisIsFirstPage) {
  +                tempIsFirstPage = thisIsFirstPage;
  +                if (pageNumberType == AUTO) {
  +                    this.currentPageNumber =
  +                      this.root.getRunningPageNumberCounter();
  +                } else if (pageNumberType == AUTO_ODD) {
  +                    this.currentPageNumber =
  +                      this.root.getRunningPageNumberCounter();
  +                    if (this.currentPageNumber % 2 == 1) {
                           this.currentPageNumber++;
                       }
  -                }
  -                else if ( pageNumberType==AUTO_EVEN )
  -                {
  -                    this.currentPageNumber=this.runningPageNumberCounter;
  -                    if ( this.currentPageNumber % 2 == 0 )
  -                    {
  +                } else if (pageNumberType == AUTO_EVEN) {
  +                    this.currentPageNumber =
  +                      this.root.getRunningPageNumberCounter();
  +                    if (this.currentPageNumber % 2 == 0) {
                           this.currentPageNumber++;
                       }
                   }
  -                thisIsFirstPage=false;
  +                thisIsFirstPage = false;
  +            }
  +
  +            this.currentPageNumber++;
  +
  +            // deliberately moved down here so page-number calculations
  +            // are complete;
  +            // compute flag for 'blank-or-not-blank'
  +            boolean isEmptyPage = false;
  +
  +            if ((status.getCode() == Status.FORCE_PAGE_BREAK_EVEN) &&
  +                    ((currentPageNumber % 2) == 1)) {
  +                isEmptyPage = true;
  +            } else if ( (status.getCode() == Status.FORCE_PAGE_BREAK_ODD) &&
  +                ((currentPageNumber % 2) == 0)) {
  +                isEmptyPage = true;
  +            } else {
  +                isEmptyPage = false;
               }
  +
  +            currentPage = makePage(areaTree, firstAvailPageNumber,
  +                                   tempIsFirstPage, isEmptyPage);
   
  -	    this.currentPageNumber++;
  -  
  -	    // deliberately moved down here so page-number calculations
  -	    // are complete;
  - 	    // compute flag for 'blank-or-not-blank'
  -	    boolean isEmptyPage = false;
  -	    
  -	    if ( (status.getCode() == Status.FORCE_PAGE_BREAK_EVEN) &&
  -		 ((currentPageNumber % 2) == 1) ) {
  -		isEmptyPage = true;
  -	    }
  -	    else if ( (status.getCode() == Status.FORCE_PAGE_BREAK_ODD) &&
  -		      ((currentPageNumber % 2) == 0) ) {
  -		isEmptyPage = true;
  -	    }
  -	    else {
  -		isEmptyPage = false;
  -	    }
  -
  -	    currentPage = makePage(areaTree, firstAvailPageNumber,
  -				   tempIsFirstPage, isEmptyPage);
  -	    	    
  -	    currentPage.setNumber(this.currentPageNumber);
  -	    this.runningPageNumberCounter=this.currentPageNumber;            
  +            currentPage.setNumber(this.currentPageNumber);
  +            this.root.setRunningPageNumberCounter(this.currentPageNumber);
   
               MessageHandler.log(" [" + currentPageNumber);
   
  -	    formatStaticContent(areaTree);
  -	        
  -            if ( (status.getCode() == Status.FORCE_PAGE_BREAK_EVEN) &&
  -            ((currentPageNumber % 2) == 1) )
  -            {
  -            }
  -            else if ( (status.getCode() == Status.FORCE_PAGE_BREAK_ODD) &&
  -            ((currentPageNumber % 2) == 0) )
  -            {
  -            }
  -            else
  -            {
  +            formatStaticContent(areaTree);
  +
  +            if ((status.getCode() == Status.FORCE_PAGE_BREAK_EVEN) &&
  +                    ((currentPageNumber % 2) == 1)) {
  +            } else if ( (status.getCode() == Status.FORCE_PAGE_BREAK_ODD) &&
  +                ((currentPageNumber % 2) == 0)) {
  +            } else {
                   BodyAreaContainer bodyArea = currentPage.getBody();
                   bodyArea.setIDReferences(areaTree.getIDReferences());
  -		
  -		Flow flow = getCurrentFlow(RegionBody.REGION_CLASS);
  -		
  -		if (null == flow) {
  -	 	    MessageHandler.errorln("No flow found for region-body "
  -		 			   + "in page-master '" + currentPageMasterName + "'");
  -		    break;
  -		    
  -		}
  -		else {
  -		    status = flow.layout(bodyArea);
  -		}
  -		
  +
  +                Flow flow = getCurrentFlow(RegionBody.REGION_CLASS);
  +
  +                if (null == flow) {
  +                    MessageHandler.errorln(
  +                      "No flow found for region-body " +
  +                      "in page-master '" +
  +                      currentPageMasterName + "'");
  +                    break;
  +
  +                } else {
  +                    status = flow.layout(bodyArea);
  +                }
  +
               }
               MessageHandler.log("]");
               areaTree.addPage(currentPage);
  -	} while ( flowsAreIncomplete() );
  -		
  +        } while (flowsAreIncomplete())
  +            ;
  +
           MessageHandler.logln("");
       }
   
  -    /** 
  +    /**
        * Creates a new page area for the given parameters
        * @param areaTree the area tree the page should be contained in
        * @param firstAvailPageNumber the page number for this page
  @@ -293,25 +264,24 @@
        * @return a Page layout object based on the page master selected from the params
        */
       private Page makePage(AreaTree areaTree, int firstAvailPageNumber,
  -			  boolean isFirstPage, boolean isEmptyPage)
  -	throws FOPException {
  +                          boolean isFirstPage, boolean isEmptyPage) throws FOPException {
           // layout this page sequence
  -		
  +
           // while there is still stuff in the flow, ask the
  -        // layoutMasterSet for a new page 
  +        // layoutMasterSet for a new page
   
  -	// page number is 0-indexed
  -        PageMaster pageMaster = getNextPageMaster(masterName, firstAvailPageNumber, 
  -						  isFirstPage, isEmptyPage );
  -
  -		// a legal alternative is to use the last sub-sequence
  -		// specification which should be handled in getNextSubsequence. That's not done here.
  -        if ( pageMaster == null )
  -        {
  -		throw new FOPException("page masters exhausted. Cannot recover.");
  +        // page number is 0-indexed
  +        PageMaster pageMaster =
  +          getNextPageMaster(masterName, firstAvailPageNumber,
  +                            isFirstPage, isEmptyPage);
  +
  +        // a legal alternative is to use the last sub-sequence
  +        // specification which should be handled in getNextSubsequence. That's not done here.
  +        if (pageMaster == null) {
  +            throw new FOPException("page masters exhausted. Cannot recover.");
           }
           Page p = pageMaster.makePage(areaTree);
  -        if(currentPage != null) {
  +        if (currentPage != null) {
               Vector foots = currentPage.getPendingFootnotes();
               p.setPendingFootnotes(foots);
           }
  @@ -321,250 +291,247 @@
       /**
        * Formats the static content of the current page
        */
  -    private void formatStaticContent(AreaTree areaTree) 
  -	throws FOPException
  -    {
  -	SimplePageMaster simpleMaster = getCurrentSimplePageMaster(); 
  -
  -	if (simpleMaster.getRegion(RegionBefore.REGION_CLASS) != null && (currentPage.getBefore() != null)) {
  -	    Flow staticFlow = (Flow)_flowMap.get(simpleMaster.getRegion(RegionBefore.REGION_CLASS).getRegionName());
  -	    if (staticFlow != null) {
  -		AreaContainer beforeArea = currentPage.getBefore();
  -		beforeArea.setIDReferences(areaTree.getIDReferences());
  -		layoutStaticContent(staticFlow, simpleMaster.getRegion(RegionBefore.REGION_CLASS),
  -				    beforeArea);
  -	    }
  -	}
  -
  -	if (simpleMaster.getRegion(RegionAfter.REGION_CLASS) != null && (currentPage.getAfter() != null)) {
  -	    Flow staticFlow = (Flow)_flowMap.get(simpleMaster.getRegion(RegionAfter.REGION_CLASS).getRegionName());
  -	    if (staticFlow != null) {
  -		AreaContainer afterArea = currentPage.getAfter();
  -		afterArea.setIDReferences(areaTree.getIDReferences());
  -		layoutStaticContent(staticFlow, simpleMaster.getRegion(RegionAfter.REGION_CLASS),
  -				    afterArea);
  -	    }
  -	}
  -	
  -	if (simpleMaster.getRegion(RegionStart.REGION_CLASS) != null && (currentPage.getStart() != null)) {
  -	    Flow staticFlow = (Flow)_flowMap.get(simpleMaster.getRegion(RegionStart.REGION_CLASS).getRegionName());
  -	    if (staticFlow != null) {
  -		AreaContainer startArea = currentPage.getStart();
  -		startArea.setIDReferences(areaTree.getIDReferences());
  -		layoutStaticContent(staticFlow, simpleMaster.getRegion(RegionStart.REGION_CLASS),
  -			startArea);
  -	    }
  -	}
  -	
  -	if (simpleMaster.getRegion(RegionEnd.REGION_CLASS) != null && (currentPage.getEnd() != null)) {
  -	    Flow staticFlow = (Flow)_flowMap.get(simpleMaster.getRegion(RegionEnd.REGION_CLASS).getRegionName());
  -	    if (staticFlow != null) {
  -		AreaContainer endArea = currentPage.getEnd();
  -		endArea.setIDReferences(areaTree.getIDReferences());
  -		layoutStaticContent(staticFlow, simpleMaster.getRegion(RegionEnd.REGION_CLASS),
  -			endArea);
  -	    }
  -	}
  -	
  +    private void formatStaticContent(AreaTree areaTree)
  +    throws FOPException {
  +        SimplePageMaster simpleMaster = getCurrentSimplePageMaster();
  +
  +        if (simpleMaster.getRegion(RegionBefore.REGION_CLASS) != null &&
  +                (currentPage.getBefore() != null)) {
  +            Flow staticFlow = (Flow)_flowMap.get( simpleMaster.getRegion(
  +                                                    RegionBefore.REGION_CLASS).getRegionName());
  +            if (staticFlow != null) {
  +                AreaContainer beforeArea = currentPage.getBefore();
  +                beforeArea.setIDReferences(areaTree.getIDReferences());
  +                layoutStaticContent(staticFlow,
  +                                    simpleMaster.getRegion(
  +                                      RegionBefore.REGION_CLASS), beforeArea);
  +            }
  +        }
  +
  +        if (simpleMaster.getRegion(RegionAfter.REGION_CLASS) != null &&
  +                (currentPage.getAfter() != null)) {
  +            Flow staticFlow = (Flow)_flowMap.get( simpleMaster.getRegion(
  +                                                    RegionAfter.REGION_CLASS).getRegionName());
  +            if (staticFlow != null) {
  +                AreaContainer afterArea = currentPage.getAfter();
  +                afterArea.setIDReferences(areaTree.getIDReferences());
  +                layoutStaticContent(staticFlow,
  +                                    simpleMaster.getRegion(
  +                                      RegionAfter.REGION_CLASS), afterArea);
  +            }
  +        }
  +
  +        if (simpleMaster.getRegion(RegionStart.REGION_CLASS) != null &&
  +                (currentPage.getStart() != null)) {
  +            Flow staticFlow = (Flow)_flowMap.get( simpleMaster.getRegion(
  +                                                    RegionStart.REGION_CLASS).getRegionName());
  +            if (staticFlow != null) {
  +                AreaContainer startArea = currentPage.getStart();
  +                startArea.setIDReferences(areaTree.getIDReferences());
  +                layoutStaticContent(staticFlow,
  +                                    simpleMaster.getRegion(
  +                                      RegionStart.REGION_CLASS), startArea);
  +            }
  +        }
  +
  +        if (simpleMaster.getRegion(RegionEnd.REGION_CLASS) != null &&
  +                (currentPage.getEnd() != null)) {
  +            Flow staticFlow = (Flow)_flowMap.get( simpleMaster.getRegion(
  +                                                    RegionEnd.REGION_CLASS).getRegionName());
  +            if (staticFlow != null) {
  +                AreaContainer endArea = currentPage.getEnd();
  +                endArea.setIDReferences(areaTree.getIDReferences());
  +                layoutStaticContent(staticFlow,
  +                                    simpleMaster.getRegion(RegionEnd.REGION_CLASS)
  +                                    , endArea);
  +            }
  +        }
  +
       }
  -    
  +
       private void layoutStaticContent(Flow flow, Region region,
  -				     AreaContainer area) 
  -	throws FOPException
  -    {
  -	if (flow instanceof StaticContent) {
  -	    AreaContainer beforeArea = currentPage.getBefore();
  -	    ((StaticContent)flow).layout(area, region);
  -	}
  -	else {
  -	    MessageHandler.errorln("WARNING: "+region.getName()+" only supports static-content flows currently. Cannot use flow named '"+flow.getFlowName()+"'");
  -	}
  -    }
  -    
  -	
  -    
  -    
  +                                     AreaContainer area) throws FOPException {
  +        if (flow instanceof StaticContent) {
  +            AreaContainer beforeArea = currentPage.getBefore();
  +            ((StaticContent) flow).layout(area, region);
  +        } else {
  +            MessageHandler.errorln("WARNING: "+region.getName() + " only supports static-content flows currently. Cannot use flow named '"+
  +                                   flow.getFlowName() + "'");
  +        }
  +    }
   
       /**
        * Returns the next SubSequenceSpecifier for the given page sequence master. The result
        * is bassed on the current state of this page sequence.
        */
       // refactored from PageSequenceMaster
  -    private SubSequenceSpecifier getNextSubsequence(PageSequenceMaster master)
  -    {
  -	if (master.getSubSequenceSpecifierCount() > currentSubsequenceNumber + 1) {
  -	    
  -	    currentSubsequence = master.getSubSequenceSpecifier(currentSubsequenceNumber + 1);
  -	    currentSubsequenceNumber++;
  -	    return currentSubsequence;
  -	}
  -	else {
  -	    return null;
  -	}
  -		
  +    private SubSequenceSpecifier getNextSubsequence(
  +      PageSequenceMaster master) {
  +        if (master.getSubSequenceSpecifierCount() >
  +                currentSubsequenceNumber + 1) {
  +
  +            currentSubsequence = master.getSubSequenceSpecifier(
  +                                   currentSubsequenceNumber + 1);
  +            currentSubsequenceNumber++;
  +            return currentSubsequence;
  +        } else {
  +            return null;
  +        }
  +
       }
  -       
  +
       /**
  -     * Returns the next simple page master for the given sequence master, page number and 
  +     * Returns the next simple page master for the given sequence master, page number and
        * other state information
        */
  -    private SimplePageMaster getNextSimplePageMaster(PageSequenceMaster sequenceMaster, 
  -						     int currentPageNumber, 
  -						     boolean thisIsFirstPage, 
  -						     boolean isEmptyPage) 
  -    {	
  -	String nextPageMaster = getNextPageMasterName(sequenceMaster, currentPageNumber, thisIsFirstPage, isEmptyPage);
  -	return this.layoutMasterSet.getSimplePageMaster( nextPageMaster );
  -	
  -    }
  -
  -    private String getNextPageMasterName(PageSequenceMaster sequenceMaster, 
  -					 int currentPageNumber, 
  -					 boolean thisIsFirstPage,
  -					 boolean isEmptyPage) 
  -    {
  -
  -	if (null == currentSubsequence) {
  -	    currentSubsequence = getNextSubsequence(sequenceMaster);
  -	}
  -	
  -	String nextPageMaster = 
  -	    currentSubsequence.getNextPageMaster( currentPageNumber, thisIsFirstPage, isEmptyPage );
  -
  -
  -	if (null == nextPageMaster ||  isFlowForMasterNameDone(currentPageMasterName)) {
  -	    SubSequenceSpecifier nextSubsequence = getNextSubsequence(sequenceMaster);
  -	    if (nextSubsequence == null) {
  -		MessageHandler.errorln("\nWARNING: Page subsequences exhausted. Using previous subsequence.");
  -		thisIsFirstPage = true; // this becomes the first page in the new (old really) page master
  -		currentSubsequence.reset();
  -		
  -		// we leave currentSubsequence alone
  -	    }
  -	    else {
  -		currentSubsequence = nextSubsequence;
  -	    }
  -	    
  -	    nextPageMaster = currentSubsequence.getNextPageMaster( currentPageNumber,
  -								   thisIsFirstPage,
  -								   isEmptyPage);
  -	}
  -	currentPageMasterName = nextPageMaster;
  -	
  -	return nextPageMaster;
  -	
  -    }
  -
  -    private SimplePageMaster getCurrentSimplePageMaster() 
  -    {
  -	return this.layoutMasterSet.getSimplePageMaster( currentPageMasterName );
  -    }
  -
  -    private String getCurrentPageMasterName()
  -    {
  -	return currentPageMasterName;
  +    private SimplePageMaster getNextSimplePageMaster(
  +      PageSequenceMaster sequenceMaster, int currentPageNumber,
  +      boolean thisIsFirstPage, boolean isEmptyPage) {
  +        String nextPageMaster = getNextPageMasterName(sequenceMaster,
  +                                currentPageNumber, thisIsFirstPage, isEmptyPage);
  +        return this.layoutMasterSet.getSimplePageMaster(nextPageMaster);
  +
  +    }
  +
  +    private String getNextPageMasterName(
  +      PageSequenceMaster sequenceMaster, int currentPageNumber,
  +      boolean thisIsFirstPage, boolean isEmptyPage) {
  +
  +        if (null == currentSubsequence) {
  +            currentSubsequence = getNextSubsequence(sequenceMaster);
  +        }
  +
  +        String nextPageMaster = currentSubsequence.getNextPageMaster(
  +                                  currentPageNumber, thisIsFirstPage, isEmptyPage);
  +
  +
  +        if (null == nextPageMaster ||
  +                isFlowForMasterNameDone(currentPageMasterName)) {
  +            SubSequenceSpecifier nextSubsequence =
  +              getNextSubsequence(sequenceMaster);
  +            if (nextSubsequence == null) {
  +                MessageHandler.errorln("\nWARNING: Page subsequences exhausted. Using previous subsequence.");
  +                thisIsFirstPage = true; // this becomes the first page in the new (old really) page master
  +                currentSubsequence.reset();
  +
  +                // we leave currentSubsequence alone
  +            } else {
  +                currentSubsequence = nextSubsequence;
  +            }
  +
  +            nextPageMaster = currentSubsequence.getNextPageMaster(
  +                               currentPageNumber, thisIsFirstPage, isEmptyPage);
  +        }
  +        currentPageMasterName = nextPageMaster;
  +
  +        return nextPageMaster;
  +
       }
   
  +    private SimplePageMaster getCurrentSimplePageMaster() {
  +        return this.layoutMasterSet.getSimplePageMaster(
  +                 currentPageMasterName);
  +    }
  +
  +    private String getCurrentPageMasterName() {
  +        return currentPageMasterName;
  +    }
  +
       // refactored from LayoutMasterSet
       private PageMaster getNextPageMaster(String pageSequenceName,
  -					 int currentPageNumber, 
  -					 boolean thisIsFirstPage, 
  -					 boolean isEmptyPage )
  -	throws FOPException
  -    {
  -	PageMaster pageMaster = null;
  -
  -	// see if there is a page master sequence for this master name		
  -	PageSequenceMaster sequenceMaster = 
  -	    this.layoutMasterSet.getPageSequenceMaster( pageSequenceName );
  -
  -	if (sequenceMaster != null) {
  -	    pageMaster = getNextSimplePageMaster(sequenceMaster, 
  -						 currentPageNumber,
  -						 thisIsFirstPage,
  -						 isEmptyPage).getPageMaster();
  -
  -	} else { // otherwise see if there's a simple master by the given name
  -	    SimplePageMaster simpleMaster = 
  -		this.layoutMasterSet.getSimplePageMaster( pageSequenceName );
  -	    if (simpleMaster == null) {
  -		throw new FOPException( "'master-name' for 'fo:page-sequence'" +
  -					"matches no 'simple-page-master' or 'page-sequence-master'" );
  -	    }
  -	    currentPageMasterName = pageSequenceName;
  -	    
  -	    pageMaster = simpleMaster.getNextPageMaster();
  -	}
  -	return pageMaster;
  +                                         int currentPageNumber, boolean thisIsFirstPage,
  +                                         boolean isEmptyPage) throws FOPException {
  +        PageMaster pageMaster = null;
  +
  +        // see if there is a page master sequence for this master name
  +        PageSequenceMaster sequenceMaster =
  +          this.layoutMasterSet.getPageSequenceMaster(
  +            pageSequenceName);
  +
  +        if (sequenceMaster != null) {
  +            pageMaster = getNextSimplePageMaster(sequenceMaster,
  +                                                 currentPageNumber, thisIsFirstPage,
  +                                                 isEmptyPage).getPageMaster();
  +
  +        } else { // otherwise see if there's a simple master by the given name
  +            SimplePageMaster simpleMaster =
  +              this.layoutMasterSet.getSimplePageMaster(
  +                pageSequenceName);
  +            if (simpleMaster == null) {
  +                throw new FOPException(
  +                  "'master-name' for 'fo:page-sequence'" + "matches no 'simple-page-master' or 'page-sequence-master'");
  +            }
  +            currentPageMasterName = pageSequenceName;
  +
  +            pageMaster = simpleMaster.getNextPageMaster();
  +        }
  +        return pageMaster;
       }
   
   
  -    /** 
  +    /**
        * Returns true when there is more flow elements left to lay out.
        */
  -    private boolean flowsAreIncomplete()
  -    {
  -	boolean isIncomplete = false;
  -
  -	for (Enumeration e = _flowMap.elements(); e.hasMoreElements(); ) {
  -	    Flow flow = (Flow)e.nextElement();
  -	    if (flow instanceof StaticContent) {
  -		continue;
  -	    }
  -	    
  -	    Status status = flow.getStatus();
  -	    isIncomplete |= status.isIncomplete();
  -	}
  -	return isIncomplete;
  +    private boolean flowsAreIncomplete() {
  +        boolean isIncomplete = false;
  +
  +        for (Enumeration e = _flowMap.elements(); e.hasMoreElements();) {
  +            Flow flow = (Flow) e.nextElement();
  +            if (flow instanceof StaticContent) {
  +                continue;
  +            }
  +
  +            Status status = flow.getStatus();
  +            isIncomplete |= status.isIncomplete();
  +        }
  +        return isIncomplete;
       }
   
       /**
        * Returns the flow that maps to the given region class for the current
  -     * page master. 
  +     * page master.
        */
  -    private Flow getCurrentFlow(String regionClass) 
  -    {
  -	Region region = getCurrentSimplePageMaster().getRegion(regionClass);
  -      	if (region != null) {
  -	    Flow flow = (Flow)_flowMap.get(region.getRegionName());
  -	    return flow;
  -	    
  -	}
  -	else {
  -	    
  -	System.out.println("flow is null. regionClass = '"+regionClass+"' currentSPM = "+getCurrentSimplePageMaster());
  -	
  -	return null;
  -	}
  -	
  -    }
  -
  -    private boolean isFlowForMasterNameDone( String masterName )
  -    {		
  -	// parameter is master-name of PMR; we need to locate PM
  -	// referenced by this, and determine whether flow(s) are OK
  -	if (masterName != null) {
  -	  
  -	    SimplePageMaster spm = this.layoutMasterSet.getSimplePageMaster( masterName );
  -	    Region region = spm.getRegion(RegionBody.REGION_CLASS);
  -	    
  -	    
  -	    Flow flow = (Flow)_flowMap.get( region.getRegionName() );
  -	    if ((null == flow) || flow.getStatus().isIncomplete())
  -		return false;
  -	    else
  -		return true;
  -	}
  -	return false;
  -    }
  -	
  -	public boolean isFlowSet()
  -	{
  -		return isFlowSet;
  -	}
  -	
  -	public void setIsFlowSet(boolean isFlowSet)
  -	{
  -		this.isFlowSet = isFlowSet;
  -	}
  +    private Flow getCurrentFlow(String regionClass) {
  +        Region region = getCurrentSimplePageMaster().getRegion(regionClass);
  +        if (region != null) {
  +            Flow flow = (Flow)_flowMap.get(region.getRegionName());
  +            return flow;
  +
  +        } else {
  +
  +            System.out.println("flow is null. regionClass = '"+
  +                               regionClass + "' currentSPM = "+
  +                               getCurrentSimplePageMaster());
  +
  +            return null;
  +        }
  +
  +    }
  +
  +    private boolean isFlowForMasterNameDone(String masterName) {
  +        // parameter is master-name of PMR; we need to locate PM
  +        // referenced by this, and determine whether flow(s) are OK
  +        if (masterName != null) {
  +
  +            SimplePageMaster spm =
  +              this.layoutMasterSet.getSimplePageMaster(masterName);
  +            Region region = spm.getRegion(RegionBody.REGION_CLASS);
  +
  +
  +            Flow flow = (Flow)_flowMap.get(region.getRegionName());
  +            if ((null == flow) || flow.getStatus().isIncomplete())
  +                return false;
  +            else
  +                return true;
  +        }
  +        return false;
  +    }
  +
  +    public boolean isFlowSet() {
  +        return isFlowSet;
  +    }
  +
  +    public void setIsFlowSet(boolean isFlowSet) {
  +        this.isFlowSet = isFlowSet;
  +    }
   }
  
  
  
  1.10      +64 -100   xml-fop/src/org/apache/fop/fo/pagination/Root.java
  
  Index: Root.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/pagination/Root.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- Root.java	2001/02/06 07:34:47	1.9
  +++ Root.java	2001/06/22 08:52:08	1.10
  @@ -1,53 +1,9 @@
  -/*-- $Id: Root.java,v 1.9 2001/02/06 07:34:47 kellyc Exp $ -- 
  -
  - ============================================================================
  -                   The Apache Software License, Version 1.1
  - ============================================================================
  - 
  -    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
  - 
  - Redistribution and use in source and binary forms, with or without modifica-
  - tion, are permitted provided that the following conditions are met:
  - 
  - 1. Redistributions of  source code must  retain the above copyright  notice,
  -    this list of conditions and the following disclaimer.
  - 
  - 2. Redistributions in binary form must reproduce the above copyright notice,
  -    this list of conditions and the following disclaimer in the documentation
  -    and/or other materials provided with the distribution.
  - 
  - 3. The end-user documentation included with the redistribution, if any, must
  -    include  the following  acknowledgment:  "This product includes  software
  -    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  -    Alternately, this  acknowledgment may  appear in the software itself,  if
  -    and wherever such third-party acknowledgments normally appear.
  - 
  - 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
  -    endorse  or promote  products derived  from this  software without  prior
  -    written permission. For written permission, please contact
  -    apache@apache.org.
  - 
  - 5. Products  derived from this software may not  be called "Apache", nor may
  -    "Apache" appear  in their name,  without prior written permission  of the
  -    Apache Software Foundation.
  - 
  - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  - FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  - APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
  - INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  - DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  - OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  - ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  - (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  - 
  - This software  consists of voluntary contributions made  by many individuals
  - on  behalf of the Apache Software  Foundation and was  originally created by
  - James Tauber <jt...@jtauber.com>. For more  information on the Apache 
  - Software Foundation, please see <http://www.apache.org/>.
  - 
  +/*-- $Id: Root.java,v 1.10 2001/06/22 08:52:08 keiron Exp $ --
  + * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
  + * For details on use and redistribution please refer to the
  + * LICENSE file included with these sources.
    */
  +
   package org.apache.fop.fo.pagination;
   
   // FOP
  @@ -68,68 +24,76 @@
    * page-sequences.
    */
   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();
  +        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");
  -	    }
  +    Vector pageSequences;
  +
  +    /** keeps count of page number from over PageSequence instances*/
  +    private int runningPageNumberCounter = 0;
  +
  +
  +    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");
  +        }
  +    }
  +
  +
  +    protected int getRunningPageNumberCounter() {
  +        return this.runningPageNumberCounter;
  +    }
  +
  +
  +    protected void setRunningPageNumberCounter(int count) {
  +        this.runningPageNumberCounter = count;
       }
   
  +
       /** @deprecated handled by addChild now
        */
  -    public void addPageSequence(PageSequence pageSequence) 
  -    {
  -	this.pageSequences.addElement(pageSequence);
  -    }
  -    
  -    
  -    public LayoutMasterSet getLayoutMasterSet() 
  -    {
  -	return this.layoutMasterSet;
  +    public void addPageSequence(PageSequence pageSequence) {
  +        this.pageSequences.addElement(pageSequence);
       }
   
  +
  +    public LayoutMasterSet getLayoutMasterSet() {
  +        return this.layoutMasterSet;
  +    }
  +
       public void setLayoutMasterSet(LayoutMasterSet layoutMasterSet) {
  -	this.layoutMasterSet = layoutMasterSet;
  +        this.layoutMasterSet = layoutMasterSet;
       }
   
  -    public void format(AreaTree areaTree) throws FOPException 
  -    {
  -	//	MessageHandler.errorln(" Root[" + marker + "] ");
  -	if(layoutMasterSet == null)  {
  -	    throw new FOPException("No layout master set.");
  -	}
  -
  -	Enumeration e = children.elements();
  -	while (e.hasMoreElements()) {
  -	    Object o = e.nextElement();
  -	    if (o instanceof PageSequence) {
  -		((PageSequence) o).format(areaTree);
  -	    }
  -	    else if (o instanceof ExtensionObj) {
  -		((ExtensionObj)o).format(areaTree);
  -	    }
  -	}
  -    }	
  +    public void format(AreaTree areaTree) throws FOPException {
  +        //	MessageHandler.errorln(" Root[" + marker + "] ");
  +        if (layoutMasterSet == null) {
  +            throw new FOPException("No layout master set.");
  +        }
  +
  +        Enumeration e = children.elements();
  +        while (e.hasMoreElements()) {
  +            Object o = e.nextElement();
  +            if (o instanceof PageSequence) {
  +                ((PageSequence) o).format(areaTree);
  +            } else if (o instanceof ExtensionObj) {
  +                ((ExtensionObj) o).format(areaTree);
  +            }
  +        }
  +    }
   }
  
  
  

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