Bug 51305: Add sprmTCellPaddingDefault support; Update Table Cell Descriptor, make it non-from-file;

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1132616 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Yegor Kozlov 2011-06-06 12:43:17 +00:00
parent e229a9e472
commit a2e6747abd
6 changed files with 546 additions and 125 deletions

View File

@ -34,6 +34,7 @@
<changes>
<release version="3.8-beta4" date="2011-??-??">
<action dev="poi-developers" type="add">51305 - Add sprmTCellPaddingDefault support in HWPF</action>
<action dev="poi-developers" type="add">51265 - Enhanced Handling of Picture Parts in XWPF</action>
<action dev="poi-developers" type="add">51292 - Additional HWPF Table Cell Descriptor values</action>
</release>

View File

@ -102,24 +102,20 @@ cd build/dist
8. Upload to the dev svn dist repo,
https://dist.apache.org/repos/dist/dev/poi/ eg
https://dist.apache.org/repos/dist/dev/poi/3.8-RC2/
https://dist.apache.org/repos/dist/dev/poi/3.8-RC3/
How to upload:
8a svn co https://dist.apache.org/repos/dist/dev/poi
8b add .gz and .zip packages along with checksums.
svn co https://dist.apache.org/repos/dist/dev/poi
mkdir 3.8-RC3/
svn add 3.8-RC3
you should have a similar structure of files:
$ ls
README.html poi-bin-3.8-beta3-20110606.zip poi-src-3.8-beta3-20110606.tar.gz.md5
maven poi-bin-3.8-beta3-20110606.zip.asc poi-src-3.8-beta3-20110606.tar.gz.sha1
poi-bin-3.8-beta3-20110606.tar.gz poi-bin-3.8-beta3-20110606.zip.md5 poi-src-3.8-beta3-20110606.zip
poi-bin-3.8-beta3-20110606.tar.gz.asc poi-bin-3.8-beta3-20110606.zip.sha1 poi-src-3.8-beta3-20110606.zip.asc
poi-bin-3.8-beta3-20110606.tar.gz.md5 poi-src-3.8-beta3-20110606.tar.gz poi-src-3.8-beta3-20110606.zip.md5
poi-bin-3.8-beta3-20110606.tar.gz.sha1 poi-src-3.8-beta3-20110606.tar.gz.asc poi-src-3.8-beta3-20110606.zip.sha1
then add .gz and .zip packages along with checksums.
binaries should be in ./bin, sources in ./src sub-directories
8c. commit
After commit the files should be acessible at https://dist.apache.org/repos/dist/dev/poi/
After commit the files should be acessible at https://dist.apache.org/repos/dist/dev/poi/3.8-RC2/
(III) After the vote:

View File

@ -18,11 +18,10 @@
package org.apache.poi.hwpf.model.types;
import org.apache.poi.hdf.model.hdftypes.HDFType;
import org.apache.poi.hwpf.usermodel.BorderCode;
import org.apache.poi.util.BitField;
import org.apache.poi.util.BitFieldFactory;
import org.apache.poi.util.LittleEndian;
/**
* Table Cell Descriptor.
@ -31,25 +30,44 @@ import org.apache.poi.util.LittleEndian;
* @author S. Ryan Ackley
*/
public abstract class TCAbstractType implements HDFType {
public abstract class TCAbstractType
implements HDFType
{
protected short field_1_rgf;
private static BitField fFirstMerged = BitFieldFactory.getInstance(0x0001);
private static BitField fMerged = BitFieldFactory.getInstance(0x0002);
private static BitField fVertical = BitFieldFactory.getInstance(0x0004);
private static BitField fBackward = BitFieldFactory.getInstance(0x0008);
private static BitField fRotateFont = BitFieldFactory.getInstance(0x0010);
private static BitField fVertMerge = BitFieldFactory.getInstance(0x0020);
private static BitField fVertRestart = BitFieldFactory.getInstance(0x0040);
private static BitField vertAlign = BitFieldFactory.getInstance(0x0180);
private static BitField fFirstMerged = new BitField(0x0001);
private static BitField fMerged = new BitField(0x0002);
private static BitField fVertical = new BitField(0x0004);
private static BitField fBackward = new BitField(0x0008);
private static BitField fRotateFont = new BitField(0x0010);
private static BitField fVertMerge = new BitField(0x0020);
private static BitField fVertRestart = new BitField(0x0040);
private static BitField vertAlign = new BitField(0x0180);
private static BitField ftsWidth = new BitField(0x0E00);
private static BitField fFitText = new BitField(0x1000);
private static BitField fNoWrap = new BitField(0x2000);
private static BitField fUnused = new BitField(0xC000);
protected short field_2_unused;
protected BorderCode field_3_brcTop;
protected BorderCode field_4_brcLeft;
protected BorderCode field_5_brcBottom;
protected BorderCode field_6_brcRight;
protected short field_2_wWidth;
protected short field_3_wCellPaddingLeft;
protected short field_4_wCellPaddingTop;
protected short field_5_wCellPaddingBottom;
protected short field_6_wCellPaddingRight;
protected byte field_7_ftsCellPaddingLeft;
protected byte field_8_ftsCellPaddingTop;
protected byte field_9_ftsCellPaddingBottom;
protected byte field_10_ftsCellPaddingRight;
protected short field_11_wCellSpacingLeft;
protected short field_12_wCellSpacingTop;
protected short field_13_wCellSpacingBottom;
protected short field_14_wCellSpacingRight;
protected byte field_15_ftsCellSpacingLeft;
protected byte field_16_ftsCellSpacingTop;
protected byte field_17_ftsCellSpacingBottom;
protected byte field_18_ftsCellSpacingRight;
protected BorderCode field_19_brcTop;
protected BorderCode field_20_brcLeft;
protected BorderCode field_21_brcBottom;
protected BorderCode field_22_brcRight;
public TCAbstractType()
@ -57,26 +75,6 @@ public abstract class TCAbstractType implements HDFType {
}
protected void fillFields(byte [] data, int offset)
{
field_1_rgf = LittleEndian.getShort(data, 0x0 + offset);
field_2_unused = LittleEndian.getShort(data, 0x2 + offset);
field_3_brcTop = new BorderCode(data, 0x4 + offset);
field_4_brcLeft = new BorderCode(data, 0x8 + offset);
field_5_brcBottom = new BorderCode(data, 0xc + offset);
field_6_brcRight = new BorderCode(data, 0x10 + offset);
}
public void serialize(byte[] data, int offset)
{
LittleEndian.putShort(data, 0x0 + offset, field_1_rgf);
LittleEndian.putShort(data, 0x2 + offset, field_2_unused);
field_3_brcTop.serialize(data, 0x4 + offset);
field_4_brcLeft.serialize(data, 0x8 + offset);
field_5_brcBottom.serialize(data, 0xc + offset);
field_6_brcRight.serialize(data, 0x10 + offset);
}
public String toString()
{
@ -99,8 +97,56 @@ public abstract class TCAbstractType implements HDFType {
buffer.append(" .fNoWrap = ").append(isFNoWrap()).append('\n');
buffer.append(" .fUnused = ").append(getFUnused()).append('\n');
buffer.append(" .unused = ");
buffer.append(" (").append(getUnused()).append(" )\n");
buffer.append(" .wWidth = ");
buffer.append(" (").append(getWWidth()).append(" )\n");
buffer.append(" .wCellPaddingLeft = ");
buffer.append(" (").append(getWCellPaddingLeft()).append(" )\n");
buffer.append(" .wCellPaddingTop = ");
buffer.append(" (").append(getWCellPaddingTop()).append(" )\n");
buffer.append(" .wCellPaddingBottom = ");
buffer.append(" (").append(getWCellPaddingBottom()).append(" )\n");
buffer.append(" .wCellPaddingRight = ");
buffer.append(" (").append(getWCellPaddingRight()).append(" )\n");
buffer.append(" .ftsCellPaddingLeft = ");
buffer.append(" (").append(getFtsCellPaddingLeft()).append(" )\n");
buffer.append(" .ftsCellPaddingTop = ");
buffer.append(" (").append(getFtsCellPaddingTop()).append(" )\n");
buffer.append(" .ftsCellPaddingBottom = ");
buffer.append(" (").append(getFtsCellPaddingBottom()).append(" )\n");
buffer.append(" .ftsCellPaddingRight = ");
buffer.append(" (").append(getFtsCellPaddingRight()).append(" )\n");
buffer.append(" .wCellSpacingLeft = ");
buffer.append(" (").append(getWCellSpacingLeft()).append(" )\n");
buffer.append(" .wCellSpacingTop = ");
buffer.append(" (").append(getWCellSpacingTop()).append(" )\n");
buffer.append(" .wCellSpacingBottom = ");
buffer.append(" (").append(getWCellSpacingBottom()).append(" )\n");
buffer.append(" .wCellSpacingRight = ");
buffer.append(" (").append(getWCellSpacingRight()).append(" )\n");
buffer.append(" .ftsCellSpacingLeft = ");
buffer.append(" (").append(getFtsCellSpacingLeft()).append(" )\n");
buffer.append(" .ftsCellSpacingTop = ");
buffer.append(" (").append(getFtsCellSpacingTop()).append(" )\n");
buffer.append(" .ftsCellSpacingBottom = ");
buffer.append(" (").append(getFtsCellSpacingBottom()).append(" )\n");
buffer.append(" .ftsCellSpacingRight = ");
buffer.append(" (").append(getFtsCellSpacingRight()).append(" )\n");
buffer.append(" .brcTop = ");
buffer.append(" (").append(getBrcTop()).append(" )\n");
@ -123,7 +169,7 @@ public abstract class TCAbstractType implements HDFType {
*/
public int getSize()
{
return 4 + + 2 + 2 + 4 + 4 + 4 + 4;
return 4 + + 2 + 2 + 2 + 2 + 2 + 2 + 1 + 1 + 1 + 1 + 2 + 2 + 2 + 2 + 1 + 1 + 1 + 1 + 4 + 4 + 4 + 4;
}
@ -145,19 +191,275 @@ public abstract class TCAbstractType implements HDFType {
}
/**
* Get the unused field for the TC record.
* Get the wWidth field for the TC record.
*/
public short getUnused()
public short getWWidth()
{
return field_2_unused;
return field_2_wWidth;
}
/**
* Set the unused field for the TC record.
* Set the wWidth field for the TC record.
*/
public void setUnused(short field_2_unused)
public void setWWidth(short field_2_wWidth)
{
this.field_2_unused = field_2_unused;
this.field_2_wWidth = field_2_wWidth;
}
/**
* Get the wCellPaddingLeft field for the TC record.
*/
public short getWCellPaddingLeft()
{
return field_3_wCellPaddingLeft;
}
/**
* Set the wCellPaddingLeft field for the TC record.
*/
public void setWCellPaddingLeft(short field_3_wCellPaddingLeft)
{
this.field_3_wCellPaddingLeft = field_3_wCellPaddingLeft;
}
/**
* Get the wCellPaddingTop field for the TC record.
*/
public short getWCellPaddingTop()
{
return field_4_wCellPaddingTop;
}
/**
* Set the wCellPaddingTop field for the TC record.
*/
public void setWCellPaddingTop(short field_4_wCellPaddingTop)
{
this.field_4_wCellPaddingTop = field_4_wCellPaddingTop;
}
/**
* Get the wCellPaddingBottom field for the TC record.
*/
public short getWCellPaddingBottom()
{
return field_5_wCellPaddingBottom;
}
/**
* Set the wCellPaddingBottom field for the TC record.
*/
public void setWCellPaddingBottom(short field_5_wCellPaddingBottom)
{
this.field_5_wCellPaddingBottom = field_5_wCellPaddingBottom;
}
/**
* Get the wCellPaddingRight field for the TC record.
*/
public short getWCellPaddingRight()
{
return field_6_wCellPaddingRight;
}
/**
* Set the wCellPaddingRight field for the TC record.
*/
public void setWCellPaddingRight(short field_6_wCellPaddingRight)
{
this.field_6_wCellPaddingRight = field_6_wCellPaddingRight;
}
/**
* Get the ftsCellPaddingLeft field for the TC record.
*/
public byte getFtsCellPaddingLeft()
{
return field_7_ftsCellPaddingLeft;
}
/**
* Set the ftsCellPaddingLeft field for the TC record.
*/
public void setFtsCellPaddingLeft(byte field_7_ftsCellPaddingLeft)
{
this.field_7_ftsCellPaddingLeft = field_7_ftsCellPaddingLeft;
}
/**
* Get the ftsCellPaddingTop field for the TC record.
*/
public byte getFtsCellPaddingTop()
{
return field_8_ftsCellPaddingTop;
}
/**
* Set the ftsCellPaddingTop field for the TC record.
*/
public void setFtsCellPaddingTop(byte field_8_ftsCellPaddingTop)
{
this.field_8_ftsCellPaddingTop = field_8_ftsCellPaddingTop;
}
/**
* Get the ftsCellPaddingBottom field for the TC record.
*/
public byte getFtsCellPaddingBottom()
{
return field_9_ftsCellPaddingBottom;
}
/**
* Set the ftsCellPaddingBottom field for the TC record.
*/
public void setFtsCellPaddingBottom(byte field_9_ftsCellPaddingBottom)
{
this.field_9_ftsCellPaddingBottom = field_9_ftsCellPaddingBottom;
}
/**
* Get the ftsCellPaddingRight field for the TC record.
*/
public byte getFtsCellPaddingRight()
{
return field_10_ftsCellPaddingRight;
}
/**
* Set the ftsCellPaddingRight field for the TC record.
*/
public void setFtsCellPaddingRight(byte field_10_ftsCellPaddingRight)
{
this.field_10_ftsCellPaddingRight = field_10_ftsCellPaddingRight;
}
/**
* Get the wCellSpacingLeft field for the TC record.
*/
public short getWCellSpacingLeft()
{
return field_11_wCellSpacingLeft;
}
/**
* Set the wCellSpacingLeft field for the TC record.
*/
public void setWCellSpacingLeft(short field_11_wCellSpacingLeft)
{
this.field_11_wCellSpacingLeft = field_11_wCellSpacingLeft;
}
/**
* Get the wCellSpacingTop field for the TC record.
*/
public short getWCellSpacingTop()
{
return field_12_wCellSpacingTop;
}
/**
* Set the wCellSpacingTop field for the TC record.
*/
public void setWCellSpacingTop(short field_12_wCellSpacingTop)
{
this.field_12_wCellSpacingTop = field_12_wCellSpacingTop;
}
/**
* Get the wCellSpacingBottom field for the TC record.
*/
public short getWCellSpacingBottom()
{
return field_13_wCellSpacingBottom;
}
/**
* Set the wCellSpacingBottom field for the TC record.
*/
public void setWCellSpacingBottom(short field_13_wCellSpacingBottom)
{
this.field_13_wCellSpacingBottom = field_13_wCellSpacingBottom;
}
/**
* Get the wCellSpacingRight field for the TC record.
*/
public short getWCellSpacingRight()
{
return field_14_wCellSpacingRight;
}
/**
* Set the wCellSpacingRight field for the TC record.
*/
public void setWCellSpacingRight(short field_14_wCellSpacingRight)
{
this.field_14_wCellSpacingRight = field_14_wCellSpacingRight;
}
/**
* Get the ftsCellSpacingLeft field for the TC record.
*/
public byte getFtsCellSpacingLeft()
{
return field_15_ftsCellSpacingLeft;
}
/**
* Set the ftsCellSpacingLeft field for the TC record.
*/
public void setFtsCellSpacingLeft(byte field_15_ftsCellSpacingLeft)
{
this.field_15_ftsCellSpacingLeft = field_15_ftsCellSpacingLeft;
}
/**
* Get the ftsCellSpacingTop field for the TC record.
*/
public byte getFtsCellSpacingTop()
{
return field_16_ftsCellSpacingTop;
}
/**
* Set the ftsCellSpacingTop field for the TC record.
*/
public void setFtsCellSpacingTop(byte field_16_ftsCellSpacingTop)
{
this.field_16_ftsCellSpacingTop = field_16_ftsCellSpacingTop;
}
/**
* Get the ftsCellSpacingBottom field for the TC record.
*/
public byte getFtsCellSpacingBottom()
{
return field_17_ftsCellSpacingBottom;
}
/**
* Set the ftsCellSpacingBottom field for the TC record.
*/
public void setFtsCellSpacingBottom(byte field_17_ftsCellSpacingBottom)
{
this.field_17_ftsCellSpacingBottom = field_17_ftsCellSpacingBottom;
}
/**
* Get the ftsCellSpacingRight field for the TC record.
*/
public byte getFtsCellSpacingRight()
{
return field_18_ftsCellSpacingRight;
}
/**
* Set the ftsCellSpacingRight field for the TC record.
*/
public void setFtsCellSpacingRight(byte field_18_ftsCellSpacingRight)
{
this.field_18_ftsCellSpacingRight = field_18_ftsCellSpacingRight;
}
/**
@ -165,15 +467,15 @@ public abstract class TCAbstractType implements HDFType {
*/
public BorderCode getBrcTop()
{
return field_3_brcTop;
return field_19_brcTop;
}
/**
* Set the brcTop field for the TC record.
*/
public void setBrcTop(BorderCode field_3_brcTop)
public void setBrcTop(BorderCode field_19_brcTop)
{
this.field_3_brcTop = field_3_brcTop;
this.field_19_brcTop = field_19_brcTop;
}
/**
@ -181,15 +483,15 @@ public abstract class TCAbstractType implements HDFType {
*/
public BorderCode getBrcLeft()
{
return field_4_brcLeft;
return field_20_brcLeft;
}
/**
* Set the brcLeft field for the TC record.
*/
public void setBrcLeft(BorderCode field_4_brcLeft)
public void setBrcLeft(BorderCode field_20_brcLeft)
{
this.field_4_brcLeft = field_4_brcLeft;
this.field_20_brcLeft = field_20_brcLeft;
}
/**
@ -197,15 +499,15 @@ public abstract class TCAbstractType implements HDFType {
*/
public BorderCode getBrcBottom()
{
return field_5_brcBottom;
return field_21_brcBottom;
}
/**
* Set the brcBottom field for the TC record.
*/
public void setBrcBottom(BorderCode field_5_brcBottom)
public void setBrcBottom(BorderCode field_21_brcBottom)
{
this.field_5_brcBottom = field_5_brcBottom;
this.field_21_brcBottom = field_21_brcBottom;
}
/**
@ -213,15 +515,15 @@ public abstract class TCAbstractType implements HDFType {
*/
public BorderCode getBrcRight()
{
return field_6_brcRight;
return field_22_brcRight;
}
/**
* Set the brcRight field for the TC record.
*/
public void setBrcRight(BorderCode field_6_brcRight)
public void setBrcRight(BorderCode field_22_brcRight)
{
this.field_6_brcRight = field_6_brcRight;
this.field_22_brcRight = field_22_brcRight;
}
/**
@ -231,6 +533,8 @@ public abstract class TCAbstractType implements HDFType {
public void setFFirstMerged(boolean value)
{
field_1_rgf = (short)fFirstMerged.setBoolean(field_1_rgf, value);
}
/**
@ -240,6 +544,7 @@ public abstract class TCAbstractType implements HDFType {
public boolean isFFirstMerged()
{
return fFirstMerged.isSet(field_1_rgf);
}
/**
@ -249,6 +554,8 @@ public abstract class TCAbstractType implements HDFType {
public void setFMerged(boolean value)
{
field_1_rgf = (short)fMerged.setBoolean(field_1_rgf, value);
}
/**
@ -258,6 +565,7 @@ public abstract class TCAbstractType implements HDFType {
public boolean isFMerged()
{
return fMerged.isSet(field_1_rgf);
}
/**
@ -267,6 +575,8 @@ public abstract class TCAbstractType implements HDFType {
public void setFVertical(boolean value)
{
field_1_rgf = (short)fVertical.setBoolean(field_1_rgf, value);
}
/**
@ -276,6 +586,7 @@ public abstract class TCAbstractType implements HDFType {
public boolean isFVertical()
{
return fVertical.isSet(field_1_rgf);
}
/**
@ -285,6 +596,8 @@ public abstract class TCAbstractType implements HDFType {
public void setFBackward(boolean value)
{
field_1_rgf = (short)fBackward.setBoolean(field_1_rgf, value);
}
/**
@ -294,6 +607,7 @@ public abstract class TCAbstractType implements HDFType {
public boolean isFBackward()
{
return fBackward.isSet(field_1_rgf);
}
/**
@ -303,6 +617,8 @@ public abstract class TCAbstractType implements HDFType {
public void setFRotateFont(boolean value)
{
field_1_rgf = (short)fRotateFont.setBoolean(field_1_rgf, value);
}
/**
@ -312,6 +628,7 @@ public abstract class TCAbstractType implements HDFType {
public boolean isFRotateFont()
{
return fRotateFont.isSet(field_1_rgf);
}
/**
@ -321,6 +638,8 @@ public abstract class TCAbstractType implements HDFType {
public void setFVertMerge(boolean value)
{
field_1_rgf = (short)fVertMerge.setBoolean(field_1_rgf, value);
}
/**
@ -330,6 +649,7 @@ public abstract class TCAbstractType implements HDFType {
public boolean isFVertMerge()
{
return fVertMerge.isSet(field_1_rgf);
}
/**
@ -339,6 +659,8 @@ public abstract class TCAbstractType implements HDFType {
public void setFVertRestart(boolean value)
{
field_1_rgf = (short)fVertRestart.setBoolean(field_1_rgf, value);
}
/**
@ -348,6 +670,7 @@ public abstract class TCAbstractType implements HDFType {
public boolean isFVertRestart()
{
return fVertRestart.isSet(field_1_rgf);
}
/**
@ -357,6 +680,8 @@ public abstract class TCAbstractType implements HDFType {
public void setVertAlign(byte value)
{
field_1_rgf = (short)vertAlign.setValue(field_1_rgf, value);
}
/**
@ -365,67 +690,97 @@ public abstract class TCAbstractType implements HDFType {
*/
public byte getVertAlign()
{
return (byte)vertAlign.getValue(field_1_rgf);
return ( byte )vertAlign.getValue(field_1_rgf);
}
/**
* Sets the ftsWidth field value
* Sets the ftsWidth field value.
*
*/
public void setFtsWidth(byte value) {
public void setFtsWidth(byte value)
{
field_1_rgf = (short)ftsWidth.setValue(field_1_rgf, value);
}
/**
* @return the ftsWidth field value
*
* @return the ftsWidth field value.
*/
public byte getFtsWidth() {
return (byte)ftsWidth.getValue(field_1_rgf);
public byte getFtsWidth()
{
return ( byte )ftsWidth.getValue(field_1_rgf);
}
/**
* Sets the fFitText field value.
*
*/
public void setFFitText(boolean value) {
public void setFFitText(boolean value)
{
field_1_rgf = (short)fFitText.setBoolean(field_1_rgf, value);
}
/**
*
* @return the fFitText field value.
*/
public boolean isFFitText() {
public boolean isFFitText()
{
return fFitText.isSet(field_1_rgf);
}
/**
* Sets the fNoWrap field value.
*
*/
public void setFNoWrap(boolean value) {
public void setFNoWrap(boolean value)
{
field_1_rgf = (short)fNoWrap.setBoolean(field_1_rgf, value);
}
/**
*
* @return the fNoWrap field value.
*/
public boolean isFNoWrap() {
public boolean isFNoWrap()
{
return fNoWrap.isSet(field_1_rgf);
}
/**
* Sets the fUnused field value.
*
*/
public void setFUnused(byte value) {
public void setFUnused(byte value)
{
field_1_rgf = (short)fUnused.setValue(field_1_rgf, value);
}
/**
*
* @return the fUnused field value.
*/
public byte getFUnused() {
public byte getFUnused()
{
return ( byte )fUnused.getValue(field_1_rgf);
}
}
} // END OF CLASS

View File

@ -17,10 +17,9 @@
package org.apache.poi.hwpf.sprm;
import org.apache.poi.hwpf.usermodel.TableProperties;
import org.apache.poi.hwpf.usermodel.TableCellDescriptor;
import org.apache.poi.hwpf.usermodel.BorderCode;
import org.apache.poi.hwpf.usermodel.TableCellDescriptor;
import org.apache.poi.hwpf.usermodel.TableProperties;
import org.apache.poi.util.LittleEndian;
public final class TableSprmUncompressor
@ -252,6 +251,37 @@ public final class TableSprmUncompressor
case 0x2b:
case 0x2c:
break;
case 0x34:
// sprmTCellPaddingDefault -- (0xd634)
// TODO: extract into CSSA structure
byte itcFirst = sprm.getGrpprl()[sprm.getGrpprlOffset()];
byte itcLim = sprm.getGrpprl()[sprm.getGrpprlOffset() + 1];
byte grfbrc = sprm.getGrpprl()[sprm.getGrpprlOffset() + 2];
byte ftsWidth = sprm.getGrpprl()[sprm.getGrpprlOffset() + 3];
short wWidth = LittleEndian.getShort(sprm.getGrpprl(),
sprm.getGrpprlOffset() + 4);
for (int c = itcFirst; c < itcLim; c++) {
TableCellDescriptor tableCellDescriptor = newTAP.getRgtc()[c];
if ((grfbrc & 0x01) != 0) {
tableCellDescriptor.setFtsCellPaddingTop(ftsWidth);
tableCellDescriptor.setWCellPaddingTop(wWidth);
}
if ((grfbrc & 0x02) != 0) {
tableCellDescriptor.setFtsCellPaddingLeft(ftsWidth);
tableCellDescriptor.setWCellPaddingLeft(wWidth);
}
if ((grfbrc & 0x04) != 0) {
tableCellDescriptor.setFtsCellPaddingBottom(ftsWidth);
tableCellDescriptor.setWCellPaddingBottom(wWidth);
}
if ((grfbrc & 0x08) != 0) {
tableCellDescriptor.setFtsCellPaddingRight(ftsWidth);
tableCellDescriptor.setWCellPaddingRight(wWidth);
}
}
break;
default:
break;
}

View File

@ -18,29 +18,52 @@
package org.apache.poi.hwpf.usermodel;
import org.apache.poi.hwpf.model.types.TCAbstractType;
import org.apache.poi.util.LittleEndian;
public final class TableCellDescriptor
extends TCAbstractType
{
public static final int SIZE = 20;
protected short field_x_unused;
public TableCellDescriptor()
{
field_3_brcTop = new BorderCode();
field_4_brcLeft = new BorderCode();
field_5_brcBottom = new BorderCode();
field_6_brcRight = new BorderCode();
setBrcTop(new BorderCode());
setBrcLeft(new BorderCode());
setBrcBottom(new BorderCode());
setBrcRight(new BorderCode());
}
protected void fillFields(byte[] data, int offset)
{
field_1_rgf = LittleEndian.getShort(data, 0x0 + offset);
field_x_unused = LittleEndian.getShort(data, 0x2 + offset);
setBrcTop(new BorderCode(data, 0x4 + offset));
setBrcLeft(new BorderCode(data, 0x8 + offset));
setBrcBottom(new BorderCode(data, 0xc + offset));
setBrcRight(new BorderCode(data, 0x10 + offset));
}
public void serialize(byte[] data, int offset)
{
LittleEndian.putShort(data, 0x0 + offset, field_1_rgf);
LittleEndian.putShort(data, 0x2 + offset, field_x_unused);
getBrcTop().serialize(data, 0x4 + offset);
getBrcLeft().serialize(data, 0x8 + offset);
getBrcBottom().serialize(data, 0xc + offset);
getBrcRight().serialize(data, 0x10 + offset);
}
public Object clone()
throws CloneNotSupportedException
{
TableCellDescriptor tc = (TableCellDescriptor)super.clone();
tc.field_3_brcTop = (BorderCode)field_3_brcTop.clone();
tc.field_4_brcLeft = (BorderCode)field_4_brcLeft.clone();
tc.field_5_brcBottom = (BorderCode)field_5_brcBottom.clone();
tc.field_6_brcRight = (BorderCode)field_6_brcRight.clone();
tc.setBrcTop((BorderCode)getBrcTop().clone());
tc.setBrcLeft((BorderCode)getBrcLeft().clone());
tc.setBrcBottom((BorderCode)getBrcBottom().clone());
tc.setBrcRight((BorderCode)getBrcRight().clone());
return tc;
}

View File

@ -17,7 +17,7 @@
limitations under the License.
====================================================================
-->
<record fromfile="true" id="0x101B" name="TC" package="org.apache.poi.hwpf.model.types">
<record fromfile="false" id="0x101B" name="TC" package="org.apache.poi.hwpf.model.types">
<suffix>AbstractType</suffix>
<extends>HDFType</extends>
<description>Table Cell Descriptor.</description>
@ -37,7 +37,23 @@
<bit number="10" mask="0x2000" name="fNoWrap"/>
<bit number="11" mask="0xC000" name="fUnused"/>
</field>
<field type="short" size="2" name="unused"/>
<field type="short" size="2" name="wWidth"/>
<field type="short" size="2" name="wCellPaddingLeft"/>
<field type="short" size="2" name="wCellPaddingTop"/>
<field type="short" size="2" name="wCellPaddingBottom"/>
<field type="short" size="2" name="wCellPaddingRight"/>
<field type="byte" size="1" name="ftsCellPaddingLeft"/>
<field type="byte" size="1" name="ftsCellPaddingTop"/>
<field type="byte" size="1" name="ftsCellPaddingBottom"/>
<field type="byte" size="1" name="ftsCellPaddingRight"/>
<field type="short" size="2" name="wCellSpacingLeft"/>
<field type="short" size="2" name="wCellSpacingTop"/>
<field type="short" size="2" name="wCellSpacingBottom"/>
<field type="short" size="2" name="wCellSpacingRight"/>
<field type="byte" size="1" name="ftsCellSpacingLeft"/>
<field type="byte" size="1" name="ftsCellSpacingTop"/>
<field type="byte" size="1" name="ftsCellSpacingBottom"/>
<field type="byte" size="1" name="ftsCellSpacingRight"/>
<field type="BorderCode" size="4" name="brcTop"/>
<field type="BorderCode" size="4" name="brcLeft"/>
<field type="BorderCode" size="4" name="brcBottom"/>