Beispiel #1
0
/////////////////////////////////////////////////////////////////////////////
//                   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;
}
Beispiel #2
0
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);
}
Beispiel #3
0
/////////////////////////////////////////////////////////////////////////////
//                   CWord::AddLetter2Word
void CWord::AddLetter2Word( CSTR_rast* rast , PageElementCount* Count ,Bool* FlagCapDrop)
{
 CChar* CurrentChar;
 UniVersions	vers;

 CSTR_GetCollectionUni( *rast,&vers );
 for(int i=0; i<3; i++)
 {
	if(!vers.Alt[0].Code[i])
      break;
	++m_wCharsCount;
    ++Count->Chars;

    m_arChars.push_back( new CChar() );
    CurrentChar = m_arChars[m_wCharsCount-1];
    assert( CurrentChar );
    CurrentChar->AddingLetter( rast ,i,FlagCapDrop);
 }
}
Beispiel #4
0
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;
}
Beispiel #5
0
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;
}
Beispiel #6
0
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;
}
Beispiel #7
0
////////////////////
/////////////////
// 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;
}