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); } }
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); } }
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; }
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); }