///////////////////////////////////////////////////////////////////////////// // CheckLineForFilling Bool CheckLineForFilling( CSTR_line* Comingline ) { CSTR_line line; CSTR_rast rast; RecVersions vers; CSTR_rast_attr rast_attr; line = *Comingline; rast = CSTR_GetFirstRaster( line ); // I фикт. растр rast = CSTR_GetNextRaster( rast , CSTR_f_all ); while( rast ) { CSTR_GetCollection( rast,&vers ); CSTR_GetAttr( rast,&rast_attr ); if((rast_attr.flg&CSTR_f_dust) || (rast_attr.flg&CSTR_f_fict ) ||//Дусты и ((rast_attr.flg&CSTR_f_space) && (!vers.Alt[0].Code || vers.Alt[0].Code == 0x1e || vers.Alt[0].Code == 0x1f))) //полупробелы выкидываем. goto next_raster; return TRUE; next_raster: rast = CSTR_GetNextRaster( rast , CSTR_f_all ); } return FALSE; }
static CSTR_rast ed_end_word(CSTR_rast cs,uchar *str,uchar *word_len) { CSTR_rast c=cs; CSTR_rast_attr attr; int16_t i; RecVersions vers; CSTR_GetCollection(c,&vers); *str++ = vers.Alt[0].Code; i=1; do{ c=CSTR_GetNext(c); CSTR_GetCollection(c,&vers); *str++ = vers.Alt[0].Code; CSTR_GetAttr(c,&attr); i++; }while( c && !memchr(right_limit_word,vers.Alt[0].Code,sizeof(right_limit_word)) && !(attr.flg&CSTR_f_fict) && i<MAX_LEN_WORD-1); c=c ? c : CSTR_GetLastRaster(CSTR_GetRasterLine(cs)); if( i ) { i--; str--; } *str='\0'; *word_len = (uchar)i; return c; }
///////////////////////////////////////////////////////////////////////////// // CChar::AddingLetter void CChar::AddingLetter(CSTR_rast* rast, int index, Bool* FlagCapDrop) { CSTR_rast_attr rast_attr; UniVersions vers; CSTR_GetCollectionUni( *rast,&vers ); CSTR_GetAttr( *rast,&rast_attr ); SetRect(&m_rectChar, rast_attr.col - TemplateOffset.x, rast_attr.row - TemplateOffset.y, rast_attr.col - TemplateOffset.x + rast_attr.w, rast_attr.row - TemplateOffset.y + rast_attr.h); SetRect(&m_RealRectChar, rast_attr.r_col - TemplateOffset.x, rast_attr.r_row - TemplateOffset.y, rast_attr.r_col - TemplateOffset.x + rast_attr.w, rast_attr.r_row - TemplateOffset.y + rast_attr.h); m_wCountAlt = MIN(vers.lnAltCnt,REC_MAX_VERS); m_bFlg_spell = 0; if(!vers.lnAltCnt) { m_wCountAlt=1; m_chrVersions[0].m_bChar = UnRecogSymbol; m_chrVersions[0].m_bProbability = 0; } else { for (int i=0;i<m_wCountAlt;i++) { m_chrVersions[i].m_bChar = vers.Alt[i].Code[index]; m_chrVersions[i].m_bProbability = vers.Alt[i].Prob; } Frmt_CharSet = vers.Alt[0].Charset; } if( rast_attr.flg_spell & CSTR_fa_spell_nocarrying ) m_bFlg_spell_nocarrying = 0; else m_bFlg_spell_nocarrying = 1; if(rast_attr.flg_spell & CSTR_fa_spell_reject) m_bFlg_spell = 0; else m_bFlg_spell = 1; m_blanguage = rast_attr.language; if(rast_attr.font_spec == CSTR_fs_courier) m_wFontNumber = rast_attr.font & 0xFC; else m_wFontNumber = rast_attr.font; if(*FlagCapDrop) m_bFlg_cup_drop = TRUE; else m_bFlg_cup_drop = FALSE; }
static CSTR_rast ed_next_word(CSTR_rast cs) { CSTR_rast c=cs; CSTR_rast_attr attr; RecVersions vers; CSTR_GetAttr(c,&attr); if( attr.flg==CSTR_f_fict && attr.col==0x7fff ) return (CSTR_rast)0; // last rast do{ c=CSTR_GetNext(c); CSTR_GetAttr(c,&attr); CSTR_GetCollection(c,&vers); }while( c && memchr(left_limit_word,vers.Alt[0].Code,sizeof(left_limit_word)) && !(attr.flg&CSTR_f_fict) ); return (attr.flg&CSTR_f_fict)?(CSTR_rast)0:c; }
static void v2_pidx_crit(CSTR_rast c) { int16_t pidx; // version *v, *wv; UniVersions vers, wvers = { 0 }; uint16_t let; int i, j; CSTR_rast_attr attr; CSTR_GetAttr(c, &attr); CSTR_GetCollectionUni(c, &vers); // Paul 07-12-99 if (vers.lnAltCnt <= 0) return; // attr.reasno = 0; pidx = prop_index(attr.h, attr.w); // wv = v = c->vers; wvers.lnAltMax = REC_MAX_VERS; // while (v->let) for (i = j = 0; i < vers.lnAltCnt; i++) { if (is_cen_language(language) && !attr.accent_leader) //let = (wv->let=v->let) * 2; let = ((uint16_t) vers.Alt[i].Liga) * 2; else //let = (let_sans_acc[wv->let=v->let]) * 2; let = (let_sans_acc[vers.Alt[i].Liga]) * 2; // wv->prob = v->prob; if (pidx + prop_l_delta < letters_pidx_table[let]) { attr.reasno |= CSTR_rn_left; continue; } if (pidx - prop_r_delta > letters_pidx_table[let + 1]) { attr.reasno |= CSTR_rn_right; continue; } // v++; // wv++; wvers.Alt[j] = vers.Alt[i]; j++; } // wv->let = 0; CSTR_SetAttr(c, &attr); wvers.lnAltCnt = j; // if ((c->nvers -= v-wv) == 0) if (wvers.lnAltCnt <= 0) set_bad_cell(c); else CSTR_StoreCollectionUni(c, &wvers); }
static void show_spell(CSTR_rast c) { uchar wrd[80],buf[160],*w=wrd, lang; Bool32 nonrec=FALSE; CSTR_rast_attr attr; UniVersions uni; CSTR_rast co=c; *w=0; do{ CSTR_GetAttr(c, &attr); c=CSTR_GetPrev(c); } while( c && attr.flg&(CSTR_f_let|CSTR_f_bad) ); if( !c ) c=CSTR_GetNext(CSTR_GetFirstRaster(CSTR_GetRasterLine(co))); else c=CSTR_GetNext(CSTR_GetNext(c)); CSTR_GetAttr(c,&attr); for(lang=attr.language;c;c=CSTR_GetNext(c)) { CSTR_GetAttr(c,&attr); if(!(attr.flg&(CSTR_f_let|CSTR_f_bad)) ) break; if( attr.flg&CSTR_f_bad ) nonrec=TRUE; CSTR_GetCollectionUni(c,&uni); strcat(w,uni.Alt[0].Code); } strcpy(buf,"<"); strcat(buf,wrd); strcat(buf,"> static : "); if( rpstr_txt_spell(wrd,lang) ) strcat(buf,"y"); else strcat(buf," n"); Snap_Console(buf); return; }
void ed_make_word(CSTR_rast b, CSTR_rast e) { uchar *l,p; CSTR_rast c; UniVersions uni; int16_t k,i,n,h,wb; CSTR_rast_attr a; int16_t top,bottom,left,right; /* struct fragm_disk { uchar code; uchar fragm_numb; uint16_t depth; }; struct fragm_disk_descr { uchar code; uint16_t row; uint16_t col; uint16_t height; uint16_t w_width; char type; uchar kegl; uchar font; uchar language;//reserv; uchar type_underl; }; struct sheet_disk_descr { uchar code; char quant_fragm; uint16_t sheet_numb; uint16_t descr_lth; uchar byte_flag; uint16_t resolution; uint16_t incline; char tabl[13]; }; */ for(top=10000,bottom=0,left=10000,right=0,c=b;c&&c!=e;c=CSTR_GetNext(c)) { CSTR_GetAttr(c,&a); if( a.col<left ) left = a.col; if( a.col+a.w>right ) right = a.col+a.w; if( a.row<top ) top = a.row; if( a.row+a.h>bottom ) bottom = a.row+a.h; if( c==b ) { language=a.language; } } h = bottom-top-1; wb= (right-left-1+7)/8; // start sheet_disk_descr p =0x0a/*SS_SHEET_DESCR*//*f.code*/; ed_write((uchar*)&p,1); p =1/*f.quant_fragm*/; ed_write((uchar*)&p,1); n =0/*f.sheet_numb*/; ed_write((uchar*)&n,2); n =0x26/*f.descr_lth*/; ed_write((uchar*)&n,2); p =0/*f.byte_flag*/; ed_write((uchar*)&p,1); n =300/*f.resolution*/; ed_write((uchar*)&n,2); n =0/*f.incline*/; ed_write((uchar*)&n,2); p =0/*f.res1*/; ed_write((uchar*)&p,1); n =0/*f.res2-3*/; ed_write((uchar*)&n,2); n =0/*f.res4-5*/; ed_write((uchar*)&n,2); n =0/*f.res6-7*/; ed_write((uchar*)&n,2); n =0/*f.res8-9*/; ed_write((uchar*)&n,2); n =0/*f.res10-11*/; ed_write((uchar*)&n,2); n =0/*f.res12-13*/; ed_write((uchar*)&n,2); // start fragm_disk_descr p =0x0b/*SS_FRAGMENT*//*f.code*/; ed_write((uchar*)&p,1); n =0/*f.row*/; ed_write((uchar*)&n,2); n =0/*f.col*/; ed_write((uchar*)&n,2); n =h/*f.heigh*/; ed_write((uchar*)&n,2); n =wb/*f.w_width*/; ed_write((uchar*)&n,2); p =0/*FD_TYPE_TEXT*//*f.type*/; ed_write((uchar*)&p,1); p =10/*f.kegl*/; ed_write((uchar*)&p,1); p =0/*f.font*/; ed_write((uchar*)&p,1); p = language; ed_write((uchar*)&p,1); p =0/*f.type_underl*/; ed_write((uchar*)&p,1); // start fragm_disk p =0x0b/*SS_FRAGMENT*//*f.code*/; ed_write((uchar*)&p,1); p =0/*f.fragm_numb*/; ed_write((uchar*)&p,1); n =0/*f.depth*/; ed_write((uchar*)&n,2); for(c=b;c&&c!=e;c=CSTR_GetNext(c)) { CSTR_GetCollectionUni(c,&uni); if( uni.lnAltCnt && !uni.Alt[0].Code[0] ) continue; CSTR_GetAttr(c,&a); // start bitmap ref p =0/*SS_BITMAP_REF*/; ed_write((uchar*)&p,1); p =a.cpos; ed_write((uchar*)&p,1); n =a.r_row; ed_write((uchar*)&n,2); n =a.r_col; ed_write((uchar*)&n,2); n =a.h; ed_write((uchar*)&n,2); n =a.w; ed_write((uchar*)&n,2); // stop bitmap ref n=(int16_t)uni.lnAltCnt; if(n>7) n=7; if(n<1) n=1; for(k=i=0;k<n;) { p=uni.Alt[i].Prob; if( p&1 ) p--; if( !p ) p=2; // all odd propability for(l = &uni.Alt[i++].Code[0];*l && k<n;l++,k++) { // for ligas : strlen(uni.Alt[i].Code)>1 ed_write(l,1); if( k==n-1 ) p = p+1; // last even propability ed_write(&p,1); } } } return; }
///////////////////////////////////////////////////////////////////////////// // CFString::ExtractWordsFromString void CFString::ExtractWordsFromString( CSTR_line* Comingline , PageElementCount* Count) { CSTR_rast_attr rast_attr; CSTR_rast rast; RecVersions vers; CSTR_line line; CSTR_attr line_attr; CWord* CurrentWord; const char* SeparatorsWord=" "; const char* result=NULL; int16_t FlagWord; Bool FlagString,FlagCapDrop; line = *Comingline; FlagWord = 0; FlagString = FALSE; FlagCapDrop = FALSE; CSTR_GetLineAttr( line , &line_attr ); if(line_attr.Flags & CSTR_STR_CapDrop) //буквица - см. первая буква в сказках FlagCapDrop = TRUE; SetRect(&m_rectBaseLine, line_attr.bs1, line_attr.bs2, line_attr.bs3, line_attr.bs4); //don't used now SetRect(&m_rectString, line_attr.col - TemplateOffset.x, line_attr.row - TemplateOffset.y, line_attr.col - TemplateOffset.x + line_attr.wid, line_attr.row - TemplateOffset.y + line_attr.hei); #ifdef alDebug //obsolete option { RECT rect; SetRect(&rect,line_attr.col, line_attr.row, line_attr.col + line_attr.wid, line_attr.row + line_attr.hei); pInputArray->push_back(rect); } #endif rast = CSTR_GetFirstRaster( line ); // I фикт. растр rast = CSTR_GetNextRaster( rast , CSTR_f_all ); while( rast ) { CSTR_GetCollection( rast,&vers ); CSTR_GetAttr( rast,&rast_attr ); //#define NEG_HALF_SPACE 0x1e //#define POS_HALF_SPACE 0x1f //#define REGULAR_SPACE 0x20 if((rast_attr.flg&CSTR_f_dust) || (rast_attr.flg&CSTR_f_fict ) ||//Дусты и ((rast_attr.flg&CSTR_f_space) && (!vers.Alt[0].Code || vers.Alt[0].Code == 0x1e || vers.Alt[0].Code == 0x1f)))//полупробелы выкидываем. goto next_raster; FlagString = TRUE; result = strchr( SeparatorsWord, vers.Alt[0].Code ); if( FlagWord ){ // word openly if(result) // word is broken FlagWord =0; else{ // word lasts assert( CurrentWord ); CurrentWord->AddLetter2Word( &rast , Count ,&FlagCapDrop ); } } else{ // expect new word if(!result){ // beginning word ++m_wWordsCount; ++Count->Words; FlagWord = 1; m_arWords.push_back( new CWord() ); CurrentWord = m_arWords[m_wWordsCount-1]; assert( CurrentWord ); if(rast_attr.font_spec == CSTR_fs_courier) CurrentWord->m_wFontNumber = rast_attr.font & 0xFC; else CurrentWord->m_wFontNumber = rast_attr.font; CurrentWord->m_wFontPointSize = rast_attr.keg; CurrentWord->AddLetter2Word( &rast , Count ,&FlagCapDrop ); if(FlagCapDrop){ CurrentWord->m_wFontPointSize = 14; FlagCapDrop = FALSE; FlagWord = 0; } } } next_raster: rast = CSTR_GetNextRaster( rast , CSTR_f_all ); } if(FlagString == FALSE) Count->Strings--; }
RPSTR_FUNC(Bool32) RPSTR_CorrectSpell(int32_t version) { int32_t n, i, rf=-1; CSTR_line line; //char snapstr[256]; CSTR_rast rb=(CSTR_rast)0, re=(CSTR_rast)0; Bool32 disable_new_dict=FALSE, disable_check_word=FALSE; //CSTR_attr lattr; exit_enable = FALSE; snap_enable=TRUE; skip_line=FALSE; n=CSTR_GetMaxNumber (); // 12.06.2002 E.P. if (is_turkish_language(language)) disable_new_dict = TRUE; LDPUMA_StartLoop( hSnapSpell, n ); for(i=1;i<=n;i++) { LDPUMA_LoopNext( hSnapSpell ); line = CSTR_GetLineHandle (i, version); if( !line ) continue; skip_line=FALSE; if (!correct_line_spell(line, &re, &rb, i, disable_new_dict, disable_check_word, &rf)) return FALSE; /* вынесено в функцию correct_line_spell CSTR_GetLineAttr(line,&lattr); // if( !(lattr.Flags & CSTR_STR_CapDrop) ) if( !LDPUMA_SkipEx(hSnapSpell,TRUE,TRUE,1) && snap_enable ) { sprintf(snapstr,"before spelling line %d",i); Snap_Console(snapstr); LDPUMA_RasterText("before spelling"); LDPUMA_CSTR_Monitor(hSnapSpell,line,0,myMonitorProc); if( exit_enable ) { LDPUMA_DestroyRasterWnd(); return FALSE; } } if( !rpstr_correct_spell(line,&rb,&re,&rf,i,disable_new_dict, disable_check_word) ) { sprintf("speller error : %s ",sp_err); Snap_Console(snapstr); LDPUMA_DestroyRasterWnd(); return FALSE; } if( !skip_line && !LDPUMA_SkipEx(hSnapSpell,TRUE,TRUE,1) && snap_enable ) { sprintf(snapstr,"after spelling line %d",i); Snap_Console(snapstr); LDPUMA_RasterText("after spelling"); LDPUMA_CSTR_Monitor(hSnapSpell,line,0,myMonitorProc); } if( exit_enable ) { LDPUMA_DestroyRasterWnd(); return FALSE; } */ } if( re ) { CSTR_rast_attr attr; CSTR_GetAttr(re,&attr); attr.flg_spell |= CSTR_fa_spell_nocarrying; CSTR_SetAttr(re,&attr); } if( !LDPUMA_SkipEx(hSnapSpell,TRUE,TRUE,1) ) LDPUMA_DestroyRasterWnd(); return TRUE; }
uint32_t myMonitorProc(Handle wnd,Handle hwnd,uint32_t message,uint32_t wParam,uint32_t lParam) { int ret=0; uint32_t pos; CSTR_rast r=(CSTR_rast)0; CSTR_rast_attr attr; pos=LDPUMA_CSTR_GetPosition((uint32_t *)&r); if (!is_turkish_language(language)) // 12.06.2002 E.P. language=3; switch(message) { // ALT + KEY case WM_SYSKEYDOWN: switch((int)wParam) { case 'X': // ALT + X exit_enable=TRUE; ret=-1; break; case 'S': if( r ) { CSTR_GetAttr(r,&attr); if( attr.flg&(CSTR_f_bad|CSTR_f_let) ) show_spell(r); else Snap_Console("Не буква"); ret=1; } break; default: break; } break; // KEYS case WM_KEYDOWN: switch((int)wParam) { case VK_ESCAPE: snap_enable = FALSE; Snap_Console("корректируй до конца"); ret=-1; break; case VK_RETURN: case VK_SPACE: ret=-1; break; case VK_F1: Snap_Console("ESC - до конца без снэпа"); Snap_Console("F1 - справка"); Snap_Console("F2 - новая строка"); Snap_Console("Alt+F - запись FRH"); Snap_Console("Alt+S - словари"); Snap_Console("Alt+X - прервать"); Snap_Console("Home/End - начало/конец строки"); Snap_Console("+/- - увеличить/уменьшить шрифт"); break; case VK_F2: skip_line=TRUE; ret=-1; break; default: break; } break; } return (uint32_t)(ret); }
void save_alphabet_information(str_info *str,int16_t column,CSTR_line ln) { uchar buf[256]={0}; cell * c; RecObject ro={0}; CSTR_rast rst; RecRaster rrst; RecVersions ver; LeoFieldSetup fs={0}; CSTR_attr lattr; CSTR_rast_attr attr; UniVersions uvs; if( db_status && snap_activity('n') ) { snap_show_text("DIG : start selection"); snap_monitor(); } str[column].all++; fs.nStyle = LS_PRINT; buf['0']=buf['1']=buf['2']=buf['3']=buf['4']= buf['5']=buf['6']=buf['7']=buf['8']=buf['9']=1; memcpy(fs.AlphaTable,buf,256); #ifdef _USE_LEO_ LEOSetupField(&fs); for(c=cell_f()->nextl;c!=cell_l();c=c->nextl) { if( c->nvers==0 && c->w*2>c->h && c->h*2>c->w ) { puchar wr; // to work_rst wr=save_raster_align8(c); // rst -->> rrst rrst.lnPixHeight = c->h; rrst.lnPixWidth = c->w; rrst.lnRasterBufSize = REC_MAX_RASTER_SIZE; memcpy(rrst.Raster,wr,((c->w+63)/64)*8*c->h); memcpy(&ro.recData.recRaster,&rrst,REC_MAX_RASTER_SIZE); LEORecogPrnMethod( &ro , REC_METHOD_3X5, 1); memcpy(&ver,&ro.recResults,sizeof(ver)); if( ver.lnAltCnt && ver.Alt[0].Prob>220 ) { c->nvers=1; c->vers[0].let=ver.Alt[0].Code; c->vers[0].prob=ver.Alt[0].Prob; c->vers[1].let=0; c->flg=c_f_let; } } } #endif setup_digital_mode(&str[column], 1); for(c=cell_f()->next;c!=cell_l();c=c->next) if( c->nvers>0 && c->vers[0].let=='$' && c->vers[0].prob>220 ) { str[column].dollars++; break; } if( digital_mode==2 ) { str[column].dig++; if( db_status && snap_activity('n') ) { sprintf(buf,"DIG : digital str, col %d, all %d, dig %d, plus_minus %d" , column, str[column].all,str[column].dig,str[column].pm); snap_show_text(buf); snap_monitor(); } } else if( digital_mode==1 ) { str[column].fuzzy_dig++; if( db_status && snap_activity('n') ) { sprintf(buf,"DIG : fuzzy digital str, col %d, all %d, dig %d, plus_minus %d" , column, str[column].all,str[column].dig,str[column].pm); snap_show_text(buf); snap_monitor(); } } else { plusminus_mode=0; if( cell_f()->next && cell_f()->next==cell_l()->prev ) { c=cell_f()->next; rst=CSTR_GetNextRaster(CSTR_GetFirstRaster(ln),CSTR_f_bad|CSTR_f_let); if( rst && CSTR_GetImage(rst,(uchar *)&rrst,CSTR_TYPE_IMAGE_RS)) { if( c->w>c->h*5 || c->w>c->h*3 && c->env && c->env->nl == 1 // Nick 18.01.2002 ) { c->nvers=1; c->vers[0].let='-'; c->vers[0].prob=254; ver.Alt[0].Code='-'; ver.Alt[0].Prob=255; ver.lnAltCnt =1; CSTR_StoreCollection(rst,&ver); CSTR_GetAttr(rst,&attr); //attr.keg=Ps<<line_scale; CSTR_SetAttr(rst,&attr); CSTR_GetLineAttr(ln,&lattr); lattr.Flags |= CSTR_STR_ReadyResults ; CSTR_SetLineAttr(ln,&lattr); plusminus_mode=1; } else if( abs(c->w-c->h)<5 ) { #ifdef _USE_LEO_ fs.nStyle = LS_PRINT; buf['+']=1; memcpy(fs.AlphaTable,buf,256); LEOSetupField(&fs); memcpy(&ro.recData.recRaster,&rrst,REC_MAX_RASTER_SIZE); LEORecogPrnMethod( &ro , REC_METHOD_3X5, 1); memcpy(&ver,&ro.recResults,sizeof(ver)); if( ver.lnAltCnt && ver.Alt[0].Code=='+' && ver.Alt[0].Prob>220 ) { c->nvers=1; c->vers[0].let='+'; c->vers[0].prob=254; ver.lnAltCnt =1; CSTR_StoreCollection(rst,&ver); CSTR_GetAttr(rst,&attr); //attr.keg=Ps<<line_scale; CSTR_SetAttr(rst,&attr); CSTR_GetLineAttr(ln,&lattr); lattr.Flags |= CSTR_STR_ReadyResults ; CSTR_SetLineAttr(ln,&lattr); plusminus_mode=1; } #endif } } } if( plusminus_mode ) { str[column].pm++; rst=CSTR_GetNextRaster(CSTR_GetFirstRaster(ln),CSTR_f_bad|CSTR_f_let); CSTR_GetCollectionUni(rst,&uvs); if( uvs.lnAltCnt ) { uvs.Alt[0].Charset=CodePages[language]; CSTR_StoreCollectionUni(rst,&uvs); } if( db_status && snap_activity('n') ) { sprintf(buf,"DIG : plus_minus str , col %d, all %d, dig %d, plus_min %d" , column, str[column].all,str[column].dig,str[column].pm); snap_show_text(buf); snap_monitor(); } } else { if( db_status && snap_activity('n') ) { sprintf(buf,"DIG : unknown alphabet , col %d, all %d, dig %d, plus_min %d" , column, str[column].all,str[column].dig,str[column].pm); snap_show_text(buf); snap_monitor(); } } } return; }
//////////////////// ///////////////// // Tools.c int16_t short_recog_cell(CSTR_rast c, int line_scale) { int16_t n, i; uchar res[20]; CSTR_rast_attr attr; CCOM_comp *comp; // ExtComponent ec; int16_t *pint16; uchar * lpool; UniVersions vers = { 0 }; CSTR_GetAttr(c, &attr); comp = CSTR_GetComp(c); // исходно была ошибка Tools.c - // если c->env == 0 в lpool лежало неизвестно что! // if( (c->cg_flag & CSTR_cg_comp) && !c->env ) // return 0; if ((attr.cg_flag & CSTR_cg_comp) || !comp) return 0; // comp_from_kit(c); // CCOM_comp -> to ExtComponent /* memset(&ec,0,sizeof(ExtComponent)); if( !Ccomp2ExtComponenet(comp,&ec,&attr,line_scale) ) return 0; */ // n = (int16_t)EVNRecog_lp(c->env,lpool,lpool_lth,&res[0]); pint16 = (int16_t *) comp->linerep; // *pint16 == comp->size_linerep ????? lpool = comp->linerep + 2; // n = (int16_t)EVNRecog_lp(&ec,lpool,*pint16,&res[0]); n = (int16_t) EVNRecog_lp(comp, lpool, *pint16, &res[0]); vers.lnAltMax = REC_MAX_VERS; if (n) { for (i = 0; i < n; i++) { //c->vers[i].let=res[i]; //c->vers[i].prob=254; vers.Alt[i].Liga = res[i]; vers.Alt[i].Prob = 254; vers.Alt[i].Method = REC_METHOD_EVN; } attr.flg = CSTR_f_let; attr.recsource |= CSTR_rs_ev; attr.RecogHistory |= CSTR_rs_ev; } else { attr.flg = CSTR_f_bad; } vers.lnAltCnt = n; CSTR_StoreCollectionUni(c, &vers); CSTR_SetAttr(c, &attr); v2_pidx_crit(c); sort_vers(c); CSTR_GetCollectionUni(c, &vers); return (int16_t) vers.lnAltCnt; }