static int16_t second_recog(cell *c) { levcut(c, 1); if (db_status && (db_trace_flag & 2)) est_snap(db_pass, c, "second rec linear"); criteria(c); if (db_status && (db_trace_flag & 2)) est_snap(db_pass, c, "second rec criteria"); if (c->nvers == 0) { c->recsource &= 0; c->history &= 0; } return c->nvers; }
Bool digital_last_context(void) { cell *curr,*tmp; char punct_list[]="'\"=:"; char sign_list[]="+-_"; int16_t l = strlen(punct_list),num,num_dig,num_bad,num_broken; uchar c,p; if( db_status && snap_activity('c') ) { snap_show_text("DIG : Digital last context"); snap_monitor(); } tmp = cell_f(); while( (tmp=tmp->next)->next ) { if( tmp->nvers && tmp->vers[0].prob==2 ) set_bad_cell(tmp); } num=num_dig=num_bad=num_broken=0; tmp = cell_f(); while( (tmp=tmp->next)->next && !(tmp->flg&(c_f_let|c_f_bad)) ); /* find let */ curr = cell_f(); if( tmp->next ) { while( (curr=curr->next)!=tmp ) if( (curr->flg&c_f_punct) && !(curr->nvers>0 && memchr(sign_list,curr->vers[0].let,sizeof(sign_list))) ) { curr = del_cell(curr); /* kill first punctuation-cell */ if( curr->next==NULL )break; } } curr = cell_l(); while( (curr=curr->prev)->prev && !(curr->flg&(c_f_let|c_f_bad)) ); /* find let */ if( curr->next ) { while( (curr=curr->next)->next ) if( (curr->flg&c_f_punct) ) { curr = del_cell(curr); /* kill last punctuation-cell */ if( curr->next==NULL )break; } } curr = cell_f(); while( (curr=curr->next)->next ) { if( curr->flg&c_f_bad ) num_bad++; if( !(curr->flg&(c_f_let|c_f_punct))) continue; c = curr->vers[0].let; if( memchr(punct_list,c,l) || c==left_quocket || c==right_quocket || c==low_quotes // macros E.P. ) { curr = del_cell(curr); if( curr->next==NULL )break; continue; } /* if( !enable_setup_alphabet && !test_alphabet_elem(c) ) { curr = del_cell(curr); if( curr->next==NULL )break; continue; } */ if( (curr->flg&c_f_let) ) { //if( memchr("0123456789ОЃ°ЗІТВшl",c,19) && if( isLikeDigit(c) && // 21.05.2002 E.P. curr->vers[0].prob > 150 // Nick 26.02.2001 ) num_dig++; if( memchr("С",c,1) )num_broken++; if( curr->flg&c_f_let )num++; } } if( digital_mode==2 || num_dig*4>=num*3 || num_dig==2 && num==3 || num_dig==1 && num==1 && num_bad==1 ) { /* digital string */ curr = cell_f(); if( digital_mode==2 ) while( (curr=curr->next)->next ) { if( !(curr->flg&(c_f_let|c_f_punct))) continue; c = curr->vers[0].let; if ( c==liga_exm || c=='!' ) curr=del_cell(curr); } curr = cell_f(); while( (curr=curr->next)->next ) { if( curr->nvers<1 ) continue; c = curr->vers[0].let; p = curr->vers[0].prob; if( c==(uchar)'_' ) curr->vers[0].let='-' ; if( c==(uchar)'ш' ) curr->vers[0].let='2' ; if( c==(uchar)'О' || // 21.05.2002 E.P. ( c==(uchar)'Ѓ')&& !is_russian_turkish_conflict(c) ) curr->vers[0].let='0' ; if( c==(uchar)'°' ) curr->vers[0].let='6' ; if( c==(uchar)'З' || c==(uchar)'І') curr->vers[0].let='3' ; if( c==(uchar)'В' ) curr->vers[0].let='8' ; if( c==(uchar)'С' && (p<190 || num_broken+num_dig==num ) ) curr->vers[0].let='0' ; if( c==(uchar)'Т' || c==liga_exm || c=='!' || c=='|' ) curr->vers[0].let='1' ; if( c==(uchar)'l' ) curr->vers[0].let='1' ; if( c=='$' && curr->nvers==1 ) { curr->vers[0].let='5'; curr->vers[1].let='$'; curr->vers[1].prob=curr->vers[0].prob-10; curr->nvers=2; } if( c=='5' && curr->nvers>2 && curr->vers[1].let==(uchar)'°' && p==curr->vers[1].prob && curr->vers[2].let=='6' && curr->vers[2].prob>150 ) { /* alternates : °56 -->>CONTEXT-->> 5°6 */ curr->vers[0].let='6'; curr->vers[2].let='5'; } } } digital_mode=0; set_all_alphabet(); for(curr=cell_f()->nextl;curr!=cell_l();curr=curr->nextl) { if( curr->flg&c_f_bad ) { s_glue GL={0}; short_recog_cell(curr); if( curr->nvers<1 ) { GL.celist[0]=curr; GL.maxlist[0]=curr; GL.complist[0]=curr->env; GL.maxlist[1]=GL.celist[1]=NULL; GL.complist[1]=NULL; GL.ncell=1; GL.row = curr->row; GL.col = curr->col; GL.width = curr->w; GL.height = curr->h; if( crecell(curr,&GL,3)>=0) dmBOX(curr,&GL); } criteria(curr); levcut(curr,1); if( curr->nvers<1 || curr->vers[0].prob<220 ) { // restore bad sybmol set_bad_cell(curr); } if( curr->nvers && curr->vers[0].let=='|' ) { curr->vers[0].let='1'; // Nick add 26.02.2001 - test artificial '1' levcut(curr,1); if( curr->nvers<1 || curr->nvers==1 && curr->vers[0].let!='1' || curr->vers[0].prob<220 ) { // restore bad sybmol set_bad_cell(curr); } } } } for(curr=cell_f()->nextl;curr!=cell_l();curr=curr->nextl) { if( curr->nvers && curr->vers[0].let=='(' && curr->next && curr->next->nvers && curr->next->vers[0].let==')' ) { clist[0]=curr; clist[1]=curr->next; compose_cell(2,clist,curr); curr->vers[0].let='0'; curr->vers[1].prob=220; curr->nvers=1; } } if( db_status && snap_activity('c') ) { snap_show_text("DIG : Digital last context end"); snap_monitor(); } num_dig = 0; // Nick 26.02.2001 num = 0; for(curr=cell_f()->nextl;curr!=cell_l();curr=curr->nextl,num++) { // 21.05.2002 E.P. Bool likeDigit = isLikeDigit(curr->vers[0].let); if( curr->nvers<1 || curr->vers[0].prob<150 && likeDigit) return 0; // bad symbols or small propability if( likeDigit ) num_dig++; } if( num_dig*2 <= num ) // Nick 26.02.2001 return 0; return 1; }
// // rotate word cells // int16_t erection_incline_word(cell *b, cell *e, int16_t base_3, int16_t n_call) { cell *c, *tmp, *cnext ; int32_t inc, i ; int16_t shave=(erection_enable==2) ; version save_versions[VERS_IN_CELL] ; int16_t save_nvers ; if( (inc=get_incline_of_word(b,e))==0 ) return 0; if( 1&&!test_incline_of_word(b,e,inc) ) return 0; for(i=0, c=b; c!=e; c=c->next, i++) { tmp = c->prev; // left cell cnext=c->next; // right cell if( local_pass ) { if( c->pos_inc&erect_rot ) continue; if( c->stick_inc!=NO_INCLINE && (((long)c->stick_inc*c->h)/204l)>16 && ( (c->flg==c_f_bad) && c->stick_inc<max_incline || c->nvers>0 && (memchr(incline_chars,c->vers[0].let,sizeof(incline_chars)) && !is_russian_baltic_conflict(c->vers[0].let)&&// 17.07.2001 E.P. !is_russian_turkish_conflict(c->vers[0].let) // 21.05.2002 E.P. || erect_solid_stick(c))) ) c->save_stick_inc = c->stick_inc; else c->save_stick_inc = (int16_t)inc; c->pos_inc = erect_rest; continue; } // rotate cell images if( c->stick_inc!=NO_INCLINE && (((long)c->stick_inc*c->h)/204l)>16 && ( (c->flg==c_f_bad) && c->stick_inc<max_incline || c->nvers>0 && (memchr(incline_chars,c->vers[0].let,sizeof(incline_chars)) && !is_russian_baltic_conflict(c->vers[0].let)&&// 17.07.2001 E.P. !is_russian_turkish_conflict(c->vers[0].let) // 21.05.2002 E.P. || erect_solid_stick(c))) ) c=erect_cell_value (c, c->stick_inc, shave , TRUE); else c=erect_cell_value (c, (int16_t)inc, shave , TRUE); for(tmp = tmp->next;tmp!=cnext;tmp=tmp->next) { // shift cell boxes erect_rotate_bl(tmp,base_3,inc,-1);//(int16_t)(line_scale?(base_3>>line_scale):base_3),inc,-1); v2_pidx_crit(tmp); if( (save_nvers = c->nvers)>0 ) memcpy(save_versions,c->vers,VERS_IN_CELL*sizeof(version)); // recognizing corrected images if( (tmp->flg&(c_f_bad|c_f_let)) && !local_pass) { if(n_call==0 ) { if( tmp->nvers>0 && memchr(disable_rerecog,tmp->vers[0].let,sizeof(disable_rerecog) ) && !is_russian_baltic_conflict(tmp->vers[0].let)&&// 17.07.2001 E.P. !is_russian_turkish_conflict(tmp->vers[0].let) // 21.05.2002 E.P. || tmp->nvers<1 ) { short_recog_cell( tmp ); levcut(tmp,1); add_versions(tmp, save_versions, save_nvers); } // end of spec letters for 1 pass } else { s_glue GL={0}; GL.celist[0] = tmp; GL.maxlist[0] = tmp; GL.complist[0] = tmp->env; GL.maxlist[1] = GL.celist[1]=NULL; GL.complist[1] = NULL; GL.ncell = 1; GL.row = tmp->row; GL.col = tmp->col; GL.width = tmp->w; GL.height = tmp->h; if(crecell(tmp,&GL,3)>=0) dmBOX(tmp,&GL); } // end of spec letters for 2 pass } // end of if letter } // end of cykl tmp } return (int16_t)inc; }