[poppler] poppler/GlobalParamsWin.cc
Albert Astals Cid
aacid at kemper.freedesktop.org
Fri Apr 6 06:34:00 PDT 2012
poppler/GlobalParamsWin.cc | 224 +++++++++++++++++++++++++--------------------
1 file changed, 128 insertions(+), 96 deletions(-)
New commits:
commit f5b708c3e04ba50756cd9f9530cf82f547443ce9
Author: Suzuki Toshiya <mpsuzuki at hiroshima-u.ac.jp>
Date: Fri Apr 6 15:22:36 2012 +0200
ttc<->ttf fallback is expected for CJK font list in GlobalParamsWin.cc
Bug 48046
diff --git a/poppler/GlobalParamsWin.cc b/poppler/GlobalParamsWin.cc
index 2653b9d..d8065e0 100644
--- a/poppler/GlobalParamsWin.cc
+++ b/poppler/GlobalParamsWin.cc
@@ -76,97 +76,98 @@ static struct {
const char *name;
const char *t1FileName;
const char *ttFileName;
+ GBool warnIfMissing;
} displayFontTab[] = {
- {"Courier", "n022003l.pfb", "cour.ttf"},
- {"Courier-Bold", "n022004l.pfb", "courbd.ttf"},
- {"Courier-BoldOblique", "n022024l.pfb", "courbi.ttf"},
- {"Courier-Oblique", "n022023l.pfb", "couri.ttf"},
- {"Helvetica", "n019003l.pfb", "arial.ttf"},
- {"Helvetica-Bold", "n019004l.pfb", "arialbd.ttf"},
- {"Helvetica-BoldOblique", "n019024l.pfb", "arialbi.ttf"},
- {"Helvetica-Oblique", "n019023l.pfb", "ariali.ttf"},
+ {"Courier", "n022003l.pfb", "cour.ttf", gTrue},
+ {"Courier-Bold", "n022004l.pfb", "courbd.ttf", gTrue},
+ {"Courier-BoldOblique", "n022024l.pfb", "courbi.ttf", gTrue},
+ {"Courier-Oblique", "n022023l.pfb", "couri.ttf", gTrue},
+ {"Helvetica", "n019003l.pfb", "arial.ttf", gTrue},
+ {"Helvetica-Bold", "n019004l.pfb", "arialbd.ttf", gTrue},
+ {"Helvetica-BoldOblique", "n019024l.pfb", "arialbi.ttf", gTrue},
+ {"Helvetica-Oblique", "n019023l.pfb", "ariali.ttf", gTrue},
// TODO: not sure if "symbol.ttf" is right
- {"Symbol", "s050000l.pfb", "symbol.ttf"},
- {"Times-Bold", "n021004l.pfb", "timesbd.ttf"},
- {"Times-BoldItalic", "n021024l.pfb", "timesbi.ttf"},
- {"Times-Italic", "n021023l.pfb", "timesi.ttf"},
- {"Times-Roman", "n021003l.pfb", "times.ttf"},
+ {"Symbol", "s050000l.pfb", "symbol.ttf", gTrue},
+ {"Times-Bold", "n021004l.pfb", "timesbd.ttf", gTrue},
+ {"Times-BoldItalic", "n021024l.pfb", "timesbi.ttf", gTrue},
+ {"Times-Italic", "n021023l.pfb", "timesi.ttf", gTrue},
+ {"Times-Roman", "n021003l.pfb", "times.ttf", gTrue},
// TODO: not sure if "wingding.ttf" is right
- {"ZapfDingbats", "d050000l.pfb", "wingding.ttf"},
+ {"ZapfDingbats", "d050000l.pfb", "wingding.ttf", gTrue},
// those seem to be frequently accessed by PDF files and I kind of guess
// which font file do the refer to
- {"Palatino", NULL, "pala.ttf"},
- {"Palatino-Roman", NULL, "pala.ttf"},
- {"Palatino-Bold", NULL, "palab.ttf"},
- {"Palatino-Italic", NULL, "palai.ttf"},
- {"Palatino,Italic", NULL, "palai.ttf"},
- {"Palatino-BoldItalic", NULL, "palabi.ttf"},
-
- {"ArialBlack", NULL, "arialbd.ttf"},
-
- {"ArialNarrow", NULL, "arialn.ttf"},
- {"ArialNarrow,Bold", NULL, "arialnb.ttf"},
- {"ArialNarrow,Italic", NULL, "arialni.ttf"},
- {"ArialNarrow,BoldItalic", NULL, "arialnbi.ttf"},
- {"ArialNarrow-Bold", NULL, "arialnb.ttf"},
- {"ArialNarrow-Italic", NULL, "arialni.ttf"},
- {"ArialNarrow-BoldItalic", NULL, "arialnbi.ttf"},
-
- {"HelveticaNarrow", NULL, "arialn.ttf"},
- {"HelveticaNarrow,Bold", NULL, "arialnb.ttf"},
- {"HelveticaNarrow,Italic", NULL, "arialni.ttf"},
- {"HelveticaNarrow,BoldItalic", NULL, "arialnbi.ttf"},
- {"HelveticaNarrow-Bold", NULL, "arialnb.ttf"},
- {"HelveticaNarrow-Italic", NULL, "arialni.ttf"},
- {"HelveticaNarrow-BoldItalic", NULL, "arialnbi.ttf"},
-
- {"BookAntiqua", NULL, "bkant.ttf"},
- {"BookAntiqua,Bold", NULL, "bkant.ttf"},
- {"BookAntiqua,Italic", NULL, "bkant.ttf"},
- {"BookAntiqua,BoldItalic", NULL, "bkant.ttf"},
- {"BookAntiqua-Bold", NULL, "bkant.ttf"},
- {"BookAntiqua-Italic", NULL, "bkant.ttf"},
- {"BookAntiqua-BoldItalic", NULL, "bkant.ttf"},
-
- {"Verdana", NULL, "verdana.ttf"},
- {"Verdana,Bold", NULL, "verdanab.ttf"},
- {"Verdana,Italic", NULL, "verdanai.ttf"},
- {"Verdana,BoldItalic", NULL, "verdanaz.ttf"},
- {"Verdana-Bold", NULL, "verdanab.ttf"},
- {"Verdana-Italic", NULL, "verdanai.ttf"},
- {"Verdana-BoldItalic", NULL, "verdanaz.ttf"},
-
- {"Tahoma", NULL, "tahoma.ttf"},
- {"Tahoma,Bold", NULL, "tahomabd.ttf"},
- {"Tahoma,Italic", NULL, "tahoma.ttf"},
- {"Tahoma,BoldItalic", NULL, "tahomabd.ttf"},
- {"Tahoma-Bold", NULL, "tahomabd.ttf"},
- {"Tahoma-Italic", NULL, "tahoma.ttf"},
- {"Tahoma-BoldItalic", NULL, "tahomabd.ttf"},
-
- {"CCRIKH+Verdana", NULL, "verdana.ttf"},
- {"CCRIKH+Verdana,Bold", NULL, "verdanab.ttf"},
- {"CCRIKH+Verdana,Italic", NULL, "verdanai.ttf"},
- {"CCRIKH+Verdana,BoldItalic", NULL, "verdanaz.ttf"},
- {"CCRIKH+Verdana-Bold", NULL, "verdanab.ttf"},
- {"CCRIKH+Verdana-Italic", NULL, "verdanai.ttf"},
- {"CCRIKH+Verdana-BoldItalic", NULL, "verdanaz.ttf"},
-
- {"Georgia", NULL, "georgia.ttf"},
- {"Georgia,Bold", NULL, "georgiab.ttf"},
- {"Georgia,Italic", NULL, "georgiai.ttf"},
- {"Georgia,BoldItalic", NULL, "georgiaz.ttf"},
- {"Georgia-Bold", NULL, "georgiab.ttf"},
- {"Georgia-Italic", NULL, "georgiai.ttf"},
- {"Georgia-BoldItalic", NULL, "georgiaz.ttf"},
+ {"Palatino", NULL, "pala.ttf", gTrue},
+ {"Palatino-Roman", NULL, "pala.ttf", gTrue},
+ {"Palatino-Bold", NULL, "palab.ttf", gTrue},
+ {"Palatino-Italic", NULL, "palai.ttf", gTrue},
+ {"Palatino,Italic", NULL, "palai.ttf", gTrue},
+ {"Palatino-BoldItalic", NULL, "palabi.ttf", gTrue},
+
+ {"ArialBlack", NULL, "arialbd.ttf", gTrue},
+
+ {"ArialNarrow", NULL, "arialn.ttf", gTrue},
+ {"ArialNarrow,Bold", NULL, "arialnb.ttf", gTrue},
+ {"ArialNarrow,Italic", NULL, "arialni.ttf", gTrue},
+ {"ArialNarrow,BoldItalic", NULL, "arialnbi.ttf", gTrue},
+ {"ArialNarrow-Bold", NULL, "arialnb.ttf", gTrue},
+ {"ArialNarrow-Italic", NULL, "arialni.ttf", gTrue},
+ {"ArialNarrow-BoldItalic", NULL, "arialnbi.ttf", gTrue},
+
+ {"HelveticaNarrow", NULL, "arialn.ttf", gTrue},
+ {"HelveticaNarrow,Bold", NULL, "arialnb.ttf", gTrue},
+ {"HelveticaNarrow,Italic", NULL, "arialni.ttf", gTrue},
+ {"HelveticaNarrow,BoldItalic", NULL, "arialnbi.ttf", gTrue},
+ {"HelveticaNarrow-Bold", NULL, "arialnb.ttf", gTrue},
+ {"HelveticaNarrow-Italic", NULL, "arialni.ttf", gTrue},
+ {"HelveticaNarrow-BoldItalic", NULL, "arialnbi.ttf", gTrue},
+
+ {"BookAntiqua", NULL, "bkant.ttf", gTrue},
+ {"BookAntiqua,Bold", NULL, "bkant.ttf", gTrue},
+ {"BookAntiqua,Italic", NULL, "bkant.ttf", gTrue},
+ {"BookAntiqua,BoldItalic", NULL, "bkant.ttf", gTrue},
+ {"BookAntiqua-Bold", NULL, "bkant.ttf", gTrue},
+ {"BookAntiqua-Italic", NULL, "bkant.ttf", gTrue},
+ {"BookAntiqua-BoldItalic", NULL, "bkant.ttf", gTrue},
+
+ {"Verdana", NULL, "verdana.ttf", gTrue},
+ {"Verdana,Bold", NULL, "verdanab.ttf", gTrue},
+ {"Verdana,Italic", NULL, "verdanai.ttf", gTrue},
+ {"Verdana,BoldItalic", NULL, "verdanaz.ttf", gTrue},
+ {"Verdana-Bold", NULL, "verdanab.ttf", gTrue},
+ {"Verdana-Italic", NULL, "verdanai.ttf", gTrue},
+ {"Verdana-BoldItalic", NULL, "verdanaz.ttf", gTrue},
+
+ {"Tahoma", NULL, "tahoma.ttf", gTrue},
+ {"Tahoma,Bold", NULL, "tahomabd.ttf", gTrue},
+ {"Tahoma,Italic", NULL, "tahoma.ttf", gTrue},
+ {"Tahoma,BoldItalic", NULL, "tahomabd.ttf", gTrue},
+ {"Tahoma-Bold", NULL, "tahomabd.ttf", gTrue},
+ {"Tahoma-Italic", NULL, "tahoma.ttf", gTrue},
+ {"Tahoma-BoldItalic", NULL, "tahomabd.ttf", gTrue},
+
+ {"CCRIKH+Verdana", NULL, "verdana.ttf", gTrue},
+ {"CCRIKH+Verdana,Bold", NULL, "verdanab.ttf", gTrue},
+ {"CCRIKH+Verdana,Italic", NULL, "verdanai.ttf", gTrue},
+ {"CCRIKH+Verdana,BoldItalic", NULL, "verdanaz.ttf", gTrue},
+ {"CCRIKH+Verdana-Bold", NULL, "verdanab.ttf", gTrue},
+ {"CCRIKH+Verdana-Italic", NULL, "verdanai.ttf", gTrue},
+ {"CCRIKH+Verdana-BoldItalic", NULL, "verdanaz.ttf", gTrue},
+
+ {"Georgia", NULL, "georgia.ttf", gTrue},
+ {"Georgia,Bold", NULL, "georgiab.ttf", gTrue},
+ {"Georgia,Italic", NULL, "georgiai.ttf", gTrue},
+ {"Georgia,BoldItalic", NULL, "georgiaz.ttf", gTrue},
+ {"Georgia-Bold", NULL, "georgiab.ttf", gTrue},
+ {"Georgia-Italic", NULL, "georgiai.ttf", gTrue},
+ {"Georgia-BoldItalic", NULL, "georgiaz.ttf", gTrue},
// fallback for Adobe CID fonts:
- {"MingLiU", NULL, "mingliu.ttc"},
- {"SimSun", NULL, "simsun.ttc"},
- {"MS-Mincho", NULL, "msmincho.ttc"},
- {"Batang", NULL, "batang.ttc"},
- {"ArialUnicode", NULL, "arialuni.ttf"},
+ {"MingLiU", NULL, "mingliu.ttf", gFalse},
+ {"SimSun", NULL, "simsun.ttf", gFalse},
+ {"MS-Mincho", NULL, "msmincho.ttf", gFalse},
+ {"Batang", NULL, "batang.ttf", gFalse},
+ {"ArialUnicode", NULL, "arialuni.ttf", gTrue},
{NULL}
};
@@ -382,6 +383,24 @@ SysFontInfo *SysFontList::makeWindowsFont(char *name, int fontNum,
new GooString(path), type, fontNum);
}
+static GooString* replaceSuffix(GooString *path,
+ const char* suffixA, const char* suffixB)
+{
+ int suffLenA = strlen(suffixA);
+ int suffLenB = strlen(suffixB);
+ int baseLenA = path->getLength() - suffLenA;
+ int baseLenB = path->getLength() - suffLenB;
+
+ if (!strcasecmp(path->getCString()+baseLenA, suffixA)) {
+ path->del(baseLenA,suffLenA)->append(suffixB);
+ } else if (!strcasecmp(path->getCString()+baseLenB, suffixB)) {
+ path->del(baseLenB,suffLenB)->append(suffixA);
+ }
+
+ return path;
+}
+
+
void GlobalParams::setupBaseFonts(char * dir)
{
const char *dataRoot = popplerDataDir ? popplerDataDir : POPPLER_DATADIR;
@@ -404,7 +423,8 @@ void GlobalParams::setupBaseFonts(char * dir)
if (dir) {
GooString *fontPath = appendToPath(new GooString(dir), displayFontTab[i].t1FileName);
- if (FileExists(fontPath->getCString())) {
+ if (FileExists(fontPath->getCString()) ||
+ FileExists(replaceSuffix(fontPath, ".pfb", ".pfa")->getCString())) {
addFontFile(fontName, fontPath);
continue;
}
@@ -413,14 +433,16 @@ void GlobalParams::setupBaseFonts(char * dir)
if (winFontDir[0] && displayFontTab[i].ttFileName) {
GooString *fontPath = appendToPath(new GooString(winFontDir), displayFontTab[i].ttFileName);
- if (FileExists(fontPath->getCString())) {
+ if (FileExists(fontPath->getCString()) ||
+ FileExists(replaceSuffix(fontPath, ".ttc", ".ttf")->getCString())) {
addFontFile(fontName, fontPath);
continue;
}
delete fontPath;
}
- error(errSyntaxError, -1, "No display font for '{0:s}'", fontName);
+ if (displayFontTab[i].warnIfMissing)
+ error(errSyntaxError, -1, "No display font for '{0:s}'", fontName);
}
if (winFontDir[0]) {
sysFonts->scanWindowsFonts(new GooString(winFontDir));
@@ -478,7 +500,9 @@ void GlobalParams::setupBaseFonts(char * dir)
}
}
-static const char *findSubstituteName(GfxFont *font, GooHash *substFiles, const char *origName)
+static const char *findSubstituteName(GfxFont *font, GooHash *fontFiles,
+ GooHash *substFiles,
+ const char *origName)
{
assert(origName);
if (!origName) return NULL;
@@ -504,20 +528,26 @@ static const char *findSubstituteName(GfxFont *font, GooHash *substFiles, const
delete name2;
if (font->isCIDFont()) {
GooString *collection = ((GfxCIDFont *)font)->getCollection();
+
+ const char* name3 = NULL;
if ( !collection->cmp("Adobe-CNS1") )
- return DEFAULT_CID_FONT_AC1_MSWIN;
+ name3 = DEFAULT_CID_FONT_AC1_MSWIN;
else if ( !collection->cmp("Adobe-GB1") )
- return DEFAULT_CID_FONT_AG1_MSWIN;
+ name3 = DEFAULT_CID_FONT_AG1_MSWIN;
else if ( !collection->cmp("Adobe-Japan1") )
- return DEFAULT_CID_FONT_AJ1_MSWIN;
+ name3 = DEFAULT_CID_FONT_AJ1_MSWIN;
else if ( !collection->cmp("Adobe-Japan2") )
- return DEFAULT_CID_FONT_AJ2_MSWIN;
+ name3 = DEFAULT_CID_FONT_AJ2_MSWIN;
else if ( !collection->cmp("Adobe-Korea1") )
- return DEFAULT_CID_FONT_AK1_MSWIN;
- else /* unknown or ad-Hoc collection name, like "Adobe-Identity" */
+ name3 = DEFAULT_CID_FONT_AK1_MSWIN;
+
+ if (name3 && fontFiles->lookup(name3))
+ return name3;
+
+ if (fontFiles->lookup(DEFAULT_CID_FONT_MSWIN))
return DEFAULT_CID_FONT_MSWIN;
- } else
- return DEFAULT_SUBSTITUTE_FONT;
+ }
+ return DEFAULT_SUBSTITUTE_FONT;
}
/* Windows implementation of external font matching code */
@@ -541,7 +571,9 @@ GooString *GlobalParams::findSystemFontFile(GfxFont *font,
*type = fi->type;
*fontNum = fi->fontNum;
} else {
- GooString *substFontName = new GooString(findSubstituteName(font, substFiles, fontName->getCString()));
+ GooString *substFontName = new GooString(findSubstituteName(font, fontFiles,
+ substFiles,
+ fontName->getCString()));
GooString *path2 = NULL;
error(errSyntaxError, -1, "Couldn't find a font for '{0:t}', subst is '{1:t}'", fontName, substFontName);
if ((path2 = (GooString *)fontFiles->lookup(substFontName))) {
More information about the poppler
mailing list