Exemple #1
0
void MRF2YH2MRF::FsTags2YmmTags(
	const FSXSTRING* p_sona,
	MRFTUL* p_mTul,
	FSXSTRING& yhmarg1,
	FSXSTRING& yhmarg2,
	FSXSTRING& yhmarg3	
	) const
    {
	FSUNUSED(yhmarg3);
    MRF2YH_LOEND* p_rec;
    const FSWCHAR* p_yTag;

    // punktuatsioon --> ühestajamärgendiks
    if(p_mTul->sl==FSWSTR("Z")) // sõnaliik oli punktuatsioon
        {
        p_rec=punktuatsioon.Get((FSWCHAR*)(const FSWCHAR*)*p_sona);
        if(p_rec!= NULL)        // oli meie punktuatsiooni loendis
            {            
            //p_mTul->mrg1st=p_rec->p_yhTag;
			yhmarg1=p_rec->p_yhTag;
            return;
            }
        // p_rec==NULL -- polnud loendis...
		else // vt kas esimene m�rk oli loendis 
			{
			FSXSTRING algustht = p_sona->Left(1);
			p_rec=punktuatsioon.Get((FSWCHAR*)(const FSWCHAR*)algustht);
			if(p_rec!= NULL)        // oli meie punktuatsiooni loendis
				{            
				//p_mTul->mrg1st=p_rec->p_yhTag;
				yhmarg1=p_rec->p_yhTag;
				return;
				}
			}
        // p_rec==NULL -- polnud loendis...
        //p_mTul->mrg1st=FSWSTR("WIE");   //...vaikimisi see
        //p_mTul->mrg1st=FSWSTR("X");   //...vaikimisi see
		yhmarg1=FSWSTR("X");   //...vaikimisi see
        return;
        }
    // sõna --> ühestajamärgendiks

    // if(sonaliik != "H")
    if(p_mTul->sl[0]!=(FSWCHAR)'H')
    {
        p_rec=sona.Get((FSWCHAR*)(const FSWCHAR*)*p_sona);
        if(p_rec!= NULL)    // oli meie sõnade loendis
            {
            //p_mTul->mrg1st=p_rec->p_yhTag;
            yhmarg1=p_rec->p_yhTag;
            return;
            }
    }
    // endif

    // sõnaliik + sõna --> ühestajamärgendiks
    // DXIG -> RR RR II ASG t��tlus
    if(muut1.Find(p_mTul->sl[0]) >= 0) // sõnaliik oli 'muut1' loendis
        {
        p_rec=rr.Get((FSWCHAR*)(const FSWCHAR*)*p_sona);
        if(p_rec!= NULL)    // 
            {            
            //p_mTul->mrg1st=p_rec->p_yhTag;
			yhmarg1=p_rec->p_yhTag;
            return;
            }
        // p_rec==NULL -- polnud loendis...
		if((p_rec=noomTags.Get((FSWCHAR*)(const FSWCHAR*)(p_mTul->sl)))!=NULL)
			{                              // märgendi 1. pool
			//p_mTul->mrg1st=p_rec->p_yhTag; // tuleneb sõnaliigist
			yhmarg1=p_rec->p_yhTag;
			return;
			}

		//p_mTul->mrg1st=FSWSTR("RR");    //...vaikimisi see VALE!!!!
        // return;
        }
    // sõnaliik + sõnalõpp --> ühestajamärgendiks
    // nud-tud-dud lõpulised V, A -> VMAZ (partitsiip)
    if(verb_v_adj.Find(p_mTul->sl[0]) >= 0) // sõnaliik oli 'verb_v_adj' loendis
        {
        // kas sõna "[ntd]ud" lõpuline
        if(TaheHulgad::OnLopus(p_sona, FSWSTR("nud"))==true ||
           TaheHulgad::OnLopus(p_sona, FSWSTR("tud"))==true ||
           TaheHulgad::OnLopus(p_sona, FSWSTR("dud"))==true )
            {
            //p_mTul->mrg1st=FSWSTR("VMAZ");
			yhmarg1=FSWSTR("VMAZ");
            return; //??
            }
        //return; //??
        }
    // sõnaliik + sõnalõpp --> ühestajamärgendiks
    // nud-tud lõpulised S -> VMAZ (partitsiip)
    //   if(p_mTul->sl[0] == (FSWCHAR)'S') 
    //       {
    //       // kas sõna "[nt]ud" lõpuline
    //      if(TaheHulgad::OnLopus(p_sona, FSWSTR("nud"))==true ||
    //          TaheHulgad::OnLopus(p_sona, FSWSTR("tud"))==true )
    //          {
    //          p_mTul->mrg1st=FSWSTR("VMAZ");
    //          return; //??
    //          }
    //      // return; //??
    //      }
    // yks ja teine -> YKS* ja TEINE*
    if(yks_v_teine_sonaliik.Find(p_mTul->sl[0]) >= 0) // sõnaliik oli 'yks_v_teine_sonaliik' loendis
        {
        //p_rec=yksTeine.Get((FSWCHAR*)(const FSWCHAR*)*p_sona);
        p_rec=yksTeine.Get((FSWCHAR*)(const FSWCHAR*)p_mTul->tyvi);
        if(p_rec!= NULL)        // oli  loendis
            {                               // märgendi 1. pool
            //p_mTul->mrg1st=p_rec->p_yhTag;  // tuleneb sõnast
			yhmarg1=p_rec->p_yhTag;
            p_yTag=Kaane(&(p_mTul->vormid));
            if(p_yTag==NULL) // seda ei tohiks olla
                {
                //p_mTul->mrg1st=FSWSTR("PSX"); // TUNDMATU_P_YM
				yhmarg1=FSWSTR("PSX"); // TUNDMATU_P_YM
                return;
                }
            //p_mTul->mrg1st +=p_yTag;        // märgendi 2. pool,
			yhmarg1 += p_yTag;        // märgendi 2. pool,
            return;                         // tuleneb käändevormist
            }
        // p_rec==NULL -- polnud loendis, ei tee midagi
        }
    //  P -> PP1 PP2 PP3 juhtumi tõõtlus
    if(p_mTul->sl[0] == (FSWCHAR)'P')
        {
        //p_rec=ase.Get((FSWCHAR*)(const FSWCHAR*)*p_sona);
		p_rec=ase.Get((FSWCHAR*)(const FSWCHAR*)p_mTul->tyvi);
        if(p_rec!= NULL)     
            {                               // märgendi 1. pool
            //p_mTul->mrg1st=p_rec->p_yhTag;  // tuleneb sõnast
            yhmarg1=p_rec->p_yhTag;
			p_yTag=Kaane(&(p_mTul->vormid));
            if(p_yTag==NULL) // seda ei tohiks olla
                {
                //p_mTul->mrg1st=FSWSTR("PSX"); // TUNDMATU_P_YM
				yhmarg1=FSWSTR("PSX"); // TUNDMATU_P_YM
                return;                       
                }                           // märgendi 2. pool,
            //p_mTul->mrg1st +=  p_yTag;      // tuleneb käädevormist
			yhmarg1 +=  p_yTag;      // tuleneb käädevormist
            if(*p_sona == FSWSTR("tema") && yhmarg1==FSWSTR("PP3SG")) // väga kole!!!
                {
                // mõhh???
                //p_mTul->mrg1st=FSWSTR("M");
				//yhmarg1=FSWSTR("PP3SN"); HJK 23.11.2004 prooviks ikka ühestada...
                return;
                }
            return;
            }
        // p_rec==NULL -- polnud loendis, ei tee midagi
        }
    // ACUSHNOPY -> A, A, A, NC, NP, MC, MO, P, Y töötlus
    if((p_rec=noomTags.Get((FSWCHAR*)(const FSWCHAR*)(p_mTul->sl)))!=NULL)
        {                              // märgendi 1. pool
        //p_mTul->mrg1st=p_rec->p_yhTag; // tuleneb sõnaliigist
		yhmarg1=p_rec->p_yhTag; // tuleneb sõnaliigist
        p_yTag=Kaane(&(p_mTul->vormid));
        if(p_yTag==NULL)
            {
            if(p_mTul->sl==FSWSTR("A"))
                {
                //
                MRF2YH_LOEND* p_rec2;
                if((p_rec2=asxrr.Get((FSWCHAR*)(const FSWCHAR*)
                                                (p_mTul->sl)))!=NULL)
                    {
                    //p_mTul->mrg1st=p_rec2->p_yhTag; // ASXRR asemele
					yhmarg1=p_rec2->p_yhTag; // ASXRR asemele
                    return;
                    }
                //p_mTul->mrg1st += FSWSTR("SX"); // MUUTUMATU_NOOMENI_TUNNUS
				yhmarg1 += FSWSTR("SX"); // MUUTUMATU_NOOMENI_TUNNUS
                return;                         // sappa juurde
                }
            if(TaheHulgad::OnLopus(&yhmarg1, FSWSTR("NP"))==true)
                {
                // et ei tekiks NPSX keerame ...NP --> ...NC
                //p_mTul->mrg1st.Delete(p_mTul->mrg1st.GetLength()-1);
                if(p_mTul->mrg1st.GetLength()>0) //TV071109
				    yhmarg1.Delete(p_mTul->mrg1st.GetLength()-1);
                //p_mTul->mrg1st += FSWSTR("C");
				yhmarg1 += FSWSTR("C");
                }
            //p_mTul->mrg1st += FSWSTR("SX"); // MUUTUMATU_NOOMENI_TUNNUS
			yhmarg1 += FSWSTR("SX"); // MUUTUMATU_NOOMENI_TUNNUS
            return;                         // sappa juurde
            }
        //p_mTul->mrg1st += p_yTag; // märgendi 2. pool
		yhmarg1 += p_yTag; // märgendi 2. pool
        return;                   // tulenb käändevormist        
        }
    // J -> CS ja CC töötlus
    if(p_mTul->sl[0] == (FSWCHAR)'J')
        {
        p_rec=sidec.Get((FSWCHAR*)(const FSWCHAR*)*p_sona);
        if(p_rec!= NULL)     
            {                               
            //p_mTul->mrg1st=p_rec->p_yhTag;  
			yhmarg1=p_rec->p_yhTag; 
            return;
            }
        //p_mTul->mrg1st=FSWSTR("CS");
		yhmarg1=FSWSTR("CS");
        return;
        }
    // K -> SP ja ST töötlus
    if(p_mTul->sl[0] == (FSWCHAR)'K')
        {
        // TODO::
        Kaas2Yh(p_sona, yhmarg1, yhmarg2);
        //       if(p_yTag==NULL) // seda ei tohiks olla
        //           {
        //           p_mTul->mrg1st=FSWSTR("ST");
        //           return;
        //           }
        //p_mTul->mrg1st=p_yTag;
        return;
        }
    // V -> VM töötlus
    if(p_mTul->sl[0] == (FSWCHAR)'V')
        {
        //p_mTul->mrg1st=FSWSTR("VM"); // VERBI_YM
		yhmarg1=FSWSTR("VM"); // VERBI_YM
        p_yTag=Poore(&(p_mTul->vormid));
        if(p_yTag==NULL)
            {
            //p_mTul->mrg1st += FSWSTR("S"); // MUUTUMATU_VERBI_TUNNUS
			yhmarg1 += FSWSTR("S"); // MUUTUMATU_VERBI_TUNNUS
            return;
            }
        if(sid_variandid==p_yTag)
            {
            // siin toimub veel midagi segast
            //p_mTul->mrg1st += FSWSTR("3"); // YM_MA_VAHE
			yhmarg2 = yhmarg1;
			yhmarg1 += FSWSTR("2"); // YM_MA_VAHE
			yhmarg2 += FSWSTR("3"); // YM_MA_VAHE
            return;
            }
        //p_mTul->mrg1st += p_yTag;
		yhmarg1 += p_yTag;
        return;
        }
    assert(false);
    //p_mTul->mrg1st=FSWSTR("X"); // TUNDMATU_LOOM
	yhmarg1=FSWSTR("X"); // TUNDMATU_LOOM
    }