latest changes

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353448 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Said Ryan Ackley 2003-11-13 03:28:33 +00:00
parent 22c4e294d4
commit 0999e7358a
7 changed files with 250 additions and 75 deletions

View File

@ -64,6 +64,7 @@ import java.io.FileOutputStream;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.poifs.filesystem.DocumentEntry; import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.common.POIFSConstants; import org.apache.poi.poifs.common.POIFSConstants;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.model.hdftypes.*; import org.apache.poi.hwpf.model.hdftypes.*;
import org.apache.poi.hwpf.model.io.*; import org.apache.poi.hwpf.model.io.*;
@ -327,8 +328,13 @@ public class HWPFDocument
try try
{ {
HWPFDocument doc = new HWPFDocument(new FileInputStream(args[0])); HWPFDocument doc = new HWPFDocument(new FileInputStream(args[0]));
CharacterRun run = new CharacterRun();
run.setBold(true);
run.setItalic(true);
run.setCapitalized(true);
Range range = doc.getRange(); Range range = doc.getRange();
range.insertBefore("Hello World!!! HAHAHAHAHA I DID IT!!!"); range.insertBefore("Hello World!!! HAHAHAHAHA I DID IT!!!", run);
OutputStream out = new FileOutputStream(args[1]); OutputStream out = new FileOutputStream(args[1]);
doc.write(out); doc.write(out);

View File

@ -77,6 +77,7 @@ import org.apache.poi.hwpf.model.hdftypes.TextPieceTable;
import org.apache.poi.hwpf.model.hdftypes.TextPiece; import org.apache.poi.hwpf.model.hdftypes.TextPiece;
import org.apache.poi.hwpf.sprm.CharacterSprmUncompressor; import org.apache.poi.hwpf.sprm.CharacterSprmUncompressor;
import org.apache.poi.hwpf.sprm.CharacterSprmCompressor;
import org.apache.poi.hwpf.sprm.SectionSprmUncompressor; import org.apache.poi.hwpf.sprm.SectionSprmUncompressor;
import org.apache.poi.hwpf.sprm.ParagraphSprmUncompressor; import org.apache.poi.hwpf.sprm.ParagraphSprmUncompressor;
@ -194,7 +195,7 @@ public class Range
_doc.getCharacterTable().adjustForInsert(_textStart, adjustedLength); _doc.getCharacterTable().adjustForInsert(_textStart, adjustedLength);
_doc.getParagraphTable().adjustForInsert(_textStart, adjustedLength); _doc.getParagraphTable().adjustForInsert(_textStart, adjustedLength);
_doc.getSectionTable().adjustForInsert(_textStart, adjustedLength); _doc.getSectionTable().adjustForInsert(_textStart, adjustedLength);
return null; return getCharacterRange(0);
} }
public CharacterRange insertAfter(String text) public CharacterRange insertAfter(String text)
@ -203,8 +204,19 @@ public class Range
} }
public CharacterRange insertBefore(String text, CharacterRun cr) public CharacterRange insertBefore(String text, CharacterRun cr)
throws UnsupportedEncodingException
{ {
return null; initAll();
PAPX papx = (PAPX)_paragraphs.get(_parStart);
short istd = papx.getIstd();
StyleSheet ss = _doc.getStyleSheet();
CharacterRun baseStyle = ss.getCharacterStyle(istd);
byte[] grpprl = CharacterSprmCompressor.compressCharacterProperty(cr, baseStyle);
_doc.getCharacterTable().insert(_charStart, _start, grpprl);
return insertBefore(text);
} }
public CharacterRange insertAfter(String text, CharacterRun cr) public CharacterRange insertAfter(String text, CharacterRun cr)
@ -234,7 +246,7 @@ public class Range
chpx.getEnd()); chpx.getEnd());
List paragraphList = _paragraphs.subList(point[0], point[1]); List paragraphList = _paragraphs.subList(point[0], point[1]);
PAPX papx = (PAPX)paragraphList.get(0); PAPX papx = (PAPX)paragraphList.get(0);
short istd = LittleEndian.getShort(papx.getBuf()); short istd = papx.getIstd();
StyleSheet sd = _doc.getStyleSheet(); StyleSheet sd = _doc.getStyleSheet();
CharacterRun baseStyle = sd.getCharacterStyle(istd); CharacterRun baseStyle = sd.getCharacterStyle(istd);
@ -260,7 +272,7 @@ public class Range
public Paragraph getParagraph(int index) public Paragraph getParagraph(int index)
{ {
initParagraphs(); initParagraphs();
PAPX papx = (PAPX)_sections.get(index + _parStart); PAPX papx = (PAPX)_paragraphs.get(index + _parStart);
Paragraph pap = (Paragraph)papx.getCacheContents(); Paragraph pap = (Paragraph)papx.getCacheContents();
if (pap == null) if (pap == null)
{ {

View File

@ -147,6 +147,24 @@ public class CHPBinTable
} }
} }
public void insert(int listIndex, int cpStart, byte[] grpprl)
{
CHPX insertChpx = new CHPX(cpStart, cpStart, grpprl);
CHPX chpx = (CHPX)_textRuns.get(listIndex);
if (chpx.getStart() < cpStart)
{
CHPX clone = new CHPX(cpStart, chpx.getEnd(), chpx.getGrpprl());
chpx.setEnd(cpStart);
_textRuns.add(listIndex + 1, insertChpx);
_textRuns.add(listIndex + 2, clone);
}
else
{
_textRuns.add(listIndex, insertChpx);
}
}
public void adjustForInsert(int listIndex, int length) public void adjustForInsert(int listIndex, int length)
{ {
int size = _textRuns.size(); int size = _textRuns.size();

View File

@ -56,6 +56,8 @@
package org.apache.poi.hwpf.model.hdftypes; package org.apache.poi.hwpf.model.hdftypes;
import org.apache.poi.util.LittleEndian;
import org.apache.poi.hwpf.usermodel.Paragraph; import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.sprm.SprmBuffer; import org.apache.poi.hwpf.sprm.SprmBuffer;
@ -91,6 +93,19 @@ public class PAPX extends PropertyNode
return getGrpprl(); return getGrpprl();
} }
public short getIstd()
{
byte[] buf = getGrpprl();
if (buf.length == 0)
{
return 0;
}
else
{
return LittleEndian.getShort(buf);
}
}
public boolean equals(Object o) public boolean equals(Object o)
{ {
if (super.equals(o)) if (super.equals(o))

View File

@ -68,7 +68,7 @@ import org.apache.poi.hwpf.model.io.*;
public class TextPieceTable public class TextPieceTable
{ {
ArrayList _textPieces = new ArrayList(); ArrayList _textPieces = new ArrayList();
int _multiple; //int _multiple;
int _cpMin; int _cpMin;
public TextPieceTable(byte[] documentStream, byte[] tableStream, int offset, public TextPieceTable(byte[] documentStream, byte[] tableStream, int offset,
@ -78,7 +78,7 @@ public class TextPieceTable
// get our plex of PieceDescriptors // get our plex of PieceDescriptors
PlexOfCps pieceTable = new PlexOfCps(tableStream, offset, size, PieceDescriptor.getSizeInBytes()); PlexOfCps pieceTable = new PlexOfCps(tableStream, offset, size, PieceDescriptor.getSizeInBytes());
_multiple = 2; //_multiple = 2;
int length = pieceTable.length(); int length = pieceTable.length();
PieceDescriptor[] pieces = new PieceDescriptor[length]; PieceDescriptor[] pieces = new PieceDescriptor[length];
@ -89,31 +89,45 @@ public class TextPieceTable
PropertyNode node = pieceTable.getProperty(x); PropertyNode node = pieceTable.getProperty(x);
pieces[x] = new PieceDescriptor(node.getBuf(), 0); pieces[x] = new PieceDescriptor(node.getBuf(), 0);
if (!pieces[x].isUnicode()) // if (!pieces[x].isUnicode())
{ // {
_multiple = 1; // _multiple = 1;
} // }
} }
_cpMin = pieces[0].getFilePosition() - fcMin; _cpMin = pieces[0].getFilePosition() - fcMin;
// if a piece is unicode the actual offset may be bumped because of the
// doubling of the needed size.
int bump = 0;
// using the PieceDescriptors, build our list of TextPieces. // using the PieceDescriptors, build our list of TextPieces.
for (int x = 0; x < pieces.length; x++) for (int x = 0; x < pieces.length; x++)
{ {
int start = pieces[x].getFilePosition(); int start = pieces[x].getFilePosition();
PropertyNode node = pieceTable.getProperty(x); PropertyNode node = pieceTable.getProperty(x);
int nodeStart = node.getStart(); int nodeStart = node.getStart();
// multiple will be 2 if there is only one piece and its unicode. Some // multiple will be 2 if there is only one piece and its unicode. Some
// type of optimization. // type of optimization.
int nodeEnd = ((node.getEnd() - nodeStart) * _multiple) + nodeStart; boolean unicode = pieces[x].isUnicode();
int multiple = 1;
if (unicode)
{
multiple = 2;
}
int nodeEnd = ((node.getEnd() - nodeStart) * multiple) + nodeStart;
int textSize = nodeEnd - nodeStart; int textSize = nodeEnd - nodeStart;
boolean unicode = pieces[x].isUnicode();
String toStr = null;
byte[] buf = new byte[textSize + (unicode ? textSize % 2 : 0)]; byte[] buf = new byte[textSize];
System.arraycopy(documentStream, start, buf, 0, textSize); System.arraycopy(documentStream, start, buf, 0, textSize);
_textPieces.add(new TextPiece(nodeStart, nodeEnd, buf, pieces[x])); _textPieces.add(new TextPiece(nodeStart + bump, nodeEnd + bump, buf, pieces[x]));
if (unicode)
{
bump += (node.getEnd() - nodeStart);
}
} }
} }
@ -135,6 +149,7 @@ public class TextPieceTable
//int fcMin = docStream.getOffset(); //int fcMin = docStream.getOffset();
int size = _textPieces.size(); int size = _textPieces.size();
int bumpDown = 0;
for (int x = 0; x < size; x++) for (int x = 0; x < size; x++)
{ {
TextPiece next = (TextPiece)_textPieces.get(x); TextPiece next = (TextPiece)_textPieces.get(x);
@ -145,13 +160,25 @@ public class TextPieceTable
// write the text to the docstream and save the piece descriptor to the // write the text to the docstream and save the piece descriptor to the
// plex which will be written later to the tableStream. // plex which will be written later to the tableStream.
//if (_multiple == 1 && pd.isUnicode() &&
docStream.write(next.getBuf()); docStream.write(next.getBuf());
int nodeStart = next.getStart(); int nodeStart = next.getStart();
textPlex.addProperty(new PropertyNode(nodeStart, int multiple = 1;
(next.getEnd() - nodeStart)/_multiple + nodeStart, if (pd.isUnicode())
{
multiple = 2;
}
textPlex.addProperty(new PropertyNode(nodeStart - bumpDown,
((next.getEnd() - nodeStart)/multiple + nodeStart) - bumpDown,
pd.toByteArray())); pd.toByteArray()));
if (pd.isUnicode())
{
bumpDown += ((next.getEnd() - nodeStart)/multiple);
}
} }
return textPlex.toByteArray(); return textPlex.toByteArray();

View File

@ -113,8 +113,6 @@ public class CharacterProperties
public final static short SPRM_FELID = 0x486E; public final static short SPRM_FELID = 0x486E;
public final static short SPRM_IDCTHINT = 0x286F; public final static short SPRM_IDCTHINT = 0x286F;
StyleDescription _baseStyle;
SprmBuffer _chpx; SprmBuffer _chpx;
public CharacterProperties() public CharacterProperties()
@ -141,7 +139,7 @@ public class CharacterProperties
public void markDeleted(boolean mark) public void markDeleted(boolean mark)
{ {
if (mark != isFRMarkDel()) if (_chpx != null && mark != isFRMarkDel())
{ {
byte newVal = (byte)(mark ? 1 : 0); byte newVal = (byte)(mark ? 1 : 0);
_chpx.addSprm(SPRM_FRMARKDEL, newVal); _chpx.addSprm(SPRM_FRMARKDEL, newVal);
@ -156,7 +154,7 @@ public class CharacterProperties
public void setBold(boolean bold) public void setBold(boolean bold)
{ {
if (bold != isFBold()) if (_chpx != null && bold != isFBold())
{ {
byte newVal = (byte)(bold ? 1 : 0); byte newVal = (byte)(bold ? 1 : 0);
_chpx.addSprm(SPRM_FBOLD, newVal); _chpx.addSprm(SPRM_FBOLD, newVal);
@ -171,7 +169,7 @@ public class CharacterProperties
public void setItalic(boolean italic) public void setItalic(boolean italic)
{ {
if (italic != isFItalic()) if (_chpx != null && italic != isFItalic())
{ {
byte newVal = (byte)(italic ? 1 : 0); byte newVal = (byte)(italic ? 1 : 0);
_chpx.addSprm(SPRM_FITALIC, newVal); _chpx.addSprm(SPRM_FITALIC, newVal);
@ -186,7 +184,7 @@ public class CharacterProperties
public void setOutline(boolean outlined) public void setOutline(boolean outlined)
{ {
if (outlined != isFOutline()) if (_chpx != null && outlined != isFOutline())
{ {
byte newVal = (byte)(outlined ? 1 : 0); byte newVal = (byte)(outlined ? 1 : 0);
_chpx.addSprm(SPRM_FOUTLINE, newVal); _chpx.addSprm(SPRM_FOUTLINE, newVal);
@ -202,7 +200,7 @@ public class CharacterProperties
public void setFldVanish(boolean fldVanish) public void setFldVanish(boolean fldVanish)
{ {
if (fldVanish != isFFldVanish()) if (_chpx != null && fldVanish != isFFldVanish())
{ {
byte newVal = (byte)(fldVanish ? 1 : 0); byte newVal = (byte)(fldVanish ? 1 : 0);
_chpx.addSprm(SPRM_FFLDVANISH, newVal); _chpx.addSprm(SPRM_FFLDVANISH, newVal);
@ -217,7 +215,7 @@ public class CharacterProperties
public void setSmallCaps(boolean smallCaps) public void setSmallCaps(boolean smallCaps)
{ {
if (smallCaps != isFSmallCaps()) if (_chpx != null && smallCaps != isFSmallCaps())
{ {
byte newVal = (byte)(smallCaps ? 1 : 0); byte newVal = (byte)(smallCaps ? 1 : 0);
_chpx.addSprm(SPRM_FSMALLCAPS, newVal); _chpx.addSprm(SPRM_FSMALLCAPS, newVal);
@ -231,7 +229,7 @@ public class CharacterProperties
public void setCapitalized(boolean caps) public void setCapitalized(boolean caps)
{ {
if (caps != isFCaps()) if (_chpx != null && caps != isFCaps())
{ {
byte newVal = (byte)(caps ? 1 : 0); byte newVal = (byte)(caps ? 1 : 0);
_chpx.addSprm(SPRM_FCAPS, newVal); _chpx.addSprm(SPRM_FCAPS, newVal);
@ -246,7 +244,7 @@ public class CharacterProperties
public void setVanished(boolean vanish) public void setVanished(boolean vanish)
{ {
if (vanish != isFVanish()) if (_chpx != null && vanish != isFVanish())
{ {
byte newVal = (byte)(vanish ? 1 : 0); byte newVal = (byte)(vanish ? 1 : 0);
_chpx.addSprm(SPRM_FVANISH, newVal); _chpx.addSprm(SPRM_FVANISH, newVal);
@ -261,7 +259,7 @@ public class CharacterProperties
public void markInserted(boolean mark) public void markInserted(boolean mark)
{ {
if (mark != isFRMark()) if (_chpx != null && mark != isFRMark())
{ {
byte newVal = (byte)(mark ? 1 : 0); byte newVal = (byte)(mark ? 1 : 0);
_chpx.addSprm(SPRM_FRMARK, newVal); _chpx.addSprm(SPRM_FRMARK, newVal);
@ -276,7 +274,7 @@ public class CharacterProperties
public void strikeThrough(boolean strike) public void strikeThrough(boolean strike)
{ {
if (strike != isFStrike()) if (_chpx != null && strike != isFStrike())
{ {
byte newVal = (byte)(strike ? 1 : 0); byte newVal = (byte)(strike ? 1 : 0);
_chpx.addSprm(SPRM_FSTRIKE, newVal); _chpx.addSprm(SPRM_FSTRIKE, newVal);
@ -291,7 +289,7 @@ public class CharacterProperties
public void setShadow(boolean shadow) public void setShadow(boolean shadow)
{ {
if (shadow != isFShadow()) if (_chpx != null && shadow != isFShadow())
{ {
byte newVal = (byte)(shadow ? 1 : 0); byte newVal = (byte)(shadow ? 1 : 0);
_chpx.addSprm(SPRM_FSHADOW, newVal); _chpx.addSprm(SPRM_FSHADOW, newVal);
@ -307,7 +305,7 @@ public class CharacterProperties
public void setEmbossed(boolean emboss) public void setEmbossed(boolean emboss)
{ {
if (emboss != isFEmboss()) if (_chpx != null && emboss != isFEmboss())
{ {
byte newVal = (byte)(emboss ? 1 : 0); byte newVal = (byte)(emboss ? 1 : 0);
_chpx.addSprm(SPRM_FEMBOSS, newVal); _chpx.addSprm(SPRM_FEMBOSS, newVal);
@ -323,11 +321,11 @@ public class CharacterProperties
public void setImprinted(boolean imprint) public void setImprinted(boolean imprint)
{ {
if (imprint != isFImprint()) super.setFImprint(imprint);
if (_chpx != null && imprint != isFImprint())
{ {
byte newVal = (byte)(imprint ? 1 : 0); byte newVal = (byte)(imprint ? 1 : 0);
_chpx.addSprm(SPRM_FIMPRINT, newVal); _chpx.addSprm(SPRM_FIMPRINT, newVal);
super.setFImprint(imprint);
} }
} }
@ -339,39 +337,39 @@ public class CharacterProperties
public void setDoubleStrikethrough(boolean dstrike) public void setDoubleStrikethrough(boolean dstrike)
{ {
if (dstrike != isFDStrike()) super.setFDStrike(dstrike);
if (_chpx != null && dstrike != isFDStrike())
{ {
byte newVal = (byte)(dstrike ? 1 : 0); byte newVal = (byte)(dstrike ? 1 : 0);
_chpx.addSprm(SPRM_FDSTRIKE, newVal); _chpx.addSprm(SPRM_FDSTRIKE, newVal);
super.setFDStrike(dstrike);
} }
} }
public void setFtcAscii(int ftcAscii) public void setFtcAscii(int ftcAscii)
{ {
if (ftcAscii != getFtcAscii()) super.setFtcAscii(ftcAscii);
if (_chpx != null && ftcAscii != getFtcAscii())
{ {
_chpx.addSprm(SPRM_RGFTCASCII, (short)ftcAscii); _chpx.addSprm(SPRM_RGFTCASCII, (short)ftcAscii);
} }
super.setFtcAscii(ftcAscii);
} }
public void setFtcFE(int ftcFE) public void setFtcFE(int ftcFE)
{ {
if (ftcFE != getFtcFE()) super.setFtcFE(ftcFE);
if (_chpx != null && ftcFE != getFtcFE())
{ {
_chpx.addSprm(SPRM_RGFTCFAREAST, (short)ftcFE); _chpx.addSprm(SPRM_RGFTCFAREAST, (short)ftcFE);
} }
super.setFtcFE(ftcFE);
} }
public void setFtcOther(int ftcOther) public void setFtcOther(int ftcOther)
{ {
if (ftcOther != getFtcOther()) super.setFtcOther(ftcOther);
if (_chpx != null && ftcOther != getFtcOther())
{ {
_chpx.addSprm(SPRM_RGFTCNOTFAREAST, (short)ftcOther); _chpx.addSprm(SPRM_RGFTCNOTFAREAST, (short)ftcOther);
} }
super.setFtcOther(ftcOther);
} }
public int getFontSize() public int getFontSize()
@ -381,10 +379,10 @@ public class CharacterProperties
public void setFontSize(int halfPoints) public void setFontSize(int halfPoints)
{ {
if (halfPoints != getHps()) super.setHps(halfPoints);
if (_chpx != null && halfPoints != getHps())
{ {
_chpx.addSprm(SPRM_HPS, (short)halfPoints); _chpx.addSprm(SPRM_HPS, (short)halfPoints);
super.setHps(halfPoints);
} }
} }
@ -395,10 +393,10 @@ public class CharacterProperties
public void setCharacterSpacing(int twips) public void setCharacterSpacing(int twips)
{ {
if (twips != getDxaSpace()) super.setDxaSpace(twips);
if (_chpx != null && twips != getDxaSpace())
{ {
_chpx.addSprm(SPRM_DXASPACE, twips); _chpx.addSprm(SPRM_DXASPACE, twips);
super.setDxaSpace(twips);
} }
} }
@ -409,10 +407,10 @@ public class CharacterProperties
public void setSubSuperScriptIndex(short iss) public void setSubSuperScriptIndex(short iss)
{ {
if (iss != getIss()) super.setDxaSpace(iss);
if (_chpx != null && iss != getIss())
{ {
_chpx.addSprm(SPRM_DXASPACE, iss); _chpx.addSprm(SPRM_DXASPACE, iss);
super.setDxaSpace(iss);
} }
} }

View File

@ -113,8 +113,6 @@ public class CharacterRun
public final static short SPRM_FELID = 0x486E; public final static short SPRM_FELID = 0x486E;
public final static short SPRM_IDCTHINT = 0x286F; public final static short SPRM_IDCTHINT = 0x286F;
StyleDescription _baseStyle;
SprmBuffer _chpx; SprmBuffer _chpx;
public CharacterRun() public CharacterRun()
@ -141,11 +139,11 @@ public class CharacterRun
public void markDeleted(boolean mark) public void markDeleted(boolean mark)
{ {
if (mark != isFRMarkDel() && mark != _baseStyle.getCHP().isFRMarkDel()) super.setFRMarkDel(mark);
if (_chpx != null && mark != isFRMarkDel())
{ {
byte newVal = (byte)(mark ? 1 : 0); byte newVal = (byte)(mark ? 1 : 0);
_chpx.addSprm(SPRM_FRMARKDEL, newVal); _chpx.addSprm(SPRM_FRMARKDEL, newVal);
super.setFRMarkDel(mark);
} }
} }
@ -156,11 +154,11 @@ public class CharacterRun
public void setBold(boolean bold) public void setBold(boolean bold)
{ {
if (bold != isFBold() && bold != _baseStyle.getCHP().isFBold()) super.setFBold(bold);
if (_chpx != null && bold != isFBold())
{ {
byte newVal = (byte)(bold ? 1 : 0); byte newVal = (byte)(bold ? 1 : 0);
_chpx.addSprm(SPRM_FBOLD, newVal); _chpx.addSprm(SPRM_FBOLD, newVal);
super.setFBold(bold);
} }
} }
@ -171,11 +169,11 @@ public class CharacterRun
public void setItalic(boolean italic) public void setItalic(boolean italic)
{ {
if (italic != isFItalic() && italic != _baseStyle.getCHP().isFItalic()) super.setFItalic(italic);
if (_chpx != null && italic != isFItalic())
{ {
byte newVal = (byte)(italic ? 1 : 0); byte newVal = (byte)(italic ? 1 : 0);
_chpx.addSprm(SPRM_FITALIC, newVal); _chpx.addSprm(SPRM_FITALIC, newVal);
super.setFItalic(italic);
} }
} }
@ -186,11 +184,11 @@ public class CharacterRun
public void setOutline(boolean outlined) public void setOutline(boolean outlined)
{ {
if (outlined != isFOutline() && outlined != _baseStyle.getCHP().isFOutline()) super.setFOutline(outlined);
if (_chpx != null && outlined != isFOutline())
{ {
byte newVal = (byte)(outlined ? 1 : 0); byte newVal = (byte)(outlined ? 1 : 0);
_chpx.addSprm(SPRM_FOUTLINE, newVal); _chpx.addSprm(SPRM_FOUTLINE, newVal);
super.setFOutline(outlined);
} }
} }
@ -202,11 +200,11 @@ public class CharacterRun
public void setFldVanish(boolean fldVanish) public void setFldVanish(boolean fldVanish)
{ {
if (fldVanish != isFFldVanish() && fldVanish != _baseStyle.getCHP().isFFldVanish()) super.setFFldVanish(fldVanish);
if (_chpx != null && fldVanish != isFFldVanish())
{ {
byte newVal = (byte)(fldVanish ? 1 : 0); byte newVal = (byte)(fldVanish ? 1 : 0);
_chpx.addSprm(SPRM_FFLDVANISH, newVal); _chpx.addSprm(SPRM_FFLDVANISH, newVal);
super.setFFldVanish(fldVanish);
} }
} }
@ -217,11 +215,11 @@ public class CharacterRun
public void setSmallCaps(boolean smallCaps) public void setSmallCaps(boolean smallCaps)
{ {
if (smallCaps != isFSmallCaps() && smallCaps != _baseStyle.getCHP().isFSmallCaps()) super.setFSmallCaps(smallCaps);
if (_chpx != null && smallCaps != isFSmallCaps())
{ {
byte newVal = (byte)(smallCaps ? 1 : 0); byte newVal = (byte)(smallCaps ? 1 : 0);
_chpx.addSprm(SPRM_FSMALLCAPS, newVal); _chpx.addSprm(SPRM_FSMALLCAPS, newVal);
super.setFSmallCaps(smallCaps);
} }
} }
public boolean isCapitalized() public boolean isCapitalized()
@ -231,11 +229,11 @@ public class CharacterRun
public void setCapitalized(boolean caps) public void setCapitalized(boolean caps)
{ {
if (caps != isFCaps() && caps != _baseStyle.getCHP().isFCaps()) super.setFCaps(caps);
if (_chpx != null && caps != isFCaps())
{ {
byte newVal = (byte)(caps ? 1 : 0); byte newVal = (byte)(caps ? 1 : 0);
_chpx.addSprm(SPRM_FCAPS, newVal); _chpx.addSprm(SPRM_FCAPS, newVal);
super.setFCaps(caps);
} }
} }
@ -246,11 +244,11 @@ public class CharacterRun
public void setVanished(boolean vanish) public void setVanished(boolean vanish)
{ {
if (vanish != isFVanish() && vanish != _baseStyle.getCHP().isFVanish()) super.setFVanish(vanish);
if (_chpx != null && vanish != isFVanish())
{ {
byte newVal = (byte)(vanish ? 1 : 0); byte newVal = (byte)(vanish ? 1 : 0);
_chpx.addSprm(SPRM_FVANISH, newVal); _chpx.addSprm(SPRM_FVANISH, newVal);
super.setFVanish(vanish);
} }
} }
@ -261,11 +259,11 @@ public class CharacterRun
public void markInserted(boolean mark) public void markInserted(boolean mark)
{ {
if (mark != isFRMark() && mark != _baseStyle.getCHP().isFRMark()) super.setFRMark(mark);
if (_chpx != null && mark != isFRMark())
{ {
byte newVal = (byte)(mark ? 1 : 0); byte newVal = (byte)(mark ? 1 : 0);
_chpx.addSprm(SPRM_FRMARK, newVal); _chpx.addSprm(SPRM_FRMARK, newVal);
super.setFRMark(mark);
} }
} }
@ -276,11 +274,11 @@ public class CharacterRun
public void strikeThrough(boolean strike) public void strikeThrough(boolean strike)
{ {
if (strike != isFStrike() && strike != _baseStyle.getCHP().isFStrike()) super.setFStrike(strike);
if (_chpx != null && strike != isFStrike())
{ {
byte newVal = (byte)(strike ? 1 : 0); byte newVal = (byte)(strike ? 1 : 0);
_chpx.addSprm(SPRM_FSTRIKE, newVal); _chpx.addSprm(SPRM_FSTRIKE, newVal);
super.setFStrike(strike);
} }
} }
@ -291,11 +289,11 @@ public class CharacterRun
public void setShadow(boolean shadow) public void setShadow(boolean shadow)
{ {
if (shadow != isFShadow() && shadow != _baseStyle.getCHP().isFShadow()) super.setFShadow(shadow);
if (_chpx != null && shadow != isFShadow())
{ {
byte newVal = (byte)(shadow ? 1 : 0); byte newVal = (byte)(shadow ? 1 : 0);
_chpx.addSprm(SPRM_FSHADOW, newVal); _chpx.addSprm(SPRM_FSHADOW, newVal);
super.setFShadow(shadow);
} }
} }
@ -307,11 +305,112 @@ public class CharacterRun
public void setEmbossed(boolean emboss) public void setEmbossed(boolean emboss)
{ {
if (emboss != isFEmboss() && emboss != _baseStyle.getCHP().isFEmboss()) super.setFEmboss(emboss);
if (_chpx != null && emboss != isFEmboss())
{ {
byte newVal = (byte)(emboss ? 1 : 0); byte newVal = (byte)(emboss ? 1 : 0);
_chpx.addSprm(SPRM_FEMBOSS, newVal); _chpx.addSprm(SPRM_FEMBOSS, newVal);
super.setFEmboss(emboss); }
}
public boolean isImprinted()
{
return isFImprint();
}
public void setImprinted(boolean imprint)
{
super.setFImprint(imprint);
if (_chpx != null && imprint != isFImprint())
{
byte newVal = (byte)(imprint ? 1 : 0);
_chpx.addSprm(SPRM_FIMPRINT, newVal);
}
}
public boolean isDoubleStrikeThrough()
{
return isFDStrike();
}
public void setDoubleStrikethrough(boolean dstrike)
{
super.setFDStrike(dstrike);
if (_chpx != null && dstrike != isFDStrike())
{
byte newVal = (byte)(dstrike ? 1 : 0);
_chpx.addSprm(SPRM_FDSTRIKE, newVal);
}
}
public void setFtcAscii(int ftcAscii)
{
super.setFtcAscii(ftcAscii);
if (_chpx != null && ftcAscii != getFtcAscii())
{
_chpx.addSprm(SPRM_RGFTCASCII, (short)ftcAscii);
}
}
public void setFtcFE(int ftcFE)
{
super.setFtcFE(ftcFE);
if (_chpx != null && ftcFE != getFtcFE())
{
_chpx.addSprm(SPRM_RGFTCFAREAST, (short)ftcFE);
}
}
public void setFtcOther(int ftcOther)
{
super.setFtcOther(ftcOther);
if (_chpx != null && ftcOther != getFtcOther())
{
_chpx.addSprm(SPRM_RGFTCNOTFAREAST, (short)ftcOther);
}
}
public int getFontSize()
{
return getHps();
}
public void setFontSize(int halfPoints)
{
super.setHps(halfPoints);
if (_chpx != null && halfPoints != getHps())
{
_chpx.addSprm(SPRM_HPS, (short)halfPoints);
}
}
public int getCharacterSpacing()
{
return getDxaSpace();
}
public void setCharacterSpacing(int twips)
{
super.setDxaSpace(twips);
if (_chpx != null && twips != getDxaSpace())
{
_chpx.addSprm(SPRM_DXASPACE, twips);
}
}
public short getSubSuperScriptIndex()
{
return getIss();
}
public void setSubSuperScriptIndex(short iss)
{
super.setDxaSpace(iss);
if (_chpx != null && iss != getIss())
{
_chpx.addSprm(SPRM_DXASPACE, iss);
} }
} }