80 lines
2.0 KiB
Java
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;
|
|
}
|
|
}
|