HWPF: better fix for TextPieceTable.getCharIndex()

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@960922 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Maxim Valyanskiy 2010-07-06 15:45:36 +00:00
parent 69cc14c377
commit 22730f9a12

View File

@ -247,20 +247,41 @@ public final class TextPieceTable implements CharIndexTranslator {
for(TextPiece tp : _textPiecesFCOrder) { for(TextPiece tp : _textPiecesFCOrder) {
int pieceStart = tp.getPieceDescriptor().getFilePosition(); int pieceStart = tp.getPieceDescriptor().getFilePosition();
if (pieceStart >= bytePos) {
if (bytePos > pieceStart + tp.bytesLength()) {
continue;
}
if (pieceStart > bytePos) {
bytePos = pieceStart;
}
break; break;
} }
for(TextPiece tp : _textPieces) {
int pieceStart = tp.getPieceDescriptor().getFilePosition();
int bytesLength = tp.bytesLength(); int bytesLength = tp.bytesLength();
int pieceEnd = pieceStart + bytesLength; int pieceEnd = pieceStart + bytesLength;
int toAdd = bytePos > pieceEnd ? bytesLength : bytesLength - (pieceEnd - bytePos); int toAdd;
if (bytePos< pieceStart || bytePos > pieceEnd) {
toAdd = bytesLength;
} else {
toAdd = bytesLength - (pieceEnd - bytePos);
}
if (tp.isUnicode()) { if (tp.isUnicode()) {
charCount += toAdd / 2; charCount += toAdd / 2;
} else { } else {
charCount += toAdd; charCount += toAdd;
} }
if (bytePos>=pieceStart && bytePos<=pieceEnd) {
break;
}
} }
return charCount; return charCount;