aboutsummaryrefslogtreecommitdiff
path: root/graphics/inkscape
diff options
context:
space:
mode:
authorJoe Marcus Clarke <marcus@FreeBSD.org>2008-07-01 05:59:24 +0000
committerJoe Marcus Clarke <marcus@FreeBSD.org>2008-07-01 05:59:24 +0000
commitdfee464fa0207256fb7b8fdf2b0ebaf5b22fc10a (patch)
tree03b8a461a4eb3c3721a9a22bb613e710e8a3ebfa /graphics/inkscape
parent4b5ebe33b8dc31b3e4b3a0a68fa5c79b3f39303e (diff)
downloadports-dfee464fa0207256fb7b8fdf2b0ebaf5b22fc10a.tar.gz
ports-dfee464fa0207256fb7b8fdf2b0ebaf5b22fc10a.zip
Notes
Diffstat (limited to 'graphics/inkscape')
-rw-r--r--graphics/inkscape/files/patch-src_extension_internal_pdfinput_pdf-parser.cpp164
1 files changed, 164 insertions, 0 deletions
diff --git a/graphics/inkscape/files/patch-src_extension_internal_pdfinput_pdf-parser.cpp b/graphics/inkscape/files/patch-src_extension_internal_pdfinput_pdf-parser.cpp
new file mode 100644
index 000000000000..d4c76f4ae68f
--- /dev/null
+++ b/graphics/inkscape/files/patch-src_extension_internal_pdfinput_pdf-parser.cpp
@@ -0,0 +1,164 @@
+--- src/extension/internal/pdfinput/pdf-parser.cpp 2008/03/29 09:49:50 18077
++++ src/extension/internal/pdfinput/pdf-parser.cpp 2008/06/12 18:14:25 18894
+@@ -2191,6 +2191,151 @@
+ }
+ }
+
++
++#ifdef 1
++
++/**
++ * This is for the change to GfxFont's getNextChar() call.
++ * Thanks to tsdgeos for the fix.
++ * Miklos, does this look ok?
++ */
++
++void PdfParser::doShowText(GooString *s) {
++ GfxFont *font;
++ int wMode;
++ double riseX, riseY;
++ CharCode code;
++ Unicode *u = NULL;
++ double x, y, dx, dy, dx2, dy2, curX, curY, tdx, tdy, lineX, lineY;
++ double originX, originY, tOriginX, tOriginY;
++ double oldCTM[6], newCTM[6];
++ double *mat;
++ Object charProc;
++ Dict *resDict;
++ Parser *oldParser;
++ char *p;
++ int len, n, uLen, nChars, nSpaces, i;
++
++ font = state->getFont();
++ wMode = font->getWMode();
++
++ builder->beginString(state, s);
++
++ // handle a Type 3 char
++ if (font->getType() == fontType3 && 0) {//out->interpretType3Chars()) {
++ mat = state->getCTM();
++ for (i = 0; i < 6; ++i) {
++ oldCTM[i] = mat[i];
++ }
++ mat = state->getTextMat();
++ newCTM[0] = mat[0] * oldCTM[0] + mat[1] * oldCTM[2];
++ newCTM[1] = mat[0] * oldCTM[1] + mat[1] * oldCTM[3];
++ newCTM[2] = mat[2] * oldCTM[0] + mat[3] * oldCTM[2];
++ newCTM[3] = mat[2] * oldCTM[1] + mat[3] * oldCTM[3];
++ mat = font->getFontMatrix();
++ newCTM[0] = mat[0] * newCTM[0] + mat[1] * newCTM[2];
++ newCTM[1] = mat[0] * newCTM[1] + mat[1] * newCTM[3];
++ newCTM[2] = mat[2] * newCTM[0] + mat[3] * newCTM[2];
++ newCTM[3] = mat[2] * newCTM[1] + mat[3] * newCTM[3];
++ newCTM[0] *= state->getFontSize();
++ newCTM[1] *= state->getFontSize();
++ newCTM[2] *= state->getFontSize();
++ newCTM[3] *= state->getFontSize();
++ newCTM[0] *= state->getHorizScaling();
++ newCTM[2] *= state->getHorizScaling();
++ state->textTransformDelta(0, state->getRise(), &riseX, &riseY);
++ curX = state->getCurX();
++ curY = state->getCurY();
++ lineX = state->getLineX();
++ lineY = state->getLineY();
++ oldParser = parser;
++ p = s->getCString();
++ len = s->getLength();
++ while (len > 0) {
++ n = font->getNextChar(p, len, &code,
++ &u, &uLen,
++ &dx, &dy, &originX, &originY);
++ dx = dx * state->getFontSize() + state->getCharSpace();
++ if (n == 1 && *p == ' ') {
++ dx += state->getWordSpace();
++ }
++ dx *= state->getHorizScaling();
++ dy *= state->getFontSize();
++ state->textTransformDelta(dx, dy, &tdx, &tdy);
++ state->transform(curX + riseX, curY + riseY, &x, &y);
++ saveState();
++ state->setCTM(newCTM[0], newCTM[1], newCTM[2], newCTM[3], x, y);
++ //~ the CTM concat values here are wrong (but never used)
++ //out->updateCTM(state, 1, 0, 0, 1, 0, 0);
++ if (0){ /*!out->beginType3Char(state, curX + riseX, curY + riseY, tdx, tdy,
++ code, u, uLen)) {*/
++ ((Gfx8BitFont *)font)->getCharProc(code, &charProc);
++ if ((resDict = ((Gfx8BitFont *)font)->getResources())) {
++ pushResources(resDict);
++ }
++ if (charProc.isStream()) {
++ //parse(&charProc, gFalse); // TODO: parse into SVG font
++ } else {
++ error(getPos(), "Missing or bad Type3 CharProc entry");
++ }
++ //out->endType3Char(state);
++ if (resDict) {
++ popResources();
++ }
++ charProc.free();
++ }
++ restoreState();
++ // GfxState::restore() does *not* restore the current position,
++ // so we deal with it here using (curX, curY) and (lineX, lineY)
++ curX += tdx;
++ curY += tdy;
++ state->moveTo(curX, curY);
++ state->textSetPos(lineX, lineY);
++ p += n;
++ len -= n;
++ }
++ parser = oldParser;
++
++ } else {
++ state->textTransformDelta(0, state->getRise(), &riseX, &riseY);
++ p = s->getCString();
++ len = s->getLength();
++ while (len > 0) {
++ n = font->getNextChar(p, len, &code,
++ &u, &uLen,
++ &dx, &dy, &originX, &originY);
++
++ if (wMode) {
++ dx *= state->getFontSize();
++ dy = dy * state->getFontSize() + state->getCharSpace();
++ if (n == 1 && *p == ' ') {
++ dy += state->getWordSpace();
++ }
++ } else {
++ dx = dx * state->getFontSize() + state->getCharSpace();
++ if (n == 1 && *p == ' ') {
++ dx += state->getWordSpace();
++ }
++ dx *= state->getHorizScaling();
++ dy *= state->getFontSize();
++ }
++ state->textTransformDelta(dx, dy, &tdx, &tdy);
++ originX *= state->getFontSize();
++ originY *= state->getFontSize();
++ state->textTransformDelta(originX, originY, &tOriginX, &tOriginY);
++ builder->addChar(state, state->getCurX() + riseX, state->getCurY() + riseY,
++ dx, dy, tOriginX, tOriginY, code, n, u, uLen);
++ state->shift(tdx, tdy);
++ p += n;
++ len -= n;
++ }
++ }
++
++ builder->endString(state);
++}
++
++#else /* !POPPLER_NEW_GFXFONT */
++
+ void PdfParser::doShowText(GooString *s) {
+ GfxFont *font;
+ int wMode;
+@@ -2325,6 +2470,9 @@
+ builder->endString(state);
+ }
+
++#endif /* POPPLER_NEW_GFXFONT */
++
++
+ //------------------------------------------------------------------------
+ // XObject operators
+ //------------------------------------------------------------------------