| #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 |