Ejemplo n.º 1
0
        private static void BeginTagBlock(StreamWriter streamWriter, Struct structure)
        {

            streamWriter.Write(
            @"public class {0} : TagBlock
              {{
                public {0}()
                : base({1}", structure.Name, structure.Size);
            if (structure.Children.Count > 0)
            {
                streamWriter.WriteLine(", new TagBlockField[] {");
                int offset = 0;
                foreach (var child in structure.Children)
                {
                    if (offset < child.Offset)
                    {
                        var shift = child.Offset - offset;
                        streamWriter.WriteLine("   new TagBlockField(null, {0}),", shift);
                        offset += shift;
                    }
                    else if (offset > child.Offset) throw new InvalidProgramException();

                    ProcessName(child);

                    streamWriter.WriteLine(" new TagBlockField(new {0}()),", child.TypeName);
                    offset += child.FieldSize;
                }
                streamWriter.WriteLine("}) { }");

                foreach(var child in structure.Children)
                {
                    BeginTagBlock(streamWriter, child);
                }

            }
            else
            {
                streamWriter.WriteLine(") { }");
            }
            streamWriter.WriteLine(@"}");
        }
Ejemplo n.º 2
0
 private static void ProcessName(Struct child)
 {
     if (!Names.ContainsKey(child.Name))
     {
         Names[child.Name] = 0;
     }
     else
     {
         Names[child.Name]++;
         child.Name = child.Name + Names[child.Name];
     }
 }
Ejemplo n.º 3
0
        public static void ConvertEnt(Stream plugin, Stream output)
        {
            Names.Clear();
            pluginStructure = new Struct();
            using (XmlReader xmlReader = XmlReader.Create(plugin))
            {
                while (xmlReader.Read())
                {
                    switch (xmlReader.NodeType)
                    {
                        case XmlNodeType.Element:
                            switch (xmlReader.Name.ToLower())
                            {
                                case "plugin":
                                    pluginStructure.Read(xmlReader.ReadSubtree());
                                    break;
                            }
                            break;
                    }
                }
            }

            using (StreamWriter streamWriter = new StreamWriter(output))
            {
                streamWriter.WriteLine(
                @"using Moonfish;
                using Moonfish.Definitions;
                using Moonfish.Structures;
                namespace Moonfish
                {{   
                [TagClass(""{0}"")]", pluginStructure.Name);

                BeginTagBlock(streamWriter, pluginStructure);

                streamWriter.WriteLine("}");
            }
        }