00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #ifndef REJCTMAP_H
00042 #define REJCTMAP_H
00043
00044 #ifdef __UNIX__
00045 #include <assert.h>
00046 #endif
00047 #include "memry.h"
00048 #include "bits16.h"
00049 #include "params.h"
00050 #include "notdll.h"
00051
00052 enum REJ_FLAGS
00053 {
00054
00055 R_TESS_FAILURE,
00056 R_SMALL_XHT,
00057 R_EDGE_CHAR,
00058 R_1IL_CONFLICT,
00059 R_POSTNN_1IL,
00060 R_REJ_CBLOB,
00061 R_MM_REJECT,
00062 R_BAD_REPETITION,
00063
00064
00065 R_POOR_MATCH,
00066 R_NOT_TESS_ACCEPTED,
00067 R_CONTAINS_BLANKS,
00068 R_BAD_PERMUTER,
00069
00070
00071 R_HYPHEN,
00072 R_DUBIOUS,
00073 R_NO_ALPHANUMS,
00074 R_MOSTLY_REJ,
00075 R_XHT_FIXUP,
00076
00077
00078 R_BAD_QUALITY,
00079
00080
00081 R_DOC_REJ,
00082 R_BLOCK_REJ,
00083 R_ROW_REJ,
00084 R_UNLV_REJ,
00085
00086
00087 R_NN_ACCEPT,
00088 R_HYPHEN_ACCEPT,
00089 R_MM_ACCEPT,
00090 R_QUALITY_ACCEPT,
00091 R_MINIMAL_REJ_ACCEPT
00092 };
00093
00094
00095
00096 #define MAP_ACCEPT '1'
00097 #define MAP_REJECT_PERM '0'
00098 #define MAP_REJECT_TEMP '2'
00099 #define MAP_REJECT_POTENTIAL '3'
00100
00101 class REJ
00102 {
00103 BITS16 flags1;
00104 BITS16 flags2;
00105
00106 void set_flag(REJ_FLAGS rej_flag) {
00107 if (rej_flag < 16)
00108 flags1.turn_on_bit (rej_flag);
00109 else
00110 flags2.turn_on_bit (rej_flag - 16);
00111 }
00112
00113 BOOL8 rej_before_nn_accept();
00114 BOOL8 rej_between_nn_and_mm();
00115 BOOL8 rej_between_mm_and_quality_accept();
00116 BOOL8 rej_between_quality_and_minimal_rej_accept();
00117 BOOL8 rej_before_mm_accept();
00118 BOOL8 rej_before_quality_accept();
00119
00120 public:
00121 REJ() {
00122 }
00123
00124 REJ(
00125 const REJ &source) {
00126 flags1 = source.flags1;
00127 flags2 = source.flags2;
00128 }
00129
00130 REJ & operator= (
00131 const REJ & source) {
00132 flags1 = source.flags1;
00133 flags2 = source.flags2;
00134 return *this;
00135 }
00136
00137 BOOL8 flag(REJ_FLAGS rej_flag) {
00138 if (rej_flag < 16)
00139 return flags1.bit (rej_flag);
00140 else
00141 return flags2.bit (rej_flag - 16);
00142 }
00143
00144 char display_char() {
00145 if (perm_rejected ())
00146 return MAP_REJECT_PERM;
00147 else if (accept_if_good_quality ())
00148 return MAP_REJECT_POTENTIAL;
00149 else if (rejected ())
00150 return MAP_REJECT_TEMP;
00151 else
00152 return MAP_ACCEPT;
00153 }
00154
00155 BOOL8 perm_rejected();
00156
00157 BOOL8 rejected();
00158
00159 BOOL8 accepted() {
00160 return !rejected ();
00161 }
00162
00163
00164 BOOL8 accept_if_good_quality();
00165
00166 BOOL8 recoverable() {
00167 return (rejected () && !perm_rejected ());
00168 }
00169
00170 void setrej_tess_failure();
00171 void setrej_small_xht();
00172 void setrej_edge_char();
00173 void setrej_1Il_conflict();
00174 void setrej_postNN_1Il();
00175 void setrej_rej_cblob();
00176 void setrej_mm_reject();
00177
00178 void setrej_bad_repetition();
00179 void setrej_poor_match();
00180
00181 void setrej_not_tess_accepted();
00182
00183 void setrej_contains_blanks();
00184 void setrej_bad_permuter();
00185 void setrej_hyphen();
00186 void setrej_dubious();
00187 void setrej_no_alphanums();
00188 void setrej_mostly_rej();
00189 void setrej_xht_fixup();
00190 void setrej_bad_quality();
00191 void setrej_doc_rej();
00192 void setrej_block_rej();
00193 void setrej_row_rej();
00194 void setrej_unlv_rej();
00195 void setrej_nn_accept();
00196 void setrej_hyphen_accept();
00197 void setrej_mm_accept();
00198
00199 void setrej_quality_accept();
00200
00201 void setrej_minimal_rej_accept();
00202
00203 void full_print(FILE *fp);
00204 };
00205
00206 class REJMAP
00207 {
00208 REJ *ptr;
00209 inT16 len;
00210
00211 public:
00212 REJMAP() {
00213 ptr = NULL;
00214 len = 0;
00215 }
00216
00217 REJMAP(
00218 const REJMAP &rejmap);
00219
00220 REJMAP & operator= (
00221 const REJMAP & source);
00222
00223 ~REJMAP () {
00224 if (ptr != NULL)
00225 free_struct (ptr, len * sizeof (REJ), "REJ");
00226 }
00227
00228 void initialise(
00229 inT16 length);
00230
00231 REJ & operator[](
00232 inT16 index) const
00233 {
00234 ASSERT_HOST (index < len);
00235 return ptr[index];
00236 }
00237
00238 inT32 length() const {
00239 return len;
00240 }
00241
00242 inT16 accept_count();
00243
00244 inT16 reject_count() {
00245 return len - accept_count ();
00246 }
00247
00248 void remove_pos(
00249 inT16 pos);
00250
00251 void print(FILE *fp);
00252
00253 void full_print(FILE *fp);
00254
00255 BOOL8 recoverable_rejects();
00256
00257 BOOL8 quality_recoverable_rejects();
00258
00259
00260 void rej_word_small_xht();
00261
00262 void rej_word_tess_failure();
00263 void rej_word_not_tess_accepted();
00264
00265
00266 void rej_word_contains_blanks();
00267
00268 void rej_word_bad_permuter();
00269 void rej_word_xht_fixup();
00270
00271 void rej_word_no_alphanums();
00272 void rej_word_mostly_rej();
00273 void rej_word_bad_quality();
00274 void rej_word_doc_rej();
00275 void rej_word_block_rej();
00276 void rej_word_row_rej();
00277 };
00278 #endif