fix: too many PAPX were dropped due to too strict boundary checks

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1143720 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Sergey Vladimirov 2011-07-07 09:16:26 +00:00
parent 5aaeaeb6b3
commit 4c670a3efe
2 changed files with 22 additions and 1 deletions

View File

@ -70,7 +70,7 @@ public class PAPBinTable
PAPX papx = pfkp.getPAPX(y); PAPX papx = pfkp.getPAPX(y);
//we don't need PAPX if they are references nowhere //we don't need PAPX if they are references nowhere
if (tpt.isIndexInTable( papx.getStartBytes() )) if (tpt.isIndexInTable( papx.getStartBytes(), papx.getEndBytes() ))
_paragraphs.add(papx); _paragraphs.add(papx);
} }
} }

View File

@ -292,6 +292,27 @@ public class TextPieceTable implements CharIndexTranslator {
return false; return false;
} }
boolean isIndexInTable( int startBytePos, int endBytePos )
{
for(TextPiece tp : _textPiecesFCOrder) {
int pieceStart = tp.getPieceDescriptor().getFilePosition();
if (startBytePos > pieceStart + tp.bytesLength()) {
continue;
}
int left = Math.max( startBytePos, pieceStart );
int right = Math.min( endBytePos, pieceStart + tp.bytesLength() );
if (left >= right)
return false;
return true;
}
return false;
}
private static class FCComparator implements Comparator<TextPiece> { private static class FCComparator implements Comparator<TextPiece> {
public int compare(TextPiece textPiece, TextPiece textPiece1) { public int compare(TextPiece textPiece, TextPiece textPiece1) {
if (textPiece.getPieceDescriptor().fc>textPiece1.getPieceDescriptor().fc) { if (textPiece.getPieceDescriptor().fc>textPiece1.getPieceDescriptor().fc) {