Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 136114 Details for
Bug 199398
app-text/xpdf-3.02 compile patch for app-text/poppler-0.6.2
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch to compile poppler with xpdf-3.02
poppler-xpdf-3.02.patch (text/plain), 62.90 KB, created by
Thomas Kreuzer
on 2007-11-16 21:20:41 UTC
(
hide
)
Description:
patch to compile poppler with xpdf-3.02
Filename:
MIME Type:
Creator:
Thomas Kreuzer
Created:
2007-11-16 21:20:41 UTC
Size:
62.90 KB
patch
obsolete
>diff -ur poppler-0.6.2.orig/poppler/GlobalParams.cc poppler-0.6.2/poppler/GlobalParams.cc >--- poppler-0.6.2.orig/poppler/GlobalParams.cc 2007-11-05 00:11:04.000000000 +0100 >+++ poppler-0.6.2/poppler/GlobalParams.cc 2007-11-16 21:28:25.000000000 +0100 >@@ -23,6 +23,9 @@ > #ifdef WIN32 > # include <shlobj.h> > #endif >+#if HAVE_PAPER_H >+#include <paper.h> >+#endif > #include <fontconfig/fontconfig.h> > #include "goo/gmem.h" > #include "goo/GooString.h" >@@ -83,6 +86,47 @@ > > //------------------------------------------------------------------------ > >+static struct { >+ char *name; >+ char *t1FileName; >+ char *ttFileName; >+} displayFontTab[] = { >+ {"Courier", "n022003l.pfb", "cour.ttf"}, >+ {"Courier-Bold", "n022004l.pfb", "courbd.ttf"}, >+ {"Courier-BoldOblique", "n022024l.pfb", "courbi.ttf"}, >+ {"Courier-Oblique", "n022023l.pfb", "couri.ttf"}, >+ {"Helvetica", "n019003l.pfb", "arial.ttf"}, >+ {"Helvetica-Bold", "n019004l.pfb", "arialbd.ttf"}, >+ {"Helvetica-BoldOblique", "n019024l.pfb", "arialbi.ttf"}, >+ {"Helvetica-Oblique", "n019023l.pfb", "ariali.ttf"}, >+ {"Symbol", "s050000l.pfb", NULL}, >+ {"Times-Bold", "n021004l.pfb", "timesbd.ttf"}, >+ {"Times-BoldItalic", "n021024l.pfb", "timesbi.ttf"}, >+ {"Times-Italic", "n021023l.pfb", "timesi.ttf"}, >+ {"Times-Roman", "n021003l.pfb", "times.ttf"}, >+ {"ZapfDingbats", "d050000l.pfb", NULL}, >+ {NULL} >+}; >+ >+#ifdef WIN32 >+static char *displayFontDirs[] = { >+ "c:/windows/fonts", >+ "c:/winnt/fonts", >+ NULL >+}; >+#else >+static char *displayFontDirs[] = { >+ "/usr/share/ghostscript/fonts", >+ "/usr/local/share/ghostscript/fonts", >+ "/usr/share/fonts/default/Type1", >+ "/usr/share/fonts/default/ghostscript", >+ "/usr/share/fonts/type1/gsfonts", >+ NULL >+}; >+#endif >+ >+//------------------------------------------------------------------------ >+ > GlobalParams *globalParams = NULL; > > //------------------------------------------------------------------------ >@@ -384,6 +428,39 @@ > } > } > >+//------------------------------------------------------------------------ >+// KeyBinding >+//------------------------------------------------------------------------ >+ >+KeyBinding::KeyBinding(int codeA, int modsA, int contextA, char *cmd0) { >+ code = codeA; >+ mods = modsA; >+ context = contextA; >+ cmds = new GooList(); >+ cmds->append(new GooString(cmd0)); >+} >+ >+KeyBinding::KeyBinding(int codeA, int modsA, int contextA, >+ char *cmd0, char *cmd1) { >+ code = codeA; >+ mods = modsA; >+ context = contextA; >+ cmds = new GooList(); >+ cmds->append(new GooString(cmd0)); >+ cmds->append(new GooString(cmd1)); >+} >+ >+KeyBinding::KeyBinding(int codeA, int modsA, int contextA, GooList *cmdsA) { >+ code = codeA; >+ mods = modsA; >+ context = contextA; >+ cmds = cmdsA; >+} >+ >+KeyBinding::~KeyBinding() { >+ deleteGooList(cmds, GooString); >+} >+ > #ifdef ENABLE_PLUGINS > //------------------------------------------------------------------------ > // Plugin >@@ -530,8 +607,10 @@ > // parsing > //------------------------------------------------------------------------ > >-GlobalParams::GlobalParams() { >+GlobalParams::GlobalParams(char *cfgFileName) { > UnicodeMap *map; >+ GooString *fileName; >+ FILE *f; > int i; > > FcInit(); >@@ -568,10 +647,36 @@ > cMapDirs = new GooHash(gTrue); > toUnicodeDirs = new GooList(); > displayFonts = new GooHash(); >+ displayCIDFonts = new GooHash(); >+ displayNamedCIDFonts = new GooHash(); >+#if HAVE_PAPER_H >+ char *paperName; >+ const struct paper *paperType; >+ paperinit(); >+ if ((paperName = systempapername())) { >+ paperType = paperinfo(paperName); >+ psPaperWidth = (int)paperpswidth(paperType); >+ psPaperHeight = (int)paperpsheight(paperType); >+ } else { >+ error(-1, "No paper information available - using defaults"); >+ psPaperWidth = defPaperWidth; >+ psPaperHeight = defPaperHeight; >+ } >+ paperdone(); >+#else >+ psPaperWidth = defPaperWidth; >+ psPaperHeight = defPaperHeight; >+#endif >+ psImageableLLX = psImageableLLY = 0; >+ psImageableURX = psPaperWidth; >+ psImageableURY = psPaperHeight; >+ psCrop = gTrue; > psExpandSmaller = gFalse; > psShrinkLarger = gTrue; > psCenter = gTrue; >+ psDuplex = gFalse; > psLevel = psLevel2; >+ psFile = NULL; > psFonts = new GooHash(); > psNamedFonts16 = new GooList(); > psFonts16 = new GooList(); >@@ -593,6 +698,9 @@ > textPageBreaks = gTrue; > textKeepTinyChars = gFalse; > fontDirs = new GooList(); >+ initialZoom = new GooString("125"); >+ continuousView = gFalse; >+ enableT1lib = gTrue; > enableFreeType = gTrue; > antialias = gTrue; > vectorAntialias = gTrue; >@@ -603,8 +711,11 @@ > screenGamma = 1.0; > screenBlackThreshold = 0.0; > screenWhiteThreshold = 1.0; >+ urlCommand = NULL; >+ movieCommand = NULL; > mapNumericCharNames = gTrue; > mapUnknownCharNames = gFalse; >+ createDefaultKeyBindings(); > printCommands = gFalse; > profileCommands = gFalse; > errQuiet = gFalse; >@@ -619,35 +730,1061 @@ > winFontList = NULL; > #endif > >-#ifdef ENABLE_PLUGINS >- plugins = new GooList(); >- securityHandlers = new GooList(); >-#endif >+#ifdef ENABLE_PLUGINS >+ plugins = new GooList(); >+ securityHandlers = new GooList(); >+#endif >+ >+ // set up the initial nameToUnicode table >+ for (i = 0; nameToUnicodeTab[i].name; ++i) { >+ nameToUnicode->add(nameToUnicodeTab[i].name, nameToUnicodeTab[i].u); >+ } >+ >+ // set up the residentUnicodeMaps table >+ map = new UnicodeMap("Latin1", gFalse, >+ latin1UnicodeMapRanges, latin1UnicodeMapLen); >+ residentUnicodeMaps->add(map->getEncodingName(), map); >+ map = new UnicodeMap("ASCII7", gFalse, >+ ascii7UnicodeMapRanges, ascii7UnicodeMapLen); >+ residentUnicodeMaps->add(map->getEncodingName(), map); >+ map = new UnicodeMap("Symbol", gFalse, >+ symbolUnicodeMapRanges, symbolUnicodeMapLen); >+ residentUnicodeMaps->add(map->getEncodingName(), map); >+ map = new UnicodeMap("ZapfDingbats", gFalse, zapfDingbatsUnicodeMapRanges, >+ zapfDingbatsUnicodeMapLen); >+ residentUnicodeMaps->add(map->getEncodingName(), map); >+ map = new UnicodeMap("UTF-8", gTrue, &mapUTF8); >+ residentUnicodeMaps->add(map->getEncodingName(), map); >+ map = new UnicodeMap("UCS-2", gTrue, &mapUCS2); >+ residentUnicodeMaps->add(map->getEncodingName(), map); >+ >+ // look for a user config file, then a system-wide config file >+ f = NULL; >+ fileName = NULL; >+ if (cfgFileName && cfgFileName[0]) { >+ fileName = new GooString(cfgFileName); >+ if (!(f = fopen(fileName->getCString(), "r"))) { >+ delete fileName; >+ } >+ } else { >+ scanEncodingDirs(); >+ } >+ if (!f) { >+ fileName = appendToPath(getHomeDir(), xpdfUserConfigFile); >+ if (!(f = fopen(fileName->getCString(), "r"))) { >+ delete fileName; >+ } >+ } >+ if (!f) { >+#if defined(WIN32) && !defined(__CYGWIN32__) >+ char buf[512]; >+ i = GetModuleFileName(NULL, buf, sizeof(buf)); >+ if (i <= 0 || i >= sizeof(buf)) { >+ // error or path too long for buffer - just use the current dir >+ buf[0] = '\0'; >+ } >+ fileName = grabPath(buf); >+ appendToPath(fileName, xpdfSysConfigFile); >+#else >+ fileName = new GooString(xpdfSysConfigFile); >+#endif >+ if (!(f = fopen(fileName->getCString(), "r"))) { >+ delete fileName; >+ } >+ } >+ if (f) { >+ parseFile(fileName, f); >+ delete fileName; >+ fclose(f); >+ } >+} >+ >+void GlobalParams::createDefaultKeyBindings() { >+ keyBindings = new GooList(); >+ >+ //----- mouse buttons >+ keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress1, xpdfKeyModNone, >+ xpdfKeyContextAny, "startSelection")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeMouseRelease1, xpdfKeyModNone, >+ xpdfKeyContextAny, "endSelection", >+ "followLinkNoSel")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress2, xpdfKeyModNone, >+ xpdfKeyContextAny, "startPan")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeMouseRelease2, xpdfKeyModNone, >+ xpdfKeyContextAny, "endPan")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress3, xpdfKeyModNone, >+ xpdfKeyContextAny, "postPopupMenu")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress4, xpdfKeyModNone, >+ xpdfKeyContextAny, >+ "scrollUpPrevPage(16)")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress5, xpdfKeyModNone, >+ xpdfKeyContextAny, >+ "scrollDownNextPage(16)")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress6, xpdfKeyModNone, >+ xpdfKeyContextAny, "scrollLeft(16)")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress7, xpdfKeyModNone, >+ xpdfKeyContextAny, "scrollRight(16)")); >+ >+ //----- keys >+ keyBindings->append(new KeyBinding(xpdfKeyCodeHome, xpdfKeyModCtrl, >+ xpdfKeyContextAny, "gotoPage(1)")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeHome, xpdfKeyModNone, >+ xpdfKeyContextAny, "scrollToTopLeft")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeEnd, xpdfKeyModCtrl, >+ xpdfKeyContextAny, "gotoLastPage")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeEnd, xpdfKeyModNone, >+ xpdfKeyContextAny, >+ "scrollToBottomRight")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodePgUp, xpdfKeyModNone, >+ xpdfKeyContextAny, "pageUp")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeBackspace, xpdfKeyModNone, >+ xpdfKeyContextAny, "pageUp")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeDelete, xpdfKeyModNone, >+ xpdfKeyContextAny, "pageUp")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodePgDn, xpdfKeyModNone, >+ xpdfKeyContextAny, "pageDown")); >+ keyBindings->append(new KeyBinding(' ', xpdfKeyModNone, >+ xpdfKeyContextAny, "pageDown")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeLeft, xpdfKeyModNone, >+ xpdfKeyContextAny, "scrollLeft(16)")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeRight, xpdfKeyModNone, >+ xpdfKeyContextAny, "scrollRight(16)")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeUp, xpdfKeyModNone, >+ xpdfKeyContextAny, "scrollUp(16)")); >+ keyBindings->append(new KeyBinding(xpdfKeyCodeDown, xpdfKeyModNone, >+ xpdfKeyContextAny, "scrollDown(16)")); >+ keyBindings->append(new KeyBinding('o', xpdfKeyModNone, >+ xpdfKeyContextAny, "open")); >+ keyBindings->append(new KeyBinding('O', xpdfKeyModNone, >+ xpdfKeyContextAny, "open")); >+ keyBindings->append(new KeyBinding('r', xpdfKeyModNone, >+ xpdfKeyContextAny, "reload")); >+ keyBindings->append(new KeyBinding('R', xpdfKeyModNone, >+ xpdfKeyContextAny, "reload")); >+ keyBindings->append(new KeyBinding('f', xpdfKeyModNone, >+ xpdfKeyContextAny, "find")); >+ keyBindings->append(new KeyBinding('F', xpdfKeyModNone, >+ xpdfKeyContextAny, "find")); >+ keyBindings->append(new KeyBinding('f', xpdfKeyModCtrl, >+ xpdfKeyContextAny, "find")); >+ keyBindings->append(new KeyBinding('g', xpdfKeyModCtrl, >+ xpdfKeyContextAny, "findNext")); >+ keyBindings->append(new KeyBinding('p', xpdfKeyModCtrl, >+ xpdfKeyContextAny, "print")); >+ keyBindings->append(new KeyBinding('n', xpdfKeyModNone, >+ xpdfKeyContextScrLockOff, "nextPage")); >+ keyBindings->append(new KeyBinding('N', xpdfKeyModNone, >+ xpdfKeyContextScrLockOff, "nextPage")); >+ keyBindings->append(new KeyBinding('n', xpdfKeyModNone, >+ xpdfKeyContextScrLockOn, >+ "nextPageNoScroll")); >+ keyBindings->append(new KeyBinding('N', xpdfKeyModNone, >+ xpdfKeyContextScrLockOn, >+ "nextPageNoScroll")); >+ keyBindings->append(new KeyBinding('p', xpdfKeyModNone, >+ xpdfKeyContextScrLockOff, "prevPage")); >+ keyBindings->append(new KeyBinding('P', xpdfKeyModNone, >+ xpdfKeyContextScrLockOff, "prevPage")); >+ keyBindings->append(new KeyBinding('p', xpdfKeyModNone, >+ xpdfKeyContextScrLockOn, >+ "prevPageNoScroll")); >+ keyBindings->append(new KeyBinding('P', xpdfKeyModNone, >+ xpdfKeyContextScrLockOn, >+ "prevPageNoScroll")); >+ keyBindings->append(new KeyBinding('v', xpdfKeyModNone, >+ xpdfKeyContextAny, "goForward")); >+ keyBindings->append(new KeyBinding('b', xpdfKeyModNone, >+ xpdfKeyContextAny, "goBackward")); >+ keyBindings->append(new KeyBinding('g', xpdfKeyModNone, >+ xpdfKeyContextAny, "focusToPageNum")); >+ keyBindings->append(new KeyBinding('0', xpdfKeyModNone, >+ xpdfKeyContextAny, "zoomPercent(125)")); >+ keyBindings->append(new KeyBinding('+', xpdfKeyModNone, >+ xpdfKeyContextAny, "zoomIn")); >+ keyBindings->append(new KeyBinding('-', xpdfKeyModNone, >+ xpdfKeyContextAny, "zoomOut")); >+ keyBindings->append(new KeyBinding('z', xpdfKeyModNone, >+ xpdfKeyContextAny, "zoomFitPage")); >+ keyBindings->append(new KeyBinding('w', xpdfKeyModNone, >+ xpdfKeyContextAny, "zoomFitWidth")); >+ keyBindings->append(new KeyBinding('f', xpdfKeyModAlt, >+ xpdfKeyContextAny, >+ "toggleFullScreenMode")); >+ keyBindings->append(new KeyBinding('l', xpdfKeyModCtrl, >+ xpdfKeyContextAny, "redraw")); >+ keyBindings->append(new KeyBinding('w', xpdfKeyModCtrl, >+ xpdfKeyContextAny, "closeWindow")); >+ keyBindings->append(new KeyBinding('?', xpdfKeyModNone, >+ xpdfKeyContextAny, "about")); >+ keyBindings->append(new KeyBinding('q', xpdfKeyModNone, >+ xpdfKeyContextAny, "quit")); >+ keyBindings->append(new KeyBinding('Q', xpdfKeyModNone, >+ xpdfKeyContextAny, "quit")); >+} >+ >+void GlobalParams::parseFile(GooString *fileName, FILE *f) { >+ int line; >+ char buf[512]; >+ >+ line = 1; >+ while (getLine(buf, sizeof(buf) - 1, f)) { >+ parseLine(buf, fileName, line); >+ ++line; >+ } >+} >+ >+void GlobalParams::parseLine(char *buf, GooString *fileName, int line) { >+ GooList *tokens; >+ GooString *cmd, *incFile; >+ char *p1, *p2; >+ FILE *f2; >+ >+ // break the line into tokens >+ tokens = new GooList(); >+ p1 = buf; >+ while (*p1) { >+ for (; *p1 && isspace(*p1); ++p1) ; >+ if (!*p1) { >+ break; >+ } >+ if (*p1 == '"' || *p1 == '\'') { >+ for (p2 = p1 + 1; *p2 && *p2 != *p1; ++p2) ; >+ ++p1; >+ } else { >+ for (p2 = p1 + 1; *p2 && !isspace(*p2); ++p2) ; >+ } >+ tokens->append(new GooString(p1, p2 - p1)); >+ p1 = *p2 ? p2 + 1 : p2; >+ } >+ >+ // parse the line >+ if (tokens->getLength() > 0 && >+ ((GooString *)tokens->get(0))->getChar(0) != '#') { >+ cmd = (GooString *)tokens->get(0); >+ if (!cmd->cmp("include")) { >+ if (tokens->getLength() == 2) { >+ incFile = (GooString *)tokens->get(1); >+ if ((f2 = fopen(incFile->getCString(), "r"))) { >+ parseFile(incFile, f2); >+ fclose(f2); >+ } else { >+ error(-1, "Couldn't find included config file: '%s' (%s:%d)", >+ incFile->getCString(), fileName->getCString(), line); >+ } >+ } else { >+ error(-1, "Bad 'include' config file command (%s:%d)", >+ fileName->getCString(), line); >+ } >+ } else if (!cmd->cmp("nameToUnicode")) { >+ parseNameToUnicode(tokens, fileName, line); >+ } else if (!cmd->cmp("cidToUnicode")) { >+ parseCIDToUnicode(tokens, fileName, line); >+ } else if (!cmd->cmp("unicodeToUnicode")) { >+ parseUnicodeToUnicode(tokens, fileName, line); >+ } else if (!cmd->cmp("unicodeMap")) { >+ parseUnicodeMap(tokens, fileName, line); >+ } else if (!cmd->cmp("cMapDir")) { >+ parseCMapDir(tokens, fileName, line); >+ } else if (!cmd->cmp("toUnicodeDir")) { >+ parseToUnicodeDir(tokens, fileName, line); >+ } else if (!cmd->cmp("displayFontT1")) { >+ parseDisplayFont(tokens, displayFonts, displayFontT1, fileName, line); >+ } else if (!cmd->cmp("displayFontTT")) { >+ parseDisplayFont(tokens, displayFonts, displayFontTT, fileName, line); >+ } else if (!cmd->cmp("displayNamedCIDFontT1")) { >+ parseDisplayFont(tokens, displayNamedCIDFonts, >+ displayFontT1, fileName, line); >+ } else if (!cmd->cmp("displayCIDFontT1")) { >+ parseDisplayFont(tokens, displayCIDFonts, >+ displayFontT1, fileName, line); >+ } else if (!cmd->cmp("displayNamedCIDFontTT")) { >+ parseDisplayFont(tokens, displayNamedCIDFonts, >+ displayFontTT, fileName, line); >+ } else if (!cmd->cmp("displayCIDFontTT")) { >+ parseDisplayFont(tokens, displayCIDFonts, >+ displayFontTT, fileName, line); >+ } else if (!cmd->cmp("psFile")) { >+ parsePSFile(tokens, fileName, line); >+ } else if (!cmd->cmp("psFont")) { >+ parsePSFont(tokens, fileName, line); >+ } else if (!cmd->cmp("psNamedFont16")) { >+ parsePSFont16("psNamedFont16", psNamedFonts16, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("psFont16")) { >+ parsePSFont16("psFont16", psFonts16, tokens, fileName, line); >+ } else if (!cmd->cmp("psPaperSize")) { >+ parsePSPaperSize(tokens, fileName, line); >+ } else if (!cmd->cmp("psImageableArea")) { >+ parsePSImageableArea(tokens, fileName, line); >+ } else if (!cmd->cmp("psCrop")) { >+ parseYesNo("psCrop", &psCrop, tokens, fileName, line); >+ } else if (!cmd->cmp("psExpandSmaller")) { >+ parseYesNo("psExpandSmaller", &psExpandSmaller, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("psShrinkLarger")) { >+ parseYesNo("psShrinkLarger", &psShrinkLarger, tokens, fileName, line); >+ } else if (!cmd->cmp("psCenter")) { >+ parseYesNo("psCenter", &psCenter, tokens, fileName, line); >+ } else if (!cmd->cmp("psDuplex")) { >+ parseYesNo("psDuplex", &psDuplex, tokens, fileName, line); >+ } else if (!cmd->cmp("psLevel")) { >+ parsePSLevel(tokens, fileName, line); >+ } else if (!cmd->cmp("psEmbedType1Fonts")) { >+ parseYesNo("psEmbedType1", &psEmbedType1, tokens, fileName, line); >+ } else if (!cmd->cmp("psEmbedTrueTypeFonts")) { >+ parseYesNo("psEmbedTrueType", &psEmbedTrueType, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("psEmbedCIDPostScriptFonts")) { >+ parseYesNo("psEmbedCIDPostScript", &psEmbedCIDPostScript, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("psEmbedCIDTrueTypeFonts")) { >+ parseYesNo("psEmbedCIDTrueType", &psEmbedCIDTrueType, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("psPreload")) { >+ parseYesNo("psPreload", &psPreload, tokens, fileName, line); >+ } else if (!cmd->cmp("psOPI")) { >+ parseYesNo("psOPI", &psOPI, tokens, fileName, line); >+ } else if (!cmd->cmp("psASCIIHex")) { >+ parseYesNo("psASCIIHex", &psASCIIHex, tokens, fileName, line); >+ } else if (!cmd->cmp("textEncoding")) { >+ parseTextEncoding(tokens, fileName, line); >+ } else if (!cmd->cmp("textEOL")) { >+ parseTextEOL(tokens, fileName, line); >+ } else if (!cmd->cmp("textPageBreaks")) { >+ parseYesNo("textPageBreaks", &textPageBreaks, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("textKeepTinyChars")) { >+ parseYesNo("textKeepTinyChars", &textKeepTinyChars, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("fontDir")) { >+ parseFontDir(tokens, fileName, line); >+ } else if (!cmd->cmp("initialZoom")) { >+ parseInitialZoom(tokens, fileName, line); >+ } else if (!cmd->cmp("continuousView")) { >+ parseYesNo("continuousView", &continuousView, tokens, fileName, line); >+ } else if (!cmd->cmp("enableT1lib")) { >+ parseYesNo("enableT1lib", &enableT1lib, tokens, fileName, line); >+ } else if (!cmd->cmp("enableFreeType")) { >+ parseYesNo("enableFreeType", &enableFreeType, tokens, fileName, line); >+ } else if (!cmd->cmp("antialias")) { >+ parseYesNo("antialias", &antialias, tokens, fileName, line); >+ } else if (!cmd->cmp("vectorAntialias")) { >+ parseYesNo("vectorAntialias", &vectorAntialias, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("strokeAdjust")) { >+ parseYesNo("strokeAdjust", &strokeAdjust, tokens, fileName, line); >+ } else if (!cmd->cmp("screenType")) { >+ parseScreenType(tokens, fileName, line); >+ } else if (!cmd->cmp("screenSize")) { >+ parseInteger("screenSize", &screenSize, tokens, fileName, line); >+ } else if (!cmd->cmp("screenDotRadius")) { >+ parseInteger("screenDotRadius", &screenDotRadius, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("screenGamma")) { >+ parseFloat("screenGamma", &screenGamma, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("screenBlackThreshold")) { >+ parseFloat("screenBlackThreshold", &screenBlackThreshold, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("screenWhiteThreshold")) { >+ parseFloat("screenWhiteThreshold", &screenWhiteThreshold, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("urlCommand")) { >+ parseCommand("urlCommand", &urlCommand, tokens, fileName, line); >+ } else if (!cmd->cmp("movieCommand")) { >+ parseCommand("movieCommand", &movieCommand, tokens, fileName, line); >+ } else if (!cmd->cmp("mapNumericCharNames")) { >+ parseYesNo("mapNumericCharNames", &mapNumericCharNames, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("mapUnknownCharNames")) { >+ parseYesNo("mapUnknownCharNames", &mapUnknownCharNames, >+ tokens, fileName, line); >+ } else if (!cmd->cmp("bind")) { >+ parseBind(tokens, fileName, line); >+ } else if (!cmd->cmp("unbind")) { >+ parseUnbind(tokens, fileName, line); >+ } else if (!cmd->cmp("printCommands")) { >+ parseYesNo("printCommands", &printCommands, tokens, fileName, line); >+ } else if (!cmd->cmp("errQuiet")) { >+ parseYesNo("errQuiet", &errQuiet, tokens, fileName, line); >+ } else { >+ error(-1, "Unknown config file command '%s' (%s:%d)", >+ cmd->getCString(), fileName->getCString(), line); >+ if (!cmd->cmp("displayFontX") || >+ !cmd->cmp("displayNamedCIDFontX") || >+ !cmd->cmp("displayCIDFontX")) { >+ error(-1, "-- Xpdf no longer supports X fonts"); >+ } else if (!cmd->cmp("t1libControl") || !cmd->cmp("freetypeControl")) { >+ error(-1, "-- The t1libControl and freetypeControl options have been replaced"); >+ error(-1, " by the enableT1lib, enableFreeType, and antialias options"); >+ } else if (!cmd->cmp("fontpath") || !cmd->cmp("fontmap")) { >+ error(-1, "-- the config file format has changed since Xpdf 0.9x"); >+ } >+ } >+ } >+ >+ deleteGooList(tokens, GooString); >+} >+ >+void GlobalParams::parseNameToUnicode(GooList *tokens, GooString *fileName, >+ int line) { >+ GooString *name; >+ char *tok1, *tok2; >+ FILE *f; >+ char buf[256]; >+ int line2; >+ Unicode u; >+ >+ if (tokens->getLength() != 2) { >+ error(-1, "Bad 'nameToUnicode' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ name = (GooString *)tokens->get(1); >+ if (!(f = fopen(name->getCString(), "r"))) { >+ error(-1, "Couldn't open 'nameToUnicode' file '%s'", >+ name->getCString()); >+ return; >+ } >+ line2 = 1; >+ while (getLine(buf, sizeof(buf), f)) { >+ tok1 = strtok(buf, " \t\r\n"); >+ tok2 = strtok(NULL, " \t\r\n"); >+ if (tok1 && tok2) { >+ sscanf(tok1, "%x", &u); >+ nameToUnicode->add(tok2, u); >+ } else { >+ error(-1, "Bad line in 'nameToUnicode' file (%s:%d)", >+ name->getCString(), line2); >+ } >+ ++line2; >+ } >+ fclose(f); >+} >+ >+void GlobalParams::parseNameToUnicode(GooString *name) { >+ char *tok1, *tok2; >+ FILE *f; >+ char buf[256]; >+ int line; >+ Unicode u; >+ >+ if (!(f = fopen(name->getCString(), "r"))) { >+ error(-1, "Couldn't open 'nameToUnicode' file '%s'", >+ name->getCString()); >+ return; >+ } >+ line = 1; >+ while (getLine(buf, sizeof(buf), f)) { >+ tok1 = strtok(buf, " \t\r\n"); >+ tok2 = strtok(NULL, " \t\r\n"); >+ if (tok1 && tok2) { >+ sscanf(tok1, "%x", &u); >+ nameToUnicode->add(tok2, u); >+ } else { >+ error(-1, "Bad line in 'nameToUnicode' file (%s:%d)", >+ name->getCString(), line); >+ } >+ ++line; >+ } >+ fclose(f); >+} >+ >+void GlobalParams::parseCIDToUnicode(GooList *tokens, GooString *fileName, >+ int line) { >+ GooString *collection, *name, *old; >+ >+ if (tokens->getLength() != 3) { >+ error(-1, "Bad 'cidToUnicode' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ collection = (GooString *)tokens->get(1); >+ name = (GooString *)tokens->get(2); >+ if ((old = (GooString *)cidToUnicodes->remove(collection))) { >+ delete old; >+ } >+ cidToUnicodes->add(collection->copy(), name->copy()); >+} >+ >+void GlobalParams::parseUnicodeToUnicode(GooList *tokens, GooString *fileName, >+ int line) { >+ GooString *font, *file, *old; >+ >+ if (tokens->getLength() != 3) { >+ error(-1, "Bad 'unicodeToUnicode' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ font = (GooString *)tokens->get(1); >+ file = (GooString *)tokens->get(2); >+ if ((old = (GooString *)unicodeToUnicodes->remove(font))) { >+ delete old; >+ } >+ unicodeToUnicodes->add(font->copy(), file->copy()); >+} >+ >+void GlobalParams::parseUnicodeMap(GooList *tokens, GooString *fileName, >+ int line) { >+ GooString *encodingName, *name, *old; >+ >+ if (tokens->getLength() != 3) { >+ error(-1, "Bad 'unicodeMap' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ encodingName = (GooString *)tokens->get(1); >+ name = (GooString *)tokens->get(2); >+ if ((old = (GooString *)unicodeMaps->remove(encodingName))) { >+ delete old; >+ } >+ unicodeMaps->add(encodingName->copy(), name->copy()); >+} >+ >+void GlobalParams::parseCMapDir(GooList *tokens, GooString *fileName, int line) { >+ GooString *collection, *dir; >+ GooList *list; >+ >+ if (tokens->getLength() != 3) { >+ error(-1, "Bad 'cMapDir' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ collection = (GooString *)tokens->get(1); >+ dir = (GooString *)tokens->get(2); >+ if (!(list = (GooList *)cMapDirs->lookup(collection))) { >+ list = new GooList(); >+ cMapDirs->add(collection->copy(), list); >+ } >+ list->append(dir->copy()); >+} >+ >+void GlobalParams::parseToUnicodeDir(GooList *tokens, GooString *fileName, >+ int line) { >+ if (tokens->getLength() != 2) { >+ error(-1, "Bad 'toUnicodeDir' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ toUnicodeDirs->append(((GooString *)tokens->get(1))->copy()); >+} >+ >+void GlobalParams::parseDisplayFont(GooList *tokens, GooHash *fontHash, >+ DisplayFontParamKind kind, >+ GooString *fileName, int line) { >+ DisplayFontParam *param, *old; >+ >+ if (tokens->getLength() < 2) { >+ goto err1; >+ } >+ param = new DisplayFontParam(((GooString *)tokens->get(1))->copy(), kind); >+ >+ switch (kind) { >+ case displayFontT1: >+ if (tokens->getLength() != 3) { >+ goto err2; >+ } >+ param->t1.fileName = ((GooString *)tokens->get(2))->copy(); >+ break; >+ case displayFontTT: >+ if (tokens->getLength() != 3) { >+ goto err2; >+ } >+ param->tt.fileName = ((GooString *)tokens->get(2))->copy(); >+ break; >+ } >+ >+ if ((old = (DisplayFontParam *)fontHash->remove(param->name))) { >+ delete old; >+ } >+ fontHash->add(param->name, param); >+ return; >+ >+ err2: >+ delete param; >+ err1: >+ error(-1, "Bad 'display*Font*' config file command (%s:%d)", >+ fileName->getCString(), line); >+} >+ >+void GlobalParams::parsePSPaperSize(GooList *tokens, GooString *fileName, >+ int line) { >+ GooString *tok; >+ >+ if (tokens->getLength() == 2) { >+ tok = (GooString *)tokens->get(1); >+ if (!setPSPaperSize(tok->getCString())) { >+ error(-1, "Bad 'psPaperSize' config file command (%s:%d)", >+ fileName->getCString(), line); >+ } >+ } else if (tokens->getLength() == 3) { >+ tok = (GooString *)tokens->get(1); >+ psPaperWidth = atoi(tok->getCString()); >+ tok = (GooString *)tokens->get(2); >+ psPaperHeight = atoi(tok->getCString()); >+ psImageableLLX = psImageableLLY = 0; >+ psImageableURX = psPaperWidth; >+ psImageableURY = psPaperHeight; >+ } else { >+ error(-1, "Bad 'psPaperSize' config file command (%s:%d)", >+ fileName->getCString(), line); >+ } >+} >+ >+void GlobalParams::parsePSImageableArea(GooList *tokens, GooString *fileName, >+ int line) { >+ if (tokens->getLength() != 5) { >+ error(-1, "Bad 'psImageableArea' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ psImageableLLX = atoi(((GooString *)tokens->get(1))->getCString()); >+ psImageableLLY = atoi(((GooString *)tokens->get(2))->getCString()); >+ psImageableURX = atoi(((GooString *)tokens->get(3))->getCString()); >+ psImageableURY = atoi(((GooString *)tokens->get(4))->getCString()); >+} >+ >+void GlobalParams::parsePSLevel(GooList *tokens, GooString *fileName, int line) { >+ GooString *tok; >+ >+ if (tokens->getLength() != 2) { >+ error(-1, "Bad 'psLevel' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ tok = (GooString *)tokens->get(1); >+ if (!tok->cmp("level1")) { >+ psLevel = psLevel1; >+ } else if (!tok->cmp("level1sep")) { >+ psLevel = psLevel1Sep; >+ } else if (!tok->cmp("level2")) { >+ psLevel = psLevel2; >+ } else if (!tok->cmp("level2sep")) { >+ psLevel = psLevel2Sep; >+ } else if (!tok->cmp("level3")) { >+ psLevel = psLevel3; >+ } else if (!tok->cmp("level3Sep")) { >+ psLevel = psLevel3Sep; >+ } else { >+ error(-1, "Bad 'psLevel' config file command (%s:%d)", >+ fileName->getCString(), line); >+ } >+} >+ >+void GlobalParams::parsePSFile(GooList *tokens, GooString *fileName, int line) { >+ if (tokens->getLength() != 2) { >+ error(-1, "Bad 'psFile' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ if (psFile) { >+ delete psFile; >+ } >+ psFile = ((GooString *)tokens->get(1))->copy(); >+} >+ >+void GlobalParams::parsePSFont(GooList *tokens, GooString *fileName, int line) { >+ PSFontParam *param; >+ >+ if (tokens->getLength() != 3) { >+ error(-1, "Bad 'psFont' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ param = new PSFontParam(((GooString *)tokens->get(1))->copy(), 0, >+ ((GooString *)tokens->get(2))->copy(), NULL); >+ psFonts->add(param->pdfFontName, param); >+} >+ >+void GlobalParams::parsePSFont16(char *cmdName, GooList *fontList, >+ GooList *tokens, GooString *fileName, int line) { >+ PSFontParam *param; >+ int wMode; >+ GooString *tok; >+ >+ if (tokens->getLength() != 5) { >+ error(-1, "Bad '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ return; >+ } >+ tok = (GooString *)tokens->get(2); >+ if (!tok->cmp("H")) { >+ wMode = 0; >+ } else if (!tok->cmp("V")) { >+ wMode = 1; >+ } else { >+ error(-1, "Bad '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ return; >+ } >+ param = new PSFontParam(((GooString *)tokens->get(1))->copy(), >+ wMode, >+ ((GooString *)tokens->get(3))->copy(), >+ ((GooString *)tokens->get(4))->copy()); >+ fontList->append(param); >+} >+ >+void GlobalParams::parseTextEncoding(GooList *tokens, GooString *fileName, >+ int line) { >+ if (tokens->getLength() != 2) { >+ error(-1, "Bad 'textEncoding' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ delete textEncoding; >+ textEncoding = ((GooString *)tokens->get(1))->copy(); >+} >+ >+void GlobalParams::parseTextEOL(GooList *tokens, GooString *fileName, int line) { >+ GooString *tok; >+ >+ if (tokens->getLength() != 2) { >+ error(-1, "Bad 'textEOL' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ tok = (GooString *)tokens->get(1); >+ if (!tok->cmp("unix")) { >+ textEOL = eolUnix; >+ } else if (!tok->cmp("dos")) { >+ textEOL = eolDOS; >+ } else if (!tok->cmp("mac")) { >+ textEOL = eolMac; >+ } else { >+ error(-1, "Bad 'textEOL' config file command (%s:%d)", >+ fileName->getCString(), line); >+ } >+} >+ >+void GlobalParams::parseFontDir(GooList *tokens, GooString *fileName, int line) { >+ if (tokens->getLength() != 2) { >+ error(-1, "Bad 'fontDir' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ fontDirs->append(((GooString *)tokens->get(1))->copy()); >+} >+ >+void GlobalParams::parseInitialZoom(GooList *tokens, >+ GooString *fileName, int line) { >+ if (tokens->getLength() != 2) { >+ error(-1, "Bad 'initialZoom' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ delete initialZoom; >+ initialZoom = ((GooString *)tokens->get(1))->copy(); >+} >+ >+void GlobalParams::parseScreenType(GooList *tokens, GooString *fileName, >+ int line) { >+ GooString *tok; >+ >+ if (tokens->getLength() != 2) { >+ error(-1, "Bad 'screenType' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ tok = (GooString *)tokens->get(1); >+ if (!tok->cmp("dispersed")) { >+ screenType = screenDispersed; >+ } else if (!tok->cmp("clustered")) { >+ screenType = screenClustered; >+ } else if (!tok->cmp("stochasticClustered")) { >+ screenType = screenStochasticClustered; >+ } else { >+ error(-1, "Bad 'screenType' config file command (%s:%d)", >+ fileName->getCString(), line); >+ } >+} >+ >+void GlobalParams::parseBind(GooList *tokens, GooString *fileName, int line) { >+ KeyBinding *binding; >+ GooList *cmds; >+ int code, mods, context, i; >+ >+ if (tokens->getLength() < 4) { >+ error(-1, "Bad 'bind' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ if (!parseKey((GooString *)tokens->get(1), (GooString *)tokens->get(2), >+ &code, &mods, &context, >+ "bind", tokens, fileName, line)) { >+ return; >+ } >+ for (i = 0; i < keyBindings->getLength(); ++i) { >+ binding = (KeyBinding *)keyBindings->get(i); >+ if (binding->code == code && >+ binding->mods == mods && >+ binding->context == context) { >+ delete (KeyBinding *)keyBindings->del(i); >+ break; >+ } >+ } >+ cmds = new GooList(); >+ for (i = 3; i < tokens->getLength(); ++i) { >+ cmds->append(((GooString *)tokens->get(i))->copy()); >+ } >+ keyBindings->append(new KeyBinding(code, mods, context, cmds)); >+} >+ >+void GlobalParams::parseUnbind(GooList *tokens, GooString *fileName, int line) { >+ KeyBinding *binding; >+ int code, mods, context, i; >+ >+ if (tokens->getLength() != 3) { >+ error(-1, "Bad 'unbind' config file command (%s:%d)", >+ fileName->getCString(), line); >+ return; >+ } >+ if (!parseKey((GooString *)tokens->get(1), (GooString *)tokens->get(2), >+ &code, &mods, &context, >+ "unbind", tokens, fileName, line)) { >+ return; >+ } >+ for (i = 0; i < keyBindings->getLength(); ++i) { >+ binding = (KeyBinding *)keyBindings->get(i); >+ if (binding->code == code && >+ binding->mods == mods && >+ binding->context == context) { >+ delete (KeyBinding *)keyBindings->del(i); >+ break; >+ } >+ } >+} >+ >+GBool GlobalParams::parseKey(GooString *modKeyStr, GooString *contextStr, >+ int *code, int *mods, int *context, >+ char *cmdName, >+ GooList *tokens, GooString *fileName, int line) { >+ char *p0; >+ >+ *mods = xpdfKeyModNone; >+ p0 = modKeyStr->getCString(); >+ while (1) { >+ if (!strncmp(p0, "shift-", 6)) { >+ *mods |= xpdfKeyModShift; >+ p0 += 6; >+ } else if (!strncmp(p0, "ctrl-", 5)) { >+ *mods |= xpdfKeyModCtrl; >+ p0 += 5; >+ } else if (!strncmp(p0, "alt-", 4)) { >+ *mods |= xpdfKeyModAlt; >+ p0 += 4; >+ } else { >+ break; >+ } >+ } >+ >+ if (!strcmp(p0, "space")) { >+ *code = ' '; >+ } else if (!strcmp(p0, "tab")) { >+ *code = xpdfKeyCodeTab; >+ } else if (!strcmp(p0, "return")) { >+ *code = xpdfKeyCodeReturn; >+ } else if (!strcmp(p0, "enter")) { >+ *code = xpdfKeyCodeEnter; >+ } else if (!strcmp(p0, "backspace")) { >+ *code = xpdfKeyCodeBackspace; >+ } else if (!strcmp(p0, "insert")) { >+ *code = xpdfKeyCodeInsert; >+ } else if (!strcmp(p0, "delete")) { >+ *code = xpdfKeyCodeDelete; >+ } else if (!strcmp(p0, "home")) { >+ *code = xpdfKeyCodeHome; >+ } else if (!strcmp(p0, "end")) { >+ *code = xpdfKeyCodeEnd; >+ } else if (!strcmp(p0, "pgup")) { >+ *code = xpdfKeyCodePgUp; >+ } else if (!strcmp(p0, "pgdn")) { >+ *code = xpdfKeyCodePgDn; >+ } else if (!strcmp(p0, "left")) { >+ *code = xpdfKeyCodeLeft; >+ } else if (!strcmp(p0, "right")) { >+ *code = xpdfKeyCodeRight; >+ } else if (!strcmp(p0, "up")) { >+ *code = xpdfKeyCodeUp; >+ } else if (!strcmp(p0, "down")) { >+ *code = xpdfKeyCodeDown; >+ } else if (p0[0] == 'f' && p0[1] >= '1' && p0[1] <= '9' && !p0[2]) { >+ *code = xpdfKeyCodeF1 + (p0[1] - '1'); >+ } else if (p0[0] == 'f' && >+ ((p0[1] >= '1' && p0[1] <= '2' && p0[2] >= '0' && p0[2] <= '9') || >+ (p0[1] == '3' && p0[2] >= '0' && p0[2] <= '5')) && >+ !p0[3]) { >+ *code = xpdfKeyCodeF1 + 10 * (p0[1] - '0') + (p0[2] - '0') - 1; >+ } else if (!strncmp(p0, "mousePress", 10) && >+ p0[10] >= '1' && p0[10] <= '7' && !p0[11]) { >+ *code = xpdfKeyCodeMousePress1 + (p0[10] - '1'); >+ } else if (!strncmp(p0, "mouseRelease", 12) && >+ p0[12] >= '1' && p0[12] <= '7' && !p0[13]) { >+ *code = xpdfKeyCodeMouseRelease1 + (p0[12] - '1'); >+ } else if (*p0 >= 0x20 && *p0 <= 0x7e && !p0[1]) { >+ *code = (int)*p0; >+ } else { >+ error(-1, "Bad key/modifier in '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ return gFalse; >+ } >+ >+ p0 = contextStr->getCString(); >+ if (!strcmp(p0, "any")) { >+ *context = xpdfKeyContextAny; >+ } else { >+ *context = xpdfKeyContextAny; >+ while (1) { >+ if (!strncmp(p0, "fullScreen", 10)) { >+ *context |= xpdfKeyContextFullScreen; >+ p0 += 10; >+ } else if (!strncmp(p0, "window", 6)) { >+ *context |= xpdfKeyContextWindow; >+ p0 += 6; >+ } else if (!strncmp(p0, "continuous", 10)) { >+ *context |= xpdfKeyContextContinuous; >+ p0 += 10; >+ } else if (!strncmp(p0, "singlePage", 10)) { >+ *context |= xpdfKeyContextSinglePage; >+ p0 += 10; >+ } else if (!strncmp(p0, "overLink", 8)) { >+ *context |= xpdfKeyContextOverLink; >+ p0 += 8; >+ } else if (!strncmp(p0, "offLink", 7)) { >+ *context |= xpdfKeyContextOffLink; >+ p0 += 7; >+ } else if (!strncmp(p0, "outline", 7)) { >+ *context |= xpdfKeyContextOutline; >+ p0 += 7; >+ } else if (!strncmp(p0, "mainWin", 7)) { >+ *context |= xpdfKeyContextMainWin; >+ p0 += 7; >+ } else if (!strncmp(p0, "scrLockOn", 9)) { >+ *context |= xpdfKeyContextScrLockOn; >+ p0 += 9; >+ } else if (!strncmp(p0, "scrLockOff", 10)) { >+ *context |= xpdfKeyContextScrLockOff; >+ p0 += 10; >+ } else { >+ error(-1, "Bad context in '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ return gFalse; >+ } >+ if (!*p0) { >+ break; >+ } >+ if (*p0 != ',') { >+ error(-1, "Bad context in '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ return gFalse; >+ } >+ ++p0; >+ } >+ } >+ >+ return gTrue; >+} >+ >+void GlobalParams::parseCommand(char *cmdName, GooString **val, >+ GooList *tokens, GooString *fileName, int line) { >+ if (tokens->getLength() != 2) { >+ error(-1, "Bad '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ return; >+ } >+ if (*val) { >+ delete *val; >+ } >+ *val = ((GooString *)tokens->get(1))->copy(); >+} >+ >+void GlobalParams::parseYesNo(char *cmdName, GBool *flag, >+ GooList *tokens, GooString *fileName, int line) { >+ GooString *tok; >+ >+ if (tokens->getLength() != 2) { >+ error(-1, "Bad '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ return; >+ } >+ tok = (GooString *)tokens->get(1); >+ if (!parseYesNo2(tok->getCString(), flag)) { >+ error(-1, "Bad '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ } >+} >+ >+GBool GlobalParams::parseYesNo2(char *token, GBool *flag) { >+ if (!strcmp(token, "yes")) { >+ *flag = gTrue; >+ } else if (!strcmp(token, "no")) { >+ *flag = gFalse; >+ } else { >+ return gFalse; >+ } >+ return gTrue; >+} >+ >+void GlobalParams::parseInteger(char *cmdName, int *val, >+ GooList *tokens, GooString *fileName, int line) { >+ GooString *tok; >+ int i; > >- // set up the initial nameToUnicode table >- for (i = 0; nameToUnicodeTab[i].name; ++i) { >- nameToUnicode->add(nameToUnicodeTab[i].name, nameToUnicodeTab[i].u); >+ if (tokens->getLength() != 2) { >+ error(-1, "Bad '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ return; >+ } >+ tok = (GooString *)tokens->get(1); >+ if (tok->getLength() == 0) { >+ error(-1, "Bad '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ return; >+ } >+ if (tok->getChar(0) == '-') { >+ i = 1; >+ } else { >+ i = 0; >+ } >+ for (; i < tok->getLength(); ++i) { >+ if (tok->getChar(i) < '0' || tok->getChar(i) > '9') { >+ error(-1, "Bad '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ return; >+ } > } >+ *val = atoi(tok->getCString()); >+} > >- // set up the residentUnicodeMaps table >- map = new UnicodeMap("Latin1", gFalse, >- latin1UnicodeMapRanges, latin1UnicodeMapLen); >- residentUnicodeMaps->add(map->getEncodingName(), map); >- map = new UnicodeMap("ASCII7", gFalse, >- ascii7UnicodeMapRanges, ascii7UnicodeMapLen); >- residentUnicodeMaps->add(map->getEncodingName(), map); >- map = new UnicodeMap("Symbol", gFalse, >- symbolUnicodeMapRanges, symbolUnicodeMapLen); >- residentUnicodeMaps->add(map->getEncodingName(), map); >- map = new UnicodeMap("ZapfDingbats", gFalse, zapfDingbatsUnicodeMapRanges, >- zapfDingbatsUnicodeMapLen); >- residentUnicodeMaps->add(map->getEncodingName(), map); >- map = new UnicodeMap("UTF-8", gTrue, &mapUTF8); >- residentUnicodeMaps->add(map->getEncodingName(), map); >- map = new UnicodeMap("UCS-2", gTrue, &mapUCS2); >- residentUnicodeMaps->add(map->getEncodingName(), map); >+void GlobalParams::parseFloat(char *cmdName, double *val, >+ GooList *tokens, GooString *fileName, int line) { >+ GooString *tok; >+ int i; > >- scanEncodingDirs(); >+ if (tokens->getLength() != 2) { >+ error(-1, "Bad '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ return; >+ } >+ tok = (GooString *)tokens->get(1); >+ if (tok->getLength() == 0) { >+ error(-1, "Bad '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ return; >+ } >+ if (tok->getChar(0) == '-') { >+ i = 1; >+ } else { >+ i = 0; >+ } >+ for (; i < tok->getLength(); ++i) { >+ if (!((tok->getChar(i) >= '0' && tok->getChar(i) <= '9') || >+ tok->getChar(i) == '.')) { >+ error(-1, "Bad '%s' config file command (%s:%d)", >+ cmdName, fileName->getCString(), line); >+ return; >+ } >+ } >+ *val = atof(tok->getCString()); > } > > void GlobalParams::scanEncodingDirs() { >@@ -686,34 +1823,6 @@ > delete dir; > } > >-void GlobalParams::parseNameToUnicode(GooString *name) { >- char *tok1, *tok2; >- FILE *f; >- char buf[256]; >- int line; >- Unicode u; >- >- if (!(f = fopen(name->getCString(), "r"))) { >- error(-1, "Couldn't open 'nameToUnicode' file '%s'", >- name->getCString()); >- return; >- } >- line = 1; >- while (getLine(buf, sizeof(buf), f)) { >- tok1 = strtok(buf, " \t\r\n"); >- tok2 = strtok(NULL, " \t\r\n"); >- if (tok1 && tok2) { >- sscanf(tok1, "%x", &u); >- nameToUnicode->add(tok2, u); >- } else { >- error(-1, "Bad line in 'nameToUnicode' file (%s:%d)", >- name->getCString(), line); >- } >- ++line; >- } >- fclose(f); >-} >- > void GlobalParams::addCIDToUnicode(GooString *collection, > GooString *fileName) { > GooString *old; >@@ -744,17 +1853,6 @@ > list->append(dir->copy()); > } > >-GBool GlobalParams::parseYesNo2(char *token, GBool *flag) { >- if (!strcmp(token, "yes")) { >- *flag = gTrue; >- } else if (!strcmp(token, "no")) { >- *flag = gFalse; >- } else { >- return gFalse; >- } >- return gTrue; >-} >- > GlobalParams::~GlobalParams() { > GooHashIter *iter; > GooString *key; >@@ -772,11 +1870,16 @@ > deleteGooHash(unicodeMaps, GooString); > deleteGooList(toUnicodeDirs, GooString); > deleteGooHash(displayFonts, DisplayFontParam); >+ deleteGooHash(displayCIDFonts, DisplayFontParam); >+ deleteGooHash(displayNamedCIDFonts, DisplayFontParam); > #ifdef WIN32 > if (winFontList) { > delete winFontList; > } > #endif >+ if (psFile) { >+ delete psFile; >+ } > deleteGooHash(psFonts, PSFontParam); > deleteGooList(psNamedFonts16, PSFontParam); > deleteGooList(psFonts16, PSFontParam); >@@ -813,6 +1916,114 @@ > baseDir = new GooString(dir); > } > >+void GlobalParams::setupBaseFonts(char *dir) { >+ GooString *fontName; >+ GooString *fileName; >+#ifdef WIN32 >+ HMODULE shell32Lib; >+ BOOL (__stdcall *SHGetSpecialFolderPathFunc)(HWND hwndOwner, >+ LPTSTR lpszPath, >+ int nFolder, >+ BOOL fCreate); >+ char winFontDir[MAX_PATH]; >+#endif >+ FILE *f; >+ DisplayFontParamKind kind; >+ DisplayFontParam *dfp; >+ int i, j; >+ >+#ifdef WIN32 >+ // SHGetSpecialFolderPath isn't available in older versions of >+ // shell32.dll (Win95 and WinNT4), so do a dynamic load >+ winFontDir[0] = '\0'; >+ if ((shell32Lib = LoadLibrary("shell32.dll"))) { >+ if ((SHGetSpecialFolderPathFunc = >+ (BOOL (__stdcall *)(HWND hwndOwner, LPTSTR lpszPath, >+ int nFolder, BOOL fCreate)) >+ GetProcAddress(shell32Lib, "SHGetSpecialFolderPathA"))) { >+ if (!(*SHGetSpecialFolderPathFunc)(NULL, winFontDir, >+ CSIDL_FONTS, FALSE)) { >+ winFontDir[0] = '\0'; >+ } >+ } >+ } >+#endif >+ for (i = 0; displayFontTab[i].name; ++i) { >+ fontName = new GooString(displayFontTab[i].name); >+ if (getDisplayFont(fontName)) { >+ delete fontName; >+ continue; >+ } >+ fileName = NULL; >+ kind = displayFontT1; // make gcc happy >+ if (dir) { >+ fileName = appendToPath(new GooString(dir), displayFontTab[i].t1FileName); >+ kind = displayFontT1; >+ if ((f = fopen(fileName->getCString(), "rb"))) { >+ fclose(f); >+ } else { >+ delete fileName; >+ fileName = NULL; >+ } >+ } >+#ifdef WIN32 >+ if (!fileName && winFontDir[0] && displayFontTab[i].ttFileName) { >+ fileName = appendToPath(new GooString(winFontDir), >+ displayFontTab[i].ttFileName); >+ kind = displayFontTT; >+ if ((f = fopen(fileName->getCString(), "rb"))) { >+ fclose(f); >+ } else { >+ delete fileName; >+ fileName = NULL; >+ } >+ } >+ // SHGetSpecialFolderPath(CSIDL_FONTS) doesn't work on Win 2k Server >+ // or Win2003 Server, or with older versions of shell32.dll, so check >+ // the "standard" directories >+ if (displayFontTab[i].ttFileName) { >+ for (j = 0; !fileName && displayFontDirs[j]; ++j) { >+ fileName = appendToPath(new GooString(displayFontDirs[j]), >+ displayFontTab[i].ttFileName); >+ kind = displayFontTT; >+ if ((f = fopen(fileName->getCString(), "rb"))) { >+ fclose(f); >+ } else { >+ delete fileName; >+ fileName = NULL; >+ } >+ } >+ } >+#else >+ for (j = 0; !fileName && displayFontDirs[j]; ++j) { >+ fileName = appendToPath(new GooString(displayFontDirs[j]), >+ displayFontTab[i].t1FileName); >+ kind = displayFontT1; >+ if ((f = fopen(fileName->getCString(), "rb"))) { >+ fclose(f); >+ } else { >+ delete fileName; >+ fileName = NULL; >+ } >+ } >+#endif >+ if (!fileName) { >+ error(-1, "No display font for '%s'", displayFontTab[i].name); >+ delete fontName; >+ continue; >+ } >+ dfp = new DisplayFontParam(fontName, kind); >+ dfp->t1.fileName = fileName; >+ globalParams->addDisplayFont(dfp); >+ } >+ >+#ifdef WIN32 >+ if (winFontDir[0]) { >+ winFontList = new WinFontList(winFontDir); >+ } >+#endif >+} >+ > //------------------------------------------------------------------------ > // accessors > //------------------------------------------------------------------------ >@@ -1127,6 +2338,78 @@ > return dfp; > } > >+DisplayFontParam *GlobalParams::getDisplayFont(GooString *fontName) { >+ DisplayFontParam *dfp; >+ >+ lockGlobalParams; >+ dfp = (DisplayFontParam *)displayFonts->lookup(fontName); >+#ifdef WIN32 >+ if (!dfp && winFontList) { >+ dfp = winFontList->find(fontName); >+ } >+#endif >+ unlockGlobalParams; >+ return dfp; >+} >+ >+DisplayFontParam *GlobalParams::getDisplayCIDFont(GooString *fontName, >+ GooString *collection) { >+ DisplayFontParam *dfp; >+ >+ lockGlobalParams; >+ if (!fontName || >+ !(dfp = (DisplayFontParam *)displayNamedCIDFonts->lookup(fontName))) { >+ dfp = (DisplayFontParam *)displayCIDFonts->lookup(collection); >+ } >+ unlockGlobalParams; >+ return dfp; >+} >+ >+GooString *GlobalParams::getPSFile() { >+ GooString *s; >+ >+ lockGlobalParams; >+ s = psFile ? psFile->copy() : (GooString *)NULL; >+ unlockGlobalParams; >+ return s; >+} >+ >+int GlobalParams::getPSPaperWidth() { >+ int w; >+ >+ lockGlobalParams; >+ w = psPaperWidth; >+ unlockGlobalParams; >+ return w; >+} >+ >+int GlobalParams::getPSPaperHeight() { >+ int h; >+ >+ lockGlobalParams; >+ h = psPaperHeight; >+ unlockGlobalParams; >+ return h; >+} >+ >+void GlobalParams::getPSImageableArea(int *llx, int *lly, int *urx, int *ury) { >+ lockGlobalParams; >+ *llx = psImageableLLX; >+ *lly = psImageableLLY; >+ *urx = psImageableURX; >+ *ury = psImageableURY; >+ unlockGlobalParams; >+} >+ >+GBool GlobalParams::getPSCrop() { >+ GBool f; >+ >+ lockGlobalParams; >+ f = psCrop; >+ unlockGlobalParams; >+ return f; >+} >+ > GBool GlobalParams::getPSExpandSmaller() { > GBool f; > >@@ -1154,6 +2437,15 @@ > return f; > } > >+GBool GlobalParams::getPSDuplex() { >+ GBool d; >+ >+ lockGlobalParams; >+ d = psDuplex; >+ unlockGlobalParams; >+ return d; >+} >+ > PSLevel GlobalParams::getPSLevel() { > PSLevel level; > >@@ -1326,6 +2618,33 @@ > return NULL; > } > >+GooString *GlobalParams::getInitialZoom() { >+ GooString *s; >+ >+ lockGlobalParams; >+ s = initialZoom->copy(); >+ unlockGlobalParams; >+ return s; >+} >+ >+GBool GlobalParams::getContinuousView() { >+ GBool f; >+ >+ lockGlobalParams; >+ f = continuousView; >+ unlockGlobalParams; >+ return f; >+} >+ >+GBool GlobalParams::getEnableT1lib() { >+ GBool f; >+ >+ lockGlobalParams; >+ f = enableT1lib; >+ unlockGlobalParams; >+ return f; >+} >+ > GBool GlobalParams::getEnableFreeType() { > GBool f; > >@@ -1435,6 +2754,32 @@ > return map; > } > >+GooList *GlobalParams::getKeyBinding(int code, int mods, int context) { >+ KeyBinding *binding; >+ GooList *cmds; >+ int modMask; >+ int i, j; >+ >+ lockGlobalParams; >+ cmds = NULL; >+ // for ASCII chars, ignore the shift modifier >+ modMask = code <= 0xff ? ~xpdfKeyModShift : ~0; >+ for (i = 0; i < keyBindings->getLength(); ++i) { >+ binding = (KeyBinding *)keyBindings->get(i); >+ if (binding->code == code && >+ (binding->mods & modMask) == (mods & modMask) && >+ (~binding->context | context) == ~0) { >+ cmds = new GooList(); >+ for (j = 0; j < binding->cmds->getLength(); ++j) { >+ cmds->append(((GooString *)binding->cmds->get(j))->copy()); >+ } >+ break; >+ } >+ } >+ unlockGlobalParams; >+ return cmds; >+} >+ > GBool GlobalParams::getPrintCommands() { > GBool p; > >@@ -1534,6 +2879,84 @@ > // functions to set parameters > //------------------------------------------------------------------------ > >+void GlobalParams::addDisplayFont(DisplayFontParam *param) { >+ DisplayFontParam *old; >+ >+ lockGlobalParams; >+ if ((old = (DisplayFontParam *)displayFonts->remove(param->name))) { >+ delete old; >+ } >+ displayFonts->add(param->name, param); >+ unlockGlobalParams; >+} >+ >+void GlobalParams::setPSFile(char *file) { >+ lockGlobalParams; >+ if (psFile) { >+ delete psFile; >+ } >+ psFile = new GooString(file); >+ unlockGlobalParams; >+} >+ >+GBool GlobalParams::setPSPaperSize(char *size) { >+ lockGlobalParams; >+ if (!strcmp(size, "match")) { >+ psPaperWidth = psPaperHeight = -1; >+ } else if (!strcmp(size, "letter")) { >+ psPaperWidth = 612; >+ psPaperHeight = 792; >+ } else if (!strcmp(size, "legal")) { >+ psPaperWidth = 612; >+ psPaperHeight = 1008; >+ } else if (!strcmp(size, "A4")) { >+ psPaperWidth = 595; >+ psPaperHeight = 842; >+ } else if (!strcmp(size, "A3")) { >+ psPaperWidth = 842; >+ psPaperHeight = 1190; >+ } else { >+ unlockGlobalParams; >+ return gFalse; >+ } >+ psImageableLLX = psImageableLLY = 0; >+ psImageableURX = psPaperWidth; >+ psImageableURY = psPaperHeight; >+ unlockGlobalParams; >+ return gTrue; >+} >+ >+void GlobalParams::setPSPaperWidth(int width) { >+ lockGlobalParams; >+ psPaperWidth = width; >+ psImageableLLX = 0; >+ psImageableURX = psPaperWidth; >+ unlockGlobalParams; >+} >+ >+void GlobalParams::setPSPaperHeight(int height) { >+ lockGlobalParams; >+ psPaperHeight = height; >+ psImageableLLY = 0; >+ psImageableURY = psPaperHeight; >+ unlockGlobalParams; >+} >+ >+void GlobalParams::setPSImageableArea(int llx, int lly, int urx, int ury) { >+ lockGlobalParams; >+ psImageableLLX = llx; >+ psImageableLLY = lly; >+ psImageableURX = urx; >+ psImageableURY = ury; >+ unlockGlobalParams; >+} >+ >+void GlobalParams::setPSCrop(GBool crop) { >+ lockGlobalParams; >+ psCrop = crop; >+ unlockGlobalParams; >+} >+ > void GlobalParams::setPSExpandSmaller(GBool expand) { > lockGlobalParams; > psExpandSmaller = expand; >@@ -1552,6 +2975,12 @@ > unlockGlobalParams; > } > >+void GlobalParams::setPSDuplex(GBool duplex) { >+ lockGlobalParams; >+ psDuplex = duplex; >+ unlockGlobalParams; >+} >+ > void GlobalParams::setPSLevel(PSLevel level) { > lockGlobalParams; > psLevel = level; >@@ -1635,6 +3064,28 @@ > unlockGlobalParams; > } > >+void GlobalParams::setInitialZoom(char *s) { >+ lockGlobalParams; >+ delete initialZoom; >+ initialZoom = new GooString(s); >+ unlockGlobalParams; >+} >+ >+void GlobalParams::setContinuousView(GBool cont) { >+ lockGlobalParams; >+ continuousView = cont; >+ unlockGlobalParams; >+} >+ >+GBool GlobalParams::setEnableT1lib(char *s) { >+ GBool ok; >+ >+ lockGlobalParams; >+ ok = parseYesNo2(s, &enableT1lib); >+ unlockGlobalParams; >+ return ok; >+} >+ > GBool GlobalParams::setEnableFreeType(char *s) { > GBool ok; > >diff -ur poppler-0.6.2.orig/poppler/GlobalParams.h poppler-0.6.2/poppler/GlobalParams.h >--- poppler-0.6.2.orig/poppler/GlobalParams.h 2007-11-05 00:11:04.000000000 +0100 >+++ poppler-0.6.2/poppler/GlobalParams.h 2007-11-16 21:16:32.000000000 +0100 >@@ -125,16 +125,85 @@ > > //------------------------------------------------------------------------ > >+class KeyBinding { >+public: >+ >+ int code; // 0x20 .. 0xfe = ASCII, >+ // >=0x10000 = special keys, mouse buttons, >+ // etc. (xpdfKeyCode* symbols) >+ int mods; // modifiers (xpdfKeyMod* symbols, or-ed >+ // together) >+ int context; // context (xpdfKeyContext* symbols, or-ed >+ // together) >+ GooList *cmds; // list of commands [GooString] >+ >+ KeyBinding(int codeA, int modsA, int contextA, char *cmd0); >+ KeyBinding(int codeA, int modsA, int contextA, char *cmd0, char *cmd1); >+ KeyBinding(int codeA, int modsA, int contextA, GooList *cmdsA); >+ ~KeyBinding(); >+}; >+ >+#define xpdfKeyCodeTab 0x1000 >+#define xpdfKeyCodeReturn 0x1001 >+#define xpdfKeyCodeEnter 0x1002 >+#define xpdfKeyCodeBackspace 0x1003 >+#define xpdfKeyCodeInsert 0x1004 >+#define xpdfKeyCodeDelete 0x1005 >+#define xpdfKeyCodeHome 0x1006 >+#define xpdfKeyCodeEnd 0x1007 >+#define xpdfKeyCodePgUp 0x1008 >+#define xpdfKeyCodePgDn 0x1009 >+#define xpdfKeyCodeLeft 0x100a >+#define xpdfKeyCodeRight 0x100b >+#define xpdfKeyCodeUp 0x100c >+#define xpdfKeyCodeDown 0x100d >+#define xpdfKeyCodeF1 0x1100 >+#define xpdfKeyCodeF35 0x1122 >+#define xpdfKeyCodeMousePress1 0x2001 >+#define xpdfKeyCodeMousePress2 0x2002 >+#define xpdfKeyCodeMousePress3 0x2003 >+#define xpdfKeyCodeMousePress4 0x2004 >+#define xpdfKeyCodeMousePress5 0x2005 >+#define xpdfKeyCodeMousePress6 0x2006 >+#define xpdfKeyCodeMousePress7 0x2007 >+#define xpdfKeyCodeMouseRelease1 0x2101 >+#define xpdfKeyCodeMouseRelease2 0x2102 >+#define xpdfKeyCodeMouseRelease3 0x2103 >+#define xpdfKeyCodeMouseRelease4 0x2104 >+#define xpdfKeyCodeMouseRelease5 0x2105 >+#define xpdfKeyCodeMouseRelease6 0x2106 >+#define xpdfKeyCodeMouseRelease7 0x2107 >+#define xpdfKeyModNone 0 >+#define xpdfKeyModShift (1 << 0) >+#define xpdfKeyModCtrl (1 << 1) >+#define xpdfKeyModAlt (1 << 2) >+#define xpdfKeyContextAny 0 >+#define xpdfKeyContextFullScreen (1 << 0) >+#define xpdfKeyContextWindow (2 << 0) >+#define xpdfKeyContextContinuous (1 << 2) >+#define xpdfKeyContextSinglePage (2 << 2) >+#define xpdfKeyContextOverLink (1 << 4) >+#define xpdfKeyContextOffLink (2 << 4) >+#define xpdfKeyContextOutline (1 << 6) >+#define xpdfKeyContextMainWin (2 << 6) >+#define xpdfKeyContextScrLockOn (1 << 8) >+#define xpdfKeyContextScrLockOff (2 << 8) >+ >+//------------------------------------------------------------------------ >+ > class GlobalParams { > public: > > // Initialize the global parameters by attempting to read a config > // file. >- GlobalParams(); >+ GlobalParams(char *cfgFileName = NULL); > > ~GlobalParams(); > > void setBaseDir(char *dir); >+ void setupBaseFonts(char *dir); >+ >+ void parseLine(char *buf, GooString *fileName, int line); > > //----- accessors > >@@ -147,6 +216,14 @@ > FILE *findCMapFile(GooString *collection, GooString *cMapName); > FILE *findToUnicodeFile(GooString *name); > DisplayFontParam *getDisplayFont(GfxFont *font); >+ DisplayFontParam *getDisplayFont(GooString *fontName); >+ DisplayFontParam *getDisplayCIDFont(GooString *fontName, GooString *collection); >+ GooString *getPSFile(); >+ int getPSPaperWidth(); >+ int getPSPaperHeight(); >+ void getPSImageableArea(int *llx, int *lly, int *urx, int *ury); >+ GBool getPSDuplex(); >+ GBool getPSCrop(); > GBool getPSExpandSmaller(); > GBool getPSShrinkLarger(); > GBool getPSCenter(); >@@ -165,6 +242,9 @@ > GBool getTextPageBreaks(); > GBool getTextKeepTinyChars(); > GooString *findFontFile(GooString *fontName, char **exts); >+ GooString *getInitialZoom(); >+ GBool getContinuousView(); >+ GBool getEnableT1lib(); > GBool getEnableFreeType(); > GBool getAntialias(); > GBool getVectorAntialias(); >@@ -175,8 +255,11 @@ > double getScreenGamma(); > double getScreenBlackThreshold(); > double getScreenWhiteThreshold(); >+ GooString *getURLCommand() { return urlCommand; } >+ GooString *getMovieCommand() { return movieCommand; } > GBool getMapNumericCharNames(); > GBool getMapUnknownCharNames(); >+ GooList *getKeyBinding(int code, int mods, int context); > GBool getPrintCommands(); > GBool getProfileCommands(); > GBool getErrQuiet(); >@@ -191,6 +274,14 @@ > #endif > > //----- functions to set parameters >+ void addDisplayFont(DisplayFontParam *param); >+ void setPSFile(char *file); >+ GBool setPSPaperSize(char *size); >+ void setPSPaperWidth(int width); >+ void setPSPaperHeight(int height); >+ void setPSImageableArea(int llx, int lly, int urx, int ury); >+ void setPSDuplex(GBool duplex); >+ void setPSCrop(GBool crop); > void setPSExpandSmaller(GBool expand); > void setPSShrinkLarger(GBool shrink); > void setPSCenter(GBool center); >@@ -206,6 +297,9 @@ > GBool setTextEOL(char *s); > void setTextPageBreaks(GBool pageBreaks); > void setTextKeepTinyChars(GBool keep); >+ void setInitialZoom(char *s); >+ void setContinuousView(GBool cont); >+ GBool setEnableT1lib(char *s); > GBool setEnableFreeType(char *s); > GBool setAntialias(char *s); > GBool setVectorAntialias(char *s); >@@ -229,8 +323,45 @@ > > private: > >+ void createDefaultKeyBindings(); >+ void parseFile(GooString *fileName, FILE *f); >+ void parseNameToUnicode(GooList *tokens, GooString *fileName, int line); > void parseNameToUnicode(GooString *name); >+ void parseCIDToUnicode(GooList *tokens, GooString *fileName, int line); >+ void parseUnicodeToUnicode(GooList *tokens, GooString *fileName, int line); >+ void parseUnicodeMap(GooList *tokens, GooString *fileName, int line); >+ void parseCMapDir(GooList *tokens, GooString *fileName, int line); >+ void parseToUnicodeDir(GooList *tokens, GooString *fileName, int line); >+ void parseDisplayFont(GooList *tokens, GooHash *fontHash, >+ DisplayFontParamKind kind, >+ GooString *fileName, int line); >+ void parsePSFile(GooList *tokens, GooString *fileName, int line); >+ void parsePSPaperSize(GooList *tokens, GooString *fileName, int line); >+ void parsePSImageableArea(GooList *tokens, GooString *fileName, int line); >+ void parsePSLevel(GooList *tokens, GooString *fileName, int line); >+ void parsePSFont(GooList *tokens, GooString *fileName, int line); >+ void parsePSFont16(char *cmdName, GooList *fontList, >+ GooList *tokens, GooString *fileName, int line); >+ void parseTextEncoding(GooList *tokens, GooString *fileName, int line); >+ void parseTextEOL(GooList *tokens, GooString *fileName, int line); >+ void parseFontDir(GooList *tokens, GooString *fileName, int line); >+ void parseInitialZoom(GooList *tokens, GooString *fileName, int line); >+ void parseScreenType(GooList *tokens, GooString *fileName, int line); >+ void parseBind(GooList *tokens, GooString *fileName, int line); >+ void parseUnbind(GooList *tokens, GooString *fileName, int line); >+ GBool parseKey(GooString *modKeyStr, GooString *contextStr, >+ int *code, int *mods, int *context, >+ char *cmdName, >+ GooList *tokens, GooString *fileName, int line); >+ void parseCommand(char *cmdName, GooString **val, >+ GooList *tokens, GooString *fileName, int line); >+ void parseYesNo(char *cmdName, GBool *flag, >+ GooList *tokens, GooString *fileName, int line); > GBool parseYesNo2(char *token, GBool *flag); >+ void parseInteger(char *cmdName, int *val, >+ GooList *tokens, GooString *fileName, int line); >+ void parseFloat(char *cmdName, double *val, >+ GooList *tokens, GooString *fileName, int line); > UnicodeMap *getUnicodeMap2(GooString *encodingName); > > void scanEncodingDirs(); >@@ -265,9 +396,22 @@ > #ifdef WIN32 > WinFontList *winFontList; // system TrueType fonts > #endif >+ GooHash *displayCIDFonts; // display CID font info, indexed by >+ // collection [DisplayFontParam] >+ GooHash *displayNamedCIDFonts; // display CID font info, indexed by >+ // font name [DisplayFontParam] >+ GooString *psFile; // PostScript file or command (for xpdf) >+ int psPaperWidth; // paper size, in PostScript points, for >+ int psPaperHeight; // PostScript output >+ int psImageableLLX, // imageable area, in PostScript points, >+ psImageableLLY, // for PostScript output >+ psImageableURX, >+ psImageableURY; >+ GBool psCrop; // crop PS output to CropBox > GBool psExpandSmaller; // expand smaller pages to fill paper > GBool psShrinkLarger; // shrink larger pages to fit paper > GBool psCenter; // center pages on the paper >+ GBool psDuplex; // enable duplexing in PostScript? > PSLevel psLevel; // PostScript level to generate > GooHash *psFonts; // PostScript font info, indexed by PDF > // font name [PSFontParam] >@@ -288,6 +432,9 @@ > GBool textPageBreaks; // insert end-of-page markers? > GBool textKeepTinyChars; // keep all characters in text output > GooList *fontDirs; // list of font dirs [GooString] >+ GooString *initialZoom; // initial zoom level >+ GBool continuousView; // continuous view mode >+ GBool enableT1lib; // t1lib enable flag > GBool enableFreeType; // FreeType enable flag > GBool antialias; // anti-aliasing enable flag > GBool vectorAntialias; // vector anti-aliasing enable flag >@@ -298,8 +445,11 @@ > double screenGamma; // screen gamma correction > double screenBlackThreshold; // screen black clamping threshold > double screenWhiteThreshold; // screen white clamping threshold >+ GooString *urlCommand; // command executed for URL links >+ GooString *movieCommand; // command executed for movie annotations > GBool mapNumericCharNames; // map numeric char names (from font subsets)? > GBool mapUnknownCharNames; // map unknown char names? >+ GooList *keyBindings; // key & mouse button bindings [KeyBinding] > GBool printCommands; // print the drawing commands > GBool profileCommands; // profile the drawing commands > GBool errQuiet; // suppress error messages? >@@ -312,8 +462,8 @@ > FcConfig *FCcfg; > > #ifdef ENABLE_PLUGINS >- GList *plugins; // list of plugins [Plugin] >- GList *securityHandlers; // list of loaded security handlers >+ GooList *plugins; // list of plugins [Plugin] >+ GooList *securityHandlers; // list of loaded security handlers > // [XpdfSecurityHandler] > #endif >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 199398
: 136114 |
136115
|
136118