You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by ni...@apache.org on 2006/06/13 16:54:52 UTC
svn commit: r413911 - in
/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf:
HSLFSlideShow.java record/PersistPtrHolder.java
Author: nick
Date: Tue Jun 13 07:54:52 2006
New Revision: 413911
URL: http://svn.apache.org/viewvc?rev=413911&view=rev
Log:
Some PersistPtrHolders seem to reference records stored after them. Add a second pass to cope with these cases
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PersistPtrHolder.java
Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java?rev=413911&r1=413910&r2=413911&view=diff
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java (original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/HSLFSlideShow.java Tue Jun 13 07:54:52 2006
@@ -248,25 +248,42 @@
// As we go along, update, and hand over, to any Position Dependent
// records we happen across
Hashtable oldToNewPositions = new Hashtable();
-
- // Write ourselves out
+
+ // First pass - figure out where all the position dependent
+ // records are going to end up, in the new scheme
+ // (Annoyingly, some powerpoing files have PersistPtrHolders
+ // that reference slides after the PersistPtrHolder)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for(int i=0; i<_records.length; i++) {
- // For now, we're only handling PositionDependentRecord's that
- // happen at the top level.
- // In future, we'll need the handle them everywhere, but that's
- // a bit trickier
if(_records[i] instanceof PositionDependentRecord) {
PositionDependentRecord pdr = (PositionDependentRecord)_records[i];
int oldPos = pdr.getLastOnDiskOffset();
int newPos = baos.size();
pdr.setLastOnDiskOffset(newPos);
- //System.out.println(i + " " + oldPos + " " + newPos);
oldToNewPositions.put(new Integer(oldPos),new Integer(newPos));
+ //System.out.println(oldPos + " -> " + newPos);
+ }
+
+ // Dummy write out, so the position winds on properly
+ _records[i].writeOut(baos);
+ }
+
+ // No go back through, actually writing ourselves out
+ baos.reset();
+ for(int i=0; i<_records.length; i++) {
+ // For now, we're only handling PositionDependentRecord's that
+ // happen at the top level.
+ // In future, we'll need the handle them everywhere, but that's
+ // a bit trickier
+ if(_records[i] instanceof PositionDependentRecord) {
+ // We've already figured out their new location, and
+ // told them that
+ // Tell them of the positions of the other records though
+ PositionDependentRecord pdr = (PositionDependentRecord)_records[i];
pdr.updateOtherRecordReferences(oldToNewPositions);
}
- // Finally, write out
+ // Whatever happens, write out that record tree
_records[i].writeOut(baos);
}
// Update our cached copy of the bytes that make up the PPT stream
Modified: jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PersistPtrHolder.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PersistPtrHolder.java?rev=413911&r1=413910&r2=413911&view=diff
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PersistPtrHolder.java (original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/PersistPtrHolder.java Tue Jun 13 07:54:52 2006
@@ -192,7 +192,9 @@
Integer newPos = (Integer)oldToNewReferencesLookup.get(oldPos);
if(newPos == null) {
- throw new RuntimeException("Couldn't find the new location of the \"slide\" that used to be at " + oldPos);
+ System.err.println("Couldn't find the new location of the \"slide\" with id " + id + " that used to be at " + oldPos);
+ System.err.println("Not updating the position of it, you probably won't be able to find it any more (if you ever could!)");
+ newPos = oldPos;
}
// Write out the new location
---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List: http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/