blob: 2475fd043e630e427008bd4b441cc32167019db4 [file] [log] [blame]
#ifndef TESSCLAS_H
#define TESSCLAS_H 1
#define SPLINESIZE 23 /*max spline parts to a line */
#define TBLOBFLAGS 4 /*No of flags in a blob */
#define MAX_WO_CLASSES 3
#define EDGEPTFLAGS 4 /*concavity,length etc. */
typedef struct
{
double a; /*x squared */
double b; /*x */
double c; /*constant */
} QUAD_SPEC; /*definiton of quadratic */
typedef struct
{
int segments; /*no of spline segments */
int xstarts[SPLINESIZE]; /*start x coords */
QUAD_SPEC quads[SPLINESIZE]; /*quadratic sections */
} SPLINE_SPEC; /*quadratic spline */
typedef struct
{
short x; /*absolute x coord */
short y; /*absolute y coord */
} TPOINT;
typedef TPOINT VECTOR; /*structure for coordinates */
typedef struct
{
char dx; /*compact vectors */
char dy;
} BYTEVEC;
typedef struct edgeptstruct
{
TPOINT pos; /*position */
VECTOR vec; /*vector to next point */
char flags[EDGEPTFLAGS]; /*concavity, length etc */
struct edgeptstruct *next; /*anticlockwise element */
struct edgeptstruct *prev; /*clockwise element */
} EDGEPT; /*point on expanded outline */
typedef struct blobstruct
{
struct olinestruct *outlines; /*list of outlines in blob */
char flags[TBLOBFLAGS]; /*blob flags */
char correct; /*correct text */
char guess; /*best guess */
/*quickie classification */
unsigned char classes[MAX_WO_CLASSES];
/*quickie ratings */
unsigned char values[MAX_WO_CLASSES];
struct blobstruct *next; /*next blob in block */
} TBLOB; /*blob structure */
typedef struct olinestruct
{
TPOINT topleft; /*top left of loop */
TPOINT botright; /*bottom right of loop */
TPOINT start; /*start of loop */
BYTEVEC *compactloop; /*ptr to compacted loop */
EDGEPT *loop; /*edgeloop */
void *node; /*1st node on outline */
struct olinestruct *next; /*next at this level */
struct olinestruct *child; /*inner outline */
} TESSLINE; /*outline structure */
typedef struct wordstruct
{
struct textrowstruct *row; /*row it came from */
char *correct; /*correct word string */
char *guess; /*guess word string */
TBLOB *blobs; /*blobs in word */
int blanks; /*blanks before word */
int blobcount; /*no of blobs in word */
struct wordstruct *next; /*next word */
} TWERD; /*word structure */
typedef struct textrowstruct
{
int blobcount; /** count of blobs in row. **/
TBLOB *blobs; /*list of blobs in row */
TWERD *words; /*list of words in row */
int mean_y; /** y coordinate of centre of row **/
int max_y; /** y coordinate of top of row **/
int min_y; /** y coordinate of bottom of row **/
SPLINE_SPEC xheight; /*top of row */
SPLINE_SPEC baseline; /*bottom of row */
float descdrop; /*descender drop */
float ascrise; /*ascender rise */
float lineheight; /*average xheight-baseline */
int kerning; /*kerning of row */
int space; /*spacing of row */
float space_threshold; /*Bayesian space limit */
int p_spaced; /*proportinal flag */
int b_space; /*block spacing */
int b_kern; /*block kerning */
struct textrowstruct *next; /*next row in block */
} TEXTROW;
typedef struct blockstruct /** list of coordinates **/
{
TBLOB *blobs; /*blobs in block */
TEXTROW *rows; /*rows in block */
int blobcount; /*no of blobs */
short xmin;
short xmax;
short ymin;
short ymax;
char type; /** block type **/
char p_spaced; /** flag to show propertianal spacing **/
short rowcount; /** number of rows **/
short leading; /** space between rows **/
short kerning; /** space between characters **/
short space; /** distance between char centres **/
short minwidth; /*min width of char in block */
short p_size; /** point size of text **/
short l_margin; /** posn of left margin **/
short italic; /** flag to show italic block **/
short spurious; /** percentage of spurious characters **/
struct blockstruct *next; /*next text block */
} TEXTBLOCK; /*block from image */
/**********************************************************************
* iterate_blobs
*
* Visit all the words in a list using a local variable.
**********************************************************************/
#define iterate_blobs(blob,blobs) \
for (blob = blobs; blob != NULL; blob = blob->next)
#endif