]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Use a prevIsBox boolean instead of duplicating the list of Knuth elements for active...
authorVincent Hennebert <vhennebert@apache.org>
Mon, 9 Jul 2007 16:59:42 +0000 (16:59 +0000)
committerVincent Hennebert <vhennebert@apache.org>
Mon, 9 Jul 2007 16:59:42 +0000 (16:59 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@554709 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/layoutmgr/table/TableStepper.java

index 59228ce00298278f2234a5ff095ed9e268afd0d4..49b98f1016afcc2673e45477731049a61679c93e 100644 (file)
@@ -44,6 +44,7 @@ public class TableStepper {
         private PrimaryGridUnit pgu;
         /** Knuth elements for this active cell. */
         private List elementList;
+        private boolean prevIsBox = false;
         /** Number of the row where the row-span begins, zero-based. */
         private int startRow;
         /** Index, in the list of Knuth elements, of the element starting the current step. */
@@ -89,7 +90,7 @@ public class TableStepper {
             } else {
                 //Copy elements (LinkedList) to array lists to improve 
                 //element access performance
-                elementList = new java.util.ArrayList(pgu.getElements());
+                elementList = pgu.getElements();
 //                if (log.isTraceEnabled()) {
 //                    log.trace("column " + (column+1) + ": recording " + elementLists.size() + " element(s)");
 //                }
@@ -140,25 +141,27 @@ public class TableStepper {
 
         private void goToNextLegalBreak() {
             lastPenaltyLength = 0;
-            while (end + 1 < elementList.size()) {
+            boolean breakFound = false;
+            while (!breakFound && end + 1 < elementList.size()) {
                 end++;
                 KnuthElement el = (KnuthElement)elementList.get(end);
                 if (el.isPenalty()) {
+                    prevIsBox = false;
                     if (el.getP() < KnuthElement.INFINITE) {
                         //First legal break point
                         lastPenaltyLength = el.getW();
-                        break;
+                        breakFound = true;
                     }
                 } else if (el.isGlue()) {
-                    if (end > 0) {
-                        KnuthElement prev = (KnuthElement)elementList.get(end - 1);
-                        if (prev.isBox()) {
-                            //Second legal break point
-                            break;
-                        }
+                    if (prevIsBox) {
+                        //Second legal break point
+                        breakFound = true;
+                    } else {
+                        width += el.getW();
                     }
-                    width += el.getW();
+                    prevIsBox = false;
                 } else {
+                    prevIsBox = true;
                     width += el.getW();
                 }
             }