private void AddEnumToXML(DynamicEnum dynEnum, ref XElement xmlRoot) { if (dynEnum.IsDirty) { GenerateEnum(dynEnum); } XElement xmlenum = new XElement(ENUM_ID); xmlenum.Add(new XAttribute(NAME_ID, dynEnum.Name)); xmlenum.Add(new XAttribute(FLAGS_ID, dynEnum.SetAsFlags)); foreach (KeyValuePair <string, string> field in dynEnum.StringValues) { XElement xmlfield = new XElement(FIELD_ID); xmlfield.Add(new XAttribute(NAME_ID, field.Key)); xmlfield.Add(new XAttribute(VALUE_ID, field.Value)); xmlenum.Add(xmlfield); } xmlRoot.Add(xmlenum); }
private void LoadInternal(bool generateTypes, bool loadDefault) { XDocument dxml = null; bool success = false; CachePath = GlobalHelper.PathInCurrentDirectory(CachePath, out success); FilePath = Path.Combine(CachePath, FilePath); if (!loadDefault) { if (File.Exists(FilePath)) { dxml = XDocument.Load(FilePath); } else { dxml = XDocument.Parse(GetDefaultXML()); dxml.Save(FilePath); } } else { dxml = XDocument.Parse(GetDefaultXML()); dxml.Save(FilePath); } XElement xmlroot = dxml.Elements(ROOT_ID).FirstOrDefault(); foreach (XElement xmlassoc in xmlroot.Elements(ASSOCIATOR_ID)) { GetAttributeAssociatorFromXML(xmlassoc); } foreach (XElement xmlenum in xmlroot.Elements(ENUM_ID)) { DynamicEnum dynenum = GetEnumFromXML(xmlenum); if (generateTypes) { GenerateEnum(dynenum); } } foreach (XElement xmlber in xmlroot.Elements(DECODE_ID)) { GetBerConverterFromXML(xmlber); } foreach (XElement xmldict in xmlroot.Elements(DICT_ID)) { GetDictionaryFromXML(xmldict); } }
public void GenerateEnum(DynamicEnum dynEnum) { if (dynEnum.Name.Length == 0) { return; } if (!dynEnum.HasValues) { return; } DynamicEnumList.RemoveSafe <string, DynamicEnum>(dynEnum.Name); EnumList.RemoveSafe <string, Type>(dynEnum.Name); try { CheckReflectionTypes(); EnumBuilder enb = ModBuilder.DefineEnum(dynEnum.Name, TypeAttributes.Public, dynEnum.InheritedType); if (dynEnum.SetAsFlags) { enb.SetCustomAttribute(new CustomAttributeBuilder(typeof(FlagsAttribute).GetConstructor(Type.EmptyTypes), new object[] { })); } foreach (KeyValuePair <string, object> field in dynEnum.Values) { enb.DefineLiteral(field.Key, field.Value); } Type entype = enb.CreateType(); dynEnum.IsDirty = false; DynamicEnumList.Add(dynEnum.Name, dynEnum); EnumList.Add(dynEnum.Name, entype); } catch (Exception ex) { ex.ToDummy(); } }
private DynamicEnum GetEnumFromXML(XElement xmlEnum) { DynamicEnum ret = new DynamicEnum(); if (xmlEnum.Attributes(NAME_ID).FirstOrDefault() == null) { return(ret); } ret.Name = xmlEnum.Attributes(NAME_ID).FirstOrDefault().Value; string flags = "false"; if (xmlEnum.Attributes(FLAGS_ID).FirstOrDefault() != null) { flags = xmlEnum.Attributes(FLAGS_ID).FirstOrDefault().Value; } bool setasflags = false; Boolean.TryParse(flags, out setasflags); ret.SetAsFlags = setasflags; foreach (XElement xmlfield in xmlEnum.Elements(FIELD_ID)) { if (xmlfield.Attributes(NAME_ID).FirstOrDefault() != null) { string name = xmlfield.Attributes(NAME_ID).FirstOrDefault().Value; if (xmlfield.Attributes(VALUE_ID).FirstOrDefault() != null) { string val = xmlfield.Attributes(VALUE_ID).FirstOrDefault().Value; ret.AddEnumField(name, val); } } } return(ret); }