SIL.FieldWorks.IText.ComplexConcPatternNode.GetFeatureStruct C# (CSharp) Method

GetFeatureStruct() protected method

protected GetFeatureStruct ( FeatureSystem featSys, object>.IDictionary values ) : FeatureStruct
featSys FeatureSystem
values object>.IDictionary
return FeatureStruct
		protected FeatureStruct GetFeatureStruct(FeatureSystem featSys, IDictionary<IFsFeatDefn, object> values)
		{
			var fs = new FeatureStruct();
			foreach (KeyValuePair<IFsFeatDefn, object> kvp in values)
			{
				if (kvp.Key is IFsComplexFeature)
				{
					var childValues = (IDictionary<IFsFeatDefn, object>) kvp.Value;
					fs.AddValue(featSys.GetFeature(kvp.Key.Hvo.ToString(CultureInfo.InvariantCulture)), GetFeatureStruct(featSys, childValues));
				}
				else if (kvp.Key is IFsClosedFeature)
				{
					var value = (ClosedFeatureValue) kvp.Value;
					var symFeat = featSys.GetFeature<SymbolicFeature>(kvp.Key.Hvo.ToString(CultureInfo.InvariantCulture));

					FeatureSymbol symbol = symFeat.PossibleSymbols[value.Symbol.Hvo.ToString(CultureInfo.InvariantCulture)];
					fs.AddValue(symFeat, value.Negate ? new SymbolicFeatureValue(symFeat.PossibleSymbols.Except(symbol.ToEnumerable())) : new SymbolicFeatureValue(symbol));
				}
			}

			return fs;
		}
	}