00001
00020 #ifndef REJCTMAP_H
00021 #define REJCTMAP_H
00022
00023 #ifdef __UNIX__
00024 #include <assert.h>
00025 #endif
00026 #include "memry.h"
00027 #include "bits16.h"
00028 #include "varable.h"
00029 #include "notdll.h"
00030
00033 extern BOOL_VAR_H (rejword_only_set_if_accepted, TRUE,
00034 "Mimic old reject_word");
00035 extern BOOL_VAR_H (rejmap_allow_more_good_qual, FALSE,
00036 "Use initial good qual setting");
00037 extern BOOL_VAR_H (rej_use_1Il_rej, TRUE, "1Il rejection enabled");
00061 enum REJ_FLAGS
00062 {
00063
00064 R_TESS_FAILURE,
00065 R_SMALL_XHT,
00066 R_EDGE_CHAR,
00067 R_1IL_CONFLICT,
00068 R_POSTNN_1IL,
00069 R_REJ_CBLOB,
00070 R_MM_REJECT,
00071 R_BAD_REPETITION,
00072
00073
00074 R_POOR_MATCH,
00075 R_NOT_TESS_ACCEPTED,
00076 R_CONTAINS_BLANKS,
00077 R_BAD_PERMUTER,
00078
00079
00080 R_HYPHEN,
00081 R_DUBIOUS,
00082 R_NO_ALPHANUMS,
00083 R_MOSTLY_REJ,
00084 R_XHT_FIXUP,
00085
00086
00087 R_BAD_QUALITY,
00088
00089
00090 R_DOC_REJ,
00091 R_BLOCK_REJ,
00092 R_ROW_REJ,
00093 R_UNLV_REJ,
00094
00095
00096 R_NN_ACCEPT,
00097 R_HYPHEN_ACCEPT,
00098 R_MM_ACCEPT,
00099 R_QUALITY_ACCEPT,
00100 R_MINIMAL_REJ_ACCEPT
00101 };
00102
00104 #define MAP_ACCEPT '1'
00105 #define MAP_REJECT_PERM '0'
00106 #define MAP_REJECT_TEMP '2'
00107 #define MAP_REJECT_POTENTIAL '3'
00108
00124 class REJ
00125 {
00126 BITS16 flags1;
00127 BITS16 flags2;
00128
00129 void set_flag(REJ_FLAGS rej_flag) {
00130 if (rej_flag < 16)
00131 flags1.turn_on_bit (rej_flag);
00132 else
00133 flags2.turn_on_bit (rej_flag - 16);
00134 }
00135
00136 BOOL8 rej_before_nn_accept();
00137 BOOL8 rej_between_nn_and_mm();
00138 BOOL8 rej_between_mm_and_quality_accept();
00139 BOOL8 rej_between_quality_and_minimal_rej_accept();
00140 BOOL8 rej_before_mm_accept();
00141 BOOL8 rej_before_quality_accept();
00142
00143 public:
00144 REJ() {
00145 }
00146
00147 REJ(
00148 const REJ &source) {
00149 flags1 = source.flags1;
00150 flags2 = source.flags2;
00151 }
00152
00153 REJ & operator= (
00154 const REJ & source) {
00155 flags1 = source.flags1;
00156 flags2 = source.flags2;
00157 return *this;
00158 }
00159
00160 BOOL8 flag(REJ_FLAGS rej_flag) {
00161 if (rej_flag < 16)
00162 return flags1.bit (rej_flag);
00163 else
00164 return flags2.bit (rej_flag - 16);
00165 }
00166
00167 char display_char() {
00168 if (perm_rejected ())
00169 return MAP_REJECT_PERM;
00170 else if (accept_if_good_quality ())
00171 return MAP_REJECT_POTENTIAL;
00172 else if (rejected ())
00173 return MAP_REJECT_TEMP;
00174 else
00175 return MAP_ACCEPT;
00176 }
00177
00178 BOOL8 perm_rejected();
00179
00180 BOOL8 rejected();
00181
00182 BOOL8 accepted() {
00183 return !rejected ();
00184 }
00185
00186
00187 BOOL8 accept_if_good_quality();
00188
00189 BOOL8 recoverable() {
00190 return (rejected () && !perm_rejected ());
00191 }
00192
00193 void setrej_tess_failure();
00194 void setrej_small_xht();
00195 void setrej_edge_char();
00196 void setrej_1Il_conflict();
00197 void setrej_postNN_1Il();
00198 void setrej_rej_cblob();
00199 void setrej_mm_reject();
00200
00201 void setrej_bad_repetition();
00202 void setrej_poor_match();
00203
00204 void setrej_not_tess_accepted();
00205
00206 void setrej_contains_blanks();
00207 void setrej_bad_permuter();
00208 void setrej_hyphen();
00209 void setrej_dubious();
00210 void setrej_no_alphanums();
00211 void setrej_mostly_rej();
00212 void setrej_xht_fixup();
00213 void setrej_bad_quality();
00214 void setrej_doc_rej();
00215 void setrej_block_rej();
00216 void setrej_row_rej();
00217 void setrej_unlv_rej();
00218 void setrej_nn_accept();
00219 void setrej_hyphen_accept();
00220 void setrej_mm_accept();
00221
00222 void setrej_quality_accept();
00223
00224 void setrej_minimal_rej_accept();
00225
00226 void full_print(FILE *fp);
00227 };
00228
00244 class REJMAP
00245 {
00246 REJ *ptr;
00247 INT16 len;
00248
00249 public:
00250 REJMAP() {
00251 ptr = NULL;
00252 len = 0;
00253 }
00254
00255 REJMAP(
00256 const REJMAP &rejmap);
00257
00258 REJMAP & operator= (
00259 const REJMAP & source);
00260
00261 ~REJMAP () {
00262 if (ptr != NULL)
00263 free_struct (ptr, len * sizeof (REJ), "REJ");
00264 }
00265
00266 void initialise(
00267 INT16 length);
00268
00269 REJ & operator[](
00270 INT16 index) const
00271 {
00272 ASSERT_HOST (index < len);
00273 return ptr[index];
00274 }
00275
00276 INT32 length() const {
00277 return len;
00278 }
00279
00280 INT16 accept_count();
00281
00282 INT16 reject_count() {
00283 return len - accept_count ();
00284 }
00285
00286 void remove_pos(
00287 INT16 pos);
00288
00289 void print(FILE *fp);
00290
00291 void full_print(FILE *fp);
00292
00293 BOOL8 recoverable_rejects();
00294
00295 BOOL8 quality_recoverable_rejects();
00296
00297
00298 void rej_word_small_xht();
00299
00300 void rej_word_tess_failure();
00301 void rej_word_not_tess_accepted();
00302
00303
00304 void rej_word_contains_blanks();
00305
00306 void rej_word_bad_permuter();
00307 void rej_word_xht_fixup();
00308
00309 void rej_word_no_alphanums();
00310 void rej_word_mostly_rej();
00311 void rej_word_bad_quality();
00312 void rej_word_doc_rej();
00313 void rej_word_block_rej();
00314 void rej_word_row_rej();
00315 };
00316 #endif