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:
parent
70c361f9dd
commit
1b306c7d77
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user