CIDFonts: look for external replacement.
[swftools.git] / pdf2swf / SWFOutputDev.cc
index 17e3788..f0533fa 100644 (file)
@@ -48,6 +48,10 @@ extern "C" {
 #include "ttf2pt1.h"
 }
 
+#define logf logarithmf // logf is also used by ../lib/log.h
+#include <math.h>
+#undef logf
+
 static PDFDoc*doc = 0;
 static char* swffilename = 0;
 int numpages;
@@ -574,6 +578,7 @@ void SWFOutputDev::beginString(GfxState *state, GString *s)
 }
 
 int charcounter = 0;
+int ciderror = 0;
 void SWFOutputDev::drawChar(GfxState *state, double x, double y,
                        double dx, double dy,
                        double originX, double originY,
@@ -586,7 +591,9 @@ void SWFOutputDev::drawChar(GfxState *state, double x, double y,
        GfxFont*font = state->getFont();
        Gfx8BitFont*font8;
        if(font->isCIDFont()) {
-          logf("<error> CID Font");
+          if(!ciderror)
+           logf("<error> Not drawing CID Font characters!");
+          ciderror++;
           return;
        }
        if(font->getType() == fontType3) {
@@ -818,6 +825,11 @@ int SWFOutputDev::searchT1Font(char*name)
     int i;
     int mapid=-1;
     char*filename=0;
+    
+    char*name2 = 0;
+    if(name) name2 = strchr(name,'+');
+    if(name2) name2++;
+
     for(i=0;i<sizeof(pdf2t1map)/sizeof(mapping);i++) 
     {
        if(!strcmp(name, pdf2t1map[i].pdffont))
@@ -846,15 +858,20 @@ int SWFOutputDev::searchT1Font(char*name)
                logf("<verbose> Loading extra font %s from %s\n", FIXNULL(fontname), 
                                                                  FIXNULL(T1_GetFontFileName(i)));
            }
-           if(fontname && !strcmp(name, fontname)) {
-               logf("<notice> Extra font %s is being used.\n", fontname);
-               return i;
+
+           if(fontname) {
+               if((!strcmp(name, fontname)) || 
+                  (name2 && !strcmp(name2, fontname)))
+                  {
+                   logf("<notice> Extra font %s is being used.\n", fontname);
+                   return i;
+               }
            }
            fontname = T1_GetFontFileName(i);
            if(strrchr(fontname,'/'))
                    fontname = strrchr(fontname,'/')+1;
  
-           if(strstr(fontname, name)) {
+           if(strstr(fontname, name) || (name2 && strstr(fontname,name2))) {
                logf("<notice> Extra font %s is being used.\n", fontname);
                return i;
            }
@@ -1181,8 +1198,12 @@ void SWFOutputDev::updateFont(GfxState *state)
        }
     }
     else {
-       showFontError(gfxFont,0);
-       fontname = substituteFont(gfxFont, fontname);
+       int newt1id = searchT1Font(fontname);
+       if(newt1id<0) {
+           showFontError(gfxFont,0);
+           fontname = substituteFont(gfxFont, fontname);
+       } else
+           this->t1id = newt1id;
     }
   } else {
     if(fontname) {
@@ -1729,6 +1750,11 @@ int pdfswf_numpages()
   return doc->getNumPages();
 }
 
+void pdfswf_insertstop()
+{
+    insertstoptag = 1;
+}
+
 int closed=0;
 void pdfswf_close()
 {