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); }
/// <summary> /// Adds the slot. /// </summary> /// <param name="slot">The slot.</param> public void AddSlot(Slot slot) { m_slots.Add(slot); }