private IList <TypeRepTemplate> mkTemplates(string typeName) { List <TypeRepTemplate> rets = new List <TypeRepTemplate>(); Type t = assembly.GetType(typeName); if (t == null) { throw new Exception(String.Format("Type {0} not found", typeName)); } foreach (Type nestedTy in t.GetNestedTypes()) { foreach (TypeRepTemplate nestedRep in mkTemplates(nestedTy.FullName)) { rets.Add(nestedRep); } } TypeRepTemplate retRep = null; if (t.IsClass) { if (t.IsSubclassOf(typeof(System.Delegate))) { DelegateRepTemplate delRep = new DelegateRepTemplate(); buildDelegate(delRep, t); retRep = delRep; } else { ClassRepTemplate classRep = new ClassRepTemplate(); buildClass(classRep, t); retRep = classRep; } } else if (t.IsInterface) { InterfaceRepTemplate intRep = new InterfaceRepTemplate(); buildInterface(intRep, t); retRep = intRep; } else if (t.IsEnum) { EnumRepTemplate enumRep = new EnumRepTemplate(); enumRep.TypeName = TypeHelper.buildTypeName(t); foreach (FieldInfo f in t.GetFields(BindingFlags.Public | BindingFlags.Static)) { enumRep.Members.Add(new EnumMemberRepTemplate(f.Name, f.GetRawConstantValue().ToString())); } retRep = enumRep; } rets.Add(retRep); return(rets); }
private void writeXmlStream(TypeRepTemplate inT, TextWriter str) { XmlSerializer xmls = new XmlSerializer(inT.GetType(), Constants.TranslationTemplateNamespace); XmlWriterSettings settings = new XmlWriterSettings(); settings.Encoding = Encoding.UTF8; settings.Indent = true; settings.IndentChars = "\t"; settings.NewLineChars = Environment.NewLine; settings.ConformanceLevel = ConformanceLevel.Document; using (XmlWriter writer = XmlTextWriter.Create(str, settings)) { xmls.Serialize(writer, inT); } }
// Here's where we do the real work... public static void addNetTranslation(string fullName) { // Suck in translation file Stream txStream = new FileStream(fullName, FileMode.Open, FileAccess.Read); try { TypeRepTemplate t = TypeRepTemplate.newInstance(txStream); // Fullname has form: <path>/<key>.xml string txKey = t.TypeName + (t.TypeParams != null && t.TypeParams.Length > 0 ? "'" + t.TypeParams.Length.ToString() : ""); if (!String.IsNullOrEmpty(t.Variant)) { AppEnv.Add(txKey, t, t.Variant); } else { AppEnv.Add(txKey, t); } } catch (Exception e) { Console.WriteLine("WARNING -- Could not import " + fullName + " (" + e.Message + ")"); } }