poppler/GlobalParams.cc | 50 ++++++++++++++++++++++++++++++++++----------- poppler/GlobalParamsWin.cc | 4 +-- 2 files changed, 40 insertions(+), 14 deletions(-)
New commits: commit e9f634e789e52f4027f54165af0dea856e0dadac Author: sunderme <[email protected]> Date: Wed Dec 1 18:31:22 2021 +0000 allow local (relative to dll) fonts dir on windows diff --git a/poppler/GlobalParams.cc b/poppler/GlobalParams.cc index 63b679db..b6e5bd20 100644 --- a/poppler/GlobalParams.cc +++ b/poppler/GlobalParams.cc @@ -120,18 +120,14 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) } } -static const char *get_poppler_datadir(void) +static void get_poppler_localdir(char *retval, const char *suffix) { - static char retval[MAX_PATH]; - static int beenhere = 0; - unsigned char *p; - if (beenhere) - return retval; - - if (!GetModuleFileNameA(hmodule, (CHAR *)retval, sizeof(retval) - 20)) - return POPPLER_DATADIR; + if (!GetModuleFileNameA(hmodule, (CHAR *)retval, sizeof(retval) - 20)) { + strcpy(retval, POPPLER_DATADIR); + return; + } p = _mbsrchr((unsigned char *)retval, '\\'); *p = '\0'; @@ -140,9 +136,20 @@ static const char *get_poppler_datadir(void) if (stricmp((const char *)(p + 1), "bin") == 0) *p = '\0'; } - strcat(retval, "\\share\\poppler"); + strcat(retval, suffix); +} - beenhere = 1; +static const char *get_poppler_datadir(void) +{ + static char retval[MAX_PATH]; + static bool beenhere = false; + + if (beenhere) + return retval; + + get_poppler_localdir(retval, "\\share\\poppler"); + + beenhere = true; return retval; } @@ -150,6 +157,25 @@ static const char *get_poppler_datadir(void) # undef POPPLER_DATADIR # define POPPLER_DATADIR get_poppler_datadir() +static const char *get_poppler_fontsdir(void) +{ + static char retval[MAX_PATH]; + static bool beenhere = false; + + if (beenhere) + return retval; + + get_poppler_localdir(retval, "\\share\\fonts"); + + beenhere = true; + + return retval; +} +# undef POPPLER_FONTSDIR +# define POPPLER_FONTSDIR get_poppler_fontsdir() + +#else +# define POPPLER_FONTSDIR nullptr #endif //------------------------------------------------------------------------ @@ -836,7 +862,7 @@ GooString *GlobalParams::findFontFile(const GooString *fontName) { GooString *path = nullptr; - setupBaseFonts(nullptr); + setupBaseFonts(POPPLER_FONTSDIR); globalParamsLocker(); const auto fontFile = fontFiles.find(fontName->toStr()); if (fontFile != fontFiles.end()) { diff --git a/poppler/GlobalParamsWin.cc b/poppler/GlobalParamsWin.cc index 13e98b25..8bfc98bb 100644 --- a/poppler/GlobalParamsWin.cc +++ b/poppler/GlobalParamsWin.cc @@ -382,7 +382,7 @@ void GlobalParams::setupBaseFonts(const char *dir) GooString *fontName = new GooString(displayFontTab[i].name); - if (dir) { + if (dir && displayFontTab[i].t1FileName) { GooString *fontPath = appendToPath(new GooString(dir), displayFontTab[i].t1FileName); if (FileExists(fontPath->c_str()) || FileExists(replaceSuffix(fontPath, ".pfb", ".pfa")->c_str())) { addFontFile(fontName, fontPath); @@ -504,7 +504,7 @@ GooString *GlobalParams::findSystemFontFile(const GfxFont *font, SysFontType *ty if (!fontName) return nullptr; std::unique_lock<std::recursive_mutex> locker(mutex); - setupBaseFonts(nullptr); + setupBaseFonts(POPPLER_FONTSDIR); // TODO: base14Name should be changed? // In the system using FontConfig, findSystemFontFile() uses
