void Dawg::iterate_words(const UNICHARSET &unicharset, TessCallback1<const char *> *cb) const { std::unique_ptr<TessCallback1<const WERD_CHOICE *>> shim( NewPermanentTessCallback(CallWithUTF8, cb)); WERD_CHOICE word(&unicharset); iterate_words_rec(word, 0, shim.get()); }
void Dawg::iterate_words_rec(const WERD_CHOICE &word_so_far, NODE_REF to_explore, TessCallback1<const WERD_CHOICE *> *cb) const { NodeChildVector children; this->unichar_ids_of(to_explore, &children, false); for (int i = 0; i < children.size(); i++) { WERD_CHOICE next_word(word_so_far); next_word.append_unichar_id(children[i].unichar_id, 1, 0.0, 0.0); if (this->end_of_word(children[i].edge_ref)) { cb->Run(&next_word); } NODE_REF next = next_node(children[i].edge_ref); if (next != 0) { iterate_words_rec(next_word, next, cb); } } }
void Dawg::iterate_words_rec(const WERD_CHOICE &word_so_far, NODE_REF to_explore, TessCallback1<const char *> *cb) const { NodeChildVector children; this->unichar_ids_of(to_explore, &children); for (int i = 0; i < children.size(); i++) { WERD_CHOICE next_word(word_so_far); next_word.append_unichar_id(children[i].unichar_id, 1, 0.0, 0.0); if (this->end_of_word(children[i].edge_ref)) { STRING s; next_word.string_and_lengths(&s, NULL); cb->Run(s.string()); } NODE_REF next = next_node(children[i].edge_ref); if (next != 0) { iterate_words_rec(next_word, next, cb); } } }
void Dawg::iterate_words(const UNICHARSET &unicharset, TessCallback1<const WERD_CHOICE *> *cb) const { WERD_CHOICE word(&unicharset); iterate_words_rec(word, 0, cb); }