Files
HRMS/hrmsEjb/jxl/biff/FontRecord.java
2025-07-28 13:56:49 +05:30

235 lines
6.3 KiB
Java

package jxl.biff;
import common.Assert;
import common.Logger;
import jxl.WorkbookSettings;
import jxl.format.Colour;
import jxl.format.Font;
import jxl.format.ScriptStyle;
import jxl.format.UnderlineStyle;
import jxl.read.biff.Record;
public class FontRecord extends WritableRecordData implements Font {
private static Logger logger = Logger.getLogger(FontRecord.class);
private int pointHeight;
private int colourIndex;
private int boldWeight;
private int scriptStyle;
private int underlineStyle;
private byte fontFamily;
private byte characterSet;
private boolean italic;
private boolean struckout;
private String name;
private boolean initialized;
private int fontIndex;
private static class Biff7 {
private Biff7() {}
}
public static final Biff7 biff7 = new Biff7();
private static final int EXCEL_UNITS_PER_POINT = 20;
protected FontRecord(String fn, int ps, int bold, boolean it, int us, int ci, int ss) {
super(Type.FONT);
this.boldWeight = bold;
this.underlineStyle = us;
this.name = fn;
this.pointHeight = ps;
this.italic = it;
this.scriptStyle = ss;
this.colourIndex = ci;
this.initialized = false;
this.struckout = false;
}
public FontRecord(Record t, WorkbookSettings ws) {
super(t);
byte[] data = getRecord().getData();
this.pointHeight = IntegerHelper.getInt(data[0], data[1]) / 20;
this.colourIndex = IntegerHelper.getInt(data[4], data[5]);
this.boldWeight = IntegerHelper.getInt(data[6], data[7]);
this.scriptStyle = IntegerHelper.getInt(data[8], data[9]);
this.underlineStyle = data[10];
this.fontFamily = data[11];
this.characterSet = data[12];
this.initialized = false;
if ((data[2] & 0x2) != 0)
this.italic = true;
if ((data[2] & 0x8) != 0)
this.struckout = true;
int numChars = data[14];
if (data[15] == 0) {
this.name = StringHelper.getString(data, numChars, 16, ws);
} else if (data[15] == 1) {
this.name = StringHelper.getUnicodeString(data, numChars, 16);
} else {
this.name = StringHelper.getString(data, numChars, 15, ws);
}
}
public FontRecord(Record t, WorkbookSettings ws, Biff7 dummy) {
super(t);
byte[] data = getRecord().getData();
this.pointHeight = IntegerHelper.getInt(data[0], data[1]) / 20;
this.colourIndex = IntegerHelper.getInt(data[4], data[5]);
this.boldWeight = IntegerHelper.getInt(data[6], data[7]);
this.scriptStyle = IntegerHelper.getInt(data[8], data[9]);
this.underlineStyle = data[10];
this.fontFamily = data[11];
this.initialized = false;
if ((data[2] & 0x2) != 0)
this.italic = true;
if ((data[2] & 0x8) != 0)
this.struckout = true;
int numChars = data[14];
this.name = StringHelper.getString(data, numChars, 15, ws);
}
protected FontRecord(Font f) {
super(Type.FONT);
Assert.verify((f != null));
this.pointHeight = f.getPointSize();
this.colourIndex = f.getColour().getValue();
this.boldWeight = f.getBoldWeight();
this.scriptStyle = f.getScriptStyle().getValue();
this.underlineStyle = f.getUnderlineStyle().getValue();
this.italic = f.isItalic();
this.name = f.getName();
this.struckout = false;
this.initialized = false;
}
public byte[] getData() {
byte[] data = new byte[16 + this.name.length() * 2];
IntegerHelper.getTwoBytes(this.pointHeight * 20, data, 0);
if (this.italic)
data[2] = (byte)(data[2] | 0x2);
if (this.struckout)
data[2] = (byte)(data[2] | 0x8);
IntegerHelper.getTwoBytes(this.colourIndex, data, 4);
IntegerHelper.getTwoBytes(this.boldWeight, data, 6);
IntegerHelper.getTwoBytes(this.scriptStyle, data, 8);
data[10] = (byte)this.underlineStyle;
data[11] = this.fontFamily;
data[12] = this.characterSet;
data[13] = 0;
data[14] = (byte)this.name.length();
data[15] = 1;
StringHelper.getUnicodeBytes(this.name, data, 16);
return data;
}
public final boolean isInitialized() {
return this.initialized;
}
public final void initialize(int pos) {
this.fontIndex = pos;
this.initialized = true;
}
public final void uninitialize() {
this.initialized = false;
}
public final int getFontIndex() {
return this.fontIndex;
}
protected void setFontPointSize(int ps) {
Assert.verify(!this.initialized);
this.pointHeight = ps;
}
public int getPointSize() {
return this.pointHeight;
}
protected void setFontBoldStyle(int bs) {
Assert.verify(!this.initialized);
this.boldWeight = bs;
}
public int getBoldWeight() {
return this.boldWeight;
}
protected void setFontItalic(boolean i) {
Assert.verify(!this.initialized);
this.italic = i;
}
public boolean isItalic() {
return this.italic;
}
protected void setFontUnderlineStyle(int us) {
Assert.verify(!this.initialized);
this.underlineStyle = us;
}
public UnderlineStyle getUnderlineStyle() {
return UnderlineStyle.getStyle(this.underlineStyle);
}
protected void setFontColour(int c) {
Assert.verify(!this.initialized);
this.colourIndex = c;
}
public Colour getColour() {
return Colour.getInternalColour(this.colourIndex);
}
protected void setFontScriptStyle(int ss) {
Assert.verify(!this.initialized);
this.scriptStyle = ss;
}
public ScriptStyle getScriptStyle() {
return ScriptStyle.getStyle(this.scriptStyle);
}
public String getName() {
return this.name;
}
public int hashCode() {
return this.name.hashCode();
}
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof FontRecord))
return false;
FontRecord font = (FontRecord)o;
if (this.pointHeight == font.pointHeight && this.colourIndex == font.colourIndex && this.boldWeight == font.boldWeight && this.scriptStyle == font.scriptStyle && this.underlineStyle == font.underlineStyle && this.italic == font.italic && this.struckout == font.struckout && this.fontFamily == font.fontFamily && this.characterSet == font.characterSet && this.name.equals(font.name))
return true;
return false;
}
public boolean isStruckout() {
return this.struckout;
}
protected void setFontStruckout(boolean os) {
this.struckout = os;
}
}