コード例 #1
0
            void AttributesToXml(XmbFile xmb, XmlDocument doc, XmlElement e)
            {
                if (Attributes.Count > 0)
                {
                    foreach (var kv in Attributes)
                    {
                        string k = xmb.ToString(kv.Key);
                        string v = xmb.ToString(kv.Value);

                        var attr = doc.CreateAttribute(k);
                        attr.Value = v;

                        // #HACK avoids exceptions like:
                        // "The prefix '' cannot be redefined from '' to 'http://www.w3.org/2000/09/xmldsig#' within the same start element tag."
                        // for XML files that weren't meant for the game but were transformed to XMB anyway
                        if (string.CompareOrdinal(k, "xmlns") == 0)
                        {
                            var comment = doc.CreateComment(attr.OuterXml);
                            e.AppendChild(comment);
                            continue;
                        }

                        e.Attributes.Append(attr);
                    }
                }
            }
コード例 #2
0
 void InnerTextToXml(XmbFile xmb, XmlDocument doc, XmlElement e)
 {
     if (!InnerTextVariant.IsEmpty)
     {
         var text = doc.CreateTextNode(xmb.ToString(InnerTextVariant));
         e.AppendChild(text);
     }
 }
コード例 #3
0
            void ChildrenToXml(XmbFile xmb, XmlDocument doc, XmlElement e)
            {
                if (ChildrenIndices.Count > 0)
                {
                    foreach (int x in ChildrenIndices)
                    {
                        var element = xmb.mElements[x];

                        element.ToXml(xmb, doc, e);
                    }
                }
            }
コード例 #4
0
            public XmlElement ToXml(XmbFile xmb, XmlDocument doc, XmlElement root)
            {
                var e = doc.CreateElement(xmb.ToString(NameVariant));

                if (root != null)
                {
                    root.AppendChild(e);
                }

                AttributesToXml(xmb, doc, e);
                ChildrenToXml(xmb, doc, e);
                InnerTextToXml(xmb, doc, e);

                return(e);
            }
コード例 #5
0
            public void ReadAttributes(XmbFile xmb, IO.EndianReader s)
            {
                if (mAttributesOffset.IsInvalidHandle)
                {
                    return;
                }

                s.Seek((long)mAttributesOffset);
                for (int x = 0; x < Attributes.Capacity; x++)
                {
                    XmbVariant k; XmbVariantSerialization.Read(s, out k);
                    XmbVariant v; XmbVariantSerialization.Read(s, out v);

                    var kv = new KeyValuePair <XmbVariant, XmbVariant>(k, v);
                    Attributes.Add(kv);

                    if (k.HasUnicodeData || v.HasUnicodeData)
                    {
                        xmb.mHasUnicodeStrings = true;
                    }
                }
            }
コード例 #6
0
            public void Read(XmbFile xmb, XmbFileContext xmbContext, IO.EndianReader s)
            {
                s.Read(out RootElementIndex);
                XmbVariantSerialization.Read(s, out NameVariant);
                XmbVariantSerialization.Read(s, out InnerTextVariant);
                if (xmbContext.PointerSize == Shell.ProcessorSize.x64)
                {
                    s.Pad32();
                }

                #region Attributes header
                int count;
                s.Read(out count);
                if (xmbContext.PointerSize == Shell.ProcessorSize.x64)
                {
                    s.Pad32();
                }
                s.ReadVirtualAddress(out mAttributesOffset);
                Attributes = new List <KeyValuePair <XmbVariant, XmbVariant> >(count);
                #endregion

                #region Children header
                s.Read(out count);
                if (xmbContext.PointerSize == Shell.ProcessorSize.x64)
                {
                    s.Pad32();
                }
                s.ReadVirtualAddress(out mChildrenOffset);
                ChildrenIndices = new List <int>(count);
                #endregion

                if (NameVariant.HasUnicodeData || InnerTextVariant.HasUnicodeData)
                {
                    xmb.mHasUnicodeStrings = true;
                }
            }