int MORF0::kchk33( VARIANTIDE_AHEL **variandid, VARIANTIDE_AHEL **sobivad_variandid, char *paha_koht, const int paha_koha_suurus) { int res; CVARIANTIDE_AHEL cvahe_variant; KOMPONENT *pref, *tyvi, *suff, *lopp, *essa; /* ts�kkel �le prefiksite, alates l�himast; 0-pref ja 0-suff pole lubat. */ for (VARIANTIDE_AHEL *variant=*variandid; variant; variant=variant->jargmine_variant) { essa = esimene_komp(variant); if (essa->k_tyyp != K_PREF) /* ei algagi prefiksiga */ continue; pref = essa; tyvi = pref->komp_jargmine; suff = tyvi->komp_jargmine; if (suff->k_tyyp != K_SUFF) continue; lopp = suff->komp_jargmine; if (lopp->k_tyyp != K_LOPP) continue; res = ty_suf(suff, tyvi->nihe, tyvi->k_pikkus, &cvahe_variant.ptr, paha_koht, paha_koha_suurus); if (res > ALL_RIGHT) return res; /* viga! */ if (!cvahe_variant.ptr) continue; /* tyve polnud */ for (VARIANTIDE_AHEL *tmp=cvahe_variant.ptr; tmp; tmp=tmp->jargmine_variant) /* vt neid juhte, kus ty+suf juba sobivad */ { /* kopeeri sobivate hulka koik tyved, mis selle pref-ga sobivad */ if (sobib_p_t_s(pref, esimene_komp(tmp), suff)) { kopeeri_komp(tyvi, esimene_komp(tmp)); //VARIANTIDE_AHEL *sobiv_variant; //ok //sobiv_variant = lisa_ahel(sobivad_variandid, variant); //if (!sobiv_variant) if(lisa_ahel(sobivad_variandid, variant)==NULL) return CRASH; if(mrfFlags.Chk(MF_SPELL)) { ahelad_vabaks(&cvahe_variant.ptr); return ALL_RIGHT; /* 1. sobiv variant k�lbab */ } } } ahelad_vabaks(&cvahe_variant.ptr); } return ALL_RIGHT; }
int MORF0::arvans1(MRFTULEMUSED *tulemus, FSXSTRING *S6na, int S6naPikkus, VARIANTIDE_AHEL **variandid) { int res; int cnt, ty2pik; CVARIANTIDE_AHEL ctyvi2_variant, cvahe_variant, csobivad_variandid; KOMPONENT komp, *k_tyvi, *tyvi1; FSXSTRING ema = FSxSTR("ema"); FSXSTRING tyvi2; //int tugevus; int maxty2, minty; // et saaks ty2lp() kasutada tyvi1 = &komp; res = cXXfirst(ema, 3, &cnt); if (res == POLE_SEDA || res == POLE_YLDSE) // sellist tyve pole olemas return CRASH; // sellist asja ei saa olla nulli_1komp(tyvi1); lisa_min_info(tyvi1, &ema, 0, 3); lisa_psl_info(tyvi1, K_TYVI, 0); // leiame tyvi1 liitumis-liigid res = juht1(tyvi1, dptr, cnt, &cvahe_variant.ptr); if (res > ALL_RIGHT) return res; maxty2 = S6naPikkus > 20 ? 20 : S6naPikkus-3; if (TaheHulgad::OnSuur(S6na, 0)) // oletatavatele nimedele luban �sna pikki j�relkomponente minty = 5; else minty = 2; // vt ko'iki v�imalikke l�ppe for (VARIANTIDE_AHEL *variant=*variandid; variant; variant=variant->jargmine_variant) { k_tyvi = esimene_komp(variant); if (k_tyvi->komp_jargmine->k_tyyp != K_LOPP) continue; maxty2 = k_tyvi->k_pikkus > 20 ? 20 : k_tyvi->k_pikkus-3; for (ty2pik=maxty2; ty2pik >= minty; ty2pik--) { tyvi2 = k_tyvi->k_algus.Right(ty2pik); if (ty2pik < 4) { if (!oletajaDct.sobivad_tyved2.Get((const FSxCHAR *)tyvi2)) continue; // pole lyhike kuid sobiv } else { if (oletajaDct.pahad_tyved2.Get((const FSxCHAR *)tyvi2)) continue; // on paha } // leiame tyvi2 res = ty_lp(k_tyvi->komp_jargmine, k_tyvi->k_pikkus - ty2pik, ty2pik, &ctyvi2_variant.ptr, NULL, 0); if (res > ALL_RIGHT) return res; for (VARIANTIDE_AHEL *tmp=ctyvi2_variant.ptr; tmp; tmp=tmp->jargmine_variant) // leia tyvi2 tyybid { juht2(esimene_komp(tmp)); } for (VARIANTIDE_AHEL *tmp=cvahe_variant.ptr; tmp; tmp=tmp->jargmine_variant) // tyvi1 tyvepikkus paika { lisa_min_info(esimene_komp(tmp), S6na, 0, k_tyvi->k_pikkus - ty2pik); // tyvele uus pikkus esimene_komp(tmp)->sonastikust = 0; // tyvi1 pole s�nastikust HJK 17.05.2004 } // int tugevus = tyvi1tyvi2(&cvahe_variant.ptr, &ctyvi2_variant.ptr, &csobivad_variandid.ptr); // siin vo'iks kunagi veel kontrollida tugevus va'a'rtust, et mitte liiga kahtlasi lubada ... ahelad_vabaks(&ctyvi2_variant.ptr); if (csobivad_variandid.ptr) // mingi ty1-ga leidub sobiv kombinatsioon { ahelad_vabaks(&cvahe_variant.ptr); ahelad_vabaks(&ctyvi2_variant.ptr); break; // lyhemaid tyvesid selle lopu puhul ei vt } } } //ahelad_vabaks(&cvahe_variant.ptr); //destruktoris //ahelad_vabaks(&ctyvi2_variant.ptr); //destruktoris if (csobivad_variandid.ptr) { if (TaheHulgad::OnSuur(S6na, 0)) { variandid_tulemuseks(tulemus, LIIK_YLDNIMI, &csobivad_variandid.ptr); if (tulemus->on_tulem()) tulemus->TulemidNimeks(LIIK_KAANDSONA); } else variandid_tulemuseks(tulemus, KOIK_LIIGID, &csobivad_variandid.ptr); //ahelad_vabaks(&csobivad_variandid.ptr); //destruktoris } return ALL_RIGHT; }
int MORF0::arvans2(MRFTULEMUSED *tulemus, FSXSTRING *sonna, int S6naPikkus, VARIANTIDE_AHEL **variandid, const FSxCHAR *lubatavad_sl) { FSxCHAR eel, yel, yyl; VARIANTIDE_AHEL *variant, *viimane; // ainult selleks, et ts�keldada �le etteantud ahela 'variandid' KOMPONENT *k_tyvi, *k_lopp; FSXSTRING S6na, tyvi, lopp, vorm, *algvorm, otsitav_vorm, otsitav_lopp, tmpsona, sl; const FSxC5I1 *t; bool sobiks_nimeks; int tyvepik; FSXSTRING lub_sl; int i; lub_sl = lubatavad_sl; sobiks_nimeks = oletajaDct.sobiks_nimeks(sonna); if (!sobiks_nimeks) { int tahtedeArvSonas, tahtedeProtsentSonas; for(tahtedeArvSonas=0, i=0; i<S6naPikkus; i++) { if(TaheHulgad::OnTaht(sonna, i)) tahtedeArvSonas++; } tahtedeProtsentSonas=100*tahtedeArvSonas/S6naPikkus; if(tahtedeProtsentSonas < 80) return ALL_RIGHT; // s�nas liiga v�he t�hti if (TaheHulgad::protsendinumber.Find((*sonna)[S6naPikkus-1]) != -1) return ALL_RIGHT; // s�na l�ppeb numbriga if (TaheHulgad::OnSuur(sonna, 0)) { S6na = sonna->Right(3); if (TaheHulgad::AintSuuredjaNrjaKriipsud(&S6na)) return ALL_RIGHT; // pole midagi peale suurta'htede, nr ega kriipsude if (TaheHulgad::OnProtsendinumber(&S6na)) return ALL_RIGHT; // sona lopus liiga va'he t�hti for (i=0; i < S6na.GetLength(); i++) { if (TaheHulgad::OnSuur(&S6na, i)) return ALL_RIGHT; // sona lopus liiga va'he va'iketa'hti } sobiks_nimeks = true; } } S6na = *sonna; S6na.MakeLower(); if (sobiks_nimeks) TaheHulgad::AlgusSuureks(&S6na); // ei tea milleks see hea on? for (viimane=*variandid; viimane->jargmine_variant; viimane=viimane->jargmine_variant); for (variant=viimane; variant; variant=variant->eelmine_variant) { k_tyvi = esimene_komp(variant); if (k_tyvi->komp_jargmine->k_tyyp != K_LOPP) continue; if (k_tyvi->k_pikkus < 3) continue; // tyvi olgu va'hemalt 3 ta'hte k_lopp = k_tyvi->komp_jargmine; tyvi = k_tyvi->k_algus; lopp = k_lopp->k_algus; tyvepik = k_tyvi->k_pikkus; eel = tyvi[tyvepik-1]; yel = tyvi[tyvepik-2]; yyl = tyvi[tyvepik-3]; if (tulemus->on_tulem() && tulemus->Get_sl(LIIK_VERB) != -1) // verbi anal��s juba oletatud { if (TaheHulgad::OnLopus(&(tyvi), FSxSTR("eeri")) || TaheHulgad::OnLopus(&(tyvi), FSxSTR("eeru")) || TaheHulgad::OnLopus(&(tyvi), FSxSTR("tse"))) return ALL_RIGHT; // vist pole nimisona if (tulemus->Get_vormid(FSxSTR("ma, ")) != -1 || tulemus->Get_vormid(FSxSTR("da, ")) != -1 || tulemus->Get_vormid(FSxSTR("b, ")) != -1) return ALL_RIGHT; // vist pole nimisona } if (!sobiks_nimeks) { if (TaheHulgad::OnLopus(&(tyvi), FSxSTR("ii")) && k_lopp->k_pikkus > 0) continue; // vist pole tyve lp if (lopp == FSxSTR("t")) { if (TaheHulgad::OnLopus(&(tyvi), FSxSTR("is"))) continue; // trombonis+t // if (TaheHulgad::OnLopus(&(tyvi), FSxSTR("las"))); // somaallas+t // else if (TaheHulgad::OnTaishaalik(yel)) // continue; // trombonis+t } if (lopp == FSxSTR("ni")) { if (eel==yel && TaheHulgad::OnTaishaalik(yel)) continue; // vist pole tyve lp } if (lopp == FSxSTR("i")) { if (TaheHulgad::OnAeiu(yel) && eel == (FSxCHAR)'s'); // ersalas+i else continue; // ei sobi lopuks } if (lopp == FSxSTR("e")) { if (TaheHulgad::OnTaishaalik(yyl) && TaheHulgad::OnTaishaalik(yel) && TaheHulgad::OnKaashaalik(eel)); // VVKe else if (TaheHulgad::OnKaashaalik(yel) && TaheHulgad::OnKaashaalik(eel) && eel != (FSxCHAR)'n') // KKe { if (tyvepik > 3 && tyvi[tyvepik-4] == yyl) continue; // ...aars+e ei sobi } else continue; // ei sobi lopuks } } SILP s; s.silbita(&tyvi); if (s.silpe() == 0) // liiga l�hike t�vi vm jama continue; //s.silbivalted(); for (t=oletajaDct.pn_lopud_jm.Get((const FSxCHAR *)k_lopp->k_algus); t; t=oletajaDct.pn_lopud_jm.GetNext()) { // m�ned s�nad ei saa olla muud kui sg n if (TaheHulgad::OnLopus(&(k_tyvi->algsona), FSxSTR("lane"))) break; if (t->eeltahed->Find(eel) == -1) // l�pule eelnev t�ht ei sobinud continue; if (sobiks_nimeks && t->tyyp != 1) // oletatavasti p�risnimi; siis see l�pp ei sobi continue; vorm = t->vorm; otsitav_lopp = t->tabeli_lopp; otsitav_vorm = t->tabeli_vorm; if (sobiks_nimeks) { // kas on soome p�risnimi? if (TaheHulgad::OnLopus(&(tyvi), FSxSTR("se")) && vorm.Find(FSxSTR("sg ")) != -1) { if (soome_pn_se(&tyvi, tyvepik, &s)) // se -> nen { tmpsona = tyvi.Left(tyvepik-2); tmpsona += FSxSTR("nen"); if (k_lopp->k_pikkus == 0) tulemus->Add((const FSxCHAR *)tmpsona, FSxSTR("0"), FSxSTR(""), LIIK_PARISNIMI, (const FSxCHAR *)vorm); else tulemus->Add((const FSxCHAR *)tmpsona, (const FSxCHAR *)lopp, FSxSTR(""), LIIK_PARISNIMI, (const FSxCHAR *)vorm); //if (s.silpe() > 2) // continue; // siis tavalisi anal��se ei proovigi? } } else if (TaheHulgad::OnLopus(&(tyvi), FSxSTR("s")) && lopp == FSxSTR("t")) { if (soome_pn_s(&tyvi, tyvepik)) // s -> nen { tmpsona = tyvi.Left(tyvepik-1); tmpsona += FSxSTR("nen"); tulemus->Add((const FSxCHAR *)tmpsona, (const FSxCHAR *)lopp, FSxSTR(""), LIIK_PARISNIMI, (const FSxCHAR *)vorm); //continue; proovi tavalisi anal��se ka? } } if (s.silpe() == 1 && oletajaDct.harvad_lopud_1.Get((FSxCHAR *)(const FSxCHAR *)lopp)) continue; // mingi ad hoc filter } if (t->tyyp == 3) // verbi l�pp { if (lub_sl.Find(LIIK_VERB) == -1) continue; // ei sobi verbiks if (TaheHulgad::matemaatika.Find(k_tyvi->algsona[0]) != -1) // alguses nr vms matas�mbol continue; // ei sobi verbiks } for (algvorm=oletajaDct.sobiv_algv(&tyvi, &otsitav_lopp, &otsitav_vorm); algvorm; algvorm=oletajaDct.jargmine_sobiv_algv()) { if (t->tyyp != 3) // vt ainult noomeneid { if (!oletajaDct.pn_sobiv_kirje()) continue; //if (!sobiks_nimeks && FSxSTRCMP(oletajaDct.ot_viimane_kirje.sonaliik, LIIK_PARISNIMI)==0) if (!sobiks_nimeks && FSxSTRCMP(oletajaDct.ot_viimane_kirje.sonaliik, LIIK_PARISNIMI)==0) continue; // tabelist tuli mall, mis sobib ainult p�risnimele, aga siin on �ldnimi } if (k_lopp->k_pikkus == 0) lopp = FSxSTR("0"); if (!mrfFlags.Chk(MF_ALGV)) algvorm = &tyvi; else { if (sobiks_nimeks) // p�risnimi { SILP ss; ss.silbita(algvorm); if (!sobiks_sg_n(algvorm, algvorm->GetLength(), &ss)) continue; if (TaheHulgad::OnLopus(algvorm, FSxSTR("ne"))) // ne-l�pulisi p�risnimesid on tegelt v�he { if (TaheHulgad::OnLopus(&(tyvi), FSxSTR("se")) && !eesti_pn_se(&tyvi, tyvepik, &s)) continue; if (TaheHulgad::OnLopus(&(tyvi), FSxSTR("s")) && !eesti_pn_s(&tyvi, tyvepik)) continue; } } else if (t->tyyp != 3) // �ldnimi if (!sobiks_sg_n_ns(algvorm, algvorm->GetLength())) continue; } if (sobiks_nimeks) sl = LIIK_PARISNIMI; else //sl = oletajaDct.ot_viimane_kirje.sonaliik; sl = oletajaDct.ot_viimane_kirje.sonaliik; tulemus->Add((const FSxCHAR *)(*algvorm), (const FSxCHAR *)lopp, FSxSTR(""), (const FSxCHAR *)sl, (const FSxCHAR *)vorm); if (t->tyyp == 3) // on verb... { continue; } // nimis�na //tmpsona = oletajaDct.ot_viimane_kirje.tyypsona; tmpsona = oletajaDct.ot_viimane_kirje.tyypsona; if (TaheHulgad::OnLopus(&tmpsona, FSxSTR("lane"))) return ALL_RIGHT; // muud variandid oleks sodi if (TaheHulgad::OnLopus(&tmpsona, FSxSTR("vere"))) return ALL_RIGHT; // muud variandid oleks sodi if (lopp == FSxSTR("lt") && TaheHulgad::OnAeiu(eel) && sl != LIIK_PARISNIMI) tulemus->Add((const FSxCHAR *)(*sonna), FSxSTR("0"), FSxSTR(""), FSxSTR("D"), FSxSTR("")); } } if (tulemus->on_tulem()) { if (TaheHulgad::OnLopus(&(tyvi), FSxSTR("se"))) { if (lopp == FSxSTR("id") || lopp == FSxSTR("le") || lopp == FSxSTR("lt") || lopp == FSxSTR("sse") || lopp == FSxSTR("st") || lopp == FSxSTR("ks") || lopp == FSxSTR("ga")) return ALL_RIGHT; // muud variandid oleks sodi } if (TaheHulgad::OnAlguses(&lopp, FSxSTR("de")) && lopp != FSxSTR("des") && lopp.GetLength() > 2) { return ALL_RIGHT; // muud variandid oleks sodi } } if (k_lopp->k_pikkus == 0) // 0-l�pp { if (sobiks_nimeks) { if (sobiks_sg_n(&tyvi, tyvepik, &s) || !tulemus->on_tulem()) tulemus->Add((const FSxCHAR *)tyvi, FSxSTR("0"), FSxSTR(""), LIIK_PARISNIMI, FSxSTR("sg n, ")); } else { if (sobiks_sg_n_ns(&tyvi, tyvepik) || !tulemus->on_tulem()) { if (TaheHulgad::OnLopus(&(tyvi), FSxSTR("line")) || (TaheHulgad::OnLopus(&(tyvi), FSxSTR("ne")) && TaheHulgad::OnKaashaalik(tyvi[tyvi.GetLength()-3]))) tulemus->Add((const FSxCHAR *)tyvi, FSxSTR("0"), FSxSTR(""), LIIK_A, FSxSTR("sg n, ")); else tulemus->Add((const FSxCHAR *)tyvi, FSxSTR("0"), FSxSTR(""), LIIK_YLDNIMI, FSxSTR("sg n, ")); } } } } // tulemus->SortUniq(); // sest tabelist tuleb samu algvorme mitmest kirjest... return ALL_RIGHT; }
int MORF0::kchk6( VARIANTIDE_AHEL **variandid, FSXSTRING *S6na, int S6naPikkus, VARIANTIDE_AHEL **sobivad_variandid, char *paha_koht, const int paha_koha_pikkus ) { int res; int pik; int kk; VARIANTIDE_AHEL *variant, *tmp, *sobiv_variant; //ok CVARIANTIDE_AHEL cvahe_variant, cls_variant; KOMPONENT *tyvi, *tyvi1, *sobivty, *sobivlp; KOMPONENT *tmpkomp1, *tmpkomp2; KOMPONENT *essa, **esi; int ty1_tyyp; //char *u_paha_koht=0; TV080723 FSXSTRING u_S6na, vt_tyvi; int u_S6naPikkus; for (variant=*variandid; variant; variant=variant->jargmine_variant) { char u_paha_koht[(STEMLEN+1)*(STEMLEN+1)]; tyvi1 = esimene_komp(variant); ty1_tyyp = 0; if (tyvi1->k_tyyp == K_PREF) { FSXSTRING tl; tl = taandliik[ prfix[tyvi1->jrk_nr].sl ]; if ( tl.Find((FSxCHAR) 'V') !=-1 ) ty1_tyyp = 13; else if (tl.Find((FSxCHAR) 'S') != -1) ty1_tyyp = 12; } else ty1_tyyp = ty11tyyp(tyvi1->liitumistyyp); if (!ty1_tyyp) /* ty1 ei sobi nii keerulise liitsona algusse */ continue; tyvi = tyvi1->komp_jargmine; if (!(tyvi->komp_jargmine)) continue; if (tyvi->k_tyyp == K_LOPP) continue; if (tyvi->k_tyyp == K_SUFF) continue; if (tyvi->k_pikkus < 5) /* ty2+ty3 ei mahu */ continue; if (tyvi1->k_pikkus + tyvi->k_pikkus < 9) /* ty1+ty2+ty3 ei mahu */ continue; /* keerulisemat struktuuri ei vt; ka mitut erin sufiksit ei luba, v.a. lt puhul; ??? */ if (*sobivad_variandid && tyvi->komp_jargmine->k_tyyp == K_SUFF) { FSXSTRING sona; sona = (const FSxCHAR *)(S6na->Left(S6naPikkus)); if (!TaheHulgad::OnLopus(&(sona), FSxSTR("lt"))) break; } pik = minipik(&(tyvi->k_algus)); if (tyvi->k_pikkus < pik + 2) continue; //int sty = tyvi->k_pikkus-2; /* otsi sellest kohast algavat liitsona ty1+ty2 */ /* uue liitsona jaoks andmed paika */ u_S6naPikkus = S6naPikkus - tyvi1->k_pikkus; //TV080723 u_paha_koht = init_hjk_cxx(u_S6naPikkus, // u_paha_koht, sizeof(u_paha_koht)); //if (!u_paha_koht) // return CRASH; //TV080723 u_paha_koht = uus_paha(S6naPikkus,paha_koht,u_S6naPikkus,u_paha_koht); //if (!u_paha_koht) // return CRASH; init_hjk_cxx(u_S6naPikkus, u_paha_koht, sizeof(u_paha_koht)); uus_paha(S6naPikkus,paha_koht,u_S6naPikkus, u_paha_koht, sizeof(u_paha_koht)); u_S6na = (const FSxCHAR *)(S6na->Mid(tyvi1->k_pikkus)); cls_variant.ptr = lisa_1ahel(&cls_variant.ptr); if (!cls_variant.ptr) return CRASH; esi = &(cls_variant.ptr->variant); tmpkomp2 = kop_kompid(esi, tyvi); if (!tmpkomp2) return CRASH; for (tmpkomp1=*esi; tmpkomp1; tmpkomp1=tmpkomp1->komp_jargmine) { tmpkomp1->algsona = u_S6na; tmpkomp1->nihe -= tyvi1->k_pikkus; } if (ty1_tyyp == 12 && !TaheHulgad::OnAlguses(&u_S6na, FSxSTR("ise"))) /* prefiks; "ise" ei sobi */ { res = kchk30(&cls_variant.ptr, &u_S6na, u_S6naPikkus, &cvahe_variant.ptr, u_paha_koht,sizeof(u_paha_koht)); if (res > ALL_RIGHT) return res; /* viga! */ } if (!cvahe_variant.ptr) { res = kchk4(&cls_variant.ptr, &u_S6na, u_S6naPikkus, &cvahe_variant.ptr, u_paha_koht,sizeof(u_paha_koht)); if (res > ALL_RIGHT) return res; /* viga! */ } if (!cvahe_variant.ptr) { if (ty1_tyyp == 12 && !TaheHulgad::OnAlguses(&u_S6na, FSxSTR("ise"))) /* prefiks */ { res = kchk33(&cls_variant.ptr, &cvahe_variant.ptr, u_paha_koht, sizeof(u_paha_koht)); if (res > ALL_RIGHT) return res; /* viga! */ } } if (!cvahe_variant.ptr) { res = kchk5(&cls_variant.ptr, &u_S6na, u_S6naPikkus, &cvahe_variant.ptr, u_paha_koht, sizeof(u_paha_koht)); if (res > ALL_RIGHT) return res; /* viga! */ } if (cvahe_variant.ptr) /* ty1 taga v�ibki olla liits�na */ { for (tmp=cvahe_variant.ptr; tmp; tmp=tmp->jargmine_variant) { esi = &(tmp->variant); if ((*esi)->liitumistyyp == L_TYVE_TYYP) /* liitsona on S suva-vorm */ if ((*esi)->komp_jargmine->liitumistyyp != L_TYVE_TYYP + 3) /* polegi S pl g */ continue; if ((*esi)->k_tyyp == K_PREF && /* ... + pref */ (ty1_tyyp == 12 || ty1_tyyp == 4)) /* ty1 on pref v�i S sg g */ ; /* pref + pref/S sg g sobivad alati */ else { kk = ty11ty11(ty1_tyyp, ty11tyyp((*esi)->liitumistyyp)); if (!kk) /* liitsona ei sobi ty1-ga */ continue; } // kontrolli s�nastikust saadud info abil, kas v�ib olla liits�na tagumine ots // HJK juuni 2006 if (((*esi)->liitumisinfo).Find(L_MITTELIITUV_SL) != -1) // HJK 6.06.2006 et igasugu l�his�nad ei saaks osaleda continue; vt_tyvi = tyvi1->k_algus; vt_tyvi += (*esi)->k_algus; if (viletsls(&vt_tyvi)) /* lubamatu liitsona */ continue; for (tmpkomp1=*esi; tmpkomp1; tmpkomp1=tmpkomp1->komp_jargmine) { /* teisenda tagasi esialgse s�na taoliseks */ tmpkomp1->algsona = *S6na; tmpkomp1->nihe += tyvi1->k_pikkus; } /* vt et juba leitud analyysi ei lisataks uuesti */ for (tmpkomp1=*esi; tmpkomp1->komp_jargmine; tmpkomp1=tmpkomp1->komp_jargmine); sobivlp = tmpkomp1; sobivty = tmpkomp1->komp_eelmine; if (on_tylopuga(*sobivad_variandid, sobivty, sobivlp)) /* selline tyvi/suf+lp juba sobivate hulgas */ continue; /* s�na anal��situd! */ sobiv_variant = lisa_1ahel(sobivad_variandid); if (!sobiv_variant) return CRASH; essa = lisa_esimene(sobiv_variant); kopeeri_komp(essa, tyvi1); tmpkomp2 = kop_kompid(&essa, *esi); if (!tmpkomp2) return CRASH; } } ahelad_vabaks(&cvahe_variant.ptr); ahelad_vabaks(&cls_variant.ptr); /* s�nainfo tagasi �igeks */ // TV080723 paha_koht = uus_paha(u_S6naPikkus, u_paha_koht, S6naPikkus, paha_koht); //if (!paha_koht) // return CRASH; uus_paha(u_S6naPikkus, u_paha_koht, S6naPikkus, paha_koht, paha_koha_pikkus); //close_hjk_cxx(u_paha_koht); } return ALL_RIGHT; }