initial check-in.

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352726 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Said Ryan Ackley 2002-06-27 12:16:08 +00:00
parent 70c361f9dd
commit 1b306c7d77
3 changed files with 145 additions and 0 deletions

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}