Ejemplo n.º 1
0
// 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
}
Ejemplo n.º 2
0
// 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
}