poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From max...@apache.org
Subject svn commit: r960587 - in /poi/trunk/src: documentation/content/xdocs/status.xml scratchpad/src/org/apache/poi/hwpf/HWPFOldDocument.java scratchpad/src/org/apache/poi/hwpf/model/TextPieceTable.java
Date Mon, 05 Jul 2010 12:56:03 GMT
Author: maxcom
Date: Mon Jul  5 12:56:02 2010
New Revision: 960587

URL: http://svn.apache.org/viewvc?rev=960587&view=rev
Log:
HWPF: Improve reading of auto-saved ("complex") document

Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFOldDocument.java
    poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/TextPieceTable.java

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=960587&r1=960586&r2=960587&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Mon Jul  5 12:56:02 2010
@@ -39,6 +39,7 @@
            <action dev="POI-DEVELOPERS" type="add">49508 - Allow the addition of paragraphs
to XWPF Table Cells</action>
            <action dev="POI-DEVELOPERS" type="fix">49446 - Don't consider 17.16.23
field codes as properly part of the paragraph's text</action>
            <action dev="POI-DEVELOPERS" type="fix">XSLFSlideShow shouldn't break on
.thmx (theme) files. Support for them is still very limited though</action>
+           <action dev="POI-DEVELOPERS" type="fix">HWPF: Improve reading of auto-saved
("complex") documents</action>
         </release>
         <release version="3.7-beta1" date="2010-06-20">
            <action dev="POI-DEVELOPERS" type="fix">49432 - Lazy caching of XSSFComment
CTComment objects by reference, to make repeated comment searching faster</action>

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFOldDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFOldDocument.java?rev=960587&r1=960586&r2=960587&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFOldDocument.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/HWPFOldDocument.java Mon Jul  5 12:56:02
2010
@@ -86,7 +86,7 @@ public class HWPFOldDocument extends HWP
             TextPiece tp = new TextPiece(
                     0, textData.length, textData, pd, 0
             );
-            tpt.getTextPieces().add(tp);
+            tpt.add(tp);
             
             text.append(tp.getStringBuffer());
         }

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=960587&r1=960586&r2=960587&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 Mon Jul  5
12:56:02 2010
@@ -17,14 +17,15 @@
 
 package org.apache.poi.hwpf.model;
 
+import org.apache.poi.hwpf.model.io.HWPFOutputStream;
+import org.apache.poi.poifs.common.POIFSConstants;
+
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
-import org.apache.poi.hwpf.model.io.HWPFOutputStream;
-import org.apache.poi.poifs.common.POIFSConstants;
-
 /**
  * The piece table for matching up character positions to bits of text. This
  * mostly works in bytes, but the TextPieces themselves work in characters. This
@@ -34,6 +35,7 @@ import org.apache.poi.poifs.common.POIFS
  */
 public final class TextPieceTable implements CharIndexTranslator {
 	protected ArrayList<TextPiece> _textPieces = new ArrayList<TextPiece>();
+    protected ArrayList<TextPiece> _textPiecesFCOrder = new ArrayList<TextPiece>();
 	// int _multiple;
 	int _cpMin;
 
@@ -96,11 +98,9 @@ public final class TextPieceTable implem
 
 		// In the interest of our sanity, now sort the text pieces
 		// into order, if they're not already
-		TextPiece[] tp = _textPieces.toArray(new TextPiece[_textPieces.size()]);
-		Arrays.sort(tp);
-		for (int i = 0; i < tp.length; i++) {
-			_textPieces.set(i, tp[i]);
-		}
+        Collections.sort(_textPieces);
+        _textPiecesFCOrder = new ArrayList<TextPiece>(_textPieces);
+        Collections.sort(_textPiecesFCOrder, new FCComparator());
 	}
 
 	public int getCpMin() {
@@ -111,6 +111,13 @@ public final class TextPieceTable implem
 		return _textPieces;
 	}
 
+    public void add(TextPiece piece) {
+        _textPieces.add(piece);
+        _textPiecesFCOrder.add(piece);
+        Collections.sort(_textPieces);
+        Collections.sort(_textPiecesFCOrder, new FCComparator());
+    }
+
 	/**
 	 * Is the text at the given Character offset unicode, or plain old ascii? In
 	 * a very evil fashion, you have to actually know this to make sense of
@@ -238,7 +245,7 @@ public final class TextPieceTable implem
 	public int getCharIndex(int bytePos) {
 		int charCount = 0;
 
-        for(TextPiece tp : _textPieces) {
+        for(TextPiece tp : _textPiecesFCOrder) {
 			int pieceStart = tp.getPieceDescriptor().getFilePosition();
 			if (pieceStart >= bytePos) {
 				break;
@@ -259,4 +266,15 @@ public final class TextPieceTable implem
 		return charCount;
 	}
 
+    private static class FCComparator implements Comparator<TextPiece> {
+        public int compare(TextPiece textPiece, TextPiece textPiece1) {
+            if (textPiece.getPieceDescriptor().fc>textPiece1.getPieceDescriptor().fc)
{
+                return 1;
+            } else if (textPiece.getPieceDescriptor().fc<textPiece1.getPieceDescriptor().fc)
{
+                return -1;
+            } else {
+                return 0;
+            }
+        }
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org


Mime
View raw message