X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;ds=inline;f=lib%2Fpdf%2FGFXOutputDev.cc;h=5f397f1c4922c232cbea539196cfd017ed2af9a6;hb=2d8bff0d979c62244081e0e98333c46afeedd770;hp=deb6f0a6c3622395f66bde381b18578b9008620f;hpb=339d6e2778383e1eb7807e0cc16f2e93e402e877;p=swftools.git
diff --git a/lib/pdf/GFXOutputDev.cc b/lib/pdf/GFXOutputDev.cc
index deb6f0a..5f397f1 100644
--- a/lib/pdf/GFXOutputDev.cc
+++ b/lib/pdf/GFXOutputDev.cc
@@ -93,9 +93,6 @@ typedef struct _fontfile
static fontfile_t* global_fonts = 0;
static fontfile_t* global_fonts_next = 0;
-static fontfile_t* global_fontdirs = 0;
-static fontfile_t* global_fontdirs_next = 0;
-
static int fontnum = 0;
/* config */
@@ -395,17 +392,6 @@ char* fontconfig_searchForFont(char*name)
fprintf(fi, "
WINDOWSFONTDIR\n");
#endif
fprintf(fi, "~/.fonts\n");
-
- /* add external font dirs to fontconfig's config. Maybe fc will make more out
- of them than we did
- FIXME: we don't do that yet if there's a system config file
- */
- fontfile_t*fd = global_fontdirs;
- while(fd) {
- fprintf(fi, "%s\n", fd->filename);
- fd = fd->next;
- }
-
#ifdef WIN32
fprintf(fi, "WINDOWSTEMPDIR_FONTCONFIG_CACHE\n");
#endif
@@ -428,6 +414,14 @@ char* fontconfig_searchForFont(char*name)
config_use_fontconfig = 0;
return 0;
}
+
+ /* add external fonts to fontconfig's config, too. */
+ fontfile_t*fd = global_fonts;
+ while(fd) {
+ FcConfigAppFontAddFile(config, (FcChar8*)fd->filename);
+ fd = fd->next;
+ }
+
FcFontSet * set = FcConfigGetFonts(config, FcSetSystem);
msg(" FontConfig initialized. Found %d fonts", set?set->nfont:0);
if(!set || !set->nfont) {
@@ -538,7 +532,7 @@ DisplayFontParam *GFXGlobalParams::getDisplayFont(GString *fontName)
const char*bestfilename = 0;
#ifndef HAVE_FONTCONFIG
- /* if we don't have fontconfig, try a simple approach */
+ /* if we don't have fontconfig, try a simple filename-comparison approach */
fontfile_t*f = global_fonts;
while(f) {
if(strstr(f->filename, name)) {
@@ -1633,7 +1627,8 @@ void GFXOutputDev::processLink(Link *link, Catalog *catalog)
LinkDest *dest=NULL;
if (ha->getDest()==NULL)
dest=catalog->findDest(ha->getNamedDest());
- else dest=ha->getDest();
+ else
+ dest=ha->getDest()->copy();
if (dest){
if (dest->isPageRef()){
Ref pageref=dest->getPageRef();
@@ -1642,6 +1637,7 @@ void GFXOutputDev::processLink(Link *link, Catalog *catalog)
else page=dest->getPageNum();
sprintf(buf, "%d", page);
s = strdup(buf);
+ delete dest;
}
}
break;
@@ -2461,7 +2457,7 @@ void addGlobalFont(const char*filename)
}
f->len = len;
- msg(" Adding font \"%s\".", filename);
+ msg(" Adding font \"%s\".", filename);
if(global_fonts_next) {
global_fonts_next->next = f;
global_fonts_next = global_fonts_next->next;
@@ -2492,13 +2488,13 @@ void addGlobalLanguageDir(const char*dir)
void addGlobalFontDir(const char*dirname)
{
#ifdef HAVE_DIRENT_H
- msg(" Adding %s to font directories", dirname);
DIR*dir = opendir(dirname);
if(!dir) {
msg(" Couldn't open directory %s", dirname);
return;
}
struct dirent*ent;
+ int fonts = 0;
while(1) {
ent = readdir (dir);
if (!ent)
@@ -2522,22 +2518,14 @@ void addGlobalFontDir(const char*dirname)
strcat(fontname, dirseparator());
strcat(fontname, name);
addGlobalFont(fontname);
+ fonts++;
}
}
+ msg(" Added %s to font directories (%d fonts)", dirname, fonts);
closedir(dir);
#else
msg(" No dirent.h");
#endif
-
- fontfile_t* f = (fontfile_t*)malloc(sizeof(fontfile_t));
- memset(f, 0, sizeof(fontfile_t));
- f->filename = dirname;
- if(global_fontdirs_next) {
- global_fontdirs_next->next = f;
- global_fontdirs_next = global_fontdirs_next->next;
- } else {
- global_fontdirs_next = global_fontdirs = f;
- }
}
void GFXOutputDev::beginTransparencyGroup(GfxState *state, double *bbox,