You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by sa...@apache.org on 2003/11/10 12:51:09 UTC
cvs commit: jakarta-poi/src/scratchpad/src/org/apache/poi/hwpf/model/hdftypes StyleSheet.java
sackley 2003/11/10 03:51:09
Modified: src/scratchpad/src/org/apache/poi/hwpf/model/hdftypes
StyleSheet.java
Log:
latest changes...still not working though!
Revision Changes Path
1.4 +72 -1367 jakarta-poi/src/scratchpad/src/org/apache/poi/hwpf/model/hdftypes/StyleSheet.java
Index: StyleSheet.java
===================================================================
RCS file: /home/cvs/jakarta-poi/src/scratchpad/src/org/apache/poi/hwpf/model/hdftypes/StyleSheet.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- StyleSheet.java 15 Jul 2003 03:22:53 -0000 1.3
+++ StyleSheet.java 10 Nov 2003 11:51:09 -0000 1.4
@@ -62,7 +62,10 @@
import org.apache.poi.util.LittleEndian;
import org.apache.poi.hwpf.model.io.HWPFOutputStream;
-//import org.apache.poi.hdf.model.hdftypes.definitions.TCAbstractType;
+import org.apache.poi.hwpf.usermodel.CharacterProperties;
+import org.apache.poi.hwpf.usermodel.ParagraphProperties;
+import org.apache.poi.hwpf.sprm.ParagraphSprmUncompressor;
+import org.apache.poi.hwpf.sprm.CharacterSprmUncompressor;
/**
* Represents a document's stylesheet. A word documents formatting is stored as
@@ -91,7 +94,6 @@
private int _stylenameVersion;
private int[] _rgftc;
- StyleDescription _nilStyle = new StyleDescription();
StyleDescription[] _styleDescriptions;
/**
@@ -126,11 +128,10 @@
_rgftc[2] = LittleEndian.getShort(tableStream, offset);
offset += LittleEndian.SHORT_SIZE;
- //offset = (2 + _stshiLength);
+ offset = (LittleEndian.SHORT_SIZE + _stshiLength);
_styleDescriptions = new StyleDescription[stdCount];
for(int x = 0; x < stdCount; x++)
{
-
int stdSize = LittleEndian.getShort(tableStream, offset);
//get past the size
offset += 2;
@@ -151,8 +152,8 @@
{
if(_styleDescriptions[x] != null)
{
-// createPap(x);
-// createChp(x);
+ createPap(x);
+ createChp(x);
}
}
}
@@ -244,1381 +245,85 @@
* @param istd The index of the StyleDescription to create the
* ParagraphProperties from (and also place the finished PAP in)
*/
-// private void createPap(int istd)
-// {
-// StyleDescription sd = _styleDescriptions[istd];
-// ParagraphProperties pap = sd.getPAP();
-// byte[] papx = sd.getPAPX();
-// int baseIndex = sd.getBaseStyle();
-// if(pap == null && papx != null)
-// {
-// ParagraphProperties parentPAP = _nilStyle.getPAP();
-// if(baseIndex != NIL_STYLE)
-// {
-//
-// parentPAP = _styleDescriptions[baseIndex].getPAP();
-// if(parentPAP == null)
-// {
-// createPap(baseIndex);
-// parentPAP = _styleDescriptions[baseIndex].getPAP();
-// }
-//
-// }
-//
-// pap = (ParagraphProperties)uncompressProperty(papx, parentPAP, this);
-// sd.setPAP(pap);
-// }
-// }
-// /**
-// * Creates a CharacterProperties object from a chpx stored in the
-// * StyleDescription at the index istd in the StyleDescription array. The
-// * CharacterProperties object is placed in the StyleDescription at istd after
-// * its been created. Not every StyleDescription will contain a chpx. In these
-// * cases this function does nothing.
-// *
-// * @param istd The index of the StyleDescription to create the
-// * CharacterProperties object from.
-// */
-// private void createChp(int istd)
-// {
-// StyleDescription sd = _styleDescriptions[istd];
-// CharacterProperties chp = sd.getCHP();
-// byte[] chpx = sd.getCHPX();
-// int baseIndex = sd.getBaseStyle();
-// if(chp == null && chpx != null)
-// {
-// CharacterProperties parentCHP = _nilStyle.getCHP();
-// if(baseIndex != NIL_STYLE)
-// {
-//
-// parentCHP = _styleDescriptions[baseIndex].getCHP();
-// if(parentCHP == null)
-// {
-// createChp(baseIndex);
-// parentCHP = _styleDescriptions[baseIndex].getCHP();
-// }
-//
-// }
-//
-// chp = (CharacterProperties)uncompressProperty(chpx, parentCHP, this);
-// sd.setCHP(chp);
-// }
-// }
-
- /**
- * Gets the StyleDescription at index x.
- *
- * @param x the index of the desired StyleDescription.
- */
- public StyleDescription getStyleDescription(int x)
+ private void createPap(int istd)
{
- return _styleDescriptions[x];
- }
+ StyleDescription sd = _styleDescriptions[istd];
+ ParagraphProperties pap = sd.getPAP();
+ byte[] papx = sd.getPAPX();
+ int baseIndex = sd.getBaseStyle();
+ if(pap == null && papx != null)
+ {
+ ParagraphProperties parentPAP = new ParagraphProperties();
+ if(baseIndex != NIL_STYLE)
+ {
-// /**
-// * Used in decompression of a chpx. This performs an operation defined by
-// * a single sprm.
-// *
-// * @param oldCHP The base CharacterProperties.
-// * @param newCHP The current CharacterProperties.
-// * @param operand The operand defined by the sprm (See Word file format spec)
-// * @param param The parameter defined by the sprm (See Word file format spec)
-// * @param varParam The variable length parameter defined by the sprm. (See
-// * Word file format spec)
-// * @param grpprl The entire chpx that this operation is a part of.
-// * @param offset The offset in the grpprl of the next sprm
-// * @param styleSheet The StyleSheet for this document.
-// */
-// static void doCHPOperation(CharacterProperties oldCHP, CharacterProperties newCHP,
-// int operand, int param,
-// byte[] varParam, byte[] grpprl, int offset,
-// StyleSheet styleSheet)
-// {
-// switch(operand)
-// {
-// case 0:
-// newCHP.setFRMarkDel(getFlag(param));
-// break;
-// case 0x1:
-// newCHP.setFRMark(getFlag(param));
-// break;
-// case 0x2:
-// break;
-// case 0x3:
-// newCHP.setFcPic(param);
-// newCHP.setFSpec(true);
-// break;
-// case 0x4:
-// newCHP.setIbstRMark((short)param);
-// break;
-// case 0x5:
-// short[] dttmRMark = new short[2];
-// dttmRMark[0] = LittleEndian.getShort(grpprl, (offset - 4));
-// dttmRMark[1] = LittleEndian.getShort(grpprl, (offset - 2));
-// newCHP.setDttmRMark(dttmRMark);
-// break;
-// case 0x6:
-// newCHP.setFData(getFlag(param));
-// break;
-// case 0x7:
-// //don't care about this
-// break;
-// case 0x8:
-// short chsDiff = (short)((param & 0xff0000) >>> 8);
-// newCHP.setFChsDiff(getFlag(chsDiff));
-// newCHP.setChse((short)(param & 0xffff));
-// break;
-// case 0x9:
-// newCHP.setFSpec(true);
-// newCHP.setFtcSym((short)LittleEndian.getShort(varParam, 0));
-// newCHP.setXchSym((short)LittleEndian.getShort(varParam, 2));
-// break;
-// case 0xa:
-// newCHP.setFOle2(getFlag(param));
-// break;
-// case 0xb:
-// //?
-// break;
-// case 0xc:
-// newCHP.setIcoHighlight((byte)param);
-// newCHP.setFHighlight(getFlag(param));
-// break;
-// case 0xd:
-// break;
-// case 0xe:
-// newCHP.setFcObj(param);
-// break;
-// case 0xf:
-// break;
-// case 0x10:
-// //?
-// break;
-// case 0x11:
-// break;
-// case 0x12:
-// break;
-// case 0x13:
-// break;
-// case 0x14:
-// break;
-// case 0x15:
-// break;
-// case 0x16:
-// break;
-// case 0x17:
-// break;
-// case 0x18:
-// break;
-// case 0x19:
-// break;
-// case 0x1a:
-// break;
-// case 0x1b:
-// break;
-// case 0x1c:
-// break;
-// case 0x1d:
-// break;
-// case 0x1e:
-// break;
-// case 0x1f:
-// break;
-// case 0x20:
-// break;
-// case 0x21:
-// break;
-// case 0x22:
-// break;
-// case 0x23:
-// break;
-// case 0x24:
-// break;
-// case 0x25:
-// break;
-// case 0x26:
-// break;
-// case 0x27:
-// break;
-// case 0x28:
-// break;
-// case 0x29:
-// break;
-// case 0x2a:
-// break;
-// case 0x2b:
-// break;
-// case 0x2c:
-// break;
-// case 0x2d:
-// break;
-// case 0x2e:
-// break;
-// case 0x2f:
-// break;
-// case 0x30:
-// newCHP.setIstd(param);
-// break;
-// case 0x31:
-// //permutation vector for fast saves, who cares!
-// break;
-// case 0x32:
-// newCHP.setFBold(false);
-// newCHP.setFItalic(false);
-// newCHP.setFOutline(false);
-// newCHP.setFStrike(false);
-// newCHP.setFShadow(false);
-// newCHP.setFSmallCaps(false);
-// newCHP.setFCaps(false);
-// newCHP.setFVanish(false);
-// newCHP.setKul((byte)0);
-// newCHP.setIco((byte)0);
-// break;
-// case 0x33:
-// try
-// {
-// newCHP = (CharacterProperties)oldCHP.clone();
-// }
-// catch(CloneNotSupportedException e)
-// {
-// //do nothing
-// }
-// return;
-// case 0x34:
-// break;
-// case 0x35:
-// newCHP.setFBold(getCHPFlag((byte)param, oldCHP.isFBold()));
-// break;
-// case 0x36:
-// newCHP.setFItalic(getCHPFlag((byte)param, oldCHP.isFItalic()));
-// break;
-// case 0x37:
-// newCHP.setFStrike(getCHPFlag((byte)param, oldCHP.isFStrike()));
-// break;
-// case 0x38:
-// newCHP.setFOutline(getCHPFlag((byte)param, oldCHP.isFOutline()));
-// break;
-// case 0x39:
-// newCHP.setFShadow(getCHPFlag((byte)param, oldCHP.isFShadow()));
-// break;
-// case 0x3a:
-// newCHP.setFSmallCaps(getCHPFlag((byte)param, oldCHP.isFSmallCaps()));
-// break;
-// case 0x3b:
-// newCHP.setFCaps(getCHPFlag((byte)param, oldCHP.isFCaps()));
-// break;
-// case 0x3c:
-// newCHP.setFVanish(getCHPFlag((byte)param, oldCHP.isFVanish()));
-// break;
-// case 0x3d:
-// newCHP.setFtcAscii((short)param);
-// break;
-// case 0x3e:
-// newCHP.setKul((byte)param);
-// break;
-// case 0x3f:
-// int hps = param & 0xff;
-// if(hps != 0)
-// {
-// newCHP.setHps(hps);
-// }
-// byte cInc = (byte)(((byte)(param & 0xfe00) >>> 4) >> 1);
-// if(cInc != 0)
-// {
-// newCHP.setHps(Math.max(newCHP.getHps() + (cInc * 2), 2));
-// }
-// byte hpsPos = (byte)((param & 0xff0000) >>> 8);
-// if(hpsPos != 0x80)
-// {
-// newCHP.setHpsPos(hpsPos);
-// }
-// boolean fAdjust = (param & 0x0100) > 0;
-// if(fAdjust && hpsPos != 128 && hpsPos != 0 && oldCHP.getHpsPos() == 0)
-// {
-// newCHP.setHps(Math.max(newCHP.getHps() + (-2), 2));
-// }
-// if(fAdjust && hpsPos == 0 && oldCHP.getHpsPos() != 0)
-// {
-// newCHP.setHps(Math.max(newCHP.getHps() + 2, 2));
-// }
-// break;
-// case 0x40:
-// newCHP.setDxaSpace(param);
-// break;
-// case 0x41:
-// newCHP.setLidDefault((short)param);
-// break;
-// case 0x42:
-// newCHP.setIco((byte)param);
-// break;
-// case 0x43:
-// newCHP.setHps(param);
-// break;
-// case 0x44:
-// byte hpsLvl = (byte)param;
-// newCHP.setHps(Math.max(newCHP.getHps() + (hpsLvl * 2), 2));
-// break;
-// case 0x45:
-// newCHP.setHpsPos((short)param);
-// break;
-// case 0x46:
-// if(param != 0)
-// {
-// if(oldCHP.getHpsPos() == 0)
-// {
-// newCHP.setHps(Math.max(newCHP.getHps() + (-2), 2));
-// }
-// }
-// else
-// {
-// if(oldCHP.getHpsPos() != 0)
-// {
-// newCHP.setHps(Math.max(newCHP.getHps() + 2, 2));
-// }
-// }
-// break;
-// case 0x47:
-// CharacterProperties genCHP = new CharacterProperties();
-// genCHP.setFtcAscii(4);
-// genCHP = (CharacterProperties)uncompressProperty(varParam, genCHP, styleSheet);
-// CharacterProperties styleCHP = styleSheet.getStyleDescription(oldCHP.getBaseIstd()).getCHP();
-// if(genCHP.isFBold() == newCHP.isFBold())
-// {
-// newCHP.setFBold(styleCHP.isFBold());
-// }
-// if(genCHP.isFItalic() == newCHP.isFItalic())
-// {
-// newCHP.setFItalic(styleCHP.isFItalic());
-// }
-// if(genCHP.isFSmallCaps() == newCHP.isFSmallCaps())
-// {
-// newCHP.setFSmallCaps(styleCHP.isFSmallCaps());
-// }
-// if(genCHP.isFVanish() == newCHP.isFVanish())
-// {
-// newCHP.setFVanish(styleCHP.isFVanish());
-// }
-// if(genCHP.isFStrike() == newCHP.isFStrike())
-// {
-// newCHP.setFStrike(styleCHP.isFStrike());
-// }
-// if(genCHP.isFCaps() == newCHP.isFCaps())
-// {
-// newCHP.setFCaps(styleCHP.isFCaps());
-// }
-// if(genCHP.getFtcAscii() == newCHP.getFtcAscii())
-// {
-// newCHP.setFtcAscii(styleCHP.getFtcAscii());
-// }
-// if(genCHP.getFtcFE() == newCHP.getFtcFE())
-// {
-// newCHP.setFtcFE(styleCHP.getFtcFE());
-// }
-// if(genCHP.getFtcOther() == newCHP.getFtcOther())
-// {
-// newCHP.setFtcOther(styleCHP.getFtcOther());
-// }
-// if(genCHP.getHps() == newCHP.getHps())
-// {
-// newCHP.setHps(styleCHP.getHps());
-// }
-// if(genCHP.getHpsPos() == newCHP.getHpsPos())
-// {
-// newCHP.setHpsPos(styleCHP.getHpsPos());
-// }
-// if(genCHP.getKul() == newCHP.getKul())
-// {
-// newCHP.setKul(styleCHP.getKul());
-// }
-// if(genCHP.getDxaSpace() == newCHP.getDxaSpace())
-// {
-// newCHP.setDxaSpace(styleCHP.getDxaSpace());
-// }
-// if(genCHP.getIco() == newCHP.getIco())
-// {
-// newCHP.setIco(styleCHP.getIco());
-// }
-// if(genCHP.getLidDefault() == newCHP.getLidDefault())
-// {
-// newCHP.setLidDefault(styleCHP.getLidDefault());
-// }
-// if(genCHP.getLidFE() == newCHP.getLidFE())
-// {
-// newCHP.setLidFE(styleCHP.getLidFE());
-// }
-// break;
-// case 0x48:
-// newCHP.setIss((byte)param);
-// break;
-// case 0x49:
-// newCHP.setHps(LittleEndian.getShort(varParam, 0));
-// break;
-// case 0x4a:
-// int increment = LittleEndian.getShort(varParam, 0);
-// newCHP.setHps(Math.max(newCHP.getHps() + increment, 8));
-// break;
-// case 0x4b:
-// newCHP.setHpsKern(param);
-// break;
-// case 0x4c:
-// doCHPOperation(oldCHP, newCHP, 0x47, param, varParam, grpprl, offset, styleSheet);
-// break;
-// case 0x4d:
-// float percentage = (float)param/100.0f;
-// int add = (int)((float)percentage * (float)newCHP.getHps());
-// newCHP.setHps(newCHP.getHps() + add);
-// break;
-// case 0x4e:
-// newCHP.setYsr((byte)param);
-// break;
-// case 0x4f:
-// newCHP.setFtcAscii((short)param);
-// break;
-// case 0x50:
-// newCHP.setFtcFE((short)param);
-// break;
-// case 0x51:
-// newCHP.setFtcOther((short)param);
-// break;
-// case 0x52:
-// break;
-// case 0x53:
-// newCHP.setFDStrike(getFlag(param));
-// break;
-// case 0x54:
-// newCHP.setFImprint(getFlag(param));
-// break;
-// case 0x55:
-// newCHP.setFSpec(getFlag(param));
-// break;
-// case 0x56:
-// newCHP.setFObj(getFlag(param));
-// break;
-// case 0x57:
-// newCHP.setFPropMark(varParam[0]);
-// newCHP.setIbstPropRMark((short)LittleEndian.getShort(varParam, 1));
-// newCHP.setDttmPropRMark(LittleEndian.getInt(varParam, 3));
-// break;
-// case 0x58:
-// newCHP.setFEmboss(getFlag(param));
-// break;
-// case 0x59:
-// newCHP.setSfxtText((byte)param);
-// break;
-// case 0x5a:
-// break;
-// case 0x5b:
-// break;
-// case 0x5c:
-// break;
-// case 0x5d:
-// break;
-// case 0x5e:
-// break;
-// case 0x5f:
-// break;
-// case 0x60:
-// break;
-// case 0x61:
-// break;
-// case 0x62:
-// byte[] xstDispFldRMark = new byte[32];
-// newCHP.setFDispFldRMark(varParam[0]);
-// newCHP.setIbstDispFldRMark((short)LittleEndian.getShort(varParam, 1));
-// newCHP.setDttmDispFldRMark(LittleEndian.getInt(varParam, 3));
-// System.arraycopy(varParam, 7, xstDispFldRMark, 0, 32);
-// newCHP.setXstDispFldRMark(xstDispFldRMark);
-// break;
-// case 0x63:
-// newCHP.setIbstRMarkDel((short)param);
-// break;
-// case 0x64:
-// short[] dttmRMarkDel = new short[2];
-// dttmRMarkDel[0] = LittleEndian.getShort(grpprl, offset - 4);
-// dttmRMarkDel[1] = LittleEndian.getShort(grpprl, offset - 2);
-// newCHP.setDttmRMarkDel(dttmRMarkDel);
-// break;
-// case 0x65:
-// short[] brc = new short[2];
-// brc[0] = (short)LittleEndian.getShort(grpprl, offset - 4);
-// brc[1] = (short)LittleEndian.getShort(grpprl, offset - 2);
-// newCHP.setBrc(brc);
-// break;
-// case 0x66:
-// newCHP.setShd((short)param);
-// break;
-// case 0x67:
-// break;
-// case 0x68:
-// break;
-// case 0x69:
-// break;
-// case 0x6a:
-// break;
-// case 0x6b:
-// break;
-// case 0x6c:
-// break;
-// case 0x6d:
-// newCHP.setLidDefault((short)param);
-// break;
-// case 0x6e:
-// newCHP.setLidFE((short)param);
-// break;
-// case 0x6f:
-// newCHP.setIdctHint((byte)param);
-// break;
-// }
-// }
+ parentPAP = _styleDescriptions[baseIndex].getPAP();
+ if(parentPAP == null)
+ {
+ createPap(baseIndex);
+ parentPAP = _styleDescriptions[baseIndex].getPAP();
+ }
+ }
+
+ pap = (ParagraphProperties)ParagraphSprmUncompressor.uncompressPAP(parentPAP, papx, 2);
+ sd.setPAP(pap);
+ }
+ }
/**
- * Used to uncompress a property stored in a grpprl. These include
- * CharacterProperties, ParagraphProperties, TableProperties, and
- * SectionProperties.
- *
- * @param grpprl The compressed form of the property.
- * @param parent The base property of the property.
- * @param styleSheet The document's stylesheet.
- *
- * @return An object that should be casted to the appropriate property.
- */
-// public static Object uncompressProperty(byte[] grpprl, Object parent, StyleSheet styleSheet)
-// {
-// return uncompressProperty(grpprl, parent, styleSheet, true);
-// }
-
-// /**
-// * Used to uncompress a property stored in a grpprl. These include
-// * CharacterProperties, ParagraphProperties, TableProperties, and
-// * SectionProperties.
-// *
-// * @param grpprl The compressed form of the property.
-// * @param parent The base property of the property.
-// * @param styleSheet The document's stylesheet.
-// *
-// * @return An object that should be casted to the appropriate property.
-// */
-// public static Object uncompressProperty(byte[] grpprl, Object parent, StyleSheet styleSheet, boolean doIstd)
-// {
-// Object newProperty = null;
-// int offset = 0;
-// int propertyType = PAP_TYPE;
-//
-//
-// if(parent instanceof ParagraphProperties)
-// {
-// try
-// {
-// newProperty = ((ParagraphProperties)parent).clone();
-// }
-// catch(Exception e){}
-// if(doIstd)
-// {
-// ((ParagraphProperties)newProperty).setIstd(LittleEndian.getShort(grpprl, 0));
-//
-// offset = 2;
-// }
-// }
-// else if(parent instanceof CharacterProperties)
-// {
-// try
-// {
-// newProperty = ((CharacterProperties)parent).clone();
-// ((CharacterProperties)newProperty).setBaseIstd(((CharacterProperties)parent).getIstd());
-// }
-// catch(Exception e){}
-// propertyType = CHP_TYPE;
-// }
-// else if(parent instanceof SectionProperties)
-// {
-// newProperty = parent;
-// propertyType = SEP_TYPE;
-// }
-// else if(parent instanceof TableProperties)
-// {
-// newProperty = parent;
-// propertyType = TAP_TYPE;
-// offset = 2;//because this is really just a papx
-// }
-// else
-// {
-// return null;
-// }
-//
-// while(offset < grpprl.length)
-// {
-// short sprm = LittleEndian.getShort(grpprl, offset);
-// offset += 2;
-//
-// byte spra = (byte)((sprm & 0xe000) >> 13);
-// int opSize = 0;
-// int param = 0;
-// byte[] varParam = null;
-//
-// switch(spra)
-// {
-// case 0:
-// case 1:
-// opSize = 1;
-// param = grpprl[offset];
-// break;
-// case 2:
-// opSize = 2;
-// param = LittleEndian.getShort(grpprl, offset);
-// break;
-// case 3:
-// opSize = 4;
-// param = LittleEndian.getInt(grpprl, offset);
-// break;
-// case 4:
-// case 5:
-// opSize = 2;
-// param = LittleEndian.getShort(grpprl, offset);
-// break;
-// case 6://variable size
-//
-// //there is one sprm that is a very special case
-// if(sprm != (short)0xd608)
-// {
-// opSize = LittleEndian.getUnsignedByte(grpprl, offset);
-// offset++;
-// }
-// else
-// {
-// opSize = LittleEndian.getShort(grpprl, offset) - 1;
-// offset += 2;
-// }
-// varParam = new byte[opSize];
-// System.arraycopy(grpprl, offset, varParam, 0, opSize);
-//
-// break;
-// case 7:
-// opSize = 3;
-// byte threeByteInt[] = new byte[4];
-// threeByteInt[0] = grpprl[offset];
-// threeByteInt[1] = grpprl[offset + 1];
-// threeByteInt[2] = grpprl[offset + 2];
-// threeByteInt[3] = (byte)0;
-// param = LittleEndian.getInt(threeByteInt, 0);
-// break;
-// default:
-// throw new RuntimeException("unrecognized pap opcode");
-// }
-//
-// offset += opSize;
-// short operand = (short)(sprm & 0x1ff);
-// byte type = (byte)((sprm & 0x1c00) >> 10);
-// switch(propertyType)
-// {
-// case PAP_TYPE:
-// if(type == 1)//papx stores TAP sprms along with PAP sprms
-// {
-// doPAPOperation((ParagraphProperties)newProperty, operand,
-// param, varParam, grpprl,
-// offset, spra);
-// }
-// break;
-// case CHP_TYPE:
-//
-// doCHPOperation((CharacterProperties)parent,
-// (CharacterProperties)newProperty,
-// operand, param, varParam,
-// grpprl, offset, styleSheet);
-// break;
-// case SEP_TYPE:
-//
-// doSEPOperation((SectionProperties)newProperty, operand, param, varParam);
-// break;
-// case TAP_TYPE:
-// if(type == 5)
-// {
-// doTAPOperation((TableProperties)newProperty, operand, param, varParam);
-// }
-// break;
-// }
-//
-//
-// }
-// return newProperty;
-//
-// }
-// /**
-// * Performs an operation on a ParagraphProperties object. Used to uncompress
-// * from a papx.
-// *
-// * @param newPAP The ParagraphProperties object to perform the operation on.
-// * @param operand The operand that defines the operation.
-// * @param param The operation's parameter.
-// * @param varParam The operation's variable length parameter.
-// * @param grpprl The original papx.
-// * @param offset The current offset in the papx.
-// * @param spra A part of the sprm that defined this operation.
-// */
-// static void doPAPOperation(ParagraphProperties newPAP, int operand, int param,
-// byte[] varParam, byte[] grpprl, int offset,
-// int spra)
-// {
-// switch(operand)
-// {
-// case 0:
-// newPAP.setIstd(param);
-// break;
-// case 0x1:
-// //permuteIstd(newPAP, varParam);
-// break;
-// case 0x2:
-// if(newPAP.getIstd() <=9 || newPAP.getIstd() >=1)
-// {
-// newPAP.setIstd(newPAP.getIstd() + param);
-// if(param > 0)
-// {
-// newPAP.setIstd(Math.max(newPAP.getIstd(), 9));
-// }
-// else
-// {
-// newPAP.setIstd(Math.min(newPAP.getIstd(), 1));
-// }
-// }
-// break;
-// case 0x3:
-// newPAP.setJc((byte)param);
-// break;
-// case 0x4:
-// newPAP.setFSideBySide((byte)param);
-// break;
-// case 0x5:
-// newPAP.setFKeep((byte)param);
-// break;
-// case 0x6:
-// newPAP.setFKeepFollow((byte)param);
-// break;
-// case 0x7:
-// newPAP.setFPageBreakBefore((byte)param);
-// break;
-// case 0x8:
-// newPAP.setBrcl((byte)param);
-// break;
-// case 0x9:
-// newPAP.setBrcp((byte)param);
-// break;
-// case 0xa:
-// newPAP.setIlvl((byte)param);
-// break;
-// case 0xb:
-// newPAP.setIlfo(param);
-// break;
-// case 0xc:
-// newPAP.setFNoLnn((byte)param);
-// break;
-// case 0xd:
-// /**@todo handle tabs*/
-// break;
-// case 0xe:
-// newPAP.setDxaRight(param);
-// break;
-// case 0xf:
-// newPAP.setDxaLeft(param);
-// break;
-// case 0x10:
-// newPAP.setDxaLeft(newPAP.getDxaLeft() + param);
-// newPAP.setDxaLeft(Math.max(0, newPAP.getDxaLeft()));
-// break;
-// case 0x11:
-// newPAP.setDxaLeft1(param);
-// break;
-// case 0x12:
-// short[] lspd = newPAP.getLspd();
-// lspd[0] = LittleEndian.getShort(grpprl, offset - 4);
-// lspd[1] = LittleEndian.getShort(grpprl, offset - 2);
-// break;
-// case 0x13:
-// newPAP.setDyaBefore(param);
-// break;
-// case 0x14:
-// newPAP.setDyaAfter(param);
-// break;
-// case 0x15:
-// /**@todo handle tabs*/
-// break;
-// case 0x16:
-// newPAP.setFInTable((byte)param);
-// break;
-// case 0x17:
-// newPAP.setFTtp((byte)param);
-// break;
-// case 0x18:
-// newPAP.setDxaAbs(param);
-// break;
-// case 0x19:
-// newPAP.setDyaAbs(param);
-// break;
-// case 0x1a:
-// newPAP.setDxaWidth(param);
-// break;
-// case 0x1b:
-// /** @todo handle paragraph postioning*/
-// /*byte pcVert = (param & 0x0c) >> 2;
-// byte pcHorz = param & 0x03;
-// if(pcVert != 3)
-// {
-// newPAP._pcVert = pcVert;
-// }
-// if(pcHorz != 3)
-// {
-// newPAP._pcHorz = pcHorz;
-// }*/
-// break;
-// case 0x1c:
-// //newPAP.setBrcTop1((short)param);
-// break;
-// case 0x1d:
-// //newPAP.setBrcLeft1((short)param);
-// break;
-// case 0x1e:
-// //newPAP.setBrcBottom1((short)param);
-// break;
-// case 0x1f:
-// //newPAP.setBrcRight1((short)param);
-// break;
-// case 0x20:
-// //newPAP.setBrcBetween1((short)param);
-// break;
-// case 0x21:
-// //newPAP.setBrcBar1((byte)param);
-// break;
-// case 0x22:
-// newPAP.setDxaFromText(param);
-// break;
-// case 0x23:
-// newPAP.setWr((byte)param);
-// break;
-// case 0x24:
-// short[] brcTop = newPAP.getBrcTop();
-// brcTop[0] = (short)LittleEndian.getShort(grpprl, offset - 4);
-// brcTop[1] = (short)LittleEndian.getShort(grpprl, offset - 2);
-// break;
-// case 0x25:
-// short[] brcLeft = newPAP.getBrcLeft();
-// brcLeft[0] = (short)LittleEndian.getShort(grpprl, offset - 4);
-// brcLeft[1] = (short)LittleEndian.getShort(grpprl, offset - 2);
-// break;
-// case 0x26:
-// short[] brcBottom = newPAP.getBrcBottom();
-// brcBottom[0] = (short)LittleEndian.getShort(grpprl, offset - 4);
-// brcBottom[1] = (short)LittleEndian.getShort(grpprl, offset - 2);
-// break;
-// case 0x27:
-// short[] brcRight = newPAP.getBrcRight();
-// brcRight[0] = (short)LittleEndian.getShort(grpprl, offset - 4);
-// brcRight[1] = (short)LittleEndian.getShort(grpprl, offset - 2);
-// break;
-// case 0x28:
-// short[] brcBetween = newPAP.getBrcBetween();
-// brcBetween[0] = (short)LittleEndian.getShort(grpprl, offset - 4);
-// brcBetween[1] = (short)LittleEndian.getShort(grpprl, offset - 2);
-// break;
-// case 0x29:
-// short[] brcBar = newPAP.getBrcBar();
-// brcBar[0] = (short)LittleEndian.getShort(grpprl, offset - 4);
-// brcBar[1] = (short)LittleEndian.getShort(grpprl, offset - 2);
-// break;
-// case 0x2a:
-// newPAP.setFNoAutoHyph((byte)param);
-// break;
-// case 0x2b:
-// newPAP.setDyaHeight(param);
-// break;
-// case 0x2c:
-// newPAP.setDcs((short)param);
-// break;
-// case 0x2d:
-// newPAP.setShd((short)param);
-// break;
-// case 0x2e:
-// newPAP.setDyaFromText(param);
-// break;
-// case 0x2f:
-// newPAP.setDxaFromText(param);
-// break;
-// case 0x30:
-// newPAP.setFLocked((byte)param);
-// break;
-// case 0x31:
-// newPAP.setFWidowControl((byte)param);
-// break;
-// case 0x32:
-// //undocumented
-// break;
-// case 0x33:
-// newPAP.setFKinsoku((byte)param);
-// break;
-// case 0x34:
-// newPAP.setFWordWrap((byte)param);
-// break;
-// case 0x35:
-// newPAP.setFOverflowPunct((byte)param);
-// break;
-// case 0x36:
-// newPAP.setFTopLinePunct((byte)param);
-// break;
-// case 0x37:
-// newPAP.setFAutoSpaceDE((byte)param);
-// break;
-// case 0x38:
-// newPAP.setFAutoSpaceDN((byte)param);
-// break;
-// case 0x39:
-// newPAP.setWAlignFont(param);
-// break;
-// case 0x3a:
-// newPAP.setFontAlign((short)param);
-// break;
-// case 0x3b:
-// //obsolete
-// break;
-// case 0x3e:
-// newPAP.setAnld(varParam);
-// break;
-// case 0x3f:
-// //don't really need this. spec is confusing regarding this
-// //sprm
-// break;
-// case 0x40:
-// //newPAP._lvl = param;
-// break;
-// case 0x41:
-// //?
-// break;
-// case 0x43:
-// //?
-// break;
-// case 0x44:
-// //?
-// break;
-// case 0x45:
-// if(spra == 6)
-// {
-// newPAP.setNumrm(varParam);
-// }
-// else
-// {
-// /**@todo handle large PAPX from data stream*/
-// }
-// break;
-//
-// case 0x47:
-// newPAP.setFUsePgsuSettings((byte)param);
-// break;
-// case 0x48:
-// newPAP.setFAdjustRight((byte)param);
-// break;
-// default:
-// break;
-// }
-// }
-// /**
-// * Used to uncompress a table property. Performs an operation defined
-// * by a sprm stored in a tapx.
-// *
-// * @param newTAP The TableProperties object to perform the operation on.
-// * @param operand The operand that defines this operation.
-// * @param param The parameter for this operation.
-// * @param varParam Variable length parameter for this operation.
-// */
-// static void doTAPOperation(TableProperties newTAP, int operand, int param, byte[] varParam)
-// {
-// switch(operand)
-// {
-// case 0:
-// newTAP.setJc((short)param);
-// break;
-// case 0x01:
-// {
-// short[] rgdxaCenter = newTAP.getRgdxaCenter();
-// short itcMac = newTAP.getItcMac();
-// int adjust = param - (rgdxaCenter[0] + newTAP.getDxaGapHalf());
-// for(int x = 0; x < itcMac; x++)
-// {
-// rgdxaCenter[x] += adjust;
-// }
-// break;
-// }
-// case 0x02:
-// {
-// short[] rgdxaCenter = newTAP.getRgdxaCenter();
-// if(rgdxaCenter != null)
-// {
-// int adjust = newTAP.getDxaGapHalf() - param;
-// rgdxaCenter[0] += adjust;
-// }
-// newTAP.setDxaGapHalf(param);
-// break;
-// }
-// case 0x03:
-// newTAP.setFCantSplit(getFlag(param));
-// break;
-// case 0x04:
-// newTAP.setFTableHeader(getFlag(param));
-// break;
-// case 0x05:
-// {
-// short[] brcTop = newTAP.getBrcTop();
-// short[] brcLeft = newTAP.getBrcLeft();
-// short[] brcBottom = newTAP.getBrcBottom();
-// short[] brcRight = newTAP.getBrcRight();
-// short[] brcVertical = newTAP.getBrcVertical();
-// short[] brcHorizontal = newTAP.getBrcHorizontal();
-//
-// brcTop[0] = LittleEndian.getShort(varParam, 0);
-// brcTop[1] = LittleEndian.getShort(varParam, 2);
-//
-// brcLeft[0] = LittleEndian.getShort(varParam, 4);
-// brcLeft[1] = LittleEndian.getShort(varParam, 6);
-//
-// brcBottom[0] = LittleEndian.getShort(varParam, 8);
-// brcBottom[1] = LittleEndian.getShort(varParam, 10);
-//
-// brcRight[0] = LittleEndian.getShort(varParam, 12);
-// brcRight[1] = LittleEndian.getShort(varParam, 14);
-//
-// brcHorizontal[0] = LittleEndian.getShort(varParam, 16);
-// brcHorizontal[1] = LittleEndian.getShort(varParam, 18);
-//
-// brcVertical[0] = LittleEndian.getShort(varParam, 20);
-// brcVertical[1] = LittleEndian.getShort(varParam, 22);
-// break;
-// }
-// case 0x06:
-// //obsolete, used in word 1.x
-// break;
-// case 0x07:
-// newTAP.setDyaRowHeight(param);
-// break;
-// case 0x08:
-// {
-// short[] rgdxaCenter = new short[varParam[0] + 1];
-// TableCellDescriptor[] rgtc = new TableCellDescriptor[varParam[0]];
-// short itcMac = varParam[0];
-// //I use varParam[0] and newTAP._itcMac interchangably
-// newTAP.setItcMac(itcMac);
-// newTAP.setRgdxaCenter(rgdxaCenter) ;
-// newTAP.setRgtc(rgtc);
-//
-// for(int x = 0; x < itcMac; x++)
-// {
-// rgdxaCenter[x] = LittleEndian.getShort(varParam , 1 + (x * 2));
-// rgtc[x] = TableCellDescriptor.convertBytesToTC(varParam, 1 + ((itcMac + 1) * 2) + (x * 20));
-// }
-// rgdxaCenter[itcMac] = LittleEndian.getShort(varParam , 1 + (itcMac * 2));
-// break;
-// }
-// case 0x09:
-// /** @todo handle cell shading*/
-// break;
-// case 0x0a:
-// /** @todo handle word defined table styles*/
-// break;
-// case 0x20:
-// {
-// TCAbstractType[] rgtc = newTAP.getRgtc();
-//
-// for(int x = varParam[0]; x < varParam[1]; x++)
-// {
-//
-// if((varParam[2] & 0x08) > 0)
-// {
-// short[] brcRight = rgtc[x].getBrcRight();
-// brcRight[0] = LittleEndian.getShort(varParam, 6);
-// brcRight[1] = LittleEndian.getShort(varParam, 8);
-// }
-// else if((varParam[2] & 0x04) > 0)
-// {
-// short[] brcBottom = rgtc[x].getBrcBottom();
-// brcBottom[0] = LittleEndian.getShort(varParam, 6);
-// brcBottom[1] = LittleEndian.getShort(varParam, 8);
-// }
-// else if((varParam[2] & 0x02) > 0)
-// {
-// short[] brcLeft = rgtc[x].getBrcLeft();
-// brcLeft[0] = LittleEndian.getShort(varParam, 6);
-// brcLeft[1] = LittleEndian.getShort(varParam, 8);
-// }
-// else if((varParam[2] & 0x01) > 0)
-// {
-// short[] brcTop = rgtc[x].getBrcTop();
-// brcTop[0] = LittleEndian.getShort(varParam, 6);
-// brcTop[1] = LittleEndian.getShort(varParam, 8);
-// }
-// }
-// break;
-// }
-// case 0x21:
-// int index = (param & 0xff000000) >> 24;
-// int count = (param & 0x00ff0000) >> 16;
-// int width = (param & 0x0000ffff);
-// int itcMac = newTAP.getItcMac();
-//
-// short[] rgdxaCenter = new short[itcMac + count + 1];
-// TableCellDescriptor[] rgtc = new TableCellDescriptor[itcMac + count];
-// if(index >= itcMac)
-// {
-// index = itcMac;
-// System.arraycopy(newTAP.getRgdxaCenter(), 0, rgdxaCenter, 0, itcMac + 1);
-// System.arraycopy(newTAP.getRgtc(), 0, rgtc, 0, itcMac);
-// }
-// else
-// {
-// //copy rgdxaCenter
-// System.arraycopy(newTAP.getRgdxaCenter(), 0, rgdxaCenter, 0, index + 1);
-// System.arraycopy(newTAP.getRgdxaCenter(), index + 1, rgdxaCenter, index + count, itcMac - (index));
-// //copy rgtc
-// System.arraycopy(newTAP.getRgtc(), 0, rgtc, 0, index);
-// System.arraycopy(newTAP.getRgtc(), index, rgtc, index + count, itcMac - index);
-// }
-//
-// for(int x = index; x < index + count; x++)
-// {
-// rgtc[x] = new TableCellDescriptor();
-// rgdxaCenter[x] = (short)(rgdxaCenter[x-1] + width);
-// }
-// rgdxaCenter[index + count] = (short)(rgdxaCenter[(index + count)-1] + width);
-// break;
-// /**@todo handle table sprms from complex files*/
-// case 0x22:
-// case 0x23:
-// case 0x24:
-// case 0x25:
-// case 0x26:
-// case 0x27:
-// case 0x28:
-// case 0x29:
-// case 0x2a:
-// case 0x2b:
-// case 0x2c:
-// break;
-// default:
-// break;
-// }
-// }
-// /**
-// * Used in decompression of a sepx. This performs an operation defined by
-// * a single sprm.
-// *
-// * @param newSEP The SectionProperty to perfrom the operation on.
-// * @param operand The operation to perform.
-// * @param param The operation's parameter.
-// * @param varParam The operation variable length parameter.
-// */
-// static void doSEPOperation(SectionProperties newSEP, int operand, int param, byte[] varParam)
-// {
-// switch(operand)
-// {
-// case 0:
-// newSEP.setCnsPgn((byte)param);
-// break;
-// case 0x1:
-// newSEP.setIHeadingPgn((byte)param);
-// break;
-// case 0x2:
-// newSEP.setOlstAnm(varParam);
-// break;
-// case 0x3:
-// //not quite sure
-// break;
-// case 0x4:
-// //not quite sure
-// break;
-// case 0x5:
-// newSEP.setFEvenlySpaced(getFlag(param));
-// break;
-// case 0x6:
-// newSEP.setFUnlocked(getFlag(param));
-// break;
-// case 0x7:
-// newSEP.setDmBinFirst((short)param);
-// break;
-// case 0x8:
-// newSEP.setDmBinOther((short)param);
-// break;
-// case 0x9:
-// newSEP.setBkc((byte)param);
-// break;
-// case 0xa:
-// newSEP.setFTitlePage(getFlag(param));
-// break;
-// case 0xb:
-// newSEP.setCcolM1((short)param);
-// break;
-// case 0xc:
-// newSEP.setDxaColumns(param);
-// break;
-// case 0xd:
-// newSEP.setFAutoPgn(getFlag(param));
-// break;
-// case 0xe:
-// newSEP.setNfcPgn((byte)param);
-// break;
-// case 0xf:
-// newSEP.setDyaPgn((short)param);
-// break;
-// case 0x10:
-// newSEP.setDxaPgn((short)param);
-// break;
-// case 0x11:
-// newSEP.setFPgnRestart(getFlag(param));
-// break;
-// case 0x12:
-// newSEP.setFEndNote(getFlag(param));
-// break;
-// case 0x13:
-// newSEP.setLnc((byte)param);
-// break;
-// case 0x14:
-// newSEP.setGrpfIhdt((byte)param);
-// break;
-// case 0x15:
-// newSEP.setNLnnMod((short)param);
-// break;
-// case 0x16:
-// newSEP.setDxaLnn(param);
-// break;
-// case 0x17:
-// newSEP.setDyaHdrTop(param);
-// break;
-// case 0x18:
-// newSEP.setDyaHdrBottom(param);
-// break;
-// case 0x19:
-// newSEP.setFLBetween(getFlag(param));
-// break;
-// case 0x1a:
-// newSEP.setVjc((byte)param);
-// break;
-// case 0x1b:
-// newSEP.setLnnMin((short)param);
-// break;
-// case 0x1c:
-// newSEP.setPgnStart((short)param);
-// break;
-// case 0x1d:
-// newSEP.setDmOrientPage((byte)param);
-// break;
-// case 0x1e:
-// //nothing
-// break;
-// case 0x1f:
-// newSEP.setXaPage(param);
-// break;
-// case 0x20:
-// newSEP.setYaPage(param);
-// break;
-// case 0x21:
-// newSEP.setDxaLeft(param);
-// break;
-// case 0x22:
-// newSEP.setDxaRight(param);
-// break;
-// case 0x23:
-// newSEP.setDyaTop(param);
-// break;
-// case 0x24:
-// newSEP.setDyaBottom(param);
-// break;
-// case 0x25:
-// newSEP.setDzaGutter(param);
-// break;
-// case 0x26:
-// newSEP.setDmPaperReq((short)param);
-// break;
-// case 0x27:
-// newSEP.setFPropMark(getFlag(varParam[0]));
-// break;
-// case 0x28:
-// break;
-// case 0x29:
-// break;
-// case 0x2a:
-// break;
-// case 0x2b:
-// short[] brcTop = newSEP.getBrcTop();
-// brcTop[0] = (short)(param & 0xffff);
-// brcTop[1] = (short)((param & 0xffff0000) >> 16);
-// break;
-// case 0x2c:
-// short[] brcLeft = newSEP.getBrcLeft();
-// brcLeft[0] = (short)(param & 0xffff);
-// brcLeft[1] = (short)((param & 0xffff0000) >> 16);
-// break;
-// case 0x2d:
-// short[] brcBottom = newSEP.getBrcBottom();
-// brcBottom[0] = (short)(param & 0xffff);
-// brcBottom[1] = (short)((param & 0xffff0000) >> 16);
-// break;
-// case 0x2e:
-// short[] brcRight = newSEP.getBrcRight();
-// brcRight[0] = (short)(param & 0xffff);
-// brcRight[1] = (short)((param & 0xffff0000) >> 16);
-// break;
-// case 0x2f:
-// newSEP.setPgbProp(param);
-// break;
-// case 0x30:
-// newSEP.setDxtCharSpace(param);
-// break;
-// case 0x31:
-// newSEP.setDyaLinePitch(param);
-// break;
-// case 0x33:
-// newSEP.setWTextFlow((short)param);
-// break;
-// default:
-// break;
-// }
-//
-// }
- /**
- * Converts an byte value into a boolean. The byte parameter can be 1,0, 128,
- * or 129. if it is 128, this function returns the same value as oldVal. If
- * it is 129, this function returns !oldVal. This is used for certain sprms
+ * Creates a CharacterProperties object from a chpx stored in the
+ * StyleDescription at the index istd in the StyleDescription array. The
+ * CharacterProperties object is placed in the StyleDescription at istd after
+ * its been created. Not every StyleDescription will contain a chpx. In these
+ * cases this function does nothing.
*
- * @param x The byte value to convert.
- * @param oldVal The old boolean value.
- *
- * @return A boolean whose value depends on x and oldVal.
+ * @param istd The index of the StyleDescription to create the
+ * CharacterProperties object from.
*/
- private static boolean getCHPFlag(byte x, boolean oldVal)
+ private void createChp(int istd)
{
- switch(x)
+ StyleDescription sd = _styleDescriptions[istd];
+ CharacterProperties chp = sd.getCHP();
+ byte[] chpx = sd.getCHPX();
+ int baseIndex = sd.getBaseStyle();
+ if(chp == null && chpx != null)
{
- case 0:
- return false;
- case 1:
- return true;
- case (byte)0x80:
- return oldVal;
- case (byte)0x81:
- return !oldVal;
- default:
- return false;
+ CharacterProperties parentCHP = new CharacterProperties();
+ if(baseIndex != NIL_STYLE)
+ {
+
+ parentCHP = _styleDescriptions[baseIndex].getCHP();
+ if(parentCHP == null)
+ {
+ createChp(baseIndex);
+ parentCHP = _styleDescriptions[baseIndex].getCHP();
+ }
+
+ }
+
+ chp = (CharacterProperties)CharacterSprmUncompressor.uncompressCHP(parentCHP, chpx, 0);
+ sd.setCHP(chp);
}
}
/**
- * Converts an int into a boolean. If the int is non-zero, it returns true.
- * Otherwise it returns false.
- *
- * @param x The int to convert.
+ * Gets the StyleDescription at index x.
*
- * @return A boolean whose value depends on x.
+ * @param x the index of the desired StyleDescription.
*/
- public static boolean getFlag(int x)
+ public StyleDescription getStyleDescription(int x)
{
- if(x != 0)
- {
- return true;
- }
- else
- {
- return false;
- }
+ return _styleDescriptions[x];
}
+
+ public CharacterProperties getCharacterStyle(int x)
+ {
+ return (_styleDescriptions[x] != null ? _styleDescriptions[x].getCHP() : null);
+ }
+
+ public ParagraphProperties getParagraphStyle(int x)
+ {
+ return (_styleDescriptions[x] != null ? _styleDescriptions[x].getPAP() : null);
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: poi-dev-help@jakarta.apache.org