Skip to content

Commit

Permalink
Changed classifier debug mode to allow debug on any Unicode character.
Browse files Browse the repository at this point in the history
git-svn-id: https://tesseract-ocr.googlecode.com/svn/trunk@80 d0cd1f9f-072b-0410-8dd7-cf729c803f20
  • Loading branch information
theraysmith committed Jul 18, 2007
1 parent 2f4a43b commit 47cd8b5
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 30 deletions.
80 changes: 62 additions & 18 deletions classify/intproto.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,16 @@
#include "const.h"
#include "ndminx.h"
#include "adaptmatch.h"
#include "globals.h"

//extern GetPicoFeatureLength();

#include <math.h>
#include <stdio.h>
#include <assert.h>
#ifdef __UNIX__
#include <unistd.h>
#endif

/* match debug display constants*/
#define DISPLAY_OFFSET (0.5 * INT_CHAR_NORM_RANGE)
Expand Down Expand Up @@ -631,7 +635,8 @@ void ConvertProto(PROTO Proto, int ProtoId, INT_CLASS Class) {


/*---------------------------------------------------------------------------*/
INT_TEMPLATES CreateIntTemplates(CLASSES FloatProtos) {
INT_TEMPLATES CreateIntTemplates(CLASSES FloatProtos,
const UNICHARSET& target_unicharset) {
/*
** Parameters:
** FloatProtos prototypes in old floating pt format
Expand All @@ -651,11 +656,10 @@ INT_TEMPLATES CreateIntTemplates(CLASSES FloatProtos) {

IntTemplates = NewIntTemplates ();

for (ClassId = 0; ClassId < NUMBER_OF_CLASSES; ClassId++) {
for (ClassId = 0; ClassId < target_unicharset.size(); ClassId++) {
FClass = &(FloatProtos[ClassId]);
if (NumProtosIn (FClass) > 0) {
assert (UnusedClassIdIn (IntTemplates, ClassId));

IClass = NewIntClass (NumProtosIn (FClass), NumConfigsIn (FClass));
AddIntClass(IntTemplates, ClassId, IClass);

Expand Down Expand Up @@ -867,6 +871,7 @@ INT_TEMPLATES ReadIntTemplates(FILE *File, BOOL8 swap) {
*/
int i, j, x, y, z;
int nread;
int unicharset_size;
INT_TEMPLATES Templates;
CLASS_PRUNER Pruner;
INT_CLASS Class;
Expand All @@ -876,30 +881,38 @@ INT_TEMPLATES ReadIntTemplates(FILE *File, BOOL8 swap) {
/* first read the high level template struct */
Templates = NewIntTemplates ();
// Read Templates in parts for 64 bit compatibility.
if (fread(&unicharset_size, sizeof(int), 1, File) != 1)
cprintf ("Bad read of inttemp!\n");
if (fread(&Templates->NumClasses, sizeof(int), 1, File) != 1 ||
fread(&Templates->NumClassPruners, sizeof(int), 1, File) != 1)
cprintf ("Bad read of inttemp!\n");
for (i = 0; i <= MAX_CLASS_ID; ++i) {
// Swap status is determined automatically.
swap = Templates->NumClassPruners < 0 ||
Templates->NumClassPruners > MAX_NUM_CLASS_PRUNERS;
if (swap) {
reverse32 (&Templates->NumClassPruners);
reverse32 (&Templates->NumClasses);
reverse32 (&unicharset_size);
}
if (unicharset_size != unicharset.size()) {
cprintf("Error: %d classes in inttemp while "
"unicharset contains %d unichars.\n",
unicharset_size, unicharset.size());
exit(1);
}
for (i = 0; i < unicharset_size; ++i) {
if (fread(&Templates->IndexFor[i], sizeof(CLASS_INDEX), 1, File) != 1)
cprintf("Bad read of inttemp!\n");
}
for (i = 0; i < MAX_NUM_CLASSES; ++i) {
for (i = 0; i < NumClassesIn (Templates); ++i) {
if (fread(&Templates->ClassIdFor[i], sizeof(CLASS_ID), 1, File) != 1)
cprintf("Bad read of inttemp!\n");
}
for (i = 0; i < MAX_NUM_CLASSES + MAX_NUM_CLASS_PRUNERS; ++i) {
int junk;
if (fread(&junk, sizeof(junk), 1, File) != 1)
cprintf("Bad read of inttemp!\n");
}
// Swap status is determined automatically.
swap = Templates->NumClassPruners < 0 ||
Templates->NumClassPruners > MAX_NUM_CLASS_PRUNERS;
if (swap) {
reverse32 (&Templates->NumClassPruners);
reverse32 (&Templates->NumClasses);
for (i = 0; i < MAX_CLASS_ID + 1; i++)
reverse16 (&Templates->IndexFor[i]);
for (i = 0; i < MAX_NUM_CLASSES; i++)
reverse32 (&Templates->ClassIdFor[i]);
}

/* then read in the class pruners */
Expand Down Expand Up @@ -1042,7 +1055,8 @@ void ShowMatchDisplay() {
#endif

/*---------------------------------------------------------------------------*/
void WriteIntTemplates(FILE *File, INT_TEMPLATES Templates) {
void WriteIntTemplates(FILE *File, INT_TEMPLATES Templates,
const UNICHARSET& target_unicharset) {
/*
** Parameters:
** File open file to write templates to
Expand All @@ -1057,9 +1071,16 @@ void WriteIntTemplates(FILE *File, INT_TEMPLATES Templates) {
*/
int i, j;
INT_CLASS Class;
int unicharset_size = target_unicharset.size();

/* first write the high level template struct */
fwrite ((char *) Templates, sizeof (INT_TEMPLATES_STRUCT), 1, File);
fwrite((char *) &unicharset_size, sizeof (int), 1, File);
fwrite((char *) &Templates->NumClasses, sizeof (int), 1, File);
fwrite((char *) &Templates->NumClassPruners, sizeof (int), 1, File);
fwrite((char *) &Templates->IndexFor[0], sizeof (CLASS_INDEX),
unicharset_size, File);
fwrite((char *) &Templates->ClassIdFor[0], sizeof (CLASS_ID),
NumClassesIn (Templates), File);

/* then write out the class pruners */
for (i = 0; i < NumClassPrunersIn (Templates); i++)
Expand Down Expand Up @@ -1302,8 +1323,31 @@ CLASS_ID GetClassToDebug(const char *Prompt) {
** Exceptions: none
** History: Thu Mar 21 16:55:13 1991, DSJ, Created.
*/
return window_wait (IntMatchWindow);
char c = 0;
do
c = window_wait(IntMatchWindow);
while (c != 0 && c != '\n');
#ifdef __UNIX__
// Temp sychronization.
if (c == '\n' && input_unicode[0] == 0) {
sleep(1);
}
#endif
char utf8[kInputSize * UNICHAR_LEN];
int offset = 0;
int i;
for (i = 0; i < kInputSize && input_unicode[i] != 0; ++i) {
UNICHAR ch(input_unicode[i]);
int len = ch.utf8_len();
for (int j = 0; j < len; ++j) {
utf8[offset++] = ch.utf8()[j];
}
}

cprintf("unicode len = %d, 1st code=%d, utf8 len = %d, 1st code=%d\n",
i, input_unicode[0], offset, utf8[0]);
input_unicode[0] = 0;
return c == '\n' ? unicharset.unichar_to_id(utf8, offset) : 0;
} /* GetClassToDebug */
#endif

Expand Down
5 changes: 3 additions & 2 deletions viewer/grphics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ void def_overlap_picture_ops(BOOL8 update);

WINCREATEFUNC create_func = WINFD::create;
void (*overlap_func) (BOOL8) = def_overlap_picture_ops;
int input_unicode[kInputSize];

/**********************************************************************
* line_color_index
Expand Down Expand Up @@ -741,7 +742,7 @@ void WINFD::Destroy_window() { /*destroy a window */
return;
}
else {
Clear_event_queue();
Clear_event_queue();
sbfds[fd].used = FALSE; /*it is not in use */
sbfds[fd].click_handler = NULL;

Expand Down Expand Up @@ -921,7 +922,7 @@ void WINFD::Make_picture_current() { /*update window */
ONEOP *newop; /*message structure */

if (this == NULL || fd <= 0) {
overlap_picture_ops(TRUE);
overlap_picture_ops(TRUE);
}
else {
/*get some space */
Expand Down
22 changes: 12 additions & 10 deletions viewer/grphics.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ BOOL8 moveon, BOOL8 upon, BOOL8 keyon);
extern WINCREATEFUNC create_func;
extern void (*overlap_func) (BOOL8);
extern WINDOW (*await_event_func) (WINDOW, BOOL8, INT8, GRAPHICS_EVENT *);
const int kInputSize = 16;
extern int input_unicode[kInputSize];

class DLLSYM WINFD
{
Expand Down Expand Up @@ -182,11 +184,11 @@ class DLLSYM WINFD
float rotation, /*rotation of arc */
INT16 close_type); /*type of closure */
/*destroy a window */
virtual void Destroy_window();
virtual void Destroy_window();
/*clear window */
virtual void Clear_view_surface();
virtual void Clear_view_surface();
/*Mark need to recalc */
virtual void Re_compute_colourmap();
virtual void Re_compute_colourmap();
virtual void Vdc_extent( /*set window focus */
float xmin, /*min values */
float ymin, /*min values */
Expand All @@ -197,7 +199,7 @@ class DLLSYM WINFD
float xorig, /*min values */
float yorig); /*min values */
/*update window */
virtual void Make_picture_current();
virtual void Make_picture_current();
/*flush output */
friend void def_overlap_picture_ops(BOOL8 update); /*send make_ */
/*set line colour */
Expand All @@ -224,7 +226,7 @@ class DLLSYM WINFD
void Set_click_handler( //set callback function
EVENT_HANDLER handler); //handler function
/*delete all events */
virtual void Clear_event_queue();
virtual void Clear_event_queue();

//internal maintenance functions
friend void add_event( /*add an event */
Expand All @@ -244,15 +246,15 @@ class DLLSYM WINFD
//callback function
EVENT_HANDLER destroy_handler;
private:
void get_lock() {
void get_lock() {
} //wait for lock
void get_lock_for_draw() {
void get_lock_for_draw() {
} //kill draw thread
void release_lock() {
void release_lock() {
} //let it go
void get_core_lock() {
void get_core_lock() {
} //wait for lock
void release_core_lock() {
void release_core_lock() {
} //let it go

INT16 fd; //"file descriptor"
Expand Down

0 comments on commit 47cd8b5

Please sign in to comment.