X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpdf%2FInfoOutputDev.cc;h=bd1a0b587993b3788dfbc56dcdd8c5e0f9257bed;hb=a1f5318b0789743bbc6d8e93d408379115c67534;hp=08a9cc30089c7eb45ec51f4df73ebe4686e82625;hpb=879464ce804e0c877db5f4b47fdbfee812f99731;p=swftools.git diff --git a/lib/pdf/InfoOutputDev.cc b/lib/pdf/InfoOutputDev.cc index 08a9cc3..bd1a0b5 100644 --- a/lib/pdf/InfoOutputDev.cc +++ b/lib/pdf/InfoOutputDev.cc @@ -78,6 +78,8 @@ FontInfo::FontInfo(char*id) this->lasty = 0; this->gfxfont = 0; this->space_char = -1; + this->ascender = 0; + this->descender = 0; } FontInfo::~FontInfo() { @@ -129,13 +131,18 @@ static int findSpace(gfxfont_t*font) static int addSpace(gfxfont_t*font) { + /* first, make sure the new space char is the only char that'll use unicode 32 */ + int t; + for(t=0;tnum_glyphs;t++) { + if(font->glyphs[t].unicode==32) + font->glyphs[t].unicode=0; + } font->num_glyphs++; font->glyphs = (gfxglyph_t*)realloc(font->glyphs, sizeof(gfxglyph_t)*font->num_glyphs); gfxglyph_t*g = &font->glyphs[font->num_glyphs-1]; memset(g, 0, sizeof(*g)); g->unicode = 32; - //g->advance = font->ascent; - g->advance = fabs(font->ascent - font->descent)*2 / 3; + g->advance = fabs(font->ascent + font->descent)*2 / 3; if(font->max_unicode > 32) font->unicode2glyph[32] = font->num_glyphs-1; #if 0 @@ -169,8 +176,6 @@ static gfxfont_t* createGfxFont(FontInfo*src) gfxglyph_t*glyph = &font->glyphs[font->num_glyphs]; src->glyphs[t]->glyphid = font->num_glyphs; glyph->unicode = src->glyphs[t]->unicode; - if(glyph->unicode >= font->max_unicode) - font->max_unicode = glyph->unicode+1; gfxdrawer_t drawer; gfxdrawer_target_gfxline(&drawer); int s; @@ -207,7 +212,6 @@ static gfxfont_t* createGfxFont(FontInfo*src) if(src->glyphs[t]->advance>0) { glyph->advance = src->glyphs[t]->advance; } else { - msg(" Approximating advance value for glyph %d", t); glyph->advance = xmax*scale; } if(config_bigchar) { @@ -221,8 +225,6 @@ static gfxfont_t* createGfxFont(FontInfo*src) } } - gfxfont_fix_unicode(font); - int kerning_size = 0; for(t=0;tnum_glyphs;t++) { dict_t* d = src->kerning[t]; @@ -282,8 +284,9 @@ gfxfont_t* FontInfo::getGfxFont() this->gfxfont->glyphs[this->space_char].unicode); } else if(config_addspace) { this->space_char = addSpace(this->gfxfont); - msg(" Appending space char to font %s, position %d", this->gfxfont->id, this->space_char); + msg(" Appending space char to font %s, position %d, width %f", this->gfxfont->id, this->space_char, this->gfxfont->glyphs[this->space_char].advance); } + gfxfont_fix_unicode(this->gfxfont); } return this->gfxfont; } @@ -499,6 +502,7 @@ GBool InfoOutputDev::beginType3Char(GfxState *state, double x, double y, double currentglyph->y1=0; currentglyph->x2=dx; currentglyph->y2=dy; + currentglyph->advance=dx; return gFalse; } else { return gTrue; @@ -515,6 +519,11 @@ void InfoOutputDev::type3D0(GfxState *state, double wx, double wy) void InfoOutputDev::type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury) { + if(-lly>currentfont->descender) + currentfont->descender = -lly; + if(ury>currentfont->ascender) + currentfont->ascender = ury; + currentglyph->x1=llx; currentglyph->y1=lly; currentglyph->x2=urx;