Code

noop: Refactor massive copy&paste of PdfParser::doShowText, in exchange for using...
authorpjrm <pjrm@users.sourceforge.net>
Sat, 19 Jul 2008 14:45:13 +0000 (14:45 +0000)
committerpjrm <pjrm@users.sourceforge.net>
Sat, 19 Jul 2008 14:45:13 +0000 (14:45 +0000)
src/extension/internal/pdfinput/pdf-parser.cpp

index 390d524790866caeac9e8679512482d81f22c738..05bf3bf92383d395fece1ada099ea21c98633984 100644 (file)
@@ -2192,10 +2192,9 @@ void PdfParser::opShowSpaceText(Object args[], int numArgs) {
 }
 
 
-#ifdef POPPLER_NEW_GFXFONT
 
-/**
- * This is for the change to GfxFont's getNextChar() call.
+/*
+ * The `POPPLER_NEW_GFXFONT' stuff is for the change to GfxFont's getNextChar() call.
  * Thanks to tsdgeos for the fix.
  * Miklos, does this look ok?
  */   
@@ -2205,143 +2204,11 @@ void PdfParser::doShowText(GooString *s) {
   int wMode;
   double riseX, riseY;
   CharCode code;
+#ifdef POPPLER_NEW_GFXFONT
   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;
-  double riseX, riseY;
-  CharCode code;
+#else
   Unicode u[8];
+#endif
   double x, y, dx, dy, dx2, dy2, curX, curY, tdx, tdy, lineX, lineY;
   double originX, originY, tOriginX, tOriginY;
   double oldCTM[6], newCTM[6];
@@ -2389,7 +2256,11 @@ void PdfParser::doShowText(GooString *s) {
     len = s->getLength();
     while (len > 0) {
       n = font->getNextChar(p, len, &code,
+#ifdef POPPLER_NEW_GFXFONT
+                           &u, &uLen,  /* TODO: This looks like a memory leak for u. */
+#else
                            u, (int)(sizeof(u) / sizeof(Unicode)), &uLen,
+#endif
                            &dx, &dy, &originX, &originY);
       dx = dx * state->getFontSize() + state->getCharSpace();
       if (n == 1 && *p == ' ') {
@@ -2438,7 +2309,11 @@ void PdfParser::doShowText(GooString *s) {
     len = s->getLength();
     while (len > 0) {
       n = font->getNextChar(p, len, &code,
+#ifdef POPPLER_NEW_GFXFONT
+                           &u, &uLen,  /* TODO: This looks like a memory leak for u. */
+#else
                            u, (int)(sizeof(u) / sizeof(Unicode)), &uLen,
+#endif
                            &dx, &dy, &originX, &originY);
       
       if (wMode) {
@@ -2470,8 +2345,6 @@ void PdfParser::doShowText(GooString *s) {
   builder->endString(state);
 }
 
-#endif /* POPPLER_NEW_GFXFONT */
-
 
 //------------------------------------------------------------------------
 // XObject operators