Ejemplo n.º 1
0
void cell_bonus_let(cell *C, char Let, int16_t BonVal) {
	cf::version *pv;
	for (pv = C->vers; pv->let != 0; pv++) {
		if (let_sans_acc[pv->let] == Let)
			cell_bonus(C, pv, BonVal);
	}
}
Ejemplo n.º 2
0
 void test_O_and_slash()
{
cell *C;
int16_t nv;

 C = cell_f();
 while ((C=C->nextl)->nextl)
 {
  nv = get_nvers(C, '0');
  if ( nv >= 0 )
     //  Minimum decrease for 'O' to prefer '0' in the cases without
     //  obvious decision
   {
#ifndef UFA
  if( language!=PUMA_LANG_RUSSIAN )
    cell_bonus(C, &(C->vers[nv]), 2);
#else
   if( language!=PUMA_LANG_RUSSIAN )
    cell_bonus(C, &(C->vers[nv]), 2);
   else if( language==PUMA_LANG_RUSSIAN )
   {
   if( get_nvers(C,'9')<0 && get_nvers(C,'6')<0 && get_nvers(C,'8')<0  )
    cell_bonus(C, &(C->vers[nv]), 2);
    // Oleg : 06-09-1994 : not exist '698' - bonus 0
   else
    { // Oleg : 06-09-1994 : exist any '698'-version
    nv=get_nvers(C,'Ћ');
    if( nv>=0 )
      cell_bonus(C, &(C->vers[nv]), -2);            // monus O
    }
   }
#endif
   sort_vers(C);
   }
  nv = get_nvers(C, '/');
  if ( nv == -1 ) continue;
  if( language == PUMA_LANG_RUSSIAN && langSer  && nv &&
      C->nvers && C->vers[0].let==SERB_j )
      continue;
  inc_or_dec_slash(C, nv);
 }
}
Ejemplo n.º 3
0
int16_t swedish_context_process     ( cell* C )
{
int16_t return_code;

    swed_lju_flag = FALSE;
    return_code = NO_ACTION;
    if (n_ltr == 1 && !(C->next->flg&c_f_punct && C->next->vers[0].let=='.'))
    /** single letter case: **/
    {
      LiliI(C);
      return_code = CONTINUE_ACTION;
      goto SwCP_Ret;
    }
    if ( n_ltr > 2 )        // Process 'lju' at start of word
    {
      int16_t nv_l, nv_j, nv_u;

      nv_l = get_nvers( C, 'l');
      if ( nv_l < 0 ) goto SwCP_Ret;
      if ( C->vers[ nv_l ].prob < ADM_PROB ) goto SwCP_Ret;

      nv_j = get_nvers( C->nextl, 'j');
      if ( nv_j < 0 ) goto SwCP_Ret;
      if ( C->nextl->vers[ nv_j ].prob < ADM_PROB ) goto SwCP_Ret;

      nv_u = get_nvers( C->nextl->nextl, 'u');
      if ( nv_u < 0 ) goto SwCP_Ret;
      if ( C->nextl->nextl->vers[ nv_u ].prob < ADM_PROB ) goto SwCP_Ret;

      cell_bonus( C, &(C->vers[nv_l]), SWED_LJU_BONUS );
      sort_vers( C );
      cell_bonus( C->nextl, &(C->nextl->vers[nv_j]), SWED_LJU_BONUS );
      sort_vers( C->nextl );
      cell_bonus( C->nextl->nextl, &(C->nextl->nextl->vers[nv_u]), SWED_LJU_BONUS );
      sort_vers( C->nextl->nextl );
      swed_lju_flag = TRUE;
    }
SwCP_Ret:
    return return_code;
}
Ejemplo n.º 4
0
static void inc_or_dec_slash(cell *wc, int16_t numv)
//
//  This procedure decreases probability '/' if its neighbour letters are
//   italic ( to prefer 'l' or 'I' ) and
//   increases probability '/' if its heighbour letters are straight
//   ( to avoid 'l' and 'I' appearence );
//
 {
 cell  *cprev, *cnext;
 Bool   no_Il = (get_nvers(wc, 'I')==-1) && (get_nvers(wc, 'l')==-1 && wc->vers[numv].let=='/');

  if ( wc->vers[0].prob - wc->vers[numv].prob > REFUSE_BOUND )
   return;
  cprev = wc->prev;
  cnext = wc->next;
  if ( !((cprev->flg & c_f_let) && (cnext->flg & c_f_let)) ) return;
  if ( ((cprev->font|cprev->font_new) & c_fp_it) && ((cnext->font|cnext->font_new) & c_fp_it) )
   { cell_bonus(wc, &(wc->vers[numv]), (int16_t)(no_Il?2:-BONUS_SLASH)); goto IDS_Sort; }
  if ( ((cprev->font|cprev->font_new) & c_fp_str) && ((cnext->font|cnext->font_new) & c_fp_str) )
    cell_bonus(wc, &(wc->vers[numv]), (int16_t)(no_Il?2:BONUS_SLASH));
IDS_Sort:
  sort_vers(wc);
 }