+#include "Object.h"
#include "SplashTypes.h"
#include "SplashOutputDev.h"
#include "SplashPath.h"
+#include "SplashFontFile.h"
#include "InfoOutputDev.h"
#include "GfxState.h"
#include "../log.h"
num_links = 0;
num_images = 0;
num_fonts = 0;
+ currentfont = 0;
+ currentglyph = 0;
id2font = new GHash(1);
SplashColor white = {255,255,255};
splash = new SplashOutputDev(splashModeRGB8,320,0,white,0,0);
}
id2font->killIter(&i);
- delete id2font;
- delete splash;
+ delete id2font;id2font=0;
+ delete splash;splash=0;
}
void FontInfo::grow(int size)
{
this->seen = 0;
this->num_glyphs = 0;
this->glyphs = 0;
+ this->splash_font = 0;
}
FontInfo::~FontInfo()
{
glyphs[t]=0;
}
}
+ free(glyphs);glyphs=0;
}
GBool InfoOutputDev::upsideDown() {return gTrue;}
GBool InfoOutputDev::useDrawChar() {return gTrue;}
this->y2 = (int)y2;
msg("<verbose> Generating info structure for page %d", pageNum);
}
+void InfoOutputDev::endPage()
+{
+}
void InfoOutputDev::drawLink(Link *link, Catalog *catalog)
{
num_links++;
void InfoOutputDev::updateFont(GfxState *state)
{
GfxFont*font = state->getFont();
- if(!font)
+ if(!font) {
+ currentfont = 0;
return;
+ }
if(font->getType() == fontType3) {
+ currentfont = 0;
return;
}
char*id = getFontID(font);
- FontInfo*info = (FontInfo*)id2font->lookup(id);
- if(info) {
- /* font already known */
- free(id);
- currentfont = info;
- return;
- }
+ if(currentfont)
+ currentfont->splash_font = 0;
- info = new FontInfo;
- info->font = font;
- info->max_size = 0;
+ currentfont = (FontInfo*)id2font->lookup(id);
+ if(!currentfont) {
+ currentfont = new FontInfo;
+ currentfont->font = font;
+ currentfont->max_size = 0;
+ GString* idStr = new GString(id);
+ id2font->add(idStr, (void*)currentfont);
+ num_fonts++;
+ }
state->setCTM(1.0,0,0,1.0,0,0);
splash->updateCTM(state, 0,0,0,0,0,0);
- state->setTextMat(1.0,0,0,-1.0,0,0);
+ state->setTextMat(1.0,0,0,1.0,0,0);
state->setFont(font, 1024.0);
splash->doUpdateFont(state);
- info->splash_font = splash->getCurrentFont();
-
- if(!info->splash_font) {
- delete info;
- return;
- }
-
- GString* idStr = new GString(id);
- id2font->add(idStr, (void*)info);
- num_fonts++;
- currentfont = info;
+ currentfont->splash_font = splash->getCurrentFont();
free(id);
}
FontInfo* InfoOutputDev::getFont(char*id)
double lenx = sqrt(m11*m11 + m12*m12);
double leny = sqrt(m21*m21 + m22*m22);
double len = lenx>leny?lenx:leny;
+ if(!currentfont || !currentfont->splash_font) {
+ return; //error
+ }
if(currentfont && currentfont->max_size < len) {
currentfont->max_size = len;
}
currentglyph->x1=0;
currentglyph->y1=0;
currentglyph->x2=dx;
- currentglyph->y2=-dy;
+ currentglyph->y2=dy;
return gFalse;
} else {
return gTrue;
currentglyph->x1=0;
currentglyph->y1=0;
currentglyph->x2=wx;
- currentglyph->y2=-wy;
+ currentglyph->y2=wy;
}
void InfoOutputDev::type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury)
{
currentglyph->x1=llx;
- currentglyph->y1=-lly;
+ currentglyph->y1=lly;
currentglyph->x2=urx;
- currentglyph->y2=-ury;
+ currentglyph->y2=ury;
}
void InfoOutputDev::endType3Char(GfxState *state)