Esempio n. 1
0
        /// <summary>
        /// Change the affix to a stem (possibly)
        /// </summary>
        /// <param name="entry"></param>
        /// <param name="selectedHvo"></param>
        /// <param name="sUndo"></param>
        /// <param name="sRedo"></param>
        /// <returns>true if change made; false otherwise</returns>
        private bool ChangeAffixToStem(ILexEntry entry, int selectedHvo, string sUndo, string sRedo)
        {
            IMoAffixForm affix = m_obj as IMoAffixForm;

            if (affix == null)
            {
                throw new ApplicationException("Affix form is not defined");
            }
            List <IMoMorphSynAnalysis> rgmsaOld = new List <IMoMorphSynAnalysis>();

            if (m_obj.OwningFlid == (int)LexEntry.LexEntryTags.kflidLexemeForm)
            {
                foreach (IMoMorphSynAnalysis msa in entry.MorphoSyntaxAnalysesOC)
                {
                    if (!(msa is IMoStemMsa))
                    {
                        rgmsaOld.Add(msa);
                    }
                }
            }
            if (CheckForAffixDataLoss(affix, rgmsaOld))
            {
                return(false);
            }
            FdoCache cache = m_cache;

            cache.BeginUndoTask(sUndo, sRedo);
            IMoStemAllomorph stem = new MoStemAllomorph();

            SwapValues(entry, affix, stem, selectedHvo, rgmsaOld);              // may cause slice/button to be disposed...
            cache.EndUndoTask();
            return(true);
        }
Esempio n. 2
0
        protected void CreateMorphInflectionClassesXmlElement(XmlDocument doc, XmlNode node, XmlNode morphNode)
        {
            XmlNode attr;

            attr = node.SelectSingleNode("@alloid");
            if (attr != null)
            {
                XmlNode      alloid = node.Attributes.GetNamedItem("alloid");
                int          hvo    = Convert.ToInt32(alloid.InnerText);
                ICmObject    obj    = CmObject.CreateFromDBObject(m_cache, hvo);
                IMoAffixForm form   = obj as IMoAffixForm;                // only for affix forms
                if (form != null)
                {
                    if (form.InflectionClassesRC.Count > 0)
                    {
                        XmlNode inflClasses = CreateXmlElement(doc, "inflClasses", morphNode);
                        FdoReferenceCollection <IMoInflClass> inflectionClasses = form.InflectionClassesRC;
                        CreateInflectionClassesAndSubclassesXmlElement(doc, inflectionClasses, inflClasses);
                    }
                }
            }
        }
Esempio n. 3
0
        private bool CheckForAffixDataLoss(IMoAffixForm affix, List <IMoMorphSynAnalysis> rgmsaAffix)
        {
            bool fLoseInflCls  = affix.InflectionClassesRC.Count > 0;
            bool fLoseInfixLoc = false;
            bool fLoseGramInfo = false;
            bool fLoseRule     = false;

            switch (affix.ClassID)
            {
            case MoAffixProcessTags.kClassId:
                fLoseRule = true;
                break;

            case MoAffixAllomorphTags.kClassId:
                var allo = (IMoAffixAllomorph)affix;
                fLoseInfixLoc = allo.PositionRS.Count > 0;
                fLoseGramInfo = allo.MsEnvPartOfSpeechRA != null || allo.MsEnvFeaturesOA != null;
                break;
            }

            for (int i = 0; !fLoseGramInfo && i < rgmsaAffix.Count; ++i)
            {
                var msaInfl = rgmsaAffix[i] as IMoInflAffMsa;
                if (msaInfl != null)
                {
                    if (msaInfl.AffixCategoryRA != null ||
                        msaInfl.FromProdRestrictRC.Count > 0 ||
                        msaInfl.SlotsRC.Count > 0 ||
                        msaInfl.InflFeatsOA != null)
                    {
                        fLoseGramInfo = true;
                    }
                    continue;
                }
                var msaDeriv = rgmsaAffix[i] as IMoDerivAffMsa;
                if (msaDeriv != null)
                {
                    if (msaDeriv.AffixCategoryRA != null ||
                        msaDeriv.FromInflectionClassRA != null ||
                        msaDeriv.FromPartOfSpeechRA != null ||
                        msaDeriv.FromProdRestrictRC.Count > 0 ||
                        msaDeriv.FromStemNameRA != null ||
                        msaDeriv.StratumRA != null ||
                        msaDeriv.ToInflectionClassRA != null ||
                        msaDeriv.ToProdRestrictRC.Count > 0 ||
                        msaDeriv.FromMsFeaturesOA != null ||
                        msaDeriv.ToMsFeaturesOA != null)
                    {
                        fLoseGramInfo = true;
                    }
                    continue;
                }
                var msaStep = rgmsaAffix[i] as IMoDerivStepMsa;
                if (msaStep != null)
                {
                    if (msaStep.InflectionClassRA != null ||
                        msaStep.ProdRestrictRC.Count > 0 ||
                        msaStep.InflFeatsOA != null ||
                        msaStep.MsFeaturesOA != null)
                    {
                        fLoseGramInfo = true;
                    }
                }
            }
            if (fLoseInflCls || fLoseInfixLoc || fLoseGramInfo || fLoseRule)
            {
                string sMsg;
                if (fLoseInflCls && fLoseInfixLoc && fLoseGramInfo)
                {
                    sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInflClsInfixLocGramInfo", m_ksPath);
                }
                else if (fLoseRule && fLoseInflCls && fLoseGramInfo)
                {
                    sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseRuleInflClsGramInfo", m_ksPath);
                }
                else if (fLoseInflCls && fLoseInfixLoc)
                {
                    sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInflClsInfixLoc", m_ksPath);
                }
                else if (fLoseInflCls && fLoseGramInfo)
                {
                    sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInflClsGramInfo", m_ksPath);
                }
                else if (fLoseInfixLoc && fLoseGramInfo)
                {
                    sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInfixLocGramInfo", m_ksPath);
                }
                else if (fLoseRule && fLoseInflCls)
                {
                    sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseRuleInflCls", m_ksPath);
                }
                else if (fLoseRule)
                {
                    sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseRule", m_ksPath);
                }
                else if (fLoseInflCls)
                {
                    sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInflCls", m_ksPath);
                }
                else if (fLoseInfixLoc)
                {
                    sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInfixLoc", m_ksPath);
                }
                else
                {
                    sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseGramInfo", m_ksPath);
                }
                string       sCaption = m_mediator.StringTbl.GetStringWithXPath("ChangeLexemeMorphTypeCaption", m_ksPath);
                DialogResult result   = MessageBox.Show(sMsg, sCaption,
                                                        MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (result == DialogResult.No)
                {
                    return(true);
                }
            }
            return(false);
        }
		private bool CheckForAffixDataLoss(IMoAffixForm affix, List<IMoMorphSynAnalysis> rgmsaAffix)
		{
			bool fLoseInflCls = affix.InflectionClassesRC.Count > 0;
			bool fLoseInfixLoc = false;
			bool fLoseGramInfo = false;
			bool fLoseRule = false;
			switch (affix.ClassID)
			{
				case MoAffixProcessTags.kClassId:
					fLoseRule = true;
					break;

				case MoAffixAllomorphTags.kClassId:
					var allo = (IMoAffixAllomorph) affix;
					fLoseInfixLoc = allo.PositionRS.Count > 0;
					fLoseGramInfo = allo.MsEnvPartOfSpeechRA != null || allo.MsEnvFeaturesOA != null;
					break;
			}

			for (int i = 0; !fLoseGramInfo && i < rgmsaAffix.Count; ++i)
			{
				var msaInfl = rgmsaAffix[i] as IMoInflAffMsa;
				if (msaInfl != null)
				{
					if (msaInfl.AffixCategoryRA != null ||
						msaInfl.FromProdRestrictRC.Count > 0 ||
						msaInfl.SlotsRC.Count > 0 ||
						msaInfl.InflFeatsOA != null)
					{
						fLoseGramInfo = true;
					}
					continue;
				}
				var msaDeriv = rgmsaAffix[i] as IMoDerivAffMsa;
				if (msaDeriv != null)
				{
					if (msaDeriv.AffixCategoryRA != null ||
						msaDeriv.FromInflectionClassRA != null ||
						msaDeriv.FromPartOfSpeechRA != null ||
						msaDeriv.FromProdRestrictRC.Count > 0 ||
						msaDeriv.FromStemNameRA != null ||
						msaDeriv.StratumRA != null ||
						msaDeriv.ToInflectionClassRA != null ||
						msaDeriv.ToProdRestrictRC.Count > 0 ||
						msaDeriv.FromMsFeaturesOA != null ||
						msaDeriv.ToMsFeaturesOA != null)
					{
						fLoseGramInfo = true;
					}
					continue;
				}
				var msaStep = rgmsaAffix[i] as IMoDerivStepMsa;
				if (msaStep != null)
				{
					if (msaStep.InflectionClassRA != null ||
						msaStep.ProdRestrictRC.Count > 0 ||
						msaStep.InflFeatsOA != null ||
						msaStep.MsFeaturesOA != null)
					{
						fLoseGramInfo = true;
					}
				}
			}
			if (fLoseInflCls || fLoseInfixLoc || fLoseGramInfo || fLoseRule)
			{
				string sMsg;
				if (fLoseInflCls && fLoseInfixLoc && fLoseGramInfo)
					sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInflClsInfixLocGramInfo", m_ksPath);
				else if (fLoseRule && fLoseInflCls && fLoseGramInfo)
					sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseRuleInflClsGramInfo", m_ksPath);
				else if (fLoseInflCls && fLoseInfixLoc)
					sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInflClsInfixLoc", m_ksPath);
				else if (fLoseInflCls && fLoseGramInfo)
					sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInflClsGramInfo", m_ksPath);
				else if (fLoseInfixLoc && fLoseGramInfo)
					sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInfixLocGramInfo", m_ksPath);
				else if (fLoseRule && fLoseInflCls)
					sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseRuleInflCls", m_ksPath);
				else if (fLoseRule)
					sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseRule", m_ksPath);
				else if (fLoseInflCls)
					sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInflCls", m_ksPath);
				else if (fLoseInfixLoc)
					sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseInfixLoc", m_ksPath);
				else
					sMsg = m_mediator.StringTbl.GetStringWithXPath("ChangeMorphTypeLoseGramInfo", m_ksPath);
				string sCaption = m_mediator.StringTbl.GetStringWithXPath("ChangeLexemeMorphTypeCaption", m_ksPath);
				DialogResult result = MessageBox.Show(sMsg, sCaption,
					MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
				if (result == DialogResult.No)
				{
					return true;
				}
			}
			return false;
		}