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

80 lines
2.0 KiB
Java

package jxl.biff;
import common.Assert;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import jxl.write.biff.File;
public class Fonts {
private ArrayList fonts = new ArrayList();
private static final int numDefaultFonts = 4;
public void addFont(FontRecord f) {
if (!f.isInitialized()) {
int pos = this.fonts.size();
if (pos >= 4)
pos++;
f.initialize(pos);
this.fonts.add(f);
}
}
public FontRecord getFont(int index) {
if (index > 4)
index--;
return this.fonts.get(index);
}
public void write(File outputFile) throws IOException {
Iterator i = this.fonts.iterator();
FontRecord font = null;
while (i.hasNext()) {
font = i.next();
outputFile.write(font);
}
}
IndexMapping rationalize() {
IndexMapping mapping = new IndexMapping(this.fonts.size() + 1);
ArrayList newfonts = new ArrayList();
FontRecord fr = null;
int numremoved = 0;
for (int i = 0; i < 4; i++) {
fr = this.fonts.get(i);
newfonts.add(fr);
mapping.setMapping(fr.getFontIndex(), fr.getFontIndex());
}
Iterator it = null;
FontRecord fr2 = null;
boolean duplicate = false;
for (int j = 4; j < this.fonts.size(); j++) {
fr = this.fonts.get(j);
duplicate = false;
it = newfonts.iterator();
while (it.hasNext() && !duplicate) {
fr2 = it.next();
if (fr.equals(fr2)) {
duplicate = true;
mapping.setMapping(fr.getFontIndex(), mapping.getNewIndex(fr2.getFontIndex()));
numremoved++;
}
}
if (!duplicate) {
newfonts.add(fr);
int newindex = fr.getFontIndex() - numremoved;
Assert.verify((newindex > 4));
mapping.setMapping(fr.getFontIndex(), newindex);
}
}
it = newfonts.iterator();
while (it.hasNext()) {
fr = it.next();
fr.initialize(mapping.getNewIndex(fr.getFontIndex()));
}
this.fonts = newfonts;
return mapping;
}
}