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
This commit is contained in:
parent
65881d12ea
commit
efd149c834
@ -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()) {
|
||||
for ( ; tableEnd < limit; tableEnd++ )
|
||||
{
|
||||
Paragraph next = new Paragraph( _paragraphs.get( tableEnd ), this );
|
||||
if ( !next.isInTable() || next.getTableLevel() < tableLevel )
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
initAll();
|
||||
if (tableEnd > _parEnd) {
|
||||
|
@ -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" );
|
||||
|
Loading…
Reference in New Issue
Block a user