poppler/CairoOutputDev.cc | 2 poppler/GfxFont.cc | 94 ++++++++++----------- poppler/GlobalParams.cc | 193 --------------------------------------------- poppler/GlobalParams.h | 44 ---------- poppler/SplashOutputDev.cc | 66 ++++----------- poppler/TextOutputDev.cc | 3 6 files changed, 68 insertions(+), 334 deletions(-)
New commits: commit 5b8fe4ee986673f15fcf8f58409cc85e8bf7ca12 Author: Albert Astals Cid <[email protected]> Date: Thu Oct 19 17:49:06 2017 +0200 Remove various never called internal setters from GlobalParams.h TextKeepTinyChars: false, simplify if in TextOutputDev DisableFreeTypeHinting: didn't actually have a getter :D StrokeAdjust: true, adjust the code in Cairo/SplashOutputDev to use gTrue ScreenType: unset, simplify switch in SplashOutputDev ScreenSize: -1, simplify code in SplashOutputDev ScreenDotRadius: -1, simplify code in SplashOutputDev ScreenGamma: 1.0, simplify code in SplashOutputDev ScreenBlackThreshold: 0.0, simplify code in SplashOutputDev ScreenWhiteThreshold: 1.0, simplify code in SplashOutputDev MinLineWidth: 0.0, define it as static const in SplashOutputDev since was used in various places MapNumericCharNames: true, remove GfxFont.cc if guard MapUnknownCharNames: true, remove GfxFont.cc if guard diff --git a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc index 80f7a99e..fdff172e 100644 --- a/poppler/CairoOutputDev.cc +++ b/poppler/CairoOutputDev.cc @@ -169,7 +169,7 @@ CairoOutputDev::CairoOutputDev() { // the SA parameter supposedly defaults to false, but Acrobat // apparently hardwires it to true - stroke_adjust = globalParams->getStrokeAdjust(); + stroke_adjust = gTrue; align_stroke_coords = gFalse; adjusted_stroke_width = gFalse; xref = NULL; diff --git a/poppler/GfxFont.cc b/poppler/GfxFont.cc index 04431b3c..d06eadff 100644 --- a/poppler/GfxFont.cc +++ b/poppler/GfxFont.cc @@ -1311,12 +1311,10 @@ Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA continue; } - // if the 'mapUnknownCharNames' flag is set, do a simple pass-through + // do a simple pass-through // mapping for unknown character names - if (globalParams->getMapUnknownCharNames()) { - uBuf[0] = code; - ctu->setMapping((CharCode)code, uBuf, 1); - } + uBuf[0] = code; + ctu->setMapping((CharCode)code, uBuf, 1); } } } @@ -1505,54 +1503,52 @@ static int parseCharName(char *charName, Unicode *uBuf, int uLen, if (names && (uBuf[0] = globalParams->mapNameToUnicodeText(charName))) { return 1; } - if (globalParams->getMapNumericCharNames()) { - unsigned int n = strlen(charName); - // 3.3. otherwise, if the component is of the form "uni" (U+0075 U+006E - // U+0069) followed by a sequence of uppercase hexadecimal digits (0 .. 9, - // A .. F, i.e. U+0030 .. U+0039, U+0041 .. U+0046), the length of that - // sequence is a multiple of four, and each group of four digits represents - // a number in the set {0x0000 .. 0xD7FF, 0xE000 .. 0xFFFF}, then interpret - // each such number as a Unicode scalar value and map the component to the - // string made of those scalar values. Note that the range and digit length - // restrictions mean that the "uni" prefix can be used only with Unicode - // values from the Basic Multilingual Plane (BMP). - if (n >= 7 && (n % 4) == 3 && !strncmp(charName, "uni", 3)) { - int i; - unsigned int m; - for (i = 0, m = 3; i < uLen && m < n; m += 4) { - if (isxdigit(charName[m]) && isxdigit(charName[m + 1]) && - isxdigit(charName[m + 2]) && isxdigit(charName[m + 3])) { - unsigned int u; - sscanf(charName + m, "%4x", &u); - if (u <= 0xD7FF || (0xE000 <= u && u <= 0xFFFF)) { - uBuf[i++] = u; - } - } - } - return i; - } - // 3.4. otherwise, if the component is of the form "u" (U+0075) followed by - // a sequence of four to six uppercase hexadecimal digits {0 .. 9, A .. F} - // (U+0030 .. U+0039, U+0041 .. U+0046), and those digits represent a - // number in {0x0000 .. 0xD7FF, 0xE000 .. 0x10FFFF}, then interpret this - // number as a Unicode scalar value and map the component to the string - // made of this scalar value. - if (n >= 5 && n <= 7 && charName[0] == 'u' && isxdigit(charName[1]) && - isxdigit(charName[2]) && isxdigit(charName[3]) && isxdigit(charName[4]) - && (n <= 5 || isxdigit(charName[5])) - && (n <= 6 || isxdigit(charName[6]))) { - unsigned int u; - sscanf(charName + 1, "%x", &u); - if (u <= 0xD7FF || (0xE000 <= u && u <= 0x10FFFF)) { - uBuf[0] = u; - return 1; + unsigned int n = strlen(charName); + // 3.3. otherwise, if the component is of the form "uni" (U+0075 U+006E + // U+0069) followed by a sequence of uppercase hexadecimal digits (0 .. 9, + // A .. F, i.e. U+0030 .. U+0039, U+0041 .. U+0046), the length of that + // sequence is a multiple of four, and each group of four digits represents + // a number in the set {0x0000 .. 0xD7FF, 0xE000 .. 0xFFFF}, then interpret + // each such number as a Unicode scalar value and map the component to the + // string made of those scalar values. Note that the range and digit length + // restrictions mean that the "uni" prefix can be used only with Unicode + // values from the Basic Multilingual Plane (BMP). + if (n >= 7 && (n % 4) == 3 && !strncmp(charName, "uni", 3)) { + int i; + unsigned int m; + for (i = 0, m = 3; i < uLen && m < n; m += 4) { + if (isxdigit(charName[m]) && isxdigit(charName[m + 1]) && + isxdigit(charName[m + 2]) && isxdigit(charName[m + 3])) { + unsigned int u; + sscanf(charName + m, "%4x", &u); + if (u <= 0xD7FF || (0xE000 <= u && u <= 0xFFFF)) { + uBuf[i++] = u; + } } } - // Not in Adobe Glyph Mapping convention: look for names like xx - // or Axx and parse for hex or decimal values. - if (numeric && parseNumericName(charName, hex, uBuf)) + return i; + } + // 3.4. otherwise, if the component is of the form "u" (U+0075) followed by + // a sequence of four to six uppercase hexadecimal digits {0 .. 9, A .. F} + // (U+0030 .. U+0039, U+0041 .. U+0046), and those digits represent a + // number in {0x0000 .. 0xD7FF, 0xE000 .. 0x10FFFF}, then interpret this + // number as a Unicode scalar value and map the component to the string + // made of this scalar value. + if (n >= 5 && n <= 7 && charName[0] == 'u' && isxdigit(charName[1]) && + isxdigit(charName[2]) && isxdigit(charName[3]) && isxdigit(charName[4]) + && (n <= 5 || isxdigit(charName[5])) + && (n <= 6 || isxdigit(charName[6]))) { + unsigned int u; + sscanf(charName + 1, "%x", &u); + if (u <= 0xD7FF || (0xE000 <= u && u <= 0x10FFFF)) { + uBuf[0] = u; return 1; + } } + // Not in Adobe Glyph Mapping convention: look for names like xx + // or Axx and parse for hex or decimal values. + if (numeric && parseNumericName(charName, hex, uBuf)) + return 1; // 3.5. otherwise, map the component to the empty string return 0; } diff --git a/poppler/GlobalParams.cc b/poppler/GlobalParams.cc index 93c42d2a..e3de7e3f 100644 --- a/poppler/GlobalParams.cc +++ b/poppler/GlobalParams.cc @@ -583,19 +583,8 @@ GlobalParams::GlobalParams(const char *customPopplerDataDir) textEOL = eolUnix; #endif textPageBreaks = gTrue; - textKeepTinyChars = gFalse; enableFreeType = gTrue; - strokeAdjust = gTrue; - screenType = screenUnset; - screenSize = -1; - screenDotRadius = -1; - screenGamma = 1.0; - screenBlackThreshold = 0.0; - screenWhiteThreshold = 1.0; - minLineWidth = 0.0; overprintPreview = gFalse; - mapNumericCharNames = gTrue; - mapUnknownCharNames = gTrue; printCommands = gFalse; profileCommands = gFalse; errQuiet = gFalse; @@ -1429,15 +1418,6 @@ GBool GlobalParams::getTextPageBreaks() { return pageBreaks; } -GBool GlobalParams::getTextKeepTinyChars() { - GBool tiny; - - lockGlobalParams; - tiny = textKeepTinyChars; - unlockGlobalParams; - return tiny; -} - GBool GlobalParams::getEnableFreeType() { GBool f; @@ -1447,96 +1427,6 @@ GBool GlobalParams::getEnableFreeType() { return f; } -GBool GlobalParams::getStrokeAdjust() { - GBool f; - - lockGlobalParams; - f = strokeAdjust; - unlockGlobalParams; - return f; -} - -ScreenType GlobalParams::getScreenType() { - ScreenType t; - - lockGlobalParams; - t = screenType; - unlockGlobalParams; - return t; -} - -int GlobalParams::getScreenSize() { - int size; - - lockGlobalParams; - size = screenSize; - unlockGlobalParams; - return size; -} - -int GlobalParams::getScreenDotRadius() { - int r; - - lockGlobalParams; - r = screenDotRadius; - unlockGlobalParams; - return r; -} - -double GlobalParams::getScreenGamma() { - double gamma; - - lockGlobalParams; - gamma = screenGamma; - unlockGlobalParams; - return gamma; -} - -double GlobalParams::getScreenBlackThreshold() { - double thresh; - - lockGlobalParams; - thresh = screenBlackThreshold; - unlockGlobalParams; - return thresh; -} - -double GlobalParams::getScreenWhiteThreshold() { - double thresh; - - lockGlobalParams; - thresh = screenWhiteThreshold; - unlockGlobalParams; - return thresh; -} - -double GlobalParams::getMinLineWidth() { - double minLineWidthA; - - lockGlobalParams; - minLineWidthA = minLineWidth; - unlockGlobalParams; - return minLineWidthA; -} - -GBool GlobalParams::getMapNumericCharNames() { - GBool map; - - lockGlobalParams; - map = mapNumericCharNames; - unlockGlobalParams; - return map; -} - -GBool GlobalParams::getMapUnknownCharNames() { - GBool map; - - lockGlobalParams; - map = mapUnknownCharNames; - unlockGlobalParams; - return map; -} - GBool GlobalParams::getPrintCommands() { GBool p; @@ -1712,12 +1602,6 @@ void GlobalParams::setTextPageBreaks(GBool pageBreaks) { unlockGlobalParams; } -void GlobalParams::setTextKeepTinyChars(GBool keep) { - lockGlobalParams; - textKeepTinyChars = keep; - unlockGlobalParams; -} - GBool GlobalParams::setEnableFreeType(char *s) { GBool ok; @@ -1727,89 +1611,12 @@ GBool GlobalParams::setEnableFreeType(char *s) { return ok; } -GBool GlobalParams::setDisableFreeTypeHinting(char *s) { - GBool ok; - - lockGlobalParams; - ok = parseYesNo2(s, &disableFreeTypeHinting); - unlockGlobalParams; - return ok; -} - -void GlobalParams::setStrokeAdjust(GBool adjust) -{ - lockGlobalParams; - strokeAdjust = adjust; - unlockGlobalParams; -} - -void GlobalParams::setScreenType(ScreenType st) -{ - lockGlobalParams; - screenType = st; - unlockGlobalParams; -} - -void GlobalParams::setScreenSize(int size) -{ - lockGlobalParams; - screenSize = size; - unlockGlobalParams; -} - -void GlobalParams::setScreenDotRadius(int radius) -{ - lockGlobalParams; - screenDotRadius = radius; - unlockGlobalParams; -} - -void GlobalParams::setScreenGamma(double gamma) -{ - lockGlobalParams; - screenGamma = gamma; - unlockGlobalParams; -} - -void GlobalParams::setScreenBlackThreshold(double blackThreshold) -{ - lockGlobalParams; - screenBlackThreshold = blackThreshold; - unlockGlobalParams; -} - -void GlobalParams::setScreenWhiteThreshold(double whiteThreshold) -{ - lockGlobalParams; - screenWhiteThreshold = whiteThreshold; - unlockGlobalParams; -} - -void GlobalParams::setMinLineWidth(double minLineWidthA) -{ - lockGlobalParams; - minLineWidth = minLineWidthA; - unlockGlobalParams; -} - void GlobalParams::setOverprintPreview(GBool overprintPreviewA) { lockGlobalParams; overprintPreview = overprintPreviewA; unlockGlobalParams; } -void GlobalParams::setMapNumericCharNames(GBool map) { - lockGlobalParams; - mapNumericCharNames = map; - unlockGlobalParams; -} - -void GlobalParams::setMapUnknownCharNames(GBool map) { - lockGlobalParams; - mapUnknownCharNames = map; - unlockGlobalParams; -} - void GlobalParams::setPrintCommands(GBool printCommandsA) { lockGlobalParams; printCommands = printCommandsA; diff --git a/poppler/GlobalParams.h b/poppler/GlobalParams.h index 16dc7a4a..31e8cbfa 100644 --- a/poppler/GlobalParams.h +++ b/poppler/GlobalParams.h @@ -100,15 +100,6 @@ enum EndOfLineKind { //------------------------------------------------------------------------ -enum ScreenType { - screenUnset, - screenDispersed, - screenClustered, - screenStochasticClustered -}; - -//------------------------------------------------------------------------ - class GlobalParams { public: @@ -147,19 +138,8 @@ public: GooString *getTextEncodingName(); EndOfLineKind getTextEOL(); GBool getTextPageBreaks(); - GBool getTextKeepTinyChars(); GBool getEnableFreeType(); - GBool getStrokeAdjust(); - ScreenType getScreenType(); - int getScreenSize(); - int getScreenDotRadius(); - double getScreenGamma(); - double getScreenBlackThreshold(); - double getScreenWhiteThreshold(); - double getMinLineWidth(); GBool getOverprintPreview() { return overprintPreview; } - GBool getMapNumericCharNames(); - GBool getMapUnknownCharNames(); GBool getPrintCommands(); GBool getProfileCommands(); GBool getErrQuiet(); @@ -184,20 +164,8 @@ public: void setTextEncoding(char *encodingName); GBool setTextEOL(char *s); void setTextPageBreaks(GBool pageBreaks); - void setTextKeepTinyChars(GBool keep); GBool setEnableFreeType(char *s); - GBool setDisableFreeTypeHinting(char *s); - void setStrokeAdjust(GBool strokeAdjust); - void setScreenType(ScreenType st); - void setScreenSize(int size); - void setScreenDotRadius(int radius); - void setScreenGamma(double gamma); - void setScreenBlackThreshold(double blackThreshold); - void setScreenWhiteThreshold(double whiteThreshold); - void setMinLineWidth(double minLineWidth); void setOverprintPreview(GBool overprintPreviewA); - void setMapNumericCharNames(GBool map); - void setMapUnknownCharNames(GBool map); void setPrintCommands(GBool printCommandsA); void setProfileCommands(GBool profileCommandsA); void setErrQuiet(GBool errQuietA); @@ -258,20 +226,8 @@ private: EndOfLineKind textEOL; // type of EOL marker to use for text // output GBool textPageBreaks; // insert end-of-page markers? - GBool textKeepTinyChars; // keep all characters in text output GBool enableFreeType; // FreeType enable flag - GBool disableFreeTypeHinting; // FreeType disable hinting flag - GBool strokeAdjust; // stroke adjustment enable flag - ScreenType screenType; // halftone screen type - int screenSize; // screen matrix size - int screenDotRadius; // screen dot radius - double screenGamma; // screen gamma correction - double screenBlackThreshold; // screen black clamping threshold - double screenWhiteThreshold; // screen white clamping threshold - double minLineWidth; // minimum line width GBool overprintPreview; // enable overprint preview - GBool mapNumericCharNames; // map numeric char names (from font subsets)? - GBool mapUnknownCharNames; // map unknown char names? GBool printCommands; // print the drawing commands GBool profileCommands; // profile the drawing commands GBool errQuiet; // suppress error messages? diff --git a/poppler/SplashOutputDev.cc b/poppler/SplashOutputDev.cc index dc5b6871..ff4e9119 100644 --- a/poppler/SplashOutputDev.cc +++ b/poppler/SplashOutputDev.cc @@ -103,6 +103,8 @@ extern "C" int unlink(char *filename); #endif #endif +static const double s_minLineWidth = 0.0; + static inline void convertGfxColor(SplashColorPtr dest, SplashColorMode colorMode, GfxColorSpace *colorSpace, @@ -1407,7 +1409,7 @@ SplashOutputDev::SplashOutputDev(SplashColorMode colorModeA, bitmap = new SplashBitmap(1, 1, bitmapRowPad, colorMode, colorMode != splashModeMono1, bitmapTopDown); splash = new Splash(bitmap, vectorAntialias, &screenParams); - splash->setMinLineWidth(globalParams->getMinLineWidth()); + splash->setMinLineWidth(s_minLineWidth); splash->setThinLineMode(thinLineMode); splash->clear(paperColor, 0); @@ -1425,27 +1427,15 @@ SplashOutputDev::SplashOutputDev(SplashColorMode colorModeA, } void SplashOutputDev::setupScreenParams(double hDPI, double vDPI) { - screenParams.size = globalParams->getScreenSize(); - screenParams.dotRadius = globalParams->getScreenDotRadius(); - screenParams.gamma = (SplashCoord)globalParams->getScreenGamma(); - screenParams.blackThreshold = - (SplashCoord)globalParams->getScreenBlackThreshold(); - screenParams.whiteThreshold = - (SplashCoord)globalParams->getScreenWhiteThreshold(); - switch (globalParams->getScreenType()) { - case screenDispersed: - screenParams.type = splashScreenDispersed; - if (screenParams.size < 0) { - screenParams.size = 4; - } - break; - case screenClustered: - screenParams.type = splashScreenClustered; - if (screenParams.size < 0) { - screenParams.size = 10; - } - break; - case screenStochasticClustered: + screenParams.size = -1; + screenParams.dotRadius = -1; + screenParams.gamma = (SplashCoord)1.0; + screenParams.blackThreshold = (SplashCoord)0.0; + screenParams.whiteThreshold = (SplashCoord)1.0; + + // use clustered dithering for resolution >= 300 dpi + // (compare to 299.9 to avoid floating point issues) + if (hDPI > 299.9 && vDPI > 299.9) { screenParams.type = splashScreenStochasticClustered; if (screenParams.size < 0) { screenParams.size = 64; @@ -1453,24 +1443,10 @@ void SplashOutputDev::setupScreenParams(double hDPI, double vDPI) { if (screenParams.dotRadius < 0) { screenParams.dotRadius = 2; } - break; - case screenUnset: - default: - // use clustered dithering for resolution >= 300 dpi - // (compare to 299.9 to avoid floating point issues) - if (hDPI > 299.9 && vDPI > 299.9) { - screenParams.type = splashScreenStochasticClustered; - if (screenParams.size < 0) { - screenParams.size = 64; - } - if (screenParams.dotRadius < 0) { - screenParams.dotRadius = 2; - } - } else { - screenParams.type = splashScreenDispersed; - if (screenParams.size < 0) { - screenParams.size = 4; - } + } else { + screenParams.type = splashScreenDispersed; + if (screenParams.size < 0) { + screenParams.size = 4; } } } @@ -1558,7 +1534,7 @@ void SplashOutputDev::startPage(int pageNum, GfxState *state, XRef *xrefA) { } splash = new Splash(bitmap, vectorAntialias, &screenParams); splash->setThinLineMode(thinLineMode); - splash->setMinLineWidth(globalParams->getMinLineWidth()); + splash->setMinLineWidth(s_minLineWidth); if (state) { ctm = state->getCTM(); mat[0] = (SplashCoord)ctm[0]; @@ -1600,7 +1576,7 @@ void SplashOutputDev::startPage(int pageNum, GfxState *state, XRef *xrefA) { splash->setFlatness(1); // the SA parameter supposedly defaults to false, but Acrobat // apparently hardwires it to true - splash->setStrokeAdjust(globalParams->getStrokeAdjust()); + splash->setStrokeAdjust(gTrue); splash->clear(paperColor, 0); } @@ -2854,7 +2830,7 @@ void SplashOutputDev::type3D1(GfxState *state, double wx, double wy, splash->clear(color); color[0] = 0xff; } - splash->setMinLineWidth(globalParams->getMinLineWidth()); + splash->setMinLineWidth(s_minLineWidth); splash->setThinLineMode(splashThinLineDefault); splash->setFillPattern(new SplashSolidColor(color)); splash->setStrokePattern(new SplashSolidColor(color)); @@ -4315,7 +4291,7 @@ void SplashOutputDev::beginTransparencyGroup(GfxState *state, double *bbox, #endif } splash->setThinLineMode(transpGroup->origSplash->getThinLineMode()); - splash->setMinLineWidth(globalParams->getMinLineWidth()); + splash->setMinLineWidth(s_minLineWidth); //~ Acrobat apparently copies at least the fill and stroke colors, and //~ maybe other state(?) -- but not the clipping path (and not sure //~ what else) @@ -4731,7 +4707,7 @@ GBool SplashOutputDev::tilingPatternFill(GfxState *state, Gfx *gfxA, Catalog *ca splash->clear(paperColor, 0); } splash->setThinLineMode(formerSplash->getThinLineMode()); - splash->setMinLineWidth(globalParams->getMinLineWidth()); + splash->setMinLineWidth(s_minLineWidth); box.x1 = bbox[0]; box.y1 = bbox[1]; box.x2 = bbox[2]; box.y2 = bbox[3]; diff --git a/poppler/TextOutputDev.cc b/poppler/TextOutputDev.cc index 14002407..6b642491 100644 --- a/poppler/TextOutputDev.cc +++ b/poppler/TextOutputDev.cc @@ -2599,8 +2599,7 @@ void TextPage::addChar(GfxState *state, double x, double y, } // check the tiny chars limit - if (!globalParams->getTextKeepTinyChars() && - fabs(w1) < 3 && fabs(h1) < 3) { + if (fabs(w1) < 3 && fabs(h1) < 3) { if (++nTinyChars > 50000) { charPos += nBytes; return; _______________________________________________ poppler mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/poppler
