+static DatabaseNode *findchar(const FindCharArgs *fca, int *match_rx) {
+ FindCharResults results[NCONTEXTS];
+ int ctxi, match=-1, nmatches=0;
+
+ debugf("OCR lx=%d ct_state=%x ", fca->x, fca->ctxmap);
+ for (ctxi=0; ctxi<NCONTEXTS; ctxi++) {
+ results[ctxi].match= 0;
+ if (!(fca->ctxmap & (1u << ctxi))) continue;
+ debugf(" || %s",context_names[ctxi]);
+
+ results[ctxi].match= findchar_1ctx(fca, &fca->rd->contexts[ctxi],
+ &results[ctxi].rx);
+ if (!results[ctxi].match) continue;
+
+ match= ctxi;
+ nmatches++;
+ }
+ if (nmatches==1) {
+ debugf( " unambiguous");
+ } else {
+ match=-1;
+ }
+ if (match<0)
+ return 0;
+
+ *match_rx= results[ctxi].rx;
+ return results[ctxi].match;
+}
+
+const char *ocr_celltype_name(OcrCellType ct) { return ct->name; }
+