Пример #1
0
		FeatureValues LoadSynFeats(XmlNode node, FeatureSystem featSys)
		{
			FeatureValues fvs = new FeatureValues();
			if (node != null)
			{
				XmlNodeList featValList = node.SelectNodes("FeatureValueList[@isActive='yes']");
				foreach (XmlNode featValNode in featValList)
				{
					XmlElement featValElem = featValNode as XmlElement;
					string featId = featValElem.GetAttribute("feature");
					Feature feature = featSys.GetFeature(featId);
					if (feature == null)
						throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownFeat, featId), featId);
					string valueIdsStr = featValElem.GetAttribute("values");
					if (!string.IsNullOrEmpty(valueIdsStr))
					{
						string[] valueIds = valueIdsStr.Split(' ');
						foreach (string valueId in valueIds)
						{
							FeatureValue value = feature.GetPossibleValue(valueId);
							if (value == null)
								throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownFeatValue, valueId, featId), valueId);
							fvs.Add(feature, new ClosedValueInstance(value));
						}
					}
					else
					{
						fvs.Add(feature, LoadSynFeats(featValNode, featSys));
					}
				}
			}

			return fvs;
		}
Пример #2
0
		Feature LoadFeature(XmlElement featDefNode, XmlElement featSysNode, FeatureSystem featSys)
		{
			XmlElement featElem = featDefNode.SelectSingleNode("Feature") as XmlElement;
			string featId = featElem.GetAttribute("id");
			Feature feature = featSys.GetFeature(featId);
			if (feature != null)
				return feature;

			string featureName = featElem.InnerText;
			string defValId = featElem.GetAttribute("defaultValue");
			feature = new Feature(featId, featureName, m_curMorpher);
			XmlNode valueListNode = featDefNode.SelectSingleNode("ValueList");
			if (valueListNode != null)
			{
				XmlNodeList valueList = valueListNode.SelectNodes("Value");
				foreach (XmlNode valueNode in valueList)
				{
					XmlElement valueElem = valueNode as XmlElement;
					string valueId = valueElem.GetAttribute("id");
					FeatureValue value = new FeatureValue(valueId, valueElem.InnerText, m_curMorpher);
					try
					{
						featSys.AddValue(value);
						feature.AddPossibleValue(value);
					}
					catch (InvalidOperationException ioe)
					{
						throw new LoadException(LoadException.LoadErrorType.TOO_MANY_FEATURE_VALUES, this,
							HCStrings.kstidTooManyFeatValues, ioe);
					}
				}
				if (!string.IsNullOrEmpty(defValId))
					feature.DefaultValue = new ClosedValueInstance(feature.GetPossibleValue(defValId));
			}
			else
			{
				XmlElement featListElem = featDefNode.SelectSingleNode("FeatureList") as XmlElement;
				string featDefIdsStr = featListElem.GetAttribute("features");
				string[] featDefIds = featDefIdsStr.Split(' ');
				foreach (string featDefId in featDefIds)
				{
					XmlNode subFeatDefNode = featSysNode.SelectSingleNode(string.Format("FeatureDefinition[@id = '{0}']", featDefId));
					Feature subFeature = LoadFeature(subFeatDefNode as XmlElement, featSysNode, featSys);
					feature.AddSubFeature(subFeature);
				}
			}
			featSys.AddFeature(feature);
			return feature;
		}
Пример #3
0
 private FeatureStruct LoadFeatureStruct(XElement elem, FeatureSystem featSys)
 {
     var fs = new FeatureStruct();
     foreach (XElement featValElem in elem.Elements("FeatureValue").Where(IsActive))
     {
         Feature feature = featSys.GetFeature((string) featValElem.Attribute("feature"));
         var valueIDsStr = (string) featValElem.Attribute("symbolValues");
         if (!string.IsNullOrEmpty(valueIDsStr))
         {
             var sf = (SymbolicFeature) feature;
             fs.AddValue(sf, valueIDsStr.Split(' ').Select(id => sf.PossibleSymbols[id]));
         }
         else
         {
             var cf = (ComplexFeature) feature;
             fs.AddValue(cf, LoadFeatureStruct(featValElem, featSys));
         }
     }
     return fs;
 }