コード例 #1
0
ファイル: XmlLoader.cs プロジェクト: sillsdev/WorldPad
		void LoadMRule(XmlElement mruleNode)
		{
			string id = mruleNode.GetAttribute("id");
			string name = mruleNode.SelectSingleNode("Name").InnerText;
			AffixalMorphologicalRule mrule = new AffixalMorphologicalRule(id, name, m_curMorpher);
			XmlElement glossElem = mruleNode.SelectSingleNode("Gloss") as XmlElement;
			if (glossElem != null)
				mrule.Gloss = new Gloss(glossElem.GetAttribute("id"), glossElem.InnerText, m_curMorpher);

			string multApp = mruleNode.GetAttribute("multipleApplication");
			if (!string.IsNullOrEmpty(multApp))
				mrule.MaxNumApps = Convert.ToInt32(multApp);

			mrule.RequiredPOSs = LoadPOSs(mruleNode.GetAttribute("requiredPartsOfSpeech"));

			string outPOSId = mruleNode.GetAttribute("outputPartOfSpeech");
			PartOfSpeech outPOS = null;
			if (!string.IsNullOrEmpty(outPOSId))
			{
				outPOS = m_curMorpher.GetPOS(outPOSId);
				if (outPOS == null)
					throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownPOS, outPOSId), outPOSId);
			}
			mrule.OutPOS = outPOS;

			mrule.RequiredHeadFeatures = LoadSynFeats(mruleNode.SelectSingleNode("RequiredHeadFeatures"),
				m_curMorpher.HeadFeatureSystem);
			mrule.RequiredFootFeatures = LoadSynFeats(mruleNode.SelectSingleNode("RequiredFootFeatures"),
				m_curMorpher.FootFeatureSystem);

			mrule.OutHeadFeatures = LoadSynFeats(mruleNode.SelectSingleNode("OutputHeadFeatures"),
				m_curMorpher.HeadFeatureSystem);
			mrule.OutFootFeatures = LoadSynFeats(mruleNode.SelectSingleNode("OutputFootFeatures"),
				m_curMorpher.FootFeatureSystem);

			HCObjectSet<Feature> obligHeadFeats = new HCObjectSet<Feature>();
			string obligHeadIdsStr = mruleNode.GetAttribute("outputObligatoryFeatures");
			if (!string.IsNullOrEmpty(obligHeadIdsStr))
			{
				string[] obligHeadIds = obligHeadIdsStr.Split(' ');
				foreach (string obligHeadId in obligHeadIds)
				{
					Feature feature = m_curMorpher.HeadFeatureSystem.GetFeature(obligHeadId);
					if (feature == null)
						throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownFeat, obligHeadId), obligHeadId);
					obligHeadFeats.Add(feature);
				}
			}
			mrule.ObligatoryHeadFeatures = obligHeadFeats;

			mrule.IsBlockable = mruleNode.GetAttribute("blockable") == "true";

			XmlNodeList subruleList = mruleNode.SelectNodes("MorphologicalSubrules/MorphologicalSubruleStructure[@isActive='yes']");
			foreach (XmlNode subruleNode in subruleList)
			{
				try
				{
					LoadMSubrule(subruleNode as XmlElement, mrule);
				}
				catch (LoadException le)
				{
					if (m_quitOnError)
						throw le;
				}
			}

			if (mrule.SubruleCount > 0)
				m_curMorpher.AddMorphologicalRule(mrule);
		}
コード例 #2
0
ファイル: XmlLoader.cs プロジェクト: sillsdev/WorldPad
		MorphCoOccurrence LoadAlloCoOccur(XmlElement coOccurNode)
		{
			MorphCoOccurrence.AdjacencyType adjacency = GetAdjacencyType(coOccurNode.GetAttribute("adjacency"));
			string[] allomorphIds = coOccurNode.GetAttribute("allomorphs").Split(' ');
			HCObjectSet<HCObject> allomorphs = new HCObjectSet<HCObject>();
			foreach (string allomorphId in allomorphIds)
			{
				Allomorph allomorph = m_curMorpher.GetAllomorph(allomorphId);
				if (allomorph == null)
					throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownAllo, allomorphId), allomorphId);
				allomorphs.Add(allomorph);
			}
			return new MorphCoOccurrence(allomorphs, MorphCoOccurrence.ObjectType.ALLOMORPH, adjacency);
		}
コード例 #3
0
ファイル: XmlLoader.cs プロジェクト: sillsdev/WorldPad
		MorphCoOccurrence LoadMorphCoOccur(XmlElement coOccurNode)
		{
			MorphCoOccurrence.AdjacencyType adjacency = GetAdjacencyType(coOccurNode.GetAttribute("adjacency"));
			string[] morphemeIds = coOccurNode.GetAttribute("morphemes").Split(' ');
			HCObjectSet<HCObject> morphemes = new HCObjectSet<HCObject>();
			foreach (string morphemeId in morphemeIds)
			{
				Morpheme morpheme = m_curMorpher.GetMorpheme(morphemeId);
				if (morpheme == null)
					throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownMorpheme, morphemeId), morphemeId);
				morphemes.Add(morpheme);
			}
			return new MorphCoOccurrence(morphemes, MorphCoOccurrence.ObjectType.MORPHEME, adjacency);
		}
コード例 #4
0
ファイル: XmlLoader.cs プロジェクト: sillsdev/WorldPad
		IEnumerable<PartOfSpeech> LoadPOSs(string posIdsStr)
		{
			HCObjectSet<PartOfSpeech> result = new HCObjectSet<PartOfSpeech>();
			if (!string.IsNullOrEmpty(posIdsStr))
			{
				string[] posIds = posIdsStr.Split(' ');
				foreach (string posId in posIds)
				{
					PartOfSpeech pos = m_curMorpher.GetPOS(posId);
					if (pos == null)
						throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownPOS, posId), posId);
					result.Add(pos);
				}
			}
			return result;
		}
コード例 #5
0
ファイル: XmlLoader.cs プロジェクト: sillsdev/WorldPad
		void LoadAffixTemplate(XmlElement tempNode, HCObjectSet<MorphologicalRule> templateRules)
		{
			string id = tempNode.GetAttribute("id");
			string name = tempNode.SelectSingleNode("Name").InnerText;
			AffixTemplate template = new AffixTemplate(id, name, m_curMorpher);

			string posIdsStr = tempNode.GetAttribute("requiredPartsOfSpeech");
			template.RequiredPOSs = LoadPOSs(posIdsStr);

			XmlNodeList slotList = tempNode.SelectNodes("Slot[@isActive='yes']");
			foreach (XmlNode slotNode in slotList)
			{
				XmlElement slotElem = slotNode as XmlElement;
				string slotId = slotElem.GetAttribute("id");
				string slotName = slotElem.SelectSingleNode("Name").InnerText;

				Slot slot = new Slot(slotId, slotName, m_curMorpher);
				string ruleIdsStr = slotElem.GetAttribute("morphologicalRules");
				string[] ruleIds = ruleIdsStr.Split(' ');
				MorphologicalRule lastRule = null;
				foreach (string ruleId in ruleIds)
				{
					MorphologicalRule rule = m_curMorpher.GetMorphologicalRule(ruleId);
					if (rule != null)
					{
						slot.AddRule(rule);
						lastRule = rule;
						templateRules.Add(rule);
					}
					else
					{
						if (m_quitOnError)
							throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownMRule, ruleId), ruleId);
					}
				}

				string optionalStr = slotElem.GetAttribute("optional");
				if (string.IsNullOrEmpty(optionalStr) && lastRule is RealizationalRule)
					slot.IsOptional = (lastRule as RealizationalRule).RealizationalFeatures.NumFeatures > 0;
				else
					slot.IsOptional = optionalStr == "true";
				template.AddSlot(slot);
			}

			m_curMorpher.AddAffixTemplate(template);
		}
コード例 #6
0
ファイル: FeatureSystem.cs プロジェクト: bbriggs/FieldWorks
		public ClosedValueInstance(FeatureValue value)
		{
			m_values = new HCObjectSet<FeatureValue>();
			m_values.Add(value);
		}