+
+GBool InfoOutputDev::beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen)
+{
+ GfxFont*font = state->getFont();
+ if(!font)
+ return gTrue;
+ if(font->getType() != fontType3)
+ return gTrue;
+
+ char*id = getFontID(font);
+ currentfont = (FontInfo*)id2font->lookup(id);
+ if(!currentfont) {
+ currentfont = new FontInfo;
+ currentfont->font = font;
+ GString* idStr = new GString(id);
+ id2font->add(idStr, (void*)currentfont);
+ num_fonts++;
+ }
+ currentfont = currentfont;
+ free(id);
+
+ currentfont->grow(code+1);
+ if(!currentfont->glyphs[code]) {
+ currentglyph = currentfont->glyphs[code] = new GlyphInfo();
+ currentglyph->unicode = uLen?u[0]:0;
+ currentglyph->path = new SplashPath();
+ currentglyph->x1=0;
+ currentglyph->y1=0;
+ currentglyph->x2=dx;
+ currentglyph->y2=-dy;
+ return gFalse;
+ } else {
+ return gTrue;
+ }
+}
+
+void InfoOutputDev::type3D0(GfxState *state, double wx, double wy)
+{
+ currentglyph->x1=0;
+ currentglyph->y1=0;
+ currentglyph->x2=wx;
+ 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->x2=urx;
+ currentglyph->y2=-ury;
+}
+
+void InfoOutputDev::endType3Char(GfxState *state)
+{
+ double x1 = currentglyph->x1;
+ double y1 = currentglyph->y1;
+ double x2 = currentglyph->x2;
+ double y2 = currentglyph->y2;
+ currentglyph->path->moveTo(x1,y1);
+ currentglyph->path->lineTo(x2,y1);
+ currentglyph->path->lineTo(x2,y2);
+ currentglyph->path->lineTo(x1,y2);
+ currentglyph->path->close();
+}
+