// ps.println("\">");
ps.print(getSVGFontFaceElement(font));
// Decide upon a cmap table to use for our character to glyph look-up
CmapFormat cmapFmt = null;
if (forceAscii) {
// We've been asked to use the ASCII/Macintosh cmap format
cmapFmt = font.getCmapTable().getCmapFormat(
Table.platformMacintosh,
Table.encodingRoman );
} else {
// The default behaviour is to use the Unicode cmap encoding
cmapFmt = font.getCmapTable().getCmapFormat(
Table.platformMicrosoft,
Table.encodingUGL );
if (cmapFmt == null) {
// This might be a symbol font, so we'll look for an "undefined" encoding
cmapFmt = font.getCmapTable().getCmapFormat(
Table.platformMicrosoft,
Table.encodingUndefined );
}
}
if (cmapFmt == null) {
throw new Exception("Cannot find a suitable cmap table");
}
// If this font includes arabic script, we want to specify
// substitutions for initial, medial, terminal & isolated
// cases.
GsubTable gsub = (GsubTable) font.getTable(Table.GSUB);
SingleSubst initialSubst = null;
SingleSubst medialSubst = null;
SingleSubst terminalSubst = null;
if (gsub != null) {
Script s = gsub.getScriptList().findScript(SCRIPT_TAG_ARAB);
if (s != null) {
LangSys ls = s.getDefaultLangSys();
if (ls != null) {
Feature init = gsub.getFeatureList().findFeature(ls, FEATURE_TAG_INIT);
Feature medi = gsub.getFeatureList().findFeature(ls, FEATURE_TAG_MEDI);
Feature fina = gsub.getFeatureList().findFeature(ls, FEATURE_TAG_FINA);
initialSubst = (SingleSubst)
gsub.getLookupList().getLookup(init, 0).getSubtable(0);
medialSubst = (SingleSubst)
gsub.getLookupList().getLookup(medi, 0).getSubtable(0);
terminalSubst = (SingleSubst)
gsub.getLookupList().getLookup(fina, 0).getSubtable(0);
}
}
}
// Include the missing glyph
ps.println(getGlyphAsSVG(font, font.getGlyph(0), 0, horiz_advance_x,
initialSubst, medialSubst, terminalSubst, ""));
try {
if (first == -1) {
if (!autoRange) first = DEFAULT_FIRST;
else first = cmapFmt.getFirst();
}
if (last == -1) {
if (!autoRange) last = DEFAULT_LAST;
else last = cmapFmt.getLast();
}
// Include our requested range
for (int i = first; i <= last; i++) {
int glyphIndex = cmapFmt.mapCharCode(i);
// ps.println(String.valueOf(i) + " -> " + String.valueOf(glyphIndex));
// if (font.getGlyphs()[glyphIndex] != null)
// sb.append(font.getGlyphs()[glyphIndex].toString() + "\n");
if (glyphIndex > 0) {