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 lf...@apache.org on 2005/05/31 18:19:29 UTC

cvs commit: xml-fop/src/java/org/apache/fop/layoutmgr AbstractBreaker.java PageSequenceLayoutManager.java StaticContentLayoutManager.java

lfurini     2005/05/31 09:19:29

  Modified:    src/java/org/apache/fop/layoutmgr AbstractBreaker.java
                        PageSequenceLayoutManager.java
                        StaticContentLayoutManager.java
  Log:
  Handling page dependent footnote separator
  
  Revision  Changes    Path
  1.7       +2 -2      xml-fop/src/java/org/apache/fop/layoutmgr/AbstractBreaker.java
  
  Index: AbstractBreaker.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/AbstractBreaker.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- AbstractBreaker.java	23 May 2005 13:02:41 -0000	1.6
  +++ AbstractBreaker.java	31 May 2005 16:19:29 -0000	1.7
  @@ -94,7 +94,7 @@
   
       private List blockLists = null;
   
  -    private int alignment;
  +    protected int alignment;
       private int alignmentLast;
   
       protected MinOptMax footnoteSeparatorLength = new MinOptMax(0);
  
  
  
  1.59      +23 -24    xml-fop/src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java
  
  Index: PageSequenceLayoutManager.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java,v
  retrieving revision 1.58
  retrieving revision 1.59
  diff -u -r1.58 -r1.59
  --- PageSequenceLayoutManager.java	17 May 2005 16:58:52 -0000	1.58
  +++ PageSequenceLayoutManager.java	31 May 2005 16:19:29 -0000	1.59
  @@ -192,36 +192,23 @@
               StaticContent footnoteSeparator;
               if (bFootnotesPresent
                   && (footnoteSeparator = pageSeq.getStaticContent("xsl-footnote-separator")) != null) {
  +                // the footnote separator can contain page-dependent content such as
  +                // page numbers or retrieve markers, so its areas cannot simply be 
  +                // obtained now and repeated in each page;
  +                // we need to know in advance the separator bpd: the actual separator
  +                // could be different from page to page, but its bpd would likely be
  +                // always the same
  +
                   // create a Block area that will contain the separator areas
                   separatorArea = new Block();
  -
  +                separatorArea.setIPD(context.getRefIPD());
                   // create a StaticContentLM for the footnote separator
                   footnoteSeparatorLM = (StaticContentLayoutManager)
                       getLayoutManagerMaker().makeStaticContentLayoutManager(
                       pslm, footnoteSeparator, separatorArea);
  +                footnoteSeparatorLM.doLayout();
   
  -                // get the list of elements representing the footnote separator
  -                footnoteSeparatorList = footnoteSeparatorLM.getNextKnuthElements(context, alignment);
  -
  -                // compute the total length of the elements
  -                footnoteSeparatorLength = new MinOptMax(0);
  -                ListIterator separatorIterator = footnoteSeparatorList.listIterator();
  -                while (separatorIterator.hasNext()) {
  -                    KnuthElement element = (KnuthElement) separatorIterator.next();
  -                    if (element.isBox()) {
  -                        footnoteSeparatorLength.add(new MinOptMax(element.getW()));
  -                    } else if (element.isGlue()) {
  -                        footnoteSeparatorLength.add(new MinOptMax(element.getW()));
  -                        footnoteSeparatorLength.max += element.getY();
  -                        footnoteSeparatorLength.min -= element.getZ();
  -                    }
  -                }
  -
  -                // add the footnote separator areas to the Block area
  -                if (footnoteSeparatorList != null) {
  -                    LayoutContext childLC = new LayoutContext(0);
  -                    footnoteSeparatorLM.addAreas(new KnuthPossPosIter(footnoteSeparatorList, 0, footnoteSeparatorList.size()), childLC);
  -                }
  +                footnoteSeparatorLength = new MinOptMax(separatorArea.getBPD());
               }
               return contentList;
           }
  @@ -235,6 +222,18 @@
           }
           
           protected void addAreas(PositionIterator posIter, LayoutContext context) {
  +            if (footnoteSeparatorLM != null) {
  +                StaticContent footnoteSeparator = pageSeq.getStaticContent("xsl-footnote-separator");
  +                // create a Block area that will contain the separator areas
  +                separatorArea = new Block();
  +                separatorArea.setIPD(curPV.getCurrentSpan().getColumnWidth());
  +                // create a StaticContentLM for the footnote separator
  +                footnoteSeparatorLM = (StaticContentLayoutManager)
  +                    getLayoutManagerMaker().makeStaticContentLayoutManager(
  +                    pslm, footnoteSeparator, separatorArea);
  +                footnoteSeparatorLM.doLayout();
  +            }
  +
               getCurrentChildLM().addAreas(posIter, context);    
           }
           
  
  
  
  1.15      +22 -8     xml-fop/src/java/org/apache/fop/layoutmgr/StaticContentLayoutManager.java
  
  Index: StaticContentLayoutManager.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/StaticContentLayoutManager.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- StaticContentLayoutManager.java	30 May 2005 09:11:10 -0000	1.14
  +++ StaticContentLayoutManager.java	31 May 2005 16:19:29 -0000	1.15
  @@ -172,8 +172,8 @@
           if (getStaticContentFO().getFlowName().equals("xsl-footnote-separator")) {
               targetBlock.addBlock((Block)childArea);
           } else {
  -        targetRegion.addBlock((Block)childArea);
  -    }
  +            targetRegion.addBlock((Block)childArea);
  +        }
       }
   
       /**
  @@ -183,19 +183,33 @@
           if (getStaticContentFO().getFlowName().equals("xsl-footnote-separator")) {
               return targetBlock;
           } else {
  -        return targetRegion;
  -    }
  +            return targetRegion;
  +        }
       }
   
       /**
        * Does the layout for a side region. Called by PageSequenceLayoutManager.
        */
       public void doLayout() {
  -        StaticContentBreaker breaker = new StaticContentBreaker(
  -                this, targetRegion.getIPD(), regionFO.getDisplayAlign());
  -        breaker.doLayout(targetRegion.getBPD());
  +        int targetIPD = 0;
  +        int targetBPD = 0;
  +        int targetAlign = EN_AUTO;
  +        StaticContentBreaker breaker;
  +
  +        if (getStaticContentFO().getFlowName().equals("xsl-footnote-separator")) {
  +            targetIPD = targetBlock.getIPD();
  +            targetBPD = targetBlock.getBPD();
  +            targetAlign = EN_BEFORE;
  +        } else {
  +            targetIPD = targetRegion.getIPD();
  +            targetBPD = targetRegion.getBPD();
  +            targetAlign = regionFO.getDisplayAlign();
  +        }
  +        breaker = new StaticContentBreaker(this, targetIPD, targetAlign);
  +        breaker.doLayout(targetBPD);
           if (breaker.isOverflow()) {
  -            if (regionFO.getOverflow() == EN_ERROR_IF_OVERFLOW) {
  +            if (!getStaticContentFO().getFlowName().equals("xsl-footnote-separator")
  +                && regionFO.getOverflow() == EN_ERROR_IF_OVERFLOW) {
                   //TODO throw layout exception
               }
               log.warn("static-content overflows the available area.");
  
  
  

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