X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpdf%2FGFXOutputDev.cc;h=d110976967e9a7b9ee9f122cf75e5e1ab5bd48fd;hb=657c2fcbce639c122b5c932a13c20eed259bcec8;hp=416bf0b4c0c5d6eabe6a20f569842d81fff8a250;hpb=e1ee7f27701a4d6dc8f4133b987a930e3d510a5c;p=swftools.git diff --git a/lib/pdf/GFXOutputDev.cc b/lib/pdf/GFXOutputDev.cc index 416bf0b..d110976 100644 --- a/lib/pdf/GFXOutputDev.cc +++ b/lib/pdf/GFXOutputDev.cc @@ -82,10 +82,14 @@ typedef struct _fontfile const char*filename; int len; // basename length int used; + struct _fontfile*next; } fontfile_t; // for pdfswf_addfont -static fontfile_t fonts[2048]; + +static fontfile_t* global_fonts = 0; +static fontfile_t* global_fonts_next = 0; + static int fontnum = 0; /* config */ @@ -331,13 +335,16 @@ DisplayFontParam *GFXGlobalParams::getDisplayFont(GString *fontName) int bestlen = 0x7fffffff; const char*bestfilename = 0; - for(t=0;tfilename, name)) { + if(f->len < bestlen) { + bestlen = f->len; + bestfilename = f->filename; } } + f = f->next; } if(bestfilename) { DisplayFontParam *dfp = new DisplayFontParam(new GString(fontName), displayFontT1); @@ -662,7 +669,7 @@ GBool GFXOutputDev::needNonText() } void GFXOutputDev::endPage() { - msg(" endPage"); + msg(" endPage (GfxOutputDev)"); if(outer_clip_box) { device->endclip(device); outer_clip_box = 0; @@ -2014,9 +2021,9 @@ static const char* dirseparator() void addGlobalFont(const char*filename) { - fontfile_t f; - memset(&f, 0, sizeof(fontfile_t)); - f.filename = filename; + fontfile_t* f = (fontfile_t*)malloc(sizeof(fontfile_t)); + memset(f, 0, sizeof(fontfile_t)); + f->filename = filename; int len = strlen(filename); char*r1 = strrchr(filename, '/'); char*r2 = strrchr(filename, '\\'); @@ -2025,12 +2032,14 @@ void addGlobalFont(const char*filename) if(r1) { len = strlen(r1+1); } - f.len = len; - if(fontnum < sizeof(fonts)/sizeof(fonts[0])) { - msg(" Adding font \"%s\".", filename); - fonts[fontnum++] = f; + f->len = len; + + msg(" Adding font \"%s\".", filename); + if(global_fonts_next) { + global_fonts_next->next = f; + global_fonts_next = global_fonts_next->next; } else { - msg(" Too many external fonts. Not adding font file \"%s\".", filename); + global_fonts_next = global_fonts = f; } }