add ProperyModifier (PRM) field to PieceDescriptor (PD)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1145409 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
6d3bd4e5b4
commit
5fb7c13c38
@ -29,7 +29,7 @@ public final class PieceDescriptor
|
|||||||
private static BitField fPaphNil = BitFieldFactory.getInstance(0x02);
|
private static BitField fPaphNil = BitFieldFactory.getInstance(0x02);
|
||||||
private static BitField fCopied = BitFieldFactory.getInstance(0x04);
|
private static BitField fCopied = BitFieldFactory.getInstance(0x04);
|
||||||
int fc;
|
int fc;
|
||||||
short prm;
|
PropertyModifier prm;
|
||||||
boolean unicode;
|
boolean unicode;
|
||||||
|
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ public final class PieceDescriptor
|
|||||||
offset += LittleEndian.SHORT_SIZE;
|
offset += LittleEndian.SHORT_SIZE;
|
||||||
fc = LittleEndian.getInt(buf, offset);
|
fc = LittleEndian.getInt(buf, offset);
|
||||||
offset += LittleEndian.INT_SIZE;
|
offset += LittleEndian.INT_SIZE;
|
||||||
prm = LittleEndian.getShort(buf, offset);
|
prm = new PropertyModifier( LittleEndian.getShort(buf, offset));
|
||||||
|
|
||||||
// see if this piece uses unicode.
|
// see if this piece uses unicode.
|
||||||
if ((fc & 0x40000000) == 0)
|
if ((fc & 0x40000000) == 0)
|
||||||
@ -70,6 +70,11 @@ public final class PieceDescriptor
|
|||||||
return unicode;
|
return unicode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PropertyModifier getPrm()
|
||||||
|
{
|
||||||
|
return prm;
|
||||||
|
}
|
||||||
|
|
||||||
protected byte[] toByteArray()
|
protected byte[] toByteArray()
|
||||||
{
|
{
|
||||||
// set up the fc
|
// set up the fc
|
||||||
@ -86,7 +91,7 @@ public final class PieceDescriptor
|
|||||||
offset += LittleEndian.SHORT_SIZE;
|
offset += LittleEndian.SHORT_SIZE;
|
||||||
LittleEndian.putInt(buf, offset, tempFc);
|
LittleEndian.putInt(buf, offset, tempFc);
|
||||||
offset += LittleEndian.INT_SIZE;
|
offset += LittleEndian.INT_SIZE;
|
||||||
LittleEndian.putShort(buf, offset, prm);
|
LittleEndian.putShort(buf, offset, prm.getValue());
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
|
|
||||||
@ -103,7 +108,7 @@ public final class PieceDescriptor
|
|||||||
final int prime = 31;
|
final int prime = 31;
|
||||||
int result = 1;
|
int result = 1;
|
||||||
result = prime * result + descriptor;
|
result = prime * result + descriptor;
|
||||||
result = prime * result + prm;
|
result = prime * result + prm.getValue();
|
||||||
result = prime * result + ( unicode ? 1231 : 1237 );
|
result = prime * result + ( unicode ? 1231 : 1237 );
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -131,6 +136,7 @@ public final class PieceDescriptor
|
|||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
return "PieceDescriptor (pos: " + getFilePosition() + "; "
|
return "PieceDescriptor (pos: " + getFilePosition() + "; "
|
||||||
+ ( isUnicode() ? "unicode" : "non-unicode" ) + ")";
|
+ ( isUnicode() ? "unicode" : "non-unicode" ) + "; prm: "
|
||||||
|
+ getPrm() + ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,126 @@
|
|||||||
|
package org.apache.poi.hwpf.model;
|
||||||
|
|
||||||
|
import org.apache.poi.util.BitField;
|
||||||
|
|
||||||
|
public final class PropertyModifier implements Cloneable
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* <li>"Set to 0 for variant 1" <li>"Set to 1 for variant 2"
|
||||||
|
*/
|
||||||
|
private static BitField _fComplex = new BitField( 0x0001 );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* "Index to a grpprl stored in CLX portion of file"
|
||||||
|
*/
|
||||||
|
private static BitField _figrpprl = new BitField( 0xfffe );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* "Index to entry into rgsprmPrm"
|
||||||
|
*/
|
||||||
|
private static BitField _fisprm = new BitField( 0x00fe );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* "sprm's operand"
|
||||||
|
*/
|
||||||
|
private static BitField _fval = new BitField( 0xff00 );
|
||||||
|
|
||||||
|
private short value;
|
||||||
|
|
||||||
|
public PropertyModifier( short value )
|
||||||
|
{
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected PropertyModifier clone() throws CloneNotSupportedException
|
||||||
|
{
|
||||||
|
return new PropertyModifier( value );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals( Object obj )
|
||||||
|
{
|
||||||
|
if ( this == obj )
|
||||||
|
return true;
|
||||||
|
if ( obj == null )
|
||||||
|
return false;
|
||||||
|
if ( getClass() != obj.getClass() )
|
||||||
|
return false;
|
||||||
|
PropertyModifier other = (PropertyModifier) obj;
|
||||||
|
if ( value != other.value )
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* "Index to a grpprl stored in CLX portion of file"
|
||||||
|
*/
|
||||||
|
public short getIgrpprl()
|
||||||
|
{
|
||||||
|
if ( !isComplex() )
|
||||||
|
throw new IllegalStateException( "Not complex" );
|
||||||
|
|
||||||
|
return _figrpprl.getShortValue( value );
|
||||||
|
}
|
||||||
|
|
||||||
|
public short getIsprm()
|
||||||
|
{
|
||||||
|
if ( isComplex() )
|
||||||
|
throw new IllegalStateException( "Not simple" );
|
||||||
|
|
||||||
|
return _fisprm.getShortValue( value );
|
||||||
|
}
|
||||||
|
|
||||||
|
public short getVal()
|
||||||
|
{
|
||||||
|
if ( isComplex() )
|
||||||
|
throw new IllegalStateException( "Not simple" );
|
||||||
|
|
||||||
|
return _fval.getShortValue( value );
|
||||||
|
}
|
||||||
|
|
||||||
|
public short getValue()
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + value;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isComplex()
|
||||||
|
{
|
||||||
|
return _fComplex.isSet( value );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder.append( "[PRM] (complex: " );
|
||||||
|
stringBuilder.append( isComplex() );
|
||||||
|
stringBuilder.append( "; " );
|
||||||
|
if ( isComplex() )
|
||||||
|
{
|
||||||
|
stringBuilder.append( "igrpprl: " );
|
||||||
|
stringBuilder.append( getIgrpprl() );
|
||||||
|
stringBuilder.append( "; " );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stringBuilder.append( "isprm: " );
|
||||||
|
stringBuilder.append( getIsprm() );
|
||||||
|
stringBuilder.append( "; " );
|
||||||
|
stringBuilder.append( "val: " );
|
||||||
|
stringBuilder.append( getVal() );
|
||||||
|
stringBuilder.append( "; " );
|
||||||
|
}
|
||||||
|
stringBuilder.append( ")" );
|
||||||
|
return stringBuilder.toString();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user