tesseract  4.00.00dev
fixspace.h File Reference
#include "pageres.h"
#include "params.h"

Go to the source code of this file.

Functions

void initialise_search (WERD_RES_LIST &src_list, WERD_RES_LIST &new_list)
 
void transform_to_next_perm (WERD_RES_LIST &words)
 
void fixspace_dbg (WERD_RES *word)
 

Function Documentation

◆ fixspace_dbg()

void fixspace_dbg ( WERD_RES word)

Definition at line 795 of file fixspace.cpp.

795  {
796  TBOX box = word->word->bounding_box();
797  BOOL8 show_map_detail = FALSE;
798  inT16 i;
799 
800  box.print();
801  tprintf(" \"%s\" ", word->best_choice->unichar_string().string());
802  tprintf("Blob count: %d (word); %d/%d (rebuild word)\n",
803  word->word->cblob_list()->length(),
804  word->rebuild_word->NumBlobs(),
805  word->box_word->length());
806  word->reject_map.print(debug_fp);
807  tprintf("\n");
808  if (show_map_detail) {
809  tprintf("\"%s\"\n", word->best_choice->unichar_string().string());
810  for (i = 0; word->best_choice->unichar_string()[i] != '\0'; i++) {
811  tprintf("**** \"%c\" ****\n", word->best_choice->unichar_string()[i]);
812  word->reject_map[i].full_print(debug_fp);
813  }
814  }
815 
816  tprintf("Tess Accepted: %s\n", word->tess_accepted ? "TRUE" : "FALSE");
817  tprintf("Done flag: %s\n\n", word->done ? "TRUE" : "FALSE");
818 }
void print(FILE *fp)
Definition: rejctmap.cpp:391
WERD_CHOICE * best_choice
Definition: pageres.h:219
TWERD * rebuild_word
Definition: pageres.h:244
#define tprintf(...)
Definition: tprintf.h:31
const char * string() const
Definition: strngs.cpp:198
FILE * debug_fp
Definition: tessvars.cpp:24
TBOX bounding_box() const
Definition: werd.cpp:160
int16_t inT16
Definition: host.h:36
tesseract::BoxWord * box_word
Definition: pageres.h:250
unsigned char BOOL8
Definition: host.h:44
#define FALSE
Definition: capi.h:46
BOOL8 tess_accepted
Definition: pageres.h:280
int NumBlobs() const
Definition: blobs.h:425
const STRING & unichar_string() const
Definition: ratngs.h:539
Definition: rect.h:30
void full_print(FILE *fp)
Definition: rejctmap.cpp:403
C_BLOB_LIST * cblob_list()
Definition: werd.h:100
WERD * word
Definition: pageres.h:175
void print() const
Definition: rect.h:270
REJMAP reject_map
Definition: pageres.h:271
BOOL8 done
Definition: pageres.h:282
int length() const
Definition: boxword.h:85

◆ initialise_search()

void initialise_search ( WERD_RES_LIST &  src_list,
WERD_RES_LIST &  new_list 
)

Definition at line 177 of file fixspace.cpp.

177  {
178  WERD_RES_IT src_it(&src_list);
179  WERD_RES_IT new_it(&new_list);
180  WERD_RES *src_wd;
181  WERD_RES *new_wd;
182 
183  for (src_it.mark_cycle_pt(); !src_it.cycled_list(); src_it.forward()) {
184  src_wd = src_it.data();
185  if (!src_wd->combination) {
186  new_wd = WERD_RES::deep_copy(src_wd);
187  new_wd->combination = FALSE;
188  new_wd->part_of_combo = FALSE;
189  new_it.add_after_then_move(new_wd);
190  }
191  }
192 }
BOOL8 combination
Definition: pageres.h:318
#define FALSE
Definition: capi.h:46
BOOL8 part_of_combo
Definition: pageres.h:319
static WERD_RES * deep_copy(const WERD_RES *src)
Definition: pageres.h:633

◆ transform_to_next_perm()

void transform_to_next_perm ( WERD_RES_LIST &  words)

Definition at line 372 of file fixspace.cpp.

372  {
373  WERD_RES_IT word_it(&words);
374  WERD_RES_IT prev_word_it(&words);
375  WERD_RES *word;
376  WERD_RES *prev_word;
377  WERD_RES *combo;
378  WERD *copy_word;
379  inT16 prev_right = -MAX_INT16;
380  TBOX box;
381  inT16 gap;
382  inT16 min_gap = MAX_INT16;
383 
384  for (word_it.mark_cycle_pt(); !word_it.cycled_list(); word_it.forward()) {
385  word = word_it.data();
386  if (!word->part_of_combo) {
387  box = word->word->bounding_box();
388  if (prev_right > -MAX_INT16) {
389  gap = box.left() - prev_right;
390  if (gap < min_gap)
391  min_gap = gap;
392  }
393  prev_right = box.right();
394  }
395  }
396  if (min_gap < MAX_INT16) {
397  prev_right = -MAX_INT16; // back to start
398  word_it.set_to_list(&words);
399  // Note: we can't use cycle_pt due to inserted combos at start of list.
400  for (; (prev_right == -MAX_INT16) || !word_it.at_first();
401  word_it.forward()) {
402  word = word_it.data();
403  if (!word->part_of_combo) {
404  box = word->word->bounding_box();
405  if (prev_right > -MAX_INT16) {
406  gap = box.left() - prev_right;
407  if (gap <= min_gap) {
408  prev_word = prev_word_it.data();
409  if (prev_word->combination) {
410  combo = prev_word;
411  } else {
412  /* Make a new combination and insert before
413  * the first word being joined. */
414  copy_word = new WERD;
415  *copy_word = *(prev_word->word);
416  // deep copy
417  combo = new WERD_RES(copy_word);
418  combo->combination = TRUE;
419  combo->x_height = prev_word->x_height;
420  prev_word->part_of_combo = TRUE;
421  prev_word_it.add_before_then_move(combo);
422  }
423  combo->word->set_flag(W_EOL, word->word->flag(W_EOL));
424  if (word->combination) {
425  combo->word->join_on(word->word);
426  // Move blobs to combo
427  // old combo no longer needed
428  delete word_it.extract();
429  } else {
430  // Copy current wd to combo
431  combo->copy_on(word);
432  word->part_of_combo = TRUE;
433  }
434  combo->done = FALSE;
435  combo->ClearResults();
436  } else {
437  prev_word_it = word_it; // catch up
438  }
439  }
440  prev_right = box.right();
441  }
442  }
443  } else {
444  words.clear(); // signal termination
445  }
446 }
#define TRUE
Definition: capi.h:45
#define MAX_INT16
Definition: host.h:61
Definition: werd.h:36
void set_flag(WERD_FLAGS mask, BOOL8 value)
Definition: werd.h:129
void ClearResults()
Definition: pageres.cpp:1142
TBOX bounding_box() const
Definition: werd.cpp:160
int16_t inT16
Definition: host.h:36
BOOL8 flag(WERD_FLAGS mask) const
Definition: werd.h:128
inT16 left() const
Definition: rect.h:68
void copy_on(WERD_RES *word_res)
Definition: pageres.h:644
BOOL8 combination
Definition: pageres.h:318
#define FALSE
Definition: capi.h:46
BOOL8 part_of_combo
Definition: pageres.h:319
Definition: rect.h:30
void join_on(WERD *other)
Definition: werd.cpp:211
WERD * word
Definition: pageres.h:175
inT16 right() const
Definition: rect.h:75
Definition: werd.h:60
float x_height
Definition: pageres.h:295
BOOL8 done
Definition: pageres.h:282