chiark
/
gitweb
/
~yarrgweb
/
ypp-sc-tools.main.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1d0e4ca
)
Recase findchar_unique as findchar
author
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Mon, 29 Jun 2009 16:26:06 +0000
(17:26 +0100)
committer
Ian Jackson
<Ian.Jackson@eu.citrix.com>
Mon, 29 Jun 2009 16:26:06 +0000
(17:26 +0100)
pctb/ocr.c
patch
|
blob
|
history
diff --git
a/pctb/ocr.c
b/pctb/ocr.c
index b7934c983e2f407a362183c0e5aad6756653165c..fe264e8110ce8ffce6cbb6be0282c004151dec31 100644
(file)
--- a/
pctb/ocr.c
+++ b/
pctb/ocr.c
@@
-40,6
+40,18
@@
typedef struct DatabaseNode {
DatabaseLink *links;
} DatabaseNode;
DatabaseLink *links;
} DatabaseNode;
+typedef struct {
+ OcrReader *rd;
+ int w;
+ Pixcol *cols;
+ int x;
+ unsigned ctxmap;
+} FindCharArgs;
+typedef struct {
+ DatabaseNode *match;
+ int rx;
+} FindCharResults;
+
static const char *context_names[]= {
"Lower",
"Upper",
static const char *context_names[]= {
"Lower",
"Upper",
@@
-275,14
+287,6
@@
static void add_result(OcrReader *rd, const char *s, int l, int r,
}
}
-typedef struct {
- OcrReader *rd;
- int w;
- Pixcol *cols;
- int x;
- unsigned ctxmap;
-} FindCharArgs;
-
static DatabaseNode *findchar_1ctx(const FindCharArgs *fca,
DatabaseNode *start, int *matchx_r) {
DatabaseNode *current= start;
static DatabaseNode *findchar_1ctx(const FindCharArgs *fca,
DatabaseNode *start, int *matchx_r) {
DatabaseNode *current= start;
@@
-318,28
+322,33
@@
static DatabaseNode *findchar_1ctx(const FindCharArgs *fca,
return bestmatch;
}
return bestmatch;
}
-static DatabaseNode *findchar
_unique
(const FindCharArgs *fca, int *match_rx) {
-
DatabaseNode *uniquematch= 0
;
- int ctxi;
-
+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++) {
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]);
if (!(fca->ctxmap & (1u << ctxi))) continue;
debugf(" || %s",context_names[ctxi]);
- DatabaseNode *match=
-
findchar_1ctx(fca, &fca->rd->contexts[ctxi], match_
rx);
- if (!match) continue;
+ results[ctxi].match= findchar_1ctx(fca, &fca->rd->contexts[ctxi],
+
&results[ctxi].
rx);
+ if (!
results[ctxi].
match) continue;
- if (uniquematch && strcmp(match->str, uniquematch->str)) {
- debugf( " ambiguous");
- uniquematch= 0;
- } else {
- uniquematch= match;
- }
+ match= ctxi;
+ nmatches++;
}
}
-
- return uniquematch;
+ 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; }
}
const char *ocr_celltype_name(OcrCellType ct) { return ct->name; }
@@
-389,7
+398,7
@@
OcrResultGlyph *ocr(OcrReader *rd, OcrCellType ct, int w, Pixcol cols[]) {
fca.x= x;
int match_rx=-1;
fca.x= x;
int match_rx=-1;
- DatabaseNode *match= findchar
_unique
(&fca, &match_rx);
+ DatabaseNode *match= findchar(&fca, &match_rx);
if (match) {
debugf(" || YES");
if (match) {
debugf(" || YES");