ccstruct/rejctmap.cpp

Go to the documentation of this file.
00001 
00020 #include "mfcpch.h"
00021 #include          "hosthplb.h"
00022 //#include                                      "basefile.h"
00023 #include          "rejctmap.h"
00024 #include          "secname.h"
00025 
00026 #define EXTERN
00027 
00030 EXTERN BOOL_VAR (rejword_only_set_if_accepted, TRUE, "Mimic old reject_word");
00031 EXTERN BOOL_VAR (rejmap_allow_more_good_qual, FALSE,
00032 "Use initial good qual setting");
00033 EXTERN BOOL_VAR (rej_use_1Il_rej, TRUE, "1Il rejection enabled");
00039 BOOL8 REJ::perm_rejected() {
00040   return (flag (R_TESS_FAILURE) ||
00041     flag (R_SMALL_XHT) ||
00042     flag (R_EDGE_CHAR) ||
00043     flag (R_1IL_CONFLICT) ||
00044     flag (R_POSTNN_1IL) ||
00045     flag (R_REJ_CBLOB) ||
00046     flag (R_BAD_REPETITION) || flag (R_MM_REJECT));
00047 }
00048 
00049 
00052 BOOL8 REJ::rej_before_nn_accept() { 
00053   return flag (R_POOR_MATCH) ||
00054     flag (R_NOT_TESS_ACCEPTED) ||
00055     flag (R_CONTAINS_BLANKS) || flag (R_BAD_PERMUTER);
00056 }
00057 
00058 
00061 BOOL8 REJ::rej_between_nn_and_mm() { 
00062   return flag (R_HYPHEN) ||
00063     flag (R_DUBIOUS) ||
00064     flag (R_NO_ALPHANUMS) || flag (R_MOSTLY_REJ) || flag (R_XHT_FIXUP);
00065 }
00066 
00067 
00070 BOOL8 REJ::rej_between_mm_and_quality_accept() { 
00071   return flag (R_BAD_QUALITY);
00072 }
00073 
00074 
00077 BOOL8 REJ::rej_between_quality_and_minimal_rej_accept() { 
00078   return flag (R_DOC_REJ) ||
00079     flag (R_BLOCK_REJ) || flag (R_ROW_REJ) || flag (R_UNLV_REJ);
00080 }
00081 
00082 
00085 BOOL8 REJ::rej_before_mm_accept() { 
00086   return rej_between_nn_and_mm () ||
00087     (rej_before_nn_accept () &&
00088     !flag (R_NN_ACCEPT) && !flag (R_HYPHEN_ACCEPT));
00089 }
00090 
00091 
00094 BOOL8 REJ::rej_before_quality_accept() { 
00095   return rej_between_mm_and_quality_accept () ||
00096     (!flag (R_MM_ACCEPT) && rej_before_mm_accept ());
00097 }
00098 
00099 
00103 BOOL8 REJ::rejected() {
00104   if (flag (R_MINIMAL_REJ_ACCEPT))
00105     return FALSE;
00106   else
00107     return (perm_rejected () ||
00108       rej_between_quality_and_minimal_rej_accept () ||
00109       (!flag (R_QUALITY_ACCEPT) && rej_before_quality_accept ()));
00110 }
00111 
00112 
00116 BOOL8 REJ::accept_if_good_quality() {
00117   return (rejected () &&
00118     !perm_rejected () &&
00119     flag (R_BAD_PERMUTER) &&
00120     !flag (R_POOR_MATCH) &&
00121     !flag (R_NOT_TESS_ACCEPTED) &&
00122     !flag (R_CONTAINS_BLANKS) &&
00123     (rejmap_allow_more_good_qual ||
00124     (!rej_between_nn_and_mm () &&
00125     !rej_between_mm_and_quality_accept () &&
00126     !rej_between_quality_and_minimal_rej_accept ())));
00127 }
00128 
00129 
00133 void REJ::setrej_tess_failure() {
00134   set_flag(R_TESS_FAILURE); 
00135 }
00136 
00137 
00141 void REJ::setrej_small_xht() {
00142   set_flag(R_SMALL_XHT); 
00143 }
00144 
00145 
00149 void REJ::setrej_edge_char() {
00150   set_flag(R_EDGE_CHAR); 
00151 }
00152 
00153 
00157 void REJ::setrej_1Il_conflict() {
00158   if (rej_use_1Il_rej)
00159     set_flag(R_1IL_CONFLICT); 
00160 }
00161 
00162 
00166 void REJ::setrej_postNN_1Il() {
00167   set_flag(R_POSTNN_1IL); 
00168 }
00169 
00170 
00174 void REJ::setrej_rej_cblob() {
00175   set_flag(R_REJ_CBLOB); 
00176 }
00177 
00178 
00182 void REJ::setrej_mm_reject() {
00183   set_flag(R_MM_REJECT); 
00184 }
00185 
00186 
00190 void REJ::setrej_bad_repetition() {
00191   set_flag(R_BAD_REPETITION); 
00192 }
00193 
00194 
00198 void REJ::setrej_poor_match() {
00199   set_flag(R_POOR_MATCH); 
00200 }
00201 
00202 
00206 void REJ::setrej_not_tess_accepted() { 
00207   set_flag(R_NOT_TESS_ACCEPTED); 
00208 }
00209 
00210 
00214 void REJ::setrej_contains_blanks() { 
00215   set_flag(R_CONTAINS_BLANKS); 
00216 }
00217 
00218 
00222 void REJ::setrej_bad_permuter() {
00223   set_flag(R_BAD_PERMUTER); 
00224 }
00225 
00226 
00230 void REJ::setrej_hyphen() {
00231   set_flag(R_HYPHEN); 
00232 }
00233 
00234 
00238 void REJ::setrej_dubious() {
00239   set_flag(R_DUBIOUS); 
00240 }
00241 
00242 
00246 void REJ::setrej_no_alphanums() {
00247   set_flag(R_NO_ALPHANUMS); 
00248 }
00249 
00250 
00254 void REJ::setrej_mostly_rej() {
00255   set_flag(R_MOSTLY_REJ); 
00256 }
00257 
00258 
00262 void REJ::setrej_xht_fixup() {
00263   set_flag(R_XHT_FIXUP); 
00264 }
00265 
00266 
00270 void REJ::setrej_bad_quality() {
00271   set_flag(R_BAD_QUALITY); 
00272 }
00273 
00274 
00278 void REJ::setrej_doc_rej() {
00279   set_flag(R_DOC_REJ); 
00280 }
00281 
00282 
00286 void REJ::setrej_block_rej() {
00287   set_flag(R_BLOCK_REJ); 
00288 }
00289 
00290 
00294 void REJ::setrej_row_rej() {
00295   set_flag(R_ROW_REJ); 
00296 }
00297 
00298 
00302 void REJ::setrej_unlv_rej() {
00303   set_flag(R_UNLV_REJ); 
00304 }
00305 
00306 
00310 void REJ::setrej_hyphen_accept() {
00311   set_flag(R_HYPHEN_ACCEPT); 
00312 }
00313 
00314 
00318 void REJ::setrej_nn_accept() {
00319   set_flag(R_NN_ACCEPT); 
00320 }
00321 
00322 
00326 void REJ::setrej_mm_accept() {
00327   set_flag(R_MM_ACCEPT); 
00328 }
00329 
00330 
00334 void REJ::setrej_quality_accept() {
00335   set_flag(R_QUALITY_ACCEPT); 
00336 }
00337 
00338 
00342 void REJ::setrej_minimal_rej_accept() { 
00343   set_flag(R_MINIMAL_REJ_ACCEPT); 
00344 }
00345 
00346 
00350 void REJ::full_print(FILE *fp) { 
00351   #ifndef SECURE_NAMES
00352 
00353   fprintf (fp, "R_TESS_FAILURE: %s\n", flag (R_TESS_FAILURE) ? "T" : "F");
00354   fprintf (fp, "R_SMALL_XHT: %s\n", flag (R_SMALL_XHT) ? "T" : "F");
00355   fprintf (fp, "R_EDGE_CHAR: %s\n", flag (R_EDGE_CHAR) ? "T" : "F");
00356   fprintf (fp, "R_1IL_CONFLICT: %s\n", flag (R_1IL_CONFLICT) ? "T" : "F");
00357   fprintf (fp, "R_POSTNN_1IL: %s\n", flag (R_POSTNN_1IL) ? "T" : "F");
00358   fprintf (fp, "R_REJ_CBLOB: %s\n", flag (R_REJ_CBLOB) ? "T" : "F");
00359   fprintf (fp, "R_MM_REJECT: %s\n", flag (R_MM_REJECT) ? "T" : "F");
00360   fprintf (fp, "R_BAD_REPETITION: %s\n", flag (R_BAD_REPETITION) ? "T" : "F");
00361   fprintf (fp, "R_POOR_MATCH: %s\n", flag (R_POOR_MATCH) ? "T" : "F");
00362   fprintf (fp, "R_NOT_TESS_ACCEPTED: %s\n",
00363     flag (R_NOT_TESS_ACCEPTED) ? "T" : "F");
00364   fprintf (fp, "R_CONTAINS_BLANKS: %s\n",
00365     flag (R_CONTAINS_BLANKS) ? "T" : "F");
00366   fprintf (fp, "R_BAD_PERMUTER: %s\n", flag (R_BAD_PERMUTER) ? "T" : "F");
00367   fprintf (fp, "R_HYPHEN: %s\n", flag (R_HYPHEN) ? "T" : "F");
00368   fprintf (fp, "R_DUBIOUS: %s\n", flag (R_DUBIOUS) ? "T" : "F");
00369   fprintf (fp, "R_NO_ALPHANUMS: %s\n", flag (R_NO_ALPHANUMS) ? "T" : "F");
00370   fprintf (fp, "R_MOSTLY_REJ: %s\n", flag (R_MOSTLY_REJ) ? "T" : "F");
00371   fprintf (fp, "R_XHT_FIXUP: %s\n", flag (R_XHT_FIXUP) ? "T" : "F");
00372   fprintf (fp, "R_BAD_QUALITY: %s\n", flag (R_BAD_QUALITY) ? "T" : "F");
00373   fprintf (fp, "R_DOC_REJ: %s\n", flag (R_DOC_REJ) ? "T" : "F");
00374   fprintf (fp, "R_BLOCK_REJ: %s\n", flag (R_BLOCK_REJ) ? "T" : "F");
00375   fprintf (fp, "R_ROW_REJ: %s\n", flag (R_ROW_REJ) ? "T" : "F");
00376   fprintf (fp, "R_UNLV_REJ: %s\n", flag (R_UNLV_REJ) ? "T" : "F");
00377   fprintf (fp, "R_HYPHEN_ACCEPT: %s\n", flag (R_HYPHEN_ACCEPT) ? "T" : "F");
00378   fprintf (fp, "R_NN_ACCEPT: %s\n", flag (R_NN_ACCEPT) ? "T" : "F");
00379   fprintf (fp, "R_MM_ACCEPT: %s\n", flag (R_MM_ACCEPT) ? "T" : "F");
00380   fprintf (fp, "R_QUALITY_ACCEPT: %s\n", flag (R_QUALITY_ACCEPT) ? "T" : "F");
00381   fprintf (fp, "R_MINIMAL_REJ_ACCEPT: %s\n",
00382     flag (R_MINIMAL_REJ_ACCEPT) ? "T" : "F");
00383   #endif
00384 }
00385 
00386 
00397 REJMAP::REJMAP(
00398                const REJMAP &source) {
00399   REJ *to;
00400   REJ *from = source.ptr;
00401   int i;
00402 
00403   len = source.length ();
00404 
00405   if (len > 0) {
00406     ptr = (REJ *) alloc_struct (len * sizeof (REJ), "REJ");
00407     to = ptr;
00408     for (i = 0; i < len; i++) {
00409       *to = *from;
00410       to++;
00411       from++;
00412     }
00413   }
00414   else
00415     ptr = NULL;
00416 }
00417 
00418 
00422 REJMAP & REJMAP::operator= (
00423 const REJMAP & source            //from this
00424 ) {
00425   REJ *
00426     to;
00427   REJ *
00428     from = source.ptr;
00429   int
00430     i;
00431 
00432   initialise (source.len);
00433   to = ptr;
00434   for (i = 0; i < len; i++) {
00435     *to = *from;
00436     to++;
00437     from++;
00438   }
00439   return *this;
00440 }
00441 
00442 
00446 void REJMAP::initialise(
00447                         INT16 length) {
00448   if (ptr != NULL)
00449     free_struct (ptr, len * sizeof (REJ), "REJ");
00450   len = length;
00451   if (len > 0)
00452     ptr = (REJ *) memset (alloc_struct (len * sizeof (REJ), "REJ"),
00453       0, len * sizeof (REJ));
00454   else
00455     ptr = NULL;
00456 }
00457 
00458 
00462 INT16 REJMAP::accept_count() {
00463   int i;
00464   INT16 count = 0;
00465 
00466   for (i = 0; i < len; i++) {
00467     if (ptr[i].accepted ())
00468       count++;
00469   }
00470   return count;
00471 }
00472 
00473 
00477 BOOL8 REJMAP::recoverable_rejects() {
00478   int i;
00479 
00480   for (i = 0; i < len; i++) {
00481     if (ptr[i].recoverable ())
00482       return TRUE;
00483   }
00484   return FALSE;
00485 }
00486 
00487 
00491 BOOL8 REJMAP::quality_recoverable_rejects() {
00492   int i;
00493 
00494   for (i = 0; i < len; i++) {
00495     if (ptr[i].accept_if_good_quality ())
00496       return TRUE;
00497   }
00498   return FALSE;
00499 }
00500 
00501 
00505 void REJMAP::remove_pos(
00506                         INT16 pos  //element to remove
00507                        ) {
00508   REJ *new_ptr;                  //new, smaller map
00509   int i;
00510 
00511   ASSERT_HOST (pos >= 0);
00512   ASSERT_HOST (pos < len);
00513   ASSERT_HOST (len > 0);
00514 
00515   len--;
00516   if (len > 0)
00517     new_ptr = (REJ *) memset (alloc_struct (len * sizeof (REJ), "REJ"),
00518       0, len * sizeof (REJ));
00519   else
00520     new_ptr = NULL;
00521 
00522   for (i = 0; i < pos; i++)
00523     new_ptr[i] = ptr[i];         //copy pre pos
00524 
00525   for (; pos < len; pos++)
00526     new_ptr[pos] = ptr[pos + 1]; //copy post pos
00527 
00528                                  //delete old map
00529   free_struct (ptr, (len + 1) * sizeof (REJ), "REJ");
00530   ptr = new_ptr;
00531 }
00532 
00533 
00537 void REJMAP::print(FILE *fp) { 
00538   int i;
00539   char buff[512];
00540 
00541   for (i = 0; i < len; i++) {
00542     buff[i] = ptr[i].display_char ();
00543   }
00544   buff[i] = '\0';
00545   fprintf (fp, "\"%s\"", buff);
00546 }
00547 
00548 
00549 void REJMAP::full_print(FILE *fp) { 
00550   int i;
00551 
00552   for (i = 0; i < len; i++) {
00553     ptr[i].full_print (fp);
00554     fprintf (fp, "\n");
00555   }
00556 }
00557 
00558 
00562 void REJMAP::rej_word_small_xht() {
00563   int i;
00564 
00565   for (i = 0; i < len; i++) {
00566     ptr[i].setrej_small_xht ();
00567   }
00568 }
00569 
00570 
00574 void REJMAP::rej_word_tess_failure() {
00575   int i;
00576 
00577   for (i = 0; i < len; i++) {
00578     ptr[i].setrej_tess_failure ();
00579   }
00580 }
00581 
00582 
00586 void REJMAP::rej_word_not_tess_accepted() {
00587   int i;
00588 
00589   for (i = 0; i < len; i++) {
00590     if (!rejword_only_set_if_accepted || ptr[i].accepted ())
00591       ptr[i].setrej_not_tess_accepted ();
00592   }
00593 }
00594 
00595 
00599 void REJMAP::rej_word_contains_blanks() {
00600   int i;
00601 
00602   for (i = 0; i < len; i++) {
00603     if (!rejword_only_set_if_accepted || ptr[i].accepted ())
00604       ptr[i].setrej_contains_blanks ();
00605   }
00606 }
00607 
00608 
00612 void REJMAP::rej_word_bad_permuter() {
00613   int i;
00614 
00615   for (i = 0; i < len; i++) {
00616     if (!rejword_only_set_if_accepted || ptr[i].accepted ())
00617       ptr[i].setrej_bad_permuter ();
00618   }
00619 }
00620 
00621 
00625 void REJMAP::rej_word_xht_fixup() {
00626   int i;
00627 
00628   for (i = 0; i < len; i++) {
00629     if (!rejword_only_set_if_accepted || ptr[i].accepted ())
00630       ptr[i].setrej_xht_fixup ();
00631   }
00632 }
00633 
00634 
00638 void REJMAP::rej_word_no_alphanums() {
00639   int i;
00640 
00641   for (i = 0; i < len; i++) {
00642     if (!rejword_only_set_if_accepted || ptr[i].accepted ())
00643       ptr[i].setrej_no_alphanums ();
00644   }
00645 }
00646 
00647 
00651 void REJMAP::rej_word_mostly_rej() {
00652   int i;
00653 
00654   for (i = 0; i < len; i++) {
00655     if (!rejword_only_set_if_accepted || ptr[i].accepted ())
00656       ptr[i].setrej_mostly_rej ();
00657   }
00658 }
00659 
00660 
00664 void REJMAP::rej_word_bad_quality() {
00665   int i;
00666 
00667   for (i = 0; i < len; i++) {
00668     if (!rejword_only_set_if_accepted || ptr[i].accepted ())
00669       ptr[i].setrej_bad_quality ();
00670   }
00671 }
00672 
00673 
00677 void REJMAP::rej_word_doc_rej() {
00678   int i;
00679 
00680   for (i = 0; i < len; i++) {
00681     if (!rejword_only_set_if_accepted || ptr[i].accepted ())
00682       ptr[i].setrej_doc_rej ();
00683   }
00684 }
00685 
00686 
00690 void REJMAP::rej_word_block_rej() {
00691   int i;
00692 
00693   for (i = 0; i < len; i++) {
00694     if (!rejword_only_set_if_accepted || ptr[i].accepted ())
00695       ptr[i].setrej_block_rej ();
00696   }
00697 }
00698 
00699 
00703 void REJMAP::rej_word_row_rej() {
00704   int i;
00705 
00706   for (i = 0; i < len; i++) {
00707     if (!rejword_only_set_if_accepted || ptr[i].accepted ())
00708       ptr[i].setrej_row_rej ();
00709   }
00710 }

Generated on Wed Feb 28 19:49:08 2007 for Tesseract by  doxygen 1.5.1