Example #1
0
        public static XmbElement Deserialize(XElement xmlElement, ref IList <string> elementNames,
                                             ref IList <string> attributeNames)
        {
            int nameId;

            if (elementNames.Contains(xmlElement.Name.LocalName))
            {
                nameId = elementNames.IndexOf(xmlElement.Name.LocalName);
            }
            else
            {
                elementNames.Add(xmlElement.Name.LocalName);
                nameId = elementNames.Count - 1;
            }

            var value    = string.Empty;
            var textNode = xmlElement.Nodes().FirstOrDefault(key => key.NodeType == XmlNodeType.Text);

            if (textNode != null)
            {
                value = XmlFileUtils.FromXmlString(textNode.ToString());
            }

            IList <XmbAttribute> attributes = new List <XmbAttribute>();

            if (xmlElement.HasAttributes)
            {
                foreach (var attribute in xmlElement.Attributes())
                {
                    attributes.Add(XmbAttribute.Deserialize(attribute, ref attributeNames));
                }
            }

            IList <XmbElement> elements = new List <XmbElement>();

            if (xmlElement.HasElements)
            {
                foreach (var element in xmlElement.Elements())
                {
                    elements.Add(Deserialize(element, ref elementNames, ref attributeNames));
                }
            }

            var lineNumber = ((IXmlLineInfo)xmlElement).LineNumber;

            return(new XmbElement(nameId, value, lineNumber, (List <XmbElement>)elements,
                                  (List <XmbAttribute>)attributes));
        }
Example #2
0
        public static XmbElement Deserialize(BinaryReader reader)
        {
            //HEAD
            var head = new string(reader.ReadChars(2));

            if (head != "XN")
            {
                throw new Exception("Invalid Node (head does not equal XN)");
            }

            reader.ReadInt32(); //DataLength

            //BODY
            var txtLength  = reader.ReadUInt32();
            var text       = Encoding.Unicode.GetString(reader.ReadBytes((int)txtLength * 2));
            var nameId     = reader.ReadInt32();
            var lineNumber = reader.ReadInt32(); //LineNum

            var attrs = new List <XmbAttribute>();
            var num1  = reader.ReadInt32();

            for (var index1 = 0; num1 > index1; ++index1)
            {
                var attribute = XmbAttribute.Deserialize(reader);
                attrs.Add(attribute);
            }

            var childrenElements = new List <XmbElement>();
            var num2             = reader.ReadInt32();

            for (var index = 0; num2 > index; ++index)
            {
                var childrenElement = Deserialize(reader);
                childrenElements.Add(childrenElement);
            }

            return(new XmbElement(nameId, text, lineNumber, childrenElements, attrs));
        }
        public static XmbElement DeserializeXmbElement(BinaryReader reader, IReadOnlyList <string> elementNames,
                                                       IReadOnlyList <string> attrNames)
        {
            var head = new string(reader.ReadChars(2));

            if (head != "XN")
            {
                throw new Exception("Invalid Node (head does not equal XN)");
            }

            var unk0      = reader.ReadInt32();
            var txtLength = reader.ReadUInt32();
            var text      = Encoding.Unicode.GetString(reader.ReadBytes((int)txtLength * 2));
            var name      = elementNames[reader.ReadInt32()];
            var lineNum   = reader.ReadInt32();
            var attrs     = new List <XmbAttribute>();
            var num1      = reader.ReadInt32();

            for (var index1 = 0; num1 > index1; ++index1)
            {
                var index2       = reader.ReadInt32();
                var valueLength  = reader.ReadUInt32();
                var value        = Encoding.Unicode.GetString(reader.ReadBytes((int)valueLength * 2));
                var xmbAttribute = new XmbAttribute(attrNames[index2], value);
                attrs.Add(xmbAttribute);
            }
            var childs = new List <XmbElement>();
            var num2   = reader.ReadInt32();

            for (var index = 0; num2 > index; ++index)
            {
                var node = DeserializeXmbElement(reader, elementNames, attrNames);
                childs.Add(node);
            }

            return(new XmbElement(unk0, head, name, lineNum, text, childs, attrs));
        }