// Go by string and recog 'ч' void cf::proc_shortu() { cell * c, * cap; uchar let; int ndust; c = cell_f(); while((c = c->nextLetter()) != NULL) { if(! c->hasCellFlag(c_f_let + c_f_bad)) continue; let = c->vers[0].let; ndust = 0; if(!memchr("\xE3\x93", let, 2)) continue; cap = c; while((cap = cap->next) != NULL && cap != c->nextLetter()) { if(cap->isDust()) { ndust++; switch(rec_shortu(c,cap)){ case 1: goto next_let; case -1: return; case 0: break; } } } cap = c; while((cap = cap->prev) != NULL && cap != c->previousLetter()) { if(cap->isDust()) { ndust++; //if(rec_shortu(c,cap))goto next_let; switch(rec_shortu(c,cap)) { case 1: goto next_let; case -1: return; case 0: break; } } } if(ndust > 1) rec_shortu_halo(c); // many dusts, try all together next_let: ; } // while by letters }
// Go by string and recog 'ч' void proc_shortu(void) { cell * c,*cap; uchar let; int16_t ndust; c = cell_f(); while((c=c->nextl) != NULL ){ if( !(c->flg & (c_f_let+c_f_bad)) ) continue; let = c->vers[0].let; ndust=0; if( !memchr("гУ",let,2) ) continue; cap = c; while((cap=cap->next)!=NULL && cap != c->nextl ) { if( cap->flg & c_f_dust) { ndust++; switch( rec_shortu(c,cap)) { case 1: goto next_let; case -1: return; case 0: break; } } } cap = c; while((cap=cap->prev)!=NULL && cap != c->prevl ) { if( cap->flg & c_f_dust) { ndust++; //if(rec_shortu(c,cap))goto next_let; switch( rec_shortu(c,cap)) { case 1: goto next_let; case -1: return; case 0: break; } } } if( ndust > 1) rec_shortu_halo(c); // many dusts, try all together next_let: ; } // while by letters }