Beispiel #1
0
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;
}
Beispiel #2
0
/////////////////////////////////////////////////////////////////////////////
//                    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;
}
Beispiel #3
0
Bool32   p2_msk_inc(CSTR_rast    rst)
{
#ifdef _USE_MSK_
    uchar       prob=0, name, lim, code;
    RecRaster   rc;
    RecVersions ver;
    int32_t       i;

    if(!HndTabInc )
        return 0;
    if(language!=PUMA_LANG_RUSSIAN && language!=PUMA_LANG_RUSENG )
        return 0;
    CSTR_GetImage(rst,(uchar*)&rc,CSTR_TYPE_IMAGE_RS);
    if( !rc.lnPixHeight || !rc.lnPixWidth )
        return 0;
    MSKSetAlphabet  ( alphabet );

    CSTR_GetCollection(rst,&ver);
    ver.lnAltCnt=2;
    ver.lnAltMax=REC_MAX_VERS;
    name = ver.Alt[0].Code;
    ver.Alt[0].Code=(uchar)to_upper((uchar)name);
    ver.Alt[0].Prob=255;
    ver.Alt[1].Code=(uchar)to_lower((uchar)name);
    ver.Alt[1].Prob=255;
    if( name=='0' )
    {
        ver.Alt[1].Code=(uchar)'О';
        ver.Alt[2].Code=(uchar)'Ѓ';
        ver.Alt[2].Prob=255;
        ver.lnAltCnt=3;
    }
    if( name=='3' )
    {
        ver.Alt[1].Code=(uchar)'З';
        ver.Alt[2].Code=(uchar)'І';
        ver.Alt[2].Prob=255;
        ver.lnAltCnt=3;
    }
    if( !MSKRecogCharExpPuma( HndTabInc, &rc, &ver,1 ) )
        return 0;
    if( !ver.lnAltCnt )
        return 0;

    for(prob=0, i=0;i<ver.lnAltCnt;i++)
    {
        if( prob<ver.Alt[i].Prob)
        {
            prob=ver.Alt[i].Prob ;
            code=ver.Alt[i].Code;
        }
    }
    lim = MIN_MSK_PROB;
    if( strchr(similar_letters,code) )
        lim = MIN_MSK_PROB_SIM;
    return (prob>lim);
#else
    return FALSE;
#endif
}
Beispiel #4
0
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;
}
Beispiel #5
0
/////////////////////////////////////////////////////////////////////////////
//                   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--;
}