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