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