home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Enigma Amiga Life 110
/
EnigmaAmiga110CD.iso
/
indispensabili
/
utility
/
apdf
/
xpdf-0.80
/
xpdf
/
textoutputdev.h
< prev
next >
Wrap
C/C++ Source or Header
|
1999-04-27
|
5KB
|
177 lines
//========================================================================
//
// 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