chiark / gitweb /
Remove magic numbers from cell type contexts
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Wed, 1 Jul 2009 17:06:20 +0000 (18:06 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Wed, 1 Jul 2009 17:06:20 +0000 (18:06 +0100)
pctb/ocr.c

index ef0364c..1a8ac9a 100644 (file)
@@ -53,13 +53,22 @@ typedef struct {
   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;
@@ -359,15 +368,15 @@ static int findchar_select_text(const FindCharArgs *fca,
 }
 
 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