From e1ee7f27701a4d6dc8f4133b987a930e3d510a5c Mon Sep 17 00:00:00 2001 From: kramm Date: Wed, 12 Mar 2008 19:09:51 +0000 Subject: [PATCH] choose external fonts based on the shortest filename --- lib/pdf/GFXOutputDev.cc | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/pdf/GFXOutputDev.cc b/lib/pdf/GFXOutputDev.cc index 4d56590..416bf0b 100644 --- a/lib/pdf/GFXOutputDev.cc +++ b/lib/pdf/GFXOutputDev.cc @@ -80,6 +80,7 @@ typedef struct _fontfile { const char*filename; + int len; // basename length int used; } fontfile_t; @@ -327,12 +328,21 @@ DisplayFontParam *GFXGlobalParams::getDisplayFont(GString *fontName) return dfp; } } + + int bestlen = 0x7fffffff; + const char*bestfilename = 0; for(t=0;tt1.fileName = new GString(fonts[t].filename); - return dfp; - } + if(fonts[t].len < bestlen) { + bestlen = fonts[t].len; + bestfilename = fonts[t].filename; + } + } + } + if(bestfilename) { + DisplayFontParam *dfp = new DisplayFontParam(new GString(fontName), displayFontT1); + dfp->t1.fileName = new GString(bestfilename); + return dfp; } return GlobalParams::getDisplayFont(fontName); } @@ -2007,6 +2017,15 @@ void addGlobalFont(const char*filename) fontfile_t f; memset(&f, 0, sizeof(fontfile_t)); f.filename = filename; + int len = strlen(filename); + char*r1 = strrchr(filename, '/'); + char*r2 = strrchr(filename, '\\'); + if(r2>r1) + r1 = r2; + if(r1) { + len = strlen(r1+1); + } + f.len = len; if(fontnum < sizeof(fonts)/sizeof(fonts[0])) { msg(" Adding font \"%s\".", filename); fonts[fontnum++] = f; -- 1.7.10.4