]> source.dussan.org Git - poi.git/commitdiff
remove incorrect method to lookup "upper" table cell. In fact, we don't need it at...
authorSergey Vladimirov <sergey@apache.org>
Thu, 22 Sep 2011 20:57:10 +0000 (20:57 +0000)
committerSergey Vladimirov <sergey@apache.org>
Thu, 22 Sep 2011 20:57:10 +0000 (20:57 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1174386 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hwpf/converter/AbstractWordConverter.java
src/scratchpad/src/org/apache/poi/hwpf/converter/WordToFoConverter.java
src/scratchpad/src/org/apache/poi/hwpf/converter/WordToFoUtils.java
src/scratchpad/src/org/apache/poi/hwpf/converter/WordToHtmlConverter.java

index cf5ea422f47d2f73c747e5e28442d205583f8647..69e8b8428c7218469d0a04ed344cdc9159595f53 100644 (file)
@@ -183,7 +183,8 @@ public abstract class AbstractWordConverter
         return colSpan;
     }
 
-    protected int getNumberRowsSpanned( Table table, int currentRowIndex,
+    protected int getNumberRowsSpanned( Table table,
+            final int[] tableCellEdges, int currentRowIndex,
             int currentColumnIndex, TableCell tableCell )
     {
         if ( !tableCell.isFirstVerticallyMerged() )
@@ -197,6 +198,35 @@ public abstract class AbstractWordConverter
             TableRow nextRow = table.getRow( r1 );
             if ( currentColumnIndex >= nextRow.numCells() )
                 break;
+
+            // we need to skip row if he don't have cells at all
+            boolean hasCells = false;
+            int currentEdgeIndex = 0;
+            for ( int c = 0; c < nextRow.numCells(); c++ )
+            {
+                TableCell nextTableCell = nextRow.getCell( c );
+                if ( !nextTableCell.isVerticallyMerged()
+                        || nextTableCell.isFirstVerticallyMerged() )
+                {
+                    int colSpan = getNumberColumnsSpanned( tableCellEdges,
+                            currentEdgeIndex, nextTableCell );
+                    currentEdgeIndex += colSpan;
+
+                    if ( colSpan != 0 )
+                    {
+                        hasCells = true;
+                        break;
+                    }
+                }
+                else
+                {
+                    currentEdgeIndex += getNumberColumnsSpanned(
+                            tableCellEdges, currentEdgeIndex, nextTableCell );
+                }
+            }
+            if ( !hasCells )
+                continue;
+
             TableCell nextCell = nextRow.getCell( currentColumnIndex );
             if ( !nextCell.isVerticallyMerged()
                     || nextCell.isFirstVerticallyMerged() )
@@ -211,35 +241,6 @@ public abstract class AbstractWordConverter
         return picturesManager;
     }
 
-    protected int getTableCellEdgesIndexSkipCount( Table table, int r,
-            int[] tableCellEdges, int currentEdgeIndex, int c,
-            TableCell tableCell )
-    {
-        TableCell upperCell = null;
-        for ( int r1 = r - 1; r1 >= 0; r1-- )
-        {
-            final TableRow row = table.getRow( r1 );
-            if ( row == null || c >= row.numCells() )
-                continue;
-
-            final TableCell prevCell = row.getCell( c );
-            if ( prevCell != null && prevCell.isFirstVerticallyMerged() )
-            {
-                upperCell = prevCell;
-                break;
-            }
-        }
-        if ( upperCell == null )
-        {
-            logger.log( POILogger.WARN, "First vertically merged cell for ",
-                    tableCell, " not found" );
-            return 0;
-        }
-
-        return getNumberColumnsSpanned( tableCellEdges, currentEdgeIndex,
-                tableCell );
-    }
-
     protected abstract void outputCharacters( Element block,
             CharacterRun characterRun, String text );
 
index 90cf8aff2e8de1c85781193220ad2f0e2e89c090..cde7076aac0328c40be21fc77090ce6d66f4b590 100644 (file)
@@ -557,8 +557,8 @@ public class WordToFoConverter extends AbstractWordConverter
                 if ( tableCell.isVerticallyMerged()
                         && !tableCell.isFirstVerticallyMerged() )
                 {
-                    currentEdgeIndex += getTableCellEdgesIndexSkipCount( table,
-                            r, tableCellEdges, currentEdgeIndex, c, tableCell );
+                    currentEdgeIndex += getNumberColumnsSpanned(
+                            tableCellEdges, currentEdgeIndex, tableCell );
                     continue;
                 }
 
@@ -578,8 +578,8 @@ public class WordToFoConverter extends AbstractWordConverter
                     tableCellElement.setAttribute( "number-columns-spanned",
                             String.valueOf( colSpan ) );
 
-                final int rowSpan = getNumberRowsSpanned( table, r, c,
-                        tableCell );
+                final int rowSpan = getNumberRowsSpanned( table,
+                        tableCellEdges, r, c, tableCell );
                 if ( rowSpan > 1 )
                     tableCellElement.setAttribute( "number-rows-spanned",
                             String.valueOf( rowSpan ) );
index da2a881a1ccb2320d15cd776be827f2478f8382d..e901de821662b8f3e4f421594d7a7f679e257860 100644 (file)
@@ -76,12 +76,14 @@ public class WordToFoUtils extends AbstractWordUtils
         {
             inline.setAttribute( "color", getColor24( characterRun.getIco24() ) );
         }
-        final int opacity = (int) ( characterRun.getIco24() & 0xFF000000l ) >>> 24;
-        if ( opacity != 0 && opacity != 0xFF )
-        {
-            inline.setAttribute( "opacity",
-                    getOpacity( characterRun.getIco24() ) );
-        }
+        /* XLS FO 1.1 doesn't support opacity -- sergey */
+        // final int opacity = (int) ( characterRun.getIco24() & 0xFF000000l )
+        // >>> 24;
+        // if ( opacity != 0 && opacity != 0xFF )
+        // {
+        // inline.setAttribute( "opacity",
+        // getOpacity( characterRun.getIco24() ) );
+        // }
         if ( characterRun.isCapitalized() )
         {
             inline.setAttribute( "text-transform", "uppercase" );
index 50ec5c2081228dd89f9a217376c9f75b08ee7d9a..b9450f1685b16b6315366ede309503072d411207 100644 (file)
@@ -662,8 +662,8 @@ public class WordToHtmlConverter extends AbstractWordConverter
                 if ( tableCell.isVerticallyMerged()
                         && !tableCell.isFirstVerticallyMerged() )
                 {
-                    currentEdgeIndex += getTableCellEdgesIndexSkipCount( table,
-                            r, tableCellEdges, currentEdgeIndex, c, tableCell );
+                    currentEdgeIndex += getNumberColumnsSpanned(
+                            tableCellEdges, currentEdgeIndex, tableCell );
                     continue;
                 }
 
@@ -693,8 +693,8 @@ public class WordToHtmlConverter extends AbstractWordConverter
                     tableCellElement.setAttribute( "colspan",
                             String.valueOf( colSpan ) );
 
-                final int rowSpan = getNumberRowsSpanned( table, r, c,
-                        tableCell );
+                final int rowSpan = getNumberRowsSpanned( table,
+                        tableCellEdges, r, c, tableCell );
                 if ( rowSpan > 1 )
                     tableCellElement.setAttribute( "rowspan",
                             String.valueOf( rowSpan ) );