Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pdf/xpdf/TextOutputDev.h
diff options
context:
space:
mode:
authorArturo Espinosa <unammx@src.gnome.org>1999-04-17 02:59:58 (GMT)
committer Arturo Espinosa <unammx@src.gnome.org>1999-04-17 02:59:58 (GMT)
commitd9f9a6449f377b4c933b75d57541b19c6d088994 (patch)
tree04f7f0c54447ef792fbf83bc5039174f4681b3bb /pdf/xpdf/TextOutputDev.h
Initial revision
Diffstat (limited to 'pdf/xpdf/TextOutputDev.h')
-rw-r--r--pdf/xpdf/TextOutputDev.h176
1 files changed, 176 insertions, 0 deletions
diff --git a/pdf/xpdf/TextOutputDev.h b/pdf/xpdf/TextOutputDev.h
new file mode 100644
index 0000000..8c1cc77
--- /dev/null
+++ b/pdf/xpdf/TextOutputDev.h
@@ -0,0 +1,176 @@
+//========================================================================
+//
+// TextOutputDev.h
+//
+// Copyright 1997 Derek B. Noonburg
+//
+//========================================================================
+
+#ifndef TEXTOUTPUTDEV_H
+#define TEXTOUTPUTDEV_H
+
+#ifdef __GNUC__
+#pragma interface
+#endif
+
+#include <stdio.h>
+#include "gtypes.h"
+#include "OutputDev.h"
+
+class GfxState;
+class GfxFont;
+class GString;
+
+//------------------------------------------------------------------------
+// TextString
+//------------------------------------------------------------------------
+
+class TextString {
+public:
+
+ // Constructor.
+ TextString(GfxState *state, GBool hexCodes1);
+
+ // Destructor.
+ ~TextString();
+
+ // Add a character to the string.
+ void addChar(GfxState *state, double x, double y,
+ double dx, double dy,
+ Guchar c, GBool useASCII7);
+
+private:
+
+ double xMin, xMax; // bounding box x coordinates
+ double yMin, yMax; // bounding box y coordinates
+ int col; // starting column
+ GString *text; // the text
+ double *xRight; // right-hand x coord of each char
+ TextString *yxNext; // next string in y-major order
+ TextString *xyNext; // next string in x-major order
+ GBool hexCodes; // subsetted font with hex char codes
+
+ friend class TextPage;
+};
+
+//------------------------------------------------------------------------
+// TextPage
+//------------------------------------------------------------------------
+
+class TextPage {
+public:
+
+ // Constructor.
+ TextPage(GBool useASCII71);
+
+ // Destructor.
+ ~TextPage();
+
+ // Begin a new string.
+ void beginString(GfxState *state, GString *s, GBool hex1);
+
+ // Add a character to the current string.
+ void addChar(GfxState *state, double x, double y,
+ double dx, double dy, Guchar c);
+
+ // End the current string, sorting it into the list of strings.
+ void endString();
+
+ // Coalesce strings that look like parts of the same line.
+ void coalesce();
+
+ // Find a string. If <top> is true, starts looking at top of page;
+ // otherwise starts looking at <xMin>,<yMin>. If <bottom> is true,
+ // stops looking at bottom of page; otherwise stops looking at
+ // <xMax>,<yMax>. If found, sets the text bounding rectange and
+ // returns true; otherwise returns false.
+ GBool findText(char *s, GBool top, GBool bottom,
+ double *xMin, double *yMin,
+ double *xMax, double *yMax);
+
+ // Get the text which is inside the specified rectangle.
+ GString *getText(double xMin, double yMin,
+ double xMax, double yMax);
+
+ // Dump contents of page to a file.
+ void dump(FILE *f);
+
+ // Clear the page.
+ void clear();
+
+private:
+
+ GBool useASCII7; // use 7-bit ASCII?
+
+ TextString *curStr; // currently active string
+
+ TextString *yxStrings; // strings in y-major order
+ TextString *xyStrings; // strings in x-major order
+};
+
+//------------------------------------------------------------------------
+// TextOutputDev
+//------------------------------------------------------------------------
+
+class TextOutputDev: public OutputDev {
+public:
+
+ // Open a text output file. If <fileName> is NULL, no file is written
+ // (this is useful, e.g., for searching text). If <useASCII7> is true,
+ // text is converted to 7-bit ASCII; otherwise, text is converted to
+ // 8-bit ISO Latin-1.
+ TextOutputDev(char *fileName, GBool useASCII7);
+
+ // Destructor.
+ virtual ~TextOutputDev();
+
+ // Check if file was successfully created.
+ virtual GBool isOk() { return ok; }
+
+ //---- get info about output device
+
+ // Does this device use upside-down coordinates?
+ // (Upside-down means (0,0) is the top left corner of the page.)
+ virtual GBool upsideDown() { return gTrue; }
+
+ // Does this device use drawChar() or drawString()?
+ virtual GBool useDrawChar() { return gTrue; }
+
+ //----- initialization and control
+
+ // Start a page.
+ virtual void startPage(int pageNum, GfxState *state);
+
+ // End a page.
+ virtual void endPage();
+
+ //----- update text state
+ virtual void updateFont(GfxState *state);
+
+ //----- text drawing
+ virtual void beginString(GfxState *state, GString *s);
+ virtual void endString(GfxState *state);
+ virtual void drawChar(GfxState *state, double x, double y,
+ double dx, double dy, Guchar c);
+
+ //----- special access
+
+ // Find a string. If <top> is true, starts looking at top of page;
+ // otherwise starts looking at <xMin>,<yMin>. If <bottom> is true,
+ // stops looking at bottom of page; otherwise stops looking at
+ // <xMax>,<yMax>. If found, sets the text bounding rectange and
+ // returns true; otherwise returns false.
+ GBool findText(char *s, GBool top, GBool bottom,
+ double *xMin, double *yMin,
+ double *xMax, double *yMax);
+
+private:
+
+ FILE *f; // text file
+ GBool needClose; // need to close the file?
+ TextPage *text; // text for the current page
+ GBool hexCodes; // subsetted font with hex char codes
+ GBool ok; // set up ok?
+};
+
+#endif