You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ma...@apache.org on 2010/07/06 17:45:36 UTC
svn commit: r960922 -
/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/TextPieceTable.java
Author: maxcom
Date: Tue Jul 6 15:45:36 2010
New Revision: 960922
URL: http://svn.apache.org/viewvc?rev=960922&view=rev
Log:
HWPF: better fix for TextPieceTable.getCharIndex()
Modified:
poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/TextPieceTable.java
Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/TextPieceTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/TextPieceTable.java?rev=960922&r1=960921&r2=960922&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/TextPieceTable.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/TextPieceTable.java Tue Jul 6 15:45:36 2010
@@ -242,29 +242,50 @@ public final class TextPieceTable implem
return false;
}
- public int getCharIndex(int bytePos) {
- int charCount = 0;
+ public int getCharIndex(int bytePos) {
+ int charCount = 0;
for(TextPiece tp : _textPiecesFCOrder) {
int pieceStart = tp.getPieceDescriptor().getFilePosition();
- if (pieceStart >= bytePos) {
- break;
+
+ if (bytePos > pieceStart + tp.bytesLength()) {
+ continue;
+ }
+
+ if (pieceStart > bytePos) {
+ bytePos = pieceStart;
}
- int bytesLength = tp.bytesLength();
- int pieceEnd = pieceStart + bytesLength;
+ break;
+ }
- int toAdd = bytePos > pieceEnd ? bytesLength : bytesLength - (pieceEnd - bytePos);
+ for(TextPiece tp : _textPieces) {
+ int pieceStart = tp.getPieceDescriptor().getFilePosition();
- if (tp.isUnicode()) {
- charCount += toAdd / 2;
- } else {
- charCount += toAdd;
- }
- }
+ int bytesLength = tp.bytesLength();
+ int pieceEnd = pieceStart + bytesLength;
- return charCount;
- }
+ int toAdd;
+
+ if (bytePos< pieceStart || bytePos > pieceEnd) {
+ toAdd = bytesLength;
+ } else {
+ toAdd = bytesLength - (pieceEnd - bytePos);
+ }
+
+ if (tp.isUnicode()) {
+ charCount += toAdd / 2;
+ } else {
+ charCount += toAdd;
+ }
+
+ if (bytePos>=pieceStart && bytePos<=pieceEnd) {
+ break;
+ }
+ }
+
+ return charCount;
+ }
private static class FCComparator implements Comparator<TextPiece> {
public int compare(TextPiece textPiece, TextPiece textPiece1) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org