private mValue ReadNode(XmlNode xmlNode) { //Indiciate what type of value this is. switch (xmlNode.Name.ToLower()) { case "reflexive": case "structure": case "reflex": case "struct": { //Initialize our instance of a reflexive. mReflexive reflexive = new mReflexive(); //Retrieve the structure's name. reflexive.Name = xmlNode.Attributes["name"].Value; //Retrieve its offset within its parent. reflexive.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Retrieve its chunk size. reflexive.Size = int.Parse(xmlNode.Attributes["size"].Value); //Retrieve its visibility flag. reflexive.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //Initialize the value list for the reflexive reflexive.Values = new List <mValue>(); //Recursively add any nodes that belong to it. for (int i = 0; i < xmlNode.ChildNodes.Count; i++) { //Get our returned value. mValue returnedVal = ReadNode(xmlNode.ChildNodes[i]); //If its not some unknown node that couldnt be read... if (returnedVal.Attributes != mValue.ObjectAttributes.None) { //Then add it to this reflexive value list. reflexive.Values.Add(returnedVal); } } //Return our reflexive return(reflexive); } case "tagref": case "tag": { //Initialize our instance of TagRef mTagRef tagRef = new mTagRef(); //Assign the name tagRef.Name = xmlNode.Attributes["name"].Value; //Assign the offset tagRef.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag tagRef.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(tagRef); } case "ident": case "id": case "tagid": { //Initialize our instance of ident mIdent ident = new mIdent(); //Assign the name ident.Name = xmlNode.Attributes["name"].Value; //Assign the offset ident.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag ident.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(ident); } case "sid": case "stringid": case "stringidentifier": { //Initialize our instance of string mStringID stringID = new mStringID(); //Assign the name stringID.Name = xmlNode.Attributes["name"].Value; //Assign the offset stringID.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag stringID.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(stringID); } case "bitmask8": case "bit8": { //Initialize our instance of bitmask8 mBitmask8 bitmask8 = new mBitmask8(); //Assign the name bitmask8.Name = xmlNode.Attributes["name"].Value; //Assign the offset bitmask8.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag bitmask8.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //Initialize the bitOption list. bitmask8.Options = new List <mBitOption>(); //Loop through the children nodes for options. for (int i = 0; i < xmlNode.ChildNodes.Count; i++) { //if its an option... if (xmlNode.ChildNodes[i].Name.ToLower() == "option") { //then initialize a new instance of option mBitOption bitOption = new mBitOption(); //Get the name of the bit bitOption.Name = xmlNode.ChildNodes[i].Attributes["name"].Value; //Get the bit value bitOption.BitIndex = int.Parse(xmlNode.ChildNodes[i].Attributes["value"].Value); //Add it to the bitList bitmask8.Options.Add(bitOption); } } //return the value return(bitmask8); } case "bitmask16": case "bit16": { //Initialize our instance of bitmask16 mBitmask16 bitmask16 = new mBitmask16(); //Assign the name bitmask16.Name = xmlNode.Attributes["name"].Value; //Assign the offset bitmask16.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag bitmask16.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //Initialize the bitOption list. bitmask16.Options = new List <mBitOption>(); //Loop through the children nodes for options. for (int i = 0; i < xmlNode.ChildNodes.Count; i++) { //if its an option... if (xmlNode.ChildNodes[i].Name.ToLower() == "option") { //then initialize a new instance of option mBitOption bitOption = new mBitOption(); //Get the name of the bit bitOption.Name = xmlNode.ChildNodes[i].Attributes["name"].Value; //Get the bit value bitOption.BitIndex = int.Parse(xmlNode.ChildNodes[i].Attributes["value"].Value); //Add it to the bitList bitmask16.Options.Add(bitOption); } } //return the value return(bitmask16); } case "bitmask32": case "bit32": { //Initialize our instance of bitmask32 mBitmask32 bitmask32 = new mBitmask32(); //Assign the name bitmask32.Name = xmlNode.Attributes["name"].Value; //Assign the offset bitmask32.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag bitmask32.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //Initialize the bitOption list. bitmask32.Options = new List <mBitOption>(); //Loop through the children nodes for options. for (int i = 0; i < xmlNode.ChildNodes.Count; i++) { //if its an option... if (xmlNode.ChildNodes[i].Name.ToLower() == "option") { //then initialize a new instance of option mBitOption bitOption = new mBitOption(); //Get the name of the bit bitOption.Name = xmlNode.ChildNodes[i].Attributes["name"].Value; //Get the bit value bitOption.BitIndex = int.Parse(xmlNode.ChildNodes[i].Attributes["value"].Value); //Add it to the bitList bitmask32.Options.Add(bitOption); } } //return the value return(bitmask32); } case "enum8": { //Initialize our instance of enum8 mEnum8 enum8 = new mEnum8(); //Assign the name enum8.Name = xmlNode.Attributes["name"].Value; //Assign the offset enum8.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag enum8.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //Initialize the enumOption list. enum8.Options = new List <mEnumOption>(); //Loop through the children nodes for options. for (int i = 0; i < xmlNode.ChildNodes.Count; i++) { //if its an option... if (xmlNode.ChildNodes[i].Name.ToLower() == "option") { //then initialize a new instance of option mEnumOption enumOption = new mEnumOption(); //Get the name of the bit enumOption.Name = xmlNode.ChildNodes[i].Attributes["name"].Value; //Get the bit value enumOption.Value = int.Parse(xmlNode.ChildNodes[i].Attributes["value"].Value); //Add it to the bitList enum8.Options.Add(enumOption); } } //return the value return(enum8); } case "enum16": { //Initialize our instance of enum16 mEnum16 enum16 = new mEnum16(); //Assign the name enum16.Name = xmlNode.Attributes["name"].Value; //Assign the offset enum16.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag enum16.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //Initialize the enumOption list. enum16.Options = new List <mEnumOption>(); //Loop through the children nodes for options. for (int i = 0; i < xmlNode.ChildNodes.Count; i++) { //if its an option... if (xmlNode.ChildNodes[i].Name.ToLower() == "option") { //then initialize a new instance of option mEnumOption enumOption = new mEnumOption(); //Get the name of the bit enumOption.Name = xmlNode.ChildNodes[i].Attributes["name"].Value; //Get the bit value enumOption.Value = int.Parse(xmlNode.ChildNodes[i].Attributes["value"].Value); //Add it to the bitList enum16.Options.Add(enumOption); } } //return the value return(enum16); } case "enum32": { //Initialize our instance of enum32 mEnum32 enum32 = new mEnum32(); //Assign the name enum32.Name = xmlNode.Attributes["name"].Value; //Assign the offset enum32.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag enum32.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //Initialize the enumOption list. enum32.Options = new List <mEnumOption>(); //Loop through the children nodes for options. for (int i = 0; i < xmlNode.ChildNodes.Count; i++) { //if its an option... if (xmlNode.ChildNodes[i].Name.ToLower() == "option") { //then initialize a new instance of option mEnumOption enumOption = new mEnumOption(); //Get the name of the bit enumOption.Name = xmlNode.ChildNodes[i].Attributes["name"].Value; //Get the bit value enumOption.Value = int.Parse(xmlNode.ChildNodes[i].Attributes["value"].Value); //Add it to the bitList enum32.Options.Add(enumOption); } } //return the value return(enum32); } case "int8": case "byte": { //Initialize our instance of byte mByte byteVal = new mByte(); //Assign the name byteVal.Name = xmlNode.Attributes["name"].Value; //Assign the offset byteVal.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag byteVal.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(byteVal); } case "int16": case "short": { //Initialize our instance of int16 mInt16 int16Val = new mInt16(); //Assign the name int16Val.Name = xmlNode.Attributes["name"].Value; //Assign the offset int16Val.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag int16Val.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(int16Val); } case "uint16": case "ushort": { //Initialize our instance of uint16 mUInt16 uint16Val = new mUInt16(); //Assign the name uint16Val.Name = xmlNode.Attributes["name"].Value; //Assign the offset uint16Val.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag uint16Val.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(uint16Val); } case "int32": case "long": case "int": { //Initialize our instance of int32 mInt32 int32Val = new mInt32(); //Assign the name int32Val.Name = xmlNode.Attributes["name"].Value; //Assign the offset int32Val.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag int32Val.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(int32Val); } case "uint32": case "ulong": case "uint": { //Initialize our instance of uint32 mUInt32 uint32Val = new mUInt32(); //Assign the name uint32Val.Name = xmlNode.Attributes["name"].Value; //Assign the offset uint32Val.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag uint32Val.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(uint32Val); } case "single": case "float": { //Initialize our instance of float mFloat floatVal = new mFloat(); //Assign the name floatVal.Name = xmlNode.Attributes["name"].Value; //Assign the offset floatVal.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag floatVal.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(floatVal); } case "string32": case "32string": { //Initialize our instance of string32 mString32 string32 = new mString32(); //Assign the name string32.Name = xmlNode.Attributes["name"].Value; //Assign the offset string32.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag string32.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(string32); } case "string256": case "256string": { //Initialize our instance of string32 mString256 string256 = new mString256(); //Assign the name string256.Name = xmlNode.Attributes["name"].Value; //Assign the offset string256.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag string256.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(string256); } case "unic64": case "unicode64": case "64unic": case "64unicode": { //Initialize our instance of unicode64 mUnicode64 unicode64 = new mUnicode64(); //Assign the name unicode64.Name = xmlNode.Attributes["name"].Value; //Assign the offset unicode64.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag unicode64.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(unicode64); } case "unic256": case "unicode256": case "256unic": case "256unicode": { //Initialize our instance of unicode64 mUnicode256 unicode256 = new mUnicode256(); //Assign the name unicode256.Name = xmlNode.Attributes["name"].Value; //Assign the offset unicode256.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag unicode256.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(unicode256); } case "undefined": case "unknown": { //Initialize our instance of undefined mUndefined undefined = new mUndefined(); //Assign the name undefined.Name = xmlNode.Attributes["name"].Value; //Assign the offset undefined.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag undefined.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); //return the value return(undefined); } case "unused": case "blank": { //Initialize our instance of undefined mUnused unused = new mUnused(); //Assign the offset unused.Offset = int.Parse(xmlNode.Attributes["offset"].Value); //Assign the visibility flag unused.Size = int.Parse(xmlNode.Attributes["size"].Value); //return the value return(unused); } } //If all else fails, make a 'none' value. mValue blankVal = new mValue(); blankVal.Attributes = mValue.ObjectAttributes.None; return(blankVal); }
private mValue ReadNode(XmlNode xmlNode) { int num; mColorBlock block2; mBitOption option; mEnumOption option2; string str3 = xmlNode.Name.ToLower(); switch (str3) { case "reflexive": case "structure": case "reflex": case "struct": case "tagblock": case "block": { mTagBlock block = new mTagBlock { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Size = int.Parse(xmlNode.Attributes["size"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value), Values = new List <mValue>() }; for (num = 0; num < xmlNode.ChildNodes.Count; num++) { mValue item = ReadNode(xmlNode.ChildNodes[num]); if (item.Attributes != mValue.ObjectAttributes.None) { block.Values.Add(item); } } return(block); } case "tagdata": case "void": return(new mTagData { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value) }); case "array": case "bytearray": case "bytes": return(new mByteArray { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value), Length = int.Parse(xmlNode.Attributes["length"].Value) }); case "comment": case "note": return(new mComment { Title = xmlNode.Attributes["title"].Value, Description = xmlNode.InnerText.Replace(@"\n", "\n").Replace(@"\t", "\t").Replace(@"\'", "\""), Visible = bool.Parse(xmlNode.Attributes["visible"].Value) }); case "color8": case "color16": case "color32": case "colorf": if (xmlNode.Name.ToLower() != "color8") { if (xmlNode.Name.ToLower() == "color16") { block2 = new mColorBlock16(); } else if (xmlNode.Name.ToLower() == "color32") { block2 = new mColorBlock32(); } else { block2 = new mColorBlockF(); } break; } block2 = new mColorBlock8(); break; case "tagref": case "tag": case "tagid": return(new mTagReference { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value) }); case "sid": case "stringid": case "stringidentifier": return(new mStringID { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value) }); case "bitmask8": case "bit8": { mBitmask8 bitmask = new mBitmask8 { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value), Options = new List <mBitOption>() }; for (num = 0; num < xmlNode.ChildNodes.Count; num++) { if ((xmlNode.ChildNodes[num].Name.ToLower() == "bit") | (xmlNode.ChildNodes[num].Name.ToLower() == "option")) { option = new mBitOption { Name = xmlNode.ChildNodes[num].Attributes["name"].Value }; try { option.BitIndex = int.Parse(xmlNode.ChildNodes[num].Attributes["index"].Value); } catch { option.BitIndex = int.Parse(xmlNode.ChildNodes[num].Attributes["value"].Value); } bitmask.Options.Add(option); } } return(bitmask); } case "bitmask16": case "bit16": { mBitmask16 bitmask2 = new mBitmask16 { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value), Options = new List <mBitOption>() }; for (num = 0; num < xmlNode.ChildNodes.Count; num++) { if ((xmlNode.ChildNodes[num].Name.ToLower() == "bit") | (xmlNode.ChildNodes[num].Name.ToLower() == "option")) { option = new mBitOption { Name = xmlNode.ChildNodes[num].Attributes["name"].Value }; try { option.BitIndex = int.Parse(xmlNode.ChildNodes[num].Attributes["index"].Value); } catch { option.BitIndex = int.Parse(xmlNode.ChildNodes[num].Attributes["value"].Value); } bitmask2.Options.Add(option); } } return(bitmask2); } case "bitmask32": case "bit32": { mBitmask32 bitmask3 = new mBitmask32 { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value), Options = new List <mBitOption>() }; for (num = 0; num < xmlNode.ChildNodes.Count; num++) { if ((xmlNode.ChildNodes[num].Name.ToLower() == "bit") | (xmlNode.ChildNodes[num].Name.ToLower() == "option")) { option = new mBitOption { Name = xmlNode.ChildNodes[num].Attributes["name"].Value }; try { option.BitIndex = int.Parse(xmlNode.ChildNodes[num].Attributes["index"].Value); } catch { option.BitIndex = int.Parse(xmlNode.ChildNodes[num].Attributes["value"].Value); } bitmask3.Options.Add(option); } } return(bitmask3); } case "enum8": { mEnum8 enum2 = new mEnum8 { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value), Options = new List <mEnumOption>() }; for (num = 0; num < xmlNode.ChildNodes.Count; num++) { if (xmlNode.ChildNodes[num].Name.ToLower() == "option") { option2 = new mEnumOption { Name = xmlNode.ChildNodes[num].Attributes["name"].Value, Value = int.Parse(xmlNode.ChildNodes[num].Attributes["value"].Value) }; enum2.Options.Add(option2); } } return(enum2); } case "enum16": { mEnum16 enum3 = new mEnum16 { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value), Options = new List <mEnumOption>() }; for (num = 0; num < xmlNode.ChildNodes.Count; num++) { if (xmlNode.ChildNodes[num].Name.ToLower() == "option") { option2 = new mEnumOption { Name = xmlNode.ChildNodes[num].Attributes["name"].Value, Value = int.Parse(xmlNode.ChildNodes[num].Attributes["value"].Value) }; enum3.Options.Add(option2); } } return(enum3); } case "enum32": { mEnum32 enum4 = new mEnum32 { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value), Options = new List <mEnumOption>() }; for (num = 0; num < xmlNode.ChildNodes.Count; num++) { if (xmlNode.ChildNodes[num].Name.ToLower() == "option") { option2 = new mEnumOption { Name = xmlNode.ChildNodes[num].Attributes["name"].Value, Value = int.Parse(xmlNode.ChildNodes[num].Attributes["value"].Value) }; enum4.Options.Add(option2); } } return(enum4); } case "int8": case "byte": return(new mByte { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value) }); case "int16": case "short": return(new mInt16 { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value) }); case "uint16": case "ushort": return(new mUInt16 { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value) }); case "int32": case "long": case "int": return(new mInt32 { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value) }); case "uint32": case "ulong": case "uint": return(new mUInt32 { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value) }); case "single": case "float": return(new mFloat { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value) }); case "string": case "str": return(new mString { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value), Length = int.Parse(xmlNode.Attributes["length"].Value) }); case "unic": case "unicode": return(new mUnicode { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value), Length = int.Parse(xmlNode.Attributes["length"].Value) }); case "undefined": case "unknown": return(new mUndefined { Name = xmlNode.Attributes["name"].Value, Offset = int.Parse(xmlNode.Attributes["offset"].Value), Visible = bool.Parse(xmlNode.Attributes["visible"].Value) }); case "unused": case "blank": return(new mUnused { Offset = int.Parse(xmlNode.Attributes["offset"].Value), Size = int.Parse(xmlNode.Attributes["size"].Value) }); default: return(new mValue { Attributes = mValue.ObjectAttributes.None }); } block2.Name = xmlNode.Attributes["name"].Value; block2.Offset = int.Parse(xmlNode.Attributes["offset"].Value); block2.Visible = bool.Parse(xmlNode.Attributes["visible"].Value); block2.Real_Color = bool.Parse(xmlNode.Attributes["real"].Value); string str = xmlNode.Attributes["order"].Value; foreach (char ch in str) { str3 = ch.ToString().ToUpper(); if (str3 != null) { if (str3 != "R") { if (str3 == "G") { goto Label_07F1; } if (str3 == "B") { goto Label_0802; } if (str3 == "A") { goto Label_0813; } if (str3 == "N") { goto Label_0824; } } else { block2.Color_Order.Add(ColorBlockPart.Red); } } continue; Label_07F1: block2.Color_Order.Add(ColorBlockPart.Green); continue; Label_0802: block2.Color_Order.Add(ColorBlockPart.Blue); continue; Label_0813: block2.Color_Order.Add(ColorBlockPart.Alpha); continue; Label_0824: block2.Color_Order.Add(ColorBlockPart.None); } return(block2); }