]> source.dussan.org Git - poi.git/commitdiff
fix inner tables handling by Range.getTable() method
authorSergey Vladimirov <sergey@apache.org>
Tue, 5 Jul 2011 02:17:54 +0000 (02:17 +0000)
committerSergey Vladimirov <sergey@apache.org>
Tue, 5 Jul 2011 02:17:54 +0000 (02:17 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1142877 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hwpf/usermodel/Range.java
src/scratchpad/testcases/org/apache/poi/hwpf/converter/TestWordToHtmlConverter.java

index 5cf71a1119bac7b04a849c773f16f44b47ae1ab0..03a17337942db3e8c55652dbebd35637fe38a015 100644 (file)
 
 package org.apache.poi.hwpf.usermodel;
 
-import org.apache.poi.util.LittleEndian;
+import java.lang.ref.WeakReference;
+import java.util.List;
+import java.util.NoSuchElementException;
 
 import org.apache.poi.hwpf.HWPFDocument;
 import org.apache.poi.hwpf.HWPFDocumentCore;
-
 import org.apache.poi.hwpf.model.CHPX;
 import org.apache.poi.hwpf.model.CPSplitCalculator;
 import org.apache.poi.hwpf.model.FileInformationBlock;
@@ -31,14 +32,10 @@ import org.apache.poi.hwpf.model.PropertyNode;
 import org.apache.poi.hwpf.model.SEPX;
 import org.apache.poi.hwpf.model.StyleSheet;
 import org.apache.poi.hwpf.model.TextPiece;
-
 import org.apache.poi.hwpf.sprm.CharacterSprmCompressor;
 import org.apache.poi.hwpf.sprm.ParagraphSprmCompressor;
 import org.apache.poi.hwpf.sprm.SprmBuffer;
-
-import java.lang.ref.WeakReference;
-import java.util.List;
-import java.util.NoSuchElementException;
+import org.apache.poi.util.LittleEndian;
 
 /**
  * This class is the central class of the HWPF object model. All properties that
@@ -882,19 +879,29 @@ public class Range { // TODO -instantiable superclass
                }
 
                r.initAll();
+               int tableLevel = paragraph.getTableLevel();
                int tableEnd = r._parEnd;
 
-               if (r._parStart != 0 && getParagraph(r._parStart - 1).isInTable()
-                               && getParagraph(r._parStart - 1)._sectionEnd >= r._sectionStart) {
-                       throw new IllegalArgumentException("This paragraph is not the first one in the table");
-               }
+        if ( r._parStart != 0 )
+        {
+            Paragraph previous = new Paragraph(
+                    _paragraphs.get( r._parStart - 1 ), this );
+            if ( previous.isInTable() && //
+                    previous.getTableLevel() == tableLevel //
+                    && previous._sectionEnd >= r._sectionStart )
+            {
+                throw new IllegalArgumentException(
+                        "This paragraph is not the first one in the table" );
+            }
+        }
 
-               int limit = _paragraphs.size();
-               for (; tableEnd < limit; tableEnd++) {
-                       if (!getParagraph(tableEnd).isInTable()) {
-                               break;
-                       }
-               }
+        int limit = _paragraphs.size();
+        for ( ; tableEnd < limit; tableEnd++ )
+        {
+            Paragraph next = new Paragraph( _paragraphs.get( tableEnd ), this );
+            if ( !next.isInTable() || next.getTableLevel() < tableLevel )
+                break;
+        }
 
                initAll();
                if (tableEnd > _parEnd) {
index 272e25b61b1467d306b821d2aa9aea406b672ab0..ad593324f8d70968b214a8c61c380354a6071351 100644 (file)
@@ -92,6 +92,11 @@ public class TestWordToHtmlConverter extends TestCase
         assertTrue( result.contains( "Hyperlink text" ) );
     }
 
+    public void testInnerTable() throws Exception
+    {
+        getHtmlText( "innertable.doc" );
+    }
+
     public void testPageref() throws Exception
     {
         String result = getHtmlText( "pageref.doc" );