This method returns a new werd constructed using the blobs in the input all_blobs list, which correspond to the blobs in this werd object. The blobs used to construct the new word are consumed and removed from the input all_blobs list. Returns nullptr if the word couldn't be constructed. Returns original blobs for which no matches were found in the output list orphan_blobs (appends).
392 C_BLOB_LIST current_blob_list;
393 C_BLOB_IT werd_blobs_it(¤t_blob_list);
398 C_BLOB_LIST new_werd_blobs;
399 C_BLOB_IT new_blobs_it(&new_werd_blobs);
403 C_BLOB_LIST not_found_blobs;
404 C_BLOB_IT not_found_it(¬_found_blobs);
405 not_found_it.move_to_last();
407 werd_blobs_it.move_to_first();
408 for (werd_blobs_it.mark_cycle_pt(); !werd_blobs_it.cycled_list();
409 werd_blobs_it.forward()) {
410 C_BLOB* werd_blob = werd_blobs_it.extract();
416 C_BLOB_IT all_blobs_it(all_blobs);
417 for (all_blobs_it.mark_cycle_pt(); !all_blobs_it.cycled_list();
418 all_blobs_it.forward()) {
419 C_BLOB* a_blob = all_blobs_it.data();
424 tprintf(
"Bounding box couldn't be ascertained\n");
426 if (werd_blob_box.
contains(a_blob_box) ||
431 all_blobs_it.extract();
432 new_blobs_it.add_after_then_move(a_blob);
437 not_found_it.add_after_then_move(werd_blob);
445 not_found_it.move_to_first();
446 for (not_found_it.mark_cycle_pt(); !not_found_it.cycled_list();
447 not_found_it.forward()) {
448 C_BLOB* not_found = not_found_it.data();
450 C_BLOB_IT existing_blobs_it(new_blobs_it);
451 for (existing_blobs_it.mark_cycle_pt(); !existing_blobs_it.cycled_list();
452 existing_blobs_it.forward()) {
453 C_BLOB* a_blob = existing_blobs_it.data();
459 delete not_found_it.extract();
465 C_BLOB_IT orphan_blobs_it(orphan_blobs);
466 orphan_blobs_it.move_to_last();
467 orphan_blobs_it.add_list_after(¬_found_blobs);
471 WERD* new_werd =
nullptr;
472 if (!new_werd_blobs.empty()) {
473 new_werd =
new WERD(&new_werd_blobs,
this);
477 this_list_it.add_list_after(¬_found_blobs);
bool major_overlap(const TBOX &box) const
bool contains(const FCOORD pt) const
TBOX bounding_box() const
double y_overlap_fraction(const TBOX &box) const
DLLSYM void tprintf(const char *format,...)
C_BLOB_LIST * cblob_list()