From: Sergey Vladimirov Date: Tue, 5 Jul 2011 02:17:54 +0000 (+0000) Subject: fix inner tables handling by Range.getTable() method X-Git-Tag: REL_3_8_BETA4~321 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=da719d5209a32778ece9f311c30c3d87193ac126;p=poi.git fix inner tables handling by Range.getTable() method git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1142877 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Range.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Range.java index 5cf71a1119..03a1733794 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Range.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Range.java @@ -17,11 +17,12 @@ 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) { diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/converter/TestWordToHtmlConverter.java b/src/scratchpad/testcases/org/apache/poi/hwpf/converter/TestWordToHtmlConverter.java index 272e25b61b..ad593324f8 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/converter/TestWordToHtmlConverter.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/converter/TestWordToHtmlConverter.java @@ -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" );