int rx;
} FindCharResults;
-enum { ct_Word, ct_Upper, ct_Lower, ct_Digit };
-static const char *context_names[]= {
- "Word", /* bit 0, value 001 */
- "Upper", /* bit 1, value 002 */
- "Lower", /* bit 2, value 004 */
- "Digit", /* bit 3, value 010 */
+#define FOR_EACH_CONTEXT(EACH) \
+ EACH(Word) \
+ EACH(Upper) \
+ EACH(Lower) \
+ EACH(Digit)
+
+#define FEC_ENUM(Context) ct_##Context,
+#define FEC_BIT(Context) ctf_##Context = 1 << ct_##Context,
+enum {
+ FOR_EACH_CONTEXT(FEC_ENUM)
+ FOR_EACH_CONTEXT(FEC_BIT)
};
+
+#define FEC_STRINGS(Context) #Context,
+static const char *context_names[]= { FOR_EACH_CONTEXT(FEC_STRINGS) };
+
struct OcrCellTypeInfo {
/* bitmaps of indices into context_names: */
unsigned initial, nextword, midword;
}
const struct OcrCellTypeInfo ocr_celltype_number= {
- 010,010,010,
+ ctf_Digit, ctf_Digit, ctf_Digit,
.space_spaces= 5,
.name= "number",
.findchar_select= 0
};
const struct OcrCellTypeInfo ocr_celltype_text= {
- .initial= 012, /* Digit|Upper */
- .nextword= 017, /* Digit|Upper|Lower|Word */
- .midword= 014, /* Digit|Lower */
+ .initial= ctf_Digit | ctf_Upper,
+ .nextword= ctf_Digit | ctf_Upper | ctf_Lower | ctf_Word,
+ .midword= ctf_Digit | ctf_Lower,
.space_spaces= 4,
.name= "text",
.findchar_select= findchar_select_text