X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fpdf%2Fxpdf-changes.patch;h=dcd35cba575f30694c6adc0e408db90b908527dc;hp=44c646f5861c88029b1c86c96098b0a27b4d87f1;hb=22511439a7bf3da5e557c146b1c80be3130913fc;hpb=2929938b89c559dfe5e07e80459409d3ecc333a0 diff --git a/lib/pdf/xpdf-changes.patch b/lib/pdf/xpdf-changes.patch index 44c646f..dcd35cb 100644 --- a/lib/pdf/xpdf-changes.patch +++ b/lib/pdf/xpdf-changes.patch @@ -1,716 +1,587 @@ -Index: FoFiType1C.cc -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/FoFiType1C.cc,v -retrieving revision 1.3 -retrieving revision 1.4 -diff -u -r1.3 -r1.4 ---- FoFiType1C.cc 3 Dec 2005 10:11:33 -0000 1.3 -+++ FoFiType1C.cc 3 Dec 2005 10:30:41 -0000 1.4 -@@ -231,8 +231,11 @@ - (*outputFunc)(outputStream, - "0 1 255 {1 index exch /.notdef put} for\n", 40); - enc = newEncoding ? newEncoding : encoding; -+ if(!enc) { -+ fprintf(stderr, "convertToType1: Warning: No Encoding\n"); -+ } - for (i = 0; i < 256; ++i) { -- if (enc[i]) { -+ if (enc && enc[i]) { - sprintf(buf, "dup %d /%s put\n", i, enc[i]); - (*outputFunc)(outputStream, buf, strlen(buf)); - } -Index: Gfx.cc -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/Gfx.cc,v -retrieving revision 1.9 -retrieving revision 1.10 -diff -u -r1.9 -r1.10 ---- Gfx.cc 3 Dec 2005 10:11:33 -0000 1.9 -+++ Gfx.cc 3 Dec 2005 10:30:41 -0000 1.10 -@@ -439,7 +439,9 @@ - fontChanged = gFalse; - clip = clipNone; - ignoreUndef = 0; -- out->startPage(pageNum, state); -+ if(cropBox) { -+ out->startPage(pageNum, state, cropBox->x1,cropBox->y1,cropBox->x2,cropBox->y2); -+ } - out->setDefaultCTM(state->getCTM()); - out->updateAll(state); - for (i = 0; i < 6; ++i) { -@@ -450,7 +450,8 @@ - abortCheckCbkData = abortCheckCbkDataA; - - // set crop box -- if (cropBox) { -+#ifdef XPDFEXE -+ if (cropBox) { - state->moveTo(cropBox->x1, cropBox->y1); - state->lineTo(cropBox->x2, cropBox->y1); - state->lineTo(cropBox->x2, cropBox->y2); -@@ -459,7 +460,8 @@ - state->clip(); - out->clip(state); - state->clearPath(); -- } -+ } -+#endif - } - - Gfx::Gfx(XRef *xrefA, OutputDev *outA, Dict *resDict, -Index: GfxFont.h -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/GfxFont.h,v -retrieving revision 1.6 -retrieving revision 1.7 -diff -u -r1.6 -r1.7 ---- GfxFont.h 3 Dec 2005 10:11:33 -0000 1.6 -+++ GfxFont.h 3 Dec 2005 10:30:41 -0000 1.7 -@@ -207,7 +207,7 @@ - CharCodeToUnicode *getToUnicode(); - - // Return the character name associated with . -- char *getCharName(int code) { return enc[code]; } -+ char *getCharName(int code) { return code>=256?0:enc[code]; } - - // Returns true if the PDF font specified an encoding. - GBool getHasEncoding() { return hasEncoding; } -Index: GfxState.cc -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/GfxState.cc,v -retrieving revision 1.10 -retrieving revision 1.12 -diff -u -r1.10 -r1.12 ---- GfxState.cc 3 Dec 2005 10:11:33 -0000 1.10 -+++ GfxState.cc 3 Dec 2005 12:41:32 -0000 1.12 -@@ -21,6 +21,7 @@ - #include "Array.h" - #include "Page.h" - #include "GfxState.h" -+#include "cmyk.h" - - //------------------------------------------------------------------------ - -@@ -468,6 +469,18 @@ - - 0.11 * color->c[2] + 0.5)); - } - -+/*void GfxDeviceCMYKColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { -+ unsigned char r,g,b; -+ float c = color->c[0]; -+ float m = color->c[1]; -+ float y = color->c[2]; -+ float k = color->c[3]; -+ convert_cmyk2rgb(c,m,y,k, &r,&g,&b); -+ rgb->r = r/255.0; -+ rgb->g = g/255.0; -+ rgb->b = b/255.0; -+}*/ -+ - void GfxDeviceCMYKColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - double c, m, y, k, c1, m1, y1, k1, r, g, b, x; - -@@ -3099,6 +3112,7 @@ - GfxIndexedColorSpace *indexedCS; - GfxSeparationColorSpace *sepCS; - int maxPixel, indexHigh; -+ int maxPixelForAlloc; - Guchar *lookup2; - Function *sepFunc; - Object obj; -@@ -3111,6 +3125,7 @@ - // bits per component and color space - bits = bitsA; - maxPixel = (1 << bits) - 1; -+ maxPixelForAlloc = (1 << (bits>8?bits:8)); - colorSpace = colorSpaceA; - - // get decode map -@@ -3163,7 +3178,7 @@ - lookup2 = indexedCS->getLookup(); - colorSpace2->getDefaultRanges(x, y, indexHigh); - for (k = 0; k < nComps2; ++k) { -- lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1, -+ lookup[k] = (GfxColorComp *)gmallocn(maxPixelForAlloc + 1, - sizeof(GfxColorComp)); - for (i = 0; i <= maxPixel; ++i) { - j = (int)(decodeLow[0] + (i * decodeRange[0]) / maxPixel + 0.5); -@@ -3182,7 +3197,7 @@ - nComps2 = colorSpace2->getNComps(); - sepFunc = sepCS->getFunc(); - for (k = 0; k < nComps2; ++k) { -- lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1, -+ lookup[k] = (GfxColorComp *)gmallocn(maxPixelForAlloc + 1, - sizeof(GfxColorComp)); - for (i = 0; i <= maxPixel; ++i) { - x[0] = decodeLow[0] + (i * decodeRange[0]) / maxPixel; -@@ -3192,7 +3207,7 @@ - } - } else { - for (k = 0; k < nComps; ++k) { -- lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1, -+ lookup[k] = (GfxColorComp *)gmallocn(maxPixelForAlloc + 1, - sizeof(GfxColorComp)); - for (i = 0; i <= maxPixel; ++i) { - lookup[k][i] = dblToCol(decodeLow[k] + -Index: GlobalParams.cc -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/GlobalParams.cc,v -retrieving revision 1.4 -retrieving revision 1.7 -diff -u -r1.4 -r1.7 ---- GlobalParams.cc 3 Dec 2005 10:11:33 -0000 1.4 -+++ GlobalParams.cc 18 Dec 2005 08:31:22 -0000 1.7 -@@ -498,6 +498,29 @@ - char buf[512]; - FILE *f2; - -+ /* extract path */ -+ if(fileName) { -+ char* cfgFileName = fileName->getCString(); -+ char* pos1 = strrchr(cfgFileName, '/'); -+ char* pos2 = strrchr(cfgFileName, '\\'); -+ char* p = pos1>pos2?pos1:pos2; -+ int pos = p ? p-cfgFileName : -1; -+ GString*path = new GString(new GString(cfgFileName), 0, (pos < 0 ? strlen(cfgFileName): pos)); -+ if(pos1>=0) -+ path->append('/'); -+ else if(pos2>=0) -+ path->append('\\'); -+ else -+#ifdef WIN32 -+ path->append('\\'); -+#else -+ path->append('/'); -+#endif -+ this->path = path; -+ } else { -+ this->path = new GString(); -+ } -+ - line = 1; - while (getLine(buf, sizeof(buf) - 1, f)) { - -@@ -659,6 +682,32 @@ - } - } - -+static GString* qualify_filename(GString*path, GString*filename) -+{ -+ GString*fullpath = 0; -+ char*prefix = "/usr/local/share/xpdf/"; -+ -+ if (filename->getChar(0) != '\\' && filename->getChar(0) != '/') { -+ /* relative path */ -+ fullpath = path->copy(); -+ fullpath->append(filename); -+ } else if (!strncmp(filename->getCString(), prefix, strlen(prefix))) { -+ /* xpdf default path */ -+ char*s = strchr(filename->getCString()+strlen(prefix), '/'); -+ if(s) { -+ fullpath = path->copy(); -+ fullpath->append(s+1); -+ } else { -+ fullpath = filename->copy(); -+ } -+ } else { -+ /* absolute path */ -+ fullpath = filename->copy(); -+ } -+ //printf("%s -%s-> %s\n", filename->getCString(), path->getCString(), fullpath->getCString()); -+ return fullpath; -+} -+ - void GlobalParams::parseNameToUnicode(GList *tokens, GString *fileName, - int line) { - GString *name; -@@ -673,7 +722,7 @@ - fileName->getCString(), line); - return; - } -- name = (GString *)tokens->get(1); -+ name = qualify_filename(this->path, (GString *)tokens->get(1)); - if (!(f = fopen(name->getCString(), "r"))) { - error(-1, "Couldn't open 'nameToUnicode' file '%s'", - name->getCString()); -@@ -705,10 +754,12 @@ - } - collection = (GString *)tokens->get(1); - name = (GString *)tokens->get(2); -+ - if ((old = (GString *)cidToUnicodes->remove(collection))) { - delete old; - } -- cidToUnicodes->add(collection->copy(), name->copy()); -+ -+ cidToUnicodes->add(collection->copy(), qualify_filename(this->path, name)); - } - - void GlobalParams::parseUnicodeToUnicode(GList *tokens, GString *fileName, -@@ -725,7 +776,8 @@ - if ((old = (GString *)unicodeToUnicodes->remove(font))) { - delete old; - } -- unicodeToUnicodes->add(font->copy(), file->copy()); -+ -+ unicodeToUnicodes->add(font->copy(), qualify_filename(this->path, file)); - } - - void GlobalParams::parseUnicodeMap(GList *tokens, GString *fileName, -@@ -742,7 +794,8 @@ - if ((old = (GString *)unicodeMaps->remove(encodingName))) { - delete old; - } -- unicodeMaps->add(encodingName->copy(), name->copy()); -+ -+ unicodeMaps->add(encodingName->copy(), qualify_filename(this->path, name)); - } - - void GlobalParams::parseCMapDir(GList *tokens, GString *fileName, int line) { -@@ -760,23 +813,30 @@ - list = new GList(); - cMapDirs->add(collection->copy(), list); - } -- list->append(dir->copy()); -+ -+ list->append(qualify_filename(this->path, dir)); - } - - void GlobalParams::parseToUnicodeDir(GList *tokens, GString *fileName, - int line) { -+ GString *dir; -+ - if (tokens->getLength() != 2) { - error(-1, "Bad 'toUnicodeDir' config file command (%s:%d)", - fileName->getCString(), line); - return; - } -- toUnicodeDirs->append(((GString *)tokens->get(1))->copy()); -+ -+ dir = (GString *)tokens->get(1); -+ -+ toUnicodeDirs->append(qualify_filename(this->path, dir)); - } - - void GlobalParams::parseDisplayFont(GList *tokens, GHash *fontHash, - DisplayFontParamKind kind, - GString *fileName, int line) { - DisplayFontParam *param, *old; -+ GString *file; - - if (tokens->getLength() < 2) { - goto err1; -@@ -788,13 +848,15 @@ - if (tokens->getLength() != 3) { - goto err2; - } -- param->t1.fileName = ((GString *)tokens->get(2))->copy(); -+ file = (GString *)tokens->get(2); -+ param->t1.fileName = qualify_filename(this->path, file); - break; - case displayFontTT: - if (tokens->getLength() != 3) { - goto err2; - } -- param->tt.fileName = ((GString *)tokens->get(2))->copy(); -+ file = (GString *)tokens->get(2); -+ param->tt.fileName = qualify_filename(this->path, file); - break; - } - -Index: Lexer.cc -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/Lexer.cc,v -retrieving revision 1.4 -retrieving revision 1.5 -diff -u -r1.4 -r1.5 ---- Lexer.cc 3 Dec 2005 10:11:33 -0000 1.4 -+++ Lexer.cc 14 Mar 2006 12:43:23 -0000 1.5 -@@ -74,6 +74,7 @@ - curStr.streamReset(); - } - } -+static int illegalChars = 0; - - Lexer::~Lexer() { - if (!curStr.isNone()) { -@@ -83,6 +84,9 @@ - if (freeArray) { - delete streams; - } -+ if(illegalChars) -+ error(0, "Illegal characters in hex string (%d)", illegalChars); -+ illegalChars = 0; - } - - int Lexer::getChar() { -@@ -330,7 +334,8 @@ - } else if (c2 >= 'a' && c2 <= 'f') { - c += c2 - 'a' + 10; - } else { -- error(getPos(), "Illegal digit in hex char in name"); -+ illegalChars++; -+ //error(getPos(), "Illegal digit in hex char in name"); - } - } - notEscChar: -@@ -384,8 +389,10 @@ - c2 += c - 'A' + 10; - else if (c >= 'a' && c <= 'f') - c2 += c - 'a' + 10; -- else -- error(getPos(), "Illegal character <%02x> in hex string", c); -+ else { -+ illegalChars++; -+ //error(getPos(), "Illegal character <%02x> in hex string", c); -+ } - if (++m == 2) { - if (n == tokBufSize) { - if (!s) -@@ -421,7 +428,8 @@ - tokBuf[2] = '\0'; - obj->initCmd(tokBuf); - } else { -- error(getPos(), "Illegal character '>'"); -+ illegalChars++; -+ //error(getPos(), "Illegal character '>'"); - obj->initError(); - } - break; -@@ -430,7 +438,8 @@ - case ')': - case '{': - case '}': -- error(getPos(), "Illegal character '%c'", c); -+ //error(getPos(), "Illegal character '%c'", c); -+ illegalChars++; - obj->initError(); - break; - -@@ -459,7 +468,6 @@ - } - break; - } -- - return obj; - } - -Index: Link.cc -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/Link.cc,v -retrieving revision 1.5 -retrieving revision 1.6 -diff -u -r1.5 -r1.6 ---- Link.cc 3 Dec 2005 10:11:33 -0000 1.5 -+++ Link.cc 26 Mar 2006 08:26:59 -0000 1.6 -@@ -430,10 +430,9 @@ - delete dest; - dest = NULL; - } -- - // error - } else { -- error(-1, "Illegal annotation destination"); -+ error(-1, "Illegal annotation destination %d", destObj->getType()); - } - } - -@@ -468,10 +467,9 @@ - delete dest; - dest = NULL; - } -- - // error - } else { -- error(-1, "Illegal annotation destination"); -+ error(-1, "Illegal annotation destination %d", destObj->getType()); - } - } - -Index: OutputDev.h -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/OutputDev.h,v -retrieving revision 1.7 -retrieving revision 1.9 -diff -u -r1.7 -r1.9 ---- OutputDev.h 3 Dec 2005 10:11:33 -0000 1.7 -+++ OutputDev.h 3 Dec 2005 10:31:47 -0000 1.9 -@@ -74,7 +74,7 @@ - virtual void setDefaultCTM(double *ctm); - - // Start a page. -- virtual void startPage(int pageNum, GfxState *state) {} -+ virtual void startPage(int pageNum, GfxState *state, double x1,double y1,double x2,double y2) {} - - // End a page. - virtual void endPage() {} -Index: Page.cc -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/Page.cc,v -retrieving revision 1.5 -retrieving revision 1.6 -diff -u -r1.5 -r1.6 ---- Page.cc 3 Dec 2005 10:11:33 -0000 1.5 -+++ Page.cc 3 Dec 2005 10:30:41 -0000 1.6 -@@ -66,6 +66,19 @@ - cropBox = mediaBox; - } - -+ /* if the crop box is larger than the media box, cut it down to -+ media box size */ -+ if(haveCropBox && -+ mediaBox.x1 <= cropBox.x2 && -+ mediaBox.y1 <= cropBox.y2 && -+ cropBox.x1 <= mediaBox.x2 && -+ cropBox.y1 <= mediaBox.y2) { -+ if(mediaBox.x1 >= cropBox.x1) cropBox.x1 = mediaBox.x1; -+ if(mediaBox.y1 >= cropBox.y1) cropBox.y1 = mediaBox.y1; -+ if(mediaBox.x2 <= cropBox.x2) cropBox.x2 = mediaBox.x2; -+ if(mediaBox.y2 <= cropBox.y2) cropBox.y2 = mediaBox.y2; -+ } -+ - // other boxes - bleedBox = cropBox; - readBox(dict, "BleedBox", &bleedBox); -Index: Stream.cc -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/Stream.cc,v -retrieving revision 1.7 -retrieving revision 1.8 -diff -u -r1.7 -r1.8 ---- Stream.cc 3 Dec 2005 10:11:33 -0000 1.7 -+++ Stream.cc 3 Dec 2005 10:30:41 -0000 1.8 -@@ -17,6 +17,8 @@ - #include - #ifndef WIN32 - #include -+#else -+extern "C" int unlink(char *filename); - #endif - #include - #include -Index: config.h -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/config.h,v -retrieving revision 1.5 -retrieving revision 1.6 -diff -u -r1.5 -r1.6 ---- config.h 3 Dec 2005 10:11:33 -0000 1.5 -+++ config.h 3 Dec 2005 10:30:41 -0000 1.6 -@@ -53,18 +53,18 @@ - - // user config file name, relative to the user's home directory - #if defined(VMS) || (defined(WIN32) && !defined(__CYGWIN32__)) --#define xpdfUserConfigFile "xpdfrc" -+#define xpdfUserConfigFile "pdf2swf.conf" - #else --#define xpdfUserConfigFile ".xpdfrc" -+#define xpdfUserConfigFile ".pdf2swf.conf" - #endif - - // system config file name (set via the configure script) --#ifdef SYSTEM_XPDFRC --#define xpdfSysConfigFile SYSTEM_XPDFRC -+#ifndef WIN32 -+#define xpdfSysConfigFile "/etc/pdf2swf.conf" - #else - // under Windows, we get the directory with the executable and then - // append this file name --#define xpdfSysConfigFile "xpdfrc" -+#define xpdfSysConfigFile "pdf2swf.conf" - #endif - - //------------------------------------------------------------------------ -Index: gfile.cc -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/gfile.cc,v -retrieving revision 1.12 -retrieving revision 1.13 -diff -u -r1.12 -r1.13 ---- gfile.cc 3 Dec 2005 10:11:33 -0000 1.12 -+++ gfile.cc 3 Dec 2005 10:30:41 -0000 1.13 -@@ -437,6 +437,52 @@ - #endif - } - -+static char* getTempDir() -+{ -+#ifdef WIN32 -+ char*dir = getenv("TMP"); -+ if(!dir) dir = getenv("TEMP"); -+ if(!dir) dir = getenv("tmp"); -+ if(!dir) dir = getenv("temp"); -+ if(!dir) dir = "C:\\"; -+#else -+ char* dir = "/tmp/"; -+#endif -+ return dir; -+} -+ -+char* mktmpname(char*ptr) { -+ static char tmpbuf[128]; -+ char*dir = getTempDir(); -+ int l = strlen(dir); -+ char*sep = ""; -+ if(!ptr) -+ ptr = tmpbuf; -+ if(l && dir[l-1]!='/' && dir[l-1]!='\\') { -+#ifdef WIN32 -+ sep = "\\"; -+#else -+ sep = "/"; -+#endif -+ } -+ -+ // used to be mktemp. This does remove the warnings, but -+ // It's not exactly an improvement. -+#ifdef HAVE_LRAND48 -+ sprintf(ptr, "%s%s%08x%08x",dir,sep,lrand48(),lrand48()); -+#else -+# ifdef HAVE_RAND -+ sprintf(ptr, "%s%s%08x%08x",dir,sep,rand(),rand()); -+# else -+ static int count = 1; -+ sprintf(ptr, "%s%s%08x%04x%04x",dir,sep,time(0),(unsigned int)tmpbuf^((unsigned int)tmpbuf)>>16,count); -+ count ++; -+# endif -+#endif -+ return ptr; -+} -+ -+ - GBool openTempFile(GString **name, FILE **f, char *mode, char *ext) { - #if defined(WIN32) - //---------- Win32 ---------- -@@ -463,7 +509,7 @@ - // with this file name after the tmpnam call and before the fopen - // call. I will happily accept fixes to this function for non-Unix - // OSs. -- if (!(s = tmpnam(NULL))) { -+ if (!(s = mktmpname(NULL))) { - return gFalse; - } - *name = new GString(s); -@@ -490,7 +536,7 @@ - (*name)->append("/XXXXXX")->append(ext); - fd = mkstemps((*name)->getCString(), strlen(ext)); - #else -- if (!(s = tmpnam(NULL))) { -+ if (!(s = mktmpname(NULL))) { - return gFalse; - } - *name = new GString(s); -@@ -507,7 +553,7 @@ - (*name)->append("/XXXXXX"); - fd = mkstemp((*name)->getCString()); - #else // HAVE_MKSTEMP -- if (!(s = tmpnam(NULL))) { -+ if (!(s = mktmpname(NULL))) { - return gFalse; - } - *name = new GString(s); -Index: gfile.h -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/gfile.h,v -retrieving revision 1.9 -retrieving revision 1.10 -diff -u -r1.9 -r1.10 ---- gfile.h 3 Dec 2005 10:11:33 -0000 1.9 -+++ gfile.h 3 Dec 2005 10:30:41 -0000 1.10 -@@ -58,6 +58,9 @@ - // Get current directory. - extern GString *getCurrentDir(); - -+/* create a temporary filename */ -+char* mktmpname(char*ptr); -+ - // Append a file name to a path string. may be an empty - // string, denoting the current directory). Returns . - extern GString *appendToPath(GString *path, char *fileName); -Index: GlobalParams.h -=================================================================== -RCS file: /home/kramm/cvs/swftools.cache.cvsroot/swftools.cache/pdf2swf/xpdf/GlobalParams.h,v -retrieving revision 1.5 -retrieving revision 1.6 -diff -u -r1.5 -r1.6 ---- GlobalParams.h 2006-10-10 19:54:29.000000000 +0200 -+++ GlobalParams.h 2006-11-12 11:19:40.000000000 +0100 -@@ -218,1 +218,1 @@ -- void parseFile(GString *fileName, FILE *f); -+public: void parseFile(GString *fileName, FILE *f); private: -@@ -246,6 +246,10 @@ - GBool loadPlugin(char *type, char *name); - #endif - -+ //----- config file base path -+ -+ GString*path; -+ - //----- static tables - - NameToCharCode * // mapping from char name to ---- SplashOutputDev.h.orig 2006-11-12 12:07:22.000000000 +0100 -+++ SplashOutputDev.h 2006-11-12 12:08:48.000000000 +0100 -@@ -70,7 +70,7 @@ - //----- initialization and control - - // Start a page. -- virtual void startPage(int pageNum, GfxState *state); -+ virtual void startPage(int pageNum, GfxState *state, double x1,double y1,double x2,double y2); - - // End a page. - virtual void endPage(); ---- SplashOutputDev.cc.orig 2006-11-12 12:07:06.000000000 +0100 -+++ SplashOutputDev.cc 2006-11-12 12:09:36.000000000 +0100 -@@ -696,7 +696,7 @@ - nT3Fonts = 0; - } - --void SplashOutputDev::startPage(int pageNum, GfxState *state) { -+void SplashOutputDev::startPage(int pageNum, GfxState *state, double x1,double y1,double x2,double y2) { - int w, h; - double *ctm; - SplashCoord mat[6]; ---- TextOutputDev.h.orig 2006-11-12 12:23:01.000000000 +0100 -+++ TextOutputDev.h 2006-11-12 12:25:31.000000000 +0100 -@@ -578,7 +578,7 @@ - //----- initialization and control - - // Start a page. -- virtual void startPage(int pageNum, GfxState *state); -+ virtual void startPage(int pageNum, GfxState *state, double x1,double y1,double x2,double y2); - - // End a page. - virtual void endPage(); ---- TextOutputDev.cc.orig 2006-11-12 12:22:53.000000000 +0100 -+++ TextOutputDev.cc 2006-11-12 12:25:03.000000000 +0100 -@@ -3805,7 +3805,7 @@ - } - } - --void TextOutputDev::startPage(int pageNum, GfxState *state) { -+void TextOutputDev::startPage(int pageNum, GfxState *state, double x1,double y1,double x2,double y2) { - text->startPage(state); - } - ---- CoreOutputDev.cc.orig 2006-11-12 12:21:59.000000000 +0100 -+++ CoreOutputDev.cc 2006-11-12 12:23:29.000000000 +0100 -@@ -57,5 +57,5 @@ - - void CoreOutputDev::clear() { - startDoc(NULL); -- startPage(0, NULL); -+ startPage(0, NULL, 0,0,0,0); - } ---- SplashFTFontEngine.cc 2006-11-19 22:30:44.000000000 +0100 -+++ SplashFTFontEngine.cc 2006-11-19 22:30:56.000000000 +0100 -@@ -13,9 +13,7 @@ - #endif - - #include --#ifndef WIN32 - # include --#endif - #include "gmem.h" - #include "GString.h" - #include "gfile.h" +196c196 +< goto err1; +--- +> return start; +211c211 +< int nDigits, n1, n2, n3; +--- +> int maxCode, n1, n2, n3; +217c217 +< nDigits = nBits / 4; +--- +> maxCode = (nBits == 8) ? 0xff : (nBits == 16) ? 0xffff : 0xffffffff; +244c244 +< if (!(n1 == 2 + nDigits && tok1[0] == '<' && tok1[n1 - 1] == '>' && +--- +> if (!(tok1[0] == '<' && tok1[n1 - 1] == '>' && +246c246 +< error(-1, "Illegal entry in bfchar block in ToUnicode CMap"); +--- +> error(-1, "Illegal entry in bfchar block in ToUnicode CMap."); +253a254,256 +> if (code1 > maxCode) { +> error(-1, "Invalid entry in bfchar block in ToUnicode CMap"); +> } +269,270c272,273 +< if (!(n1 == 2 + nDigits && tok1[0] == '<' && tok1[n1 - 1] == '>' && +< n2 == 2 + nDigits && tok2[0] == '<' && tok2[n2 - 1] == '>')) { +--- +> if (!(tok1[0] == '<' && tok1[n1 - 1] == '>' && +> tok2[0] == '<' && tok2[n2 - 1] == '>')) { +279a283,286 +> if (code1 > maxCode || code2 > maxCode) { +> error(-1, "Invalid entry in bfrange block in ToUnicode CMap"); +> } +> +60c60 +< startPage(0, NULL); +--- +> startPage(0, NULL, 0,0,0,0); +598a599 +> if(!n || n>16) n=16; +457c457,461 +< out->startPage(pageNum, state); +--- +> if(cropBox) { +> out->startPage(pageNum, state, cropBox->x1,cropBox->y1,cropBox->x2,cropBox->y2); +> } else { +> out->startPage(pageNum, state, 0,0,0,0); +> } +467a472 +> #ifdef XPDFEXE +477a483 +> #endif +3185,3186c3191,3195 +< if (n == 1 && *p == ' ') { +< dx += state->getWordSpace(); +--- +> if (n == 1 && (*p == ' ' || *p == 0)) { +> double w=state->getWordSpace(); +> if (w==0 && dx==0) +> w=state->getFontSize()/3; // workaround for zero word space +> dx += w; +3479c3488 +< colorSpace = GfxColorSpace::parse(&obj1); +--- +> colorSpace = GfxColorSpace::parse(&obj1, csMode); +3483a3493,3494 +> } else if (csMode == streamCSDeviceRGBX) { +> colorSpace = new GfxDeviceRGBXColorSpace(); +3826a3838 +> GfxState*old_state = state; +3837a3850,3852 +> // restore graphics state +> while(state != old_state) +> restoreState(); +921a922,925 +> CharCodeToUnicode* Gfx8BitFont::getCTU() { +> return ctu; +> } +> +1413a1418,1421 +> CharCodeToUnicode* GfxCIDFont::getCTU() { +> return ctu; +> } +> +166a167 +> virtual CharCodeToUnicode* getCTU() = 0; +206a208 +> virtual CharCodeToUnicode* getCTU(); +215c217 +< char *getCharName(int code) { return enc[code]; } +--- +> char *getCharName(int code) { return code>=256?0:enc[code]; } +268a271 +> virtual CharCodeToUnicode* getCTU(); +23a24 +> #include "cmyk.h" +95c96 +< GfxColorSpace *GfxColorSpace::parse(Object *csObj) { +--- +> GfxColorSpace *GfxColorSpace::parse(Object *csObj, StreamColorSpaceMode csMode) { +104c105,108 +< cs = new GfxDeviceRGBColorSpace(); +--- +> if(csMode == streamCSDeviceRGBX) +> cs = new GfxDeviceRGBXColorSpace(); +> else +> cs = new GfxDeviceRGBColorSpace(); +117c121,124 +< cs = new GfxDeviceRGBColorSpace(); +--- +> if(csMode == streamCSDeviceRGBX) +> cs = new GfxDeviceRGBColorSpace(); +> else +> cs = new GfxDeviceRGBColorSpace(); +335a343,353 +> // GfxDeviceRGBXColorSpace +> //------------------------------------------------------------------------ +> +> GfxDeviceRGBXColorSpace::GfxDeviceRGBXColorSpace() { +> } +> +> GfxColorSpace *GfxDeviceRGBXColorSpace::copy() { +> return new GfxDeviceRGBXColorSpace(); +> } +> +> //------------------------------------------------------------------------ +492a511,522 +> /*void GfxDeviceCMYKColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { +> unsigned char r,g,b; +> float c = color->c[0]; +> float m = color->c[1]; +> float y = color->c[2]; +> float k = color->c[3]; +> convert_cmyk2rgb(c,m,y,k, &r,&g,&b); +> rgb->r = r/255.0; +> rgb->g = g/255.0; +> rgb->b = b/255.0; +> }*/ +> +3189a3220 +> int maxPixelForAlloc; +3201a3233 +> maxPixelForAlloc = (1 << (bits>8?bits:8)); +3256c3288 +< lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1, +--- +> lookup[k] = (GfxColorComp *)gmallocn(maxPixelForAlloc + 1, +3275c3307 +< lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1, +--- +> lookup[k] = (GfxColorComp *)gmallocn(maxPixelForAlloc + 1, +3285c3317 +< lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1, +--- +> lookup[k] = (GfxColorComp *)gmallocn(maxPixelForAlloc + 1, +3756a3789,3790 +> if(pathA) { +> if(path) +3757a3792 +> } +141c141 +< static GfxColorSpace *parse(Object *csObj); +--- +> static GfxColorSpace *parse(Object *csObj, StreamColorSpaceMode csMode = streamCSNone); +254a255,267 +> // GfxDeviceRGBXColorSpace +> //------------------------------------------------------------------------ +> +> class GfxDeviceRGBXColorSpace: public GfxDeviceRGBColorSpace { +> public: +> +> GfxDeviceRGBXColorSpace(); +> virtual GfxColorSpace *copy(); +> virtual int getNComps() { return 4; } +> private: +> }; +> +> //------------------------------------------------------------------------ +916a917,939 +> /* extract path */ +> if(fileName) { +> char* cfgFileName = fileName->getCString(); +> char* pos1 = strrchr(cfgFileName, '/'); +> char* pos2 = strrchr(cfgFileName, '\\'); +> char* p = pos1>pos2?pos1:pos2; +> int pos = p ? p-cfgFileName : -1; +> GString*path = new GString(new GString(cfgFileName), 0, (pos < 0 ? strlen(cfgFileName): pos)); +> if(pos1>=0) +> path->append('/'); +> else if(pos2>=0) +> path->append('\\'); +> else +> #ifdef WIN32 +> path->append('\\'); +> #else +> path->append('/'); +> #endif +> this->path = path; +> } else { +> this->path = new GString(); +> } +> +1116a1140,1175 +> static char is_absolute(char*filename) +> { +> int l = strlen(filename); +> if(filename[0] == '/' || filename[0] == '\\') +> return 1; +> if(l>2 && filename[1]==':' && (filename[2]=='\\' || filename[2]=='/')) +> return 1; +> return 0; +> } +> +> static GString* qualify_filename(GString*path, GString*filename) +> { +> GString*fullpath = 0; +> char*prefix = "/usr/local/share/xpdf/"; +> +> if (!is_absolute(filename->getCString())) { +> /* relative path */ +> fullpath = path->copy(); +> fullpath->append(filename); +> } else if (!strncmp(filename->getCString(), prefix, strlen(prefix))) { +> /* xpdf default path */ +> char*s = strchr(filename->getCString()+strlen(prefix), '/'); +> if(s) { +> fullpath = path->copy(); +> fullpath->append(s+1); +> } else { +> fullpath = filename->copy(); +> } +> } else { +> /* absolute path */ +> fullpath = filename->copy(); +> } +> //printf("%s -%s-> %s\n", filename->getCString(), path->getCString(), fullpath->getCString()); +> return fullpath; +> } +> +1131c1190 +< name = (GString *)tokens->get(1); +--- +> name = qualify_filename(this->path, (GString *)tokens->get(1)); +1133,1134c1192,1193 +< error(-1, "Couldn't open 'nameToUnicode' file '%s'", +< name->getCString()); +--- +> error(-1, "Couldn't open 'nameToUnicode' file '%s' using path '%s'", +> name->getCString(), path->getCString()); +1162a1222 +> +1166c1226,1227 +< cidToUnicodes->add(collection->copy(), name->copy()); +--- +> +> cidToUnicodes->add(collection->copy(), qualify_filename(this->path, name)); +1183c1244,1245 +< unicodeToUnicodes->add(font->copy(), file->copy()); +--- +> +> unicodeToUnicodes->add(font->copy(), qualify_filename(this->path, file)); +1200c1262,1263 +< unicodeMaps->add(encodingName->copy(), name->copy()); +--- +> +> unicodeMaps->add(encodingName->copy(), qualify_filename(this->path, name)); +1218c1281,1282 +< list->append(dir->copy()); +--- +> +> list->append(qualify_filename(this->path, dir)); +1222a1287,1288 +> GString *dir; +> +1228c1294,1297 +< toUnicodeDirs->append(((GString *)tokens->get(1))->copy()); +--- +> +> dir = (GString *)tokens->get(1); +> +> toUnicodeDirs->append(qualify_filename(this->path, dir)); +1234a1304 +> GString *file; +1246c1316,1317 +< param->t1.fileName = ((GString *)tokens->get(2))->copy(); +--- +> file = (GString *)tokens->get(2); +> param->t1.fileName = qualify_filename(this->path, file); +1252c1323,1324 +< param->tt.fileName = ((GString *)tokens->get(2))->copy(); +--- +> file = (GString *)tokens->get(2); +> param->tt.fileName = qualify_filename(this->path, file); +199c199 +< ~GlobalParams(); +--- +> virtual ~GlobalParams(); +216,217c216,217 +< DisplayFontParam *getDisplayFont(GString *fontName); +< DisplayFontParam *getDisplayCIDFont(GString *fontName, GString *collection); +--- +> virtual DisplayFontParam *getDisplayFont(GString *fontName); +> virtual DisplayFontParam *getDisplayCIDFont(GString *fontName, GString *collection); +319c319 +< void parseFile(GString *fileName, FILE *f); +--- +> public: void parseFile(GString *fileName, FILE *f); private: +360a361,364 +> //----- config file base path +> +> GString*path; +> +1517,1521c1517,1524 +< symCodeLen = 1; +< i = (numInputSyms + numNewSyms) >> 1; +< while (i) { +< ++symCodeLen; +< i >>= 1; +--- +> symCodeLen = 0; +> i = 1; +> while (i < numInputSyms + numNewSyms) { +> ++symCodeLen; +> i <<= 1; +> } +> if (huff && symCodeLen == 0) { +> symCodeLen = 1; +1923a1927,1929 +> if (huff && symCodeLen == 0) { +> symCodeLen = 1; +> } +452a453 +> Guint num_components = 0; +466c467 +< readUWord(&dummy) && +--- +> readUWord(&num_components) && +521a523,525 +> if(*csMode == streamCSDeviceRGB && num_components == 4) { +> *csMode = streamCSDeviceRGBX; +> } +76a77 +> static int illegalChars = 0; +85a87,89 +> if(illegalChars) +> error(0, "Illegal characters in hex string (%d)", illegalChars); +> illegalChars = 0; +333c337,338 +< error(getPos(), "Illegal digit in hex char in name"); +--- +> illegalChars++; +> //error(getPos(), "Illegal digit in hex char in name"); +387,388c392,395 +< else +< error(getPos(), "Illegal character <%02x> in hex string", c); +--- +> else { +> illegalChars++; +> //error(getPos(), "Illegal character <%02x> in hex string", c); +> } +424c431,432 +< error(getPos(), "Illegal character '>'"); +--- +> illegalChars++; +> //error(getPos(), "Illegal character '>'"); +433c441,442 +< error(getPos(), "Illegal character '%c'", c); +--- +> //error(getPos(), "Illegal character '%c'", c); +> illegalChars++; +462d470 +< +433d432 +< +436c435 +< error(-1, "Illegal annotation destination"); +--- +> error(-1, "Illegal annotation destination %d", destObj->getType()); +471d469 +< +474c472 +< error(-1, "Illegal annotation destination"); +--- +> error(-1, "Illegal annotation destination %d", destObj->getType()); +19a20 +> #include "Object.h" +97c98 +< virtual void startPage(int pageNum, GfxState *state) {} +--- +> virtual void startPage(int pageNum, GfxState *state, double x1,double y1,double x2,double y2) {} +48a49 +> +56a58,61 +> +> this->ascender = face->ascender; +> this->descender = face->descender; +> +230a236,241 +> int SplashFTFont::getNumChars() +> { +> SplashFTFontFile* ff = (SplashFTFontFile *)fontFile; +> return ff->face->num_glyphs; +> } +> +251a263,264 +> this->last_advance = -1; +> +265c278,280 +< if (FT_Load_Glyph(ff->face, gid, FT_LOAD_NO_BITMAP)) { +--- +> int error = 0; +> if ((error=FT_Load_Glyph(ff->face, gid, FT_LOAD_NO_BITMAP|FT_LOAD_NO_HINTING))) { +> fprintf(stderr, "Truetype wasn't able to load glyph %d, error %d\n", gid, error); +270a286,287 +> this->last_advance = glyph->advance.x/65536.0; +> +274c291 +< FT_Outline_Decompose(&((FT_OutlineGlyph)glyph)->outline, +--- +> error = FT_Outline_Decompose(&((FT_OutlineGlyph)glyph)->outline, +275a293,295 +> if(error) { +> fprintf(stderr, "Truetype wasn't able to read glyph %d, error %d\n", gid, error); +> } +44a45,47 +> // return the number of characters in this font +> virtual int getNumChars(); +> +16d15 +< #ifndef WIN32 +18d16 +< #endif +50a51,54 +> +> last_advance = -1; +> ascender = -1; +> descender = -1; +75a76,78 +> // return the number of characters in this font +> virtual int getNumChars() = 0; +> +85a89,91 +> double ascender; +> double descender; +> double last_advance; //set after getGlyphPath() +14,16c14 +< #ifndef WIN32 +< # include +< #endif +--- +> #include +15a16 +> #include +705c706 +< void SplashOutputDev::startPage(int pageNum, GfxState *state) { +--- +> void SplashOutputDev::startPage(int pageNum, GfxState *state, double x1,double y1,double x2,double y2) { +2649,2650c2650 +< memset(softMask->getDataPtr(), 0, +< softMask->getRowSize() * softMask->getHeight()); +--- +> memset(softMask->getDataPtr(), 0x00, softMask->getRowSize()*softMask->getHeight()); +2651a2652 +> if (txgetWidth() && tygetHeight()) +73c73 +< virtual void startPage(int pageNum, GfxState *state); +--- +> virtual void startPage(int pageNum, GfxState *state, double x1,double y1,double x2,double y2); +198a199,201 +> void doUpdateFont(GfxState *state); +> +> SplashPath *convertPath(GfxState *state, GfxPath *path); +207,208d209 +< SplashPath *convertPath(GfxState *state, GfxPath *path); +< void doUpdateFont(GfxState *state); +365a366,367 +> return 1; +> +397c397 +< for (; xx + 7 <= xx0; xx += 8) { +--- +> for (; xx + 7 < xx0; xx += 8) { +400c400 +< if (xx <= xx0) { +--- +> if (xx < xx0) { +420c420 +< for (; xx + 7 <= xx0; xx += 8) { +--- +> for (; xx + 7 < xx0; xx += 8) { +423c423 +< if (xx <= xx0) { +--- +> if (xx < xx0) { +20a21,22 +> #else +> extern "C" int unlink(char *filename); +44c44,45 +< streamCSDeviceCMYK +--- +> streamCSDeviceCMYK, +> streamCSDeviceRGBX +3880c3880 +< void TextOutputDev::startPage(int pageNum, GfxState *state) { +--- +> void TextOutputDev::startPage(int pageNum, GfxState *state, double x1,double y1,double x2,double y2) { +172a173 +> friend class XMLOutputDev; +581c582 +< virtual void startPage(int pageNum, GfxState *state); +--- +> virtual void startPage(int pageNum, GfxState *state, double x1,double y1,double x2,double y2); +441a442,487 +> static char* getTempDir() +> { +> #ifdef WIN32 +> char*dir = getenv("TMP"); +> if(!dir) dir = getenv("TEMP"); +> if(!dir) dir = getenv("tmp"); +> if(!dir) dir = getenv("temp"); +> if(!dir) dir = "C:\\"; +> #else +> char* dir = "/tmp/"; +> #endif +> return dir; +> } +> +> char* mktmpname(char*ptr) { +> static char tmpbuf[128]; +> char*dir = getTempDir(); +> int l = strlen(dir); +> char*sep = ""; +> if(!ptr) +> ptr = tmpbuf; +> if(l && dir[l-1]!='/' && dir[l-1]!='\\') { +> #ifdef WIN32 +> sep = "\\"; +> #else +> sep = "/"; +> #endif +> } +> +> // used to be mktemp. This does remove the warnings, but +> // It's not exactly an improvement. +> #ifdef HAVE_LRAND48 +> sprintf(ptr, "%s%s%08x%08x",dir,sep,(unsigned int)lrand48(),(unsigned int)lrand48()); +> #else +> # ifdef HAVE_RAND +> sprintf(ptr, "%s%s%08x%08x",dir,sep,rand(),rand()); +> # else +> static int count = 1; +> sprintf(ptr, "%s%s%08x%04x%04x",dir,sep,time(0),(unsigned int)tmpbuf^((unsigned int)tmpbuf)>>16,count); +> count ++; +> # endif +> #endif +> return ptr; +> } +> +> +463c509 +< sprintf(buf, "%d", t + i); +--- +> sprintf(buf, "%08x-%08x", t + i, GetCurrentThreadId()); +471,472c517 +< delete s; +< return gFalse; +--- +> continue; +481a527 +> fprintf(stderr, "Couldn't create temporary file\n"); +492c538 +< if (!(s = tmpnam(NULL))) { +--- +> if (!(s = mktmpname(NULL))) { +519c565 +< if (!(s = tmpnam(NULL))) { +--- +> if (!(s = mktmpname(NULL))) { +536c582 +< if (!(s = tmpnam(NULL))) { +--- +> if (!(s = mktmpname(NULL))) { +60a61,63 +> /* create a temporary filename */ +> char* mktmpname(char*ptr); +>