]> source.dussan.org Git - poi.git/commitdiff
initial check-in.
authorSaid Ryan Ackley <sackley@apache.org>
Thu, 27 Jun 2002 12:16:08 +0000 (12:16 +0000)
committerSaid Ryan Ackley <sackley@apache.org>
Thu, 27 Jun 2002 12:16:08 +0000 (12:16 +0000)
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352726 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hdf/model/hdftypes/CHPFormattedDiskPage.java [new file with mode: 0644]
src/scratchpad/src/org/apache/poi/hdf/model/hdftypes/PAPFormattedDiskPage.java [new file with mode: 0644]
src/scratchpad/src/org/apache/poi/hdf/model/hdftypes/PlexOfCps.java [new file with mode: 0644]

diff --git a/src/scratchpad/src/org/apache/poi/hdf/model/hdftypes/CHPFormattedDiskPage.java b/src/scratchpad/src/org/apache/poi/hdf/model/hdftypes/CHPFormattedDiskPage.java
new file mode 100644 (file)
index 0000000..63c670a
--- /dev/null
@@ -0,0 +1,58 @@
+package org.apache.poi.hdf.model.hdftypes;
+
+import org.apache.poi.util.LittleEndian;
+
+/**
+ * Represents a CHP fkp. The style properties for paragraph and character runs
+ * are stored in fkps. There are PAP fkps for paragraph properties and CHP fkps
+ * for character run properties. The first part of the fkp for both CHP and PAP
+ * fkps consists of an array of 4 byte int offsets that represent a
+ * Paragraph's or Character run's text offset in the main stream. The ending
+ * offset is the next value in the array. For example, if an fkp has X number of
+ * Paragraph's stored in it then there are (x + 1) 4 byte ints in the beginning
+ * array. The number X is determined by the last byte in a 512 byte fkp.
+ *
+ * CHP and PAP fkps also store the compressed styles(grpprl) that correspond to
+ * the offsets on the front of the fkp. The offset of the grpprls is determined
+ * differently for CHP fkps and PAP fkps.
+ */
+public class CHPFormattedDiskPage extends FormattedDiskPage
+{
+
+
+    /**
+     * This constructs a CHPFormattedDiskPage from a raw fkp (512 byte array
+     * read from a Word file).
+     *
+     * @param fkp The 512 byte array to read data from
+     */
+    public CHPFormattedDiskPage(byte[] fkp)
+    {
+        super(fkp);
+    }
+
+    /**
+     * Gets the chpx for the character run at index in this fkp.
+     *
+     * @param index The index of the chpx to get.
+     * @return a chpx grpprl.
+     */
+    public byte[] getGrpprl(int index)
+    {
+        int chpxOffset = 2 * LittleEndian.getUnsignedByte(_fkp, ((_crun + 1) * 4) + index);
+
+        //optimization if offset == 0 use "Normal" style
+        if(chpxOffset == 0)
+        {
+            return new byte[0];
+
+        }
+
+        int size = LittleEndian.getUnsignedByte(_fkp, chpxOffset);
+
+        byte[] chpx = new byte[size];
+
+        System.arraycopy(_fkp, ++chpxOffset, chpx, 0, size);
+        return chpx;
+    }
+}
\ No newline at end of file
diff --git a/src/scratchpad/src/org/apache/poi/hdf/model/hdftypes/PAPFormattedDiskPage.java b/src/scratchpad/src/org/apache/poi/hdf/model/hdftypes/PAPFormattedDiskPage.java
new file mode 100644 (file)
index 0000000..50b5e6d
--- /dev/null
@@ -0,0 +1,57 @@
+package org.apache.poi.hdf.model.hdftypes;
+
+import org.apache.poi.util.LittleEndian;
+
+/**
+ * Represents a PAP FKP. The style properties for paragraph and character runs
+ * are stored in fkps. There are PAP fkps for paragraph properties and CHP fkps
+ * for character run properties. The first part of the fkp for both CHP and PAP
+ * fkps consists of an array of 4 byte int offsets in the main stream for that
+ * Paragraph's or Character run's text. The ending offset is the next
+ * value in the array. For example, if an fkp has X number of Paragraph's
+ * stored in it then there are (x + 1) 4 byte ints in the beginning array. The
+ * number X is determined by the last byte in a 512 byte fkp.
+ *
+ * CHP and PAP fkps also store the compressed styles(grpprl) that correspond to
+ * the offsets on the front of the fkp. The offset of the grpprls is determined
+ * differently for CHP fkps and PAP fkps.
+ *
+ * @author Ryan Ackley
+ */
+public class PAPFormattedDiskPage extends FormattedDiskPage
+{
+
+    /**
+     * Creates a PAPFormattedDiskPage from a 512 byte array
+     *
+     * @param fkp a 512 byte array.
+     */
+    public PAPFormattedDiskPage(byte[] fkp)
+    {
+        super(fkp);
+    }
+
+    /**
+     * Gets the papx for the pagraph at index in this fkp.
+     *
+     * @param index The index of the papx to get.
+     * @return a papx grpprl.
+     */
+    public byte[] getGrpprl(int index)
+    {
+        int papxOffset = 2 * LittleEndian.getUnsignedByte(_fkp, ((_crun + 1) * 4) + (index * 13));
+        int size = 2 * LittleEndian.getUnsignedByte(_fkp, papxOffset);
+        if(size == 0)
+        {
+            size = 2 * LittleEndian.getUnsignedByte(_fkp, ++papxOffset);
+        }
+        else
+        {
+            size--;
+        }
+
+        byte[] papx = new byte[size];
+        System.arraycopy(_fkp, ++papxOffset, papx, 0, size);
+        return papx;
+    }
+}
\ No newline at end of file
diff --git a/src/scratchpad/src/org/apache/poi/hdf/model/hdftypes/PlexOfCps.java b/src/scratchpad/src/org/apache/poi/hdf/model/hdftypes/PlexOfCps.java
new file mode 100644 (file)
index 0000000..35e00ac
--- /dev/null
@@ -0,0 +1,30 @@
+package org.apache.poi.hdf.model.hdftypes;
+
+
+/**
+ * common data structure in a Word file. Contains an array of 4 byte ints in
+ * the front that relate to an array of abitrary data structures in the back.
+ */
+public class PlexOfCps
+{
+    private int _count;
+    private int _offset;
+    private int _sizeOfStruct;
+
+
+
+    public PlexOfCps(int offset, int size, int sizeOfStruct)
+    {
+        _count = (size - 4)/(4 + sizeOfStruct);
+        _offset = offset;
+        _sizeOfStruct = sizeOfStruct;
+    }
+    public int size()
+    {
+        return _count;
+    }
+    public int getStructOffset(int index)
+    {
+        return (4 * (_count + 1)) + (_sizeOfStruct * index);
+    }
+}
\ No newline at end of file