sackley 2004/04/08 04:51:12
Modified: src/scratchpad/src/org/apache/poi/hwpf/model ListTables.java
SectionTable.java
Log:
patch and latest bug fixes
Revision Changes Path
1.3 +19 -52
jakarta-poi/src/scratchpad/src/org/apache/poi/hwpf/model/ListTables.java
Index: ListTables.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/scratchpad/src/org/apache/poi/hwpf/model/ListTables.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ListTables.java 6 Apr 2004 04:44:01 -0000 1.2
+++ ListTables.java 8 Apr 2004 11:51:12 -0000 1.3
@@ -1,56 +1,20 @@
/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2003 The Apache Software Foundation. All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgment:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself,
- * if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" and
- * "Apache POI" must not be used to endorse or promote products
- * derived from this software without prior written permission. For
- * written permission, please contact [EMAIL PROTECTED]
- *
- * 5. Products derived from this software may not be called "Apache",
- * "Apache POI", nor may "Apache" appear in their name, without
- * prior written permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
+ Copyright 2002-2004 Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+
package org.apache.poi.hwpf.model;
@@ -66,6 +30,9 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+/**
+ * @author Ryan Ackley
+ */
public class ListTables
{
private static final int LIST_DATA_SIZE = 28;
1.3 +53 -5
jakarta-poi/src/scratchpad/src/org/apache/poi/hwpf/model/SectionTable.java
Index: SectionTable.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/scratchpad/src/org/apache/poi/hwpf/model/SectionTable.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SectionTable.java 6 Apr 2004 04:44:01 -0000 1.2
+++ SectionTable.java 8 Apr 2004 11:51:12 -0000 1.3
@@ -19,6 +19,7 @@
import java.util.ArrayList;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.util.List;
import org.apache.poi.util.LittleEndian;
import org.apache.poi.hwpf.model.io.*;
@@ -31,16 +32,19 @@
private static final int SED_SIZE = 12;
private ArrayList _sections = new ArrayList();
+ private List _text;
public SectionTable()
{
}
+
public SectionTable(byte[] documentStream, byte[] tableStream, int offset,
- int size, int fcMin)
+ int size, int fcMin,
+ List tpt)
{
PlexOfCps sedPlex = new PlexOfCps(tableStream, offset, size, SED_SIZE);
-
+ _text = tpt;
int length = sedPlex.length();
for (int x = 0; x < length; x++)
@@ -53,7 +57,7 @@
// check for the optimization
if (fileOffset == 0xffffffff)
{
- _sections.add(new SEPX(sed, node.getStart(), node.getEnd(), new byte[0]));
+ _sections.add(new SEPX(sed, CPtoFC(node.getStart()), CPtoFC(node.getEnd()),
new byte[0]));
}
else
{
@@ -62,7 +66,7 @@
byte[] buf = new byte[sepxSize];
fileOffset += LittleEndian.SHORT_SIZE;
System.arraycopy(documentStream, fileOffset, buf, 0, buf.length);
- _sections.add(new SEPX(sed, node.getStart(), node.getEnd(), buf));
+ _sections.add(new SEPX(sed, CPtoFC(node.getStart()), CPtoFC(node.getEnd()),
buf));
}
}
}
@@ -81,6 +85,50 @@
}
}
+ private int CPtoFC(int cp)
+ {
+ int size = _text.size();
+ int x = 0;
+ int end = 0;
+ int fc = 0;
+ for (; x < size; x++)
+ {
+ TextPiece piece = (TextPiece)_text.get(x);
+ int currentStart = end;
+ end += ((piece.getEnd()- piece.getStart())/(piece.usesUnicode() ? 2 : 1));
+ if (cp <= end)
+ {
+ fc += ((cp - currentStart) * (piece.usesUnicode() ? 2 : 1));
+ break;
+ }
+ else
+ {
+ fc += (piece.getEnd() - piece.getStart());
+ }
+ }
+ return fc;
+ }
+
+ private int FCtoCP(int fc)
+ {
+ int size = _text.size();
+ int cp = 0;
+ for (int x = 0; x < size; x++)
+ {
+ TextPiece piece = (TextPiece)_text.get(x);
+
+ if (fc <= piece.getEnd())
+ {
+ cp += ((fc - piece.getStart())/ (piece.usesUnicode() ? 2 : 1));
+ break;
+ }
+ else
+ {
+ cp += ((piece.getEnd() - piece.getStart())/ (piece.usesUnicode() ? 2 : 1));
+ }
+ }
+ return cp;
+ }
public ArrayList getSections()
{
@@ -115,7 +163,7 @@
sed.setFc(offset);
// add the section descriptor bytes to the PlexOfCps.
- GenericPropertyNode property = new GenericPropertyNode(sepx.getStart(),
sepx.getEnd(), sed.toByteArray());
+ GenericPropertyNode property = new
GenericPropertyNode(FCtoCP(sepx.getStart()), FCtoCP(sepx.getEnd()), sed.toByteArray());
plex.addProperty(property);
offset = docStream.getOffset();
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]