Ejemplo n.º 1
0
 /// <summary>
 /// Reading ctor
 /// </summary>
 protected Node(ResReader reader, XmlTree tree, ChunkTypes expectedType)
     : base(reader, expectedType)
 {
     this.tree = tree;
     LineNumber = reader.ReadInt32();
     Comment = StringPoolRef.Read(reader, tree.StringPool);
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Reading ctor
 /// </summary>
 protected Node(ResReader reader, XmlTree tree, ChunkTypes expectedType)
     : base(reader, expectedType)
 {
     this.tree  = tree;
     LineNumber = reader.ReadInt32();
     Comment    = StringPoolRef.Read(reader, tree.StringPool);
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Creation ctor
 /// </summary>
 internal Attribute(XmlTree tree, XAttribute attr)
 {
     this.tree = tree;
     Namespace = string.IsNullOrEmpty(attr.Name.NamespaceName) ? null : attr.Name.NamespaceName;
     Name      = attr.Name.LocalName;
     RawValue  = attr.Value;
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Creation ctor
 /// </summary>
 internal Attribute(XmlTree tree, XAttribute attr)
 {
     this.tree = tree;
     Namespace = string.IsNullOrEmpty(attr.Name.NamespaceName) ? null : attr.Name.NamespaceName;
     Name = attr.Name.LocalName;
     RawValue = attr.Value;
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Reading ctor
 /// </summary>
 internal StartNamespace(XmlTree tree, XAttribute attribute)
     : base(tree, ChunkTypes.RES_XML_START_NAMESPACE_TYPE)
 {
     if (!attribute.IsNamespaceDeclaration)
         throw new ArgumentException("Namespace declaration expected");
     Uri = attribute.Value;
     Prefix = attribute.Name.LocalName;
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Read ctor
 /// </summary>
 internal Attribute(ResReader reader, XmlTree tree)
 {
     this.tree = tree;
     Namespace = StringPoolRef.Read(reader, tree.StringPool);
     Name = StringPoolRef.Read(reader, tree.StringPool);
     RawValue = StringPoolRef.Read(reader, tree.StringPool);
     TypedValue = new Value(reader);
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Read ctor
 /// </summary>
 internal Attribute(ResReader reader, XmlTree tree)
 {
     this.tree  = tree;
     Namespace  = StringPoolRef.Read(reader, tree.StringPool);
     Name       = StringPoolRef.Read(reader, tree.StringPool);
     RawValue   = StringPoolRef.Read(reader, tree.StringPool);
     TypedValue = new Value(reader);
 }
Ejemplo n.º 8
0
 public void CreateXmlTreeTest()
 {
     var doc = new XDocument(
         new XElement("root"));
     var xml = new XmlTree(doc);
     var stream = new MemoryStream();
     var writer = new ResWriter(stream);
     xml.Write(writer);
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Reading ctor
 /// </summary>
 internal StartNamespace(XmlTree tree, XAttribute attribute)
     : base(tree, ChunkTypes.RES_XML_START_NAMESPACE_TYPE)
 {
     if (!attribute.IsNamespaceDeclaration)
     {
         throw new ArgumentException("Namespace declaration expected");
     }
     Uri    = attribute.Value;
     Prefix = attribute.Name.LocalName;
 }
Ejemplo n.º 10
0
        public void LoadAndCreateTest()
        {
            var xml = new XmlTree(new MemoryStream(TestResource.AndroidManifest));
            var pool = xml.StringPool;

            var stream = new MemoryStream();
            var writer = new ResWriter(stream);
            pool.Write(writer);

            stream.Position = 0;
            var pool2 = new StringPool(new ResReader(stream));

            Assert.AreEqual(pool.Count, pool2.Count);
        }
Ejemplo n.º 11
0
            /// <summary>
            /// Reading ctor
            /// </summary>
            internal StartElement(ResReader reader, XmlTree tree)
                : base(reader, tree, ChunkTypes.RES_XML_START_ELEMENT_TYPE)
            {
                var attributeStart = reader.ReadUInt16();
                var attributeSize  = reader.ReadUInt16();
                var attributeCount = reader.ReadUInt16();
                var id             = reader.ReadUInt16();
                var classIndex     = reader.ReadUInt16();
                var styleIndex     = reader.ReadUInt16();

                for (var i = 0; i < attributeCount; i++)
                {
                    attributes.Add(new Attribute(reader, tree));
                }
            }
Ejemplo n.º 12
0
            /// <summary>
            /// Reading ctor
            /// </summary>
            internal StartElement(ResReader reader, XmlTree tree)
                : base(reader, tree, ChunkTypes.RES_XML_START_ELEMENT_TYPE)
            {
                var attributeStart = reader.ReadUInt16();
                var attributeSize = reader.ReadUInt16();
                var attributeCount = reader.ReadUInt16();
                var id = reader.ReadUInt16();
                var classIndex = reader.ReadUInt16();
                var styleIndex = reader.ReadUInt16();

                for (var i = 0; i < attributeCount; i++)
                {
                    attributes.Add(new Attribute(reader, tree));
                }
            }
Ejemplo n.º 13
0
            /// <summary>
            /// Reading ctor
            /// </summary>
            internal StartElement(XmlTree tree, XElement element)
                : base(tree, ChunkTypes.RES_XML_START_ELEMENT_TYPE)
            {
                Name = element.Name.LocalName;
                Namespace = string.IsNullOrEmpty(element.Name.NamespaceName) ? null : element.Name.NamespaceName;
                foreach (var attr in element.Attributes().Where(x => !x.IsNamespaceDeclaration))
                {
                    attributes.Add(new Attribute(tree, attr));
                }

                IXmlLineInfo lineInfo = element;
                if (lineInfo.HasLineInfo())
                {
                    LineNumber = lineInfo.LineNumber;
                }
            }
Ejemplo n.º 14
0
        public void LoadAndCreateXmlTest()
        {
            var xml = new XmlTree(new MemoryStream(TestResource.AndroidManifest));
            var doc = xml.AsXml();

            var xml2 = new XmlTree(doc);
            var stream = new MemoryStream();
            var writer = new ResWriter(stream);
            xml2.Write(writer);

            stream.Position = 0;
            var xml3 = new XmlTree(stream);
            var doc3 = xml3.AsXml();

            Assert.AreEqual(doc.ToString(), doc3.ToString());
        }
Ejemplo n.º 15
0
            /// <summary>
            /// Reading ctor
            /// </summary>
            internal StartElement(XmlTree tree, XElement element)
                : base(tree, ChunkTypes.RES_XML_START_ELEMENT_TYPE)
            {
                Name      = element.Name.LocalName;
                Namespace = string.IsNullOrEmpty(element.Name.NamespaceName) ? null : element.Name.NamespaceName;
                foreach (var attr in element.Attributes().Where(x => !x.IsNamespaceDeclaration))
                {
                    attributes.Add(new Attribute(tree, attr));
                }

                IXmlLineInfo lineInfo = element;

                if (lineInfo.HasLineInfo())
                {
                    LineNumber = lineInfo.LineNumber;
                }
            }
Ejemplo n.º 16
0
        /// <summary>
        /// Default ctor
        /// </summary>
        public ResourceIdMap(Table frameworkResources, XmlTree manifest)
        {
            var package       = frameworkResources.Packages.First();
            var resourceNames = package.KeyStrings;

            for (var i = 0; i < resourceNames.Count; i++)
            {
                var name = XName.Get(resourceNames[i], AndroidSchema);
                idMap.Add(name, new Entry(MakeId(0, 0, i)));
            }

            // Find attribute types
            manifest.VisitAttributes(a => {
                Entry entry;
                if (idMap.TryGetValue(a.XName, out entry))
                {
                    entry.ValueType = a.TypedValue.Type;
                }
            });
        }
Ejemplo n.º 17
0
        /// <summary>
        /// Default ctor
        /// </summary>
        public ResourceIdMap(Table frameworkResources, XmlTree manifest)
        {
            var package = frameworkResources.Packages.First();
            var resourceNames = package.KeyStrings;

            for (var i = 0; i < resourceNames.Count; i++)
            {
                var name = XName.Get(resourceNames[i], AndroidSchema);
                idMap.Add(name, new Entry(MakeId(0, 0, i)));
            }

            // Find attribute types
            manifest.VisitAttributes(a => {
                Entry entry;
                if (idMap.TryGetValue(a.XName, out entry))
                {
                    entry.ValueType = a.TypedValue.Type;
                }
            });

        }
Ejemplo n.º 18
0
 /// <summary>
 /// Creation ctor
 /// </summary>
 protected Node(XmlTree tree, ChunkTypes expectedType)
     : base(expectedType)
 {
     this.tree = tree;
 }
Ejemplo n.º 19
0
 /// <summary>
 /// Reading ctor
 /// </summary>
 internal EndNamespace(ResReader reader, XmlTree tree)
     : base(reader, tree, ChunkTypes.RES_XML_END_NAMESPACE_TYPE)
 {
 }
Ejemplo n.º 20
0
 /// <summary>
 /// Creation ctor
 /// </summary>
 internal EndNamespace(XmlTree tree, StartNamespace start)
     : base(tree, ChunkTypes.RES_XML_END_NAMESPACE_TYPE)
 {
     Prefix = start.Prefix;
     Uri = start.Uri;
 }
Ejemplo n.º 21
0
 /// <summary>
 /// Reading ctor
 /// </summary>
 internal StartNamespace(ResReader reader, XmlTree tree)
     : base(reader, tree, ChunkTypes.RES_XML_START_NAMESPACE_TYPE)
 {
 }
Ejemplo n.º 22
0
 /// <summary>
 /// Creation ctor
 /// </summary>
 protected Node(XmlTree tree, ChunkTypes expectedType)
     : base(expectedType)
 {
     this.tree = tree;
 }
Ejemplo n.º 23
0
 /// <summary>
 /// Creation ctor
 /// </summary>
 internal EndElement(XmlTree tree, StartElement start)
     : base(tree, ChunkTypes.RES_XML_END_ELEMENT_TYPE)
 {
     Name      = start.Name;
     Namespace = start.Namespace;
 }
Ejemplo n.º 24
0
        /// <summary>
        /// Gets the data as string representation of the typed data.
        /// </summary>
        public string GetValue(XmlTree tree)
        {
            switch (type)
            {
                    // Contains no data.
                case Types.TYPE_NULL:
                    return null;
         
                    // The 'data' holds a ResTable_ref, a reference to another resource
                    // table entry.
                case Types.TYPE_REFERENCE:
                    return data.ToString();

                    // The 'data' holds an attribute resource identifier.
                case Types.TYPE_ATTRIBUTE:
                    
                    // The 'data' holds an index into the containing resource table's
                    // global value string pool.
                case Types.TYPE_STRING:
                    return tree.StringPool[data];

                    // The 'data' holds a single-precision floating point number.
                case Types.TYPE_FLOAT:
                        return BitConverter.ToSingle(BitConverter.GetBytes(data), 0).ToString();

                    // The 'data' holds a complex number encoding a dimension value,
                    // such as "100in".
                case Types.TYPE_DIMENSION:

                    // The 'data' holds a complex number encoding a fraction of a
                    // container.
                case Types.TYPE_FRACTION:

                    // The 'data' is a raw integer value of the form n..n.
                case Types.TYPE_INT_DEC:
                    return data.ToString();
                    // The 'data' is a raw integer value of the form 0xn..n.
                case Types.TYPE_INT_HEX:
                    return "0x" + data.ToString("X");
                    // The 'data' is either 0 or 1, for input "false" or "true" respectively.
                case Types.TYPE_INT_BOOLEAN:
                    return (data == 0) ? "false" : "true";

                    // The 'data' is a raw integer value of the form #aarrggbb.
                case Types.TYPE_INT_COLOR_ARGB8:
                    return string.Format("#{0:X8}", data);
                    // The 'data' is a raw integer value of the form #rrggbb.
                case Types.TYPE_INT_COLOR_RGB8:
                    return string.Format("#{0:X6}", data);
                    // The 'data' is a raw integer value of the form #argb.
                case Types.TYPE_INT_COLOR_ARGB4:
                    {
                        var all = data.ToString("X8");
                        return "#" + all[0] + all[2] + all[4] + all[6];
                    }
                    // The 'data' is a raw integer value of the form #rgb.
                case Types.TYPE_INT_COLOR_RGB4:
                    {
                        var all = data.ToString("X6");
                        return "#" + all[0] + all[2] + all[4];
                    }

                default:
                    return string.Format("unknown type {0}", (int) type);
            }
        }
Ejemplo n.º 25
0
 /// <summary>
 /// Reading ctor
 /// </summary>
 internal CData(ResReader reader, XmlTree tree)
     : base(reader, tree, ChunkTypes.RES_XML_CDATA_TYPE)
 {
     Data      = StringPoolRef.Read(reader, tree.StringPool);
     TypedData = new Value(reader);
 }
Ejemplo n.º 26
0
 /// <summary>
 /// Creation ctor
 /// </summary>
 internal CData(XmlTree tree, XText text)
     : base(tree, ChunkTypes.RES_XML_CDATA_TYPE)
 {
     Data      = text.Value;
     TypedData = new Value(Value.Types.TYPE_NULL, 0);
 }
Ejemplo n.º 27
0
 /// <summary>
 /// Reading ctor
 /// </summary>
 internal StartNamespace(ResReader reader, XmlTree tree)
     : base(reader, tree, ChunkTypes.RES_XML_START_NAMESPACE_TYPE)
 {
 }
Ejemplo n.º 28
0
 /// <summary>
 /// Creation ctor
 /// </summary>
 internal CData(XmlTree tree, XText text)
     : base(tree, ChunkTypes.RES_XML_CDATA_TYPE)
 {
     Data = text.Value;
     TypedData = new Value(Value.Types.TYPE_NULL, 0);
 }
Ejemplo n.º 29
0
 /// <summary>
 /// Reading ctor
 /// </summary>
 internal EndNamespace(ResReader reader, XmlTree tree)
     : base(reader, tree, ChunkTypes.RES_XML_END_NAMESPACE_TYPE)
 {
 }
Ejemplo n.º 30
0
        public void LoadXmlTest()
        {
            var xml = new XmlTree(new MemoryStream(TestResource.AndroidManifest));

            var doc = xml.AsXml();
        }
Ejemplo n.º 31
0
 /// <summary>
 /// Reading ctor
 /// </summary>
 internal EndElement(ResReader reader, XmlTree tree)
     : base(reader, tree, ChunkTypes.RES_XML_END_ELEMENT_TYPE)
 {
 }
Ejemplo n.º 32
0
 /// <summary>
 /// Load the text to display
 /// </summary>
 protected override string LoadText()
 {
     var raw = Load();
     var xmlTree = new XmlTree(new MemoryStream(raw));
     return xmlTree.AsXml().ToString();
 }
Ejemplo n.º 33
0
 /// <summary>
 /// Creation ctor
 /// </summary>
 internal EndElement(XmlTree tree, StartElement start)
     : base(tree, ChunkTypes.RES_XML_END_ELEMENT_TYPE)
 {
     Name = start.Name;
     Namespace = start.Namespace;
 }
Ejemplo n.º 34
0
        /// <summary>
        /// Gets the data as string representation of the typed data.
        /// </summary>
        public string GetValue(XmlTree tree)
        {
            switch (type)
            {
            // Contains no data.
            case Types.TYPE_NULL:
                return(null);

            // The 'data' holds a ResTable_ref, a reference to another resource
            // table entry.
            case Types.TYPE_REFERENCE:
                return(data.ToString());

            // The 'data' holds an attribute resource identifier.
            case Types.TYPE_ATTRIBUTE:

            // The 'data' holds an index into the containing resource table's
            // global value string pool.
            case Types.TYPE_STRING:
                return(tree.StringPool[data]);

            // The 'data' holds a single-precision floating point number.
            case Types.TYPE_FLOAT:
                return(BitConverter.ToSingle(BitConverter.GetBytes(data), 0).ToString());

            // The 'data' holds a complex number encoding a dimension value,
            // such as "100in".
            case Types.TYPE_DIMENSION:

            // The 'data' holds a complex number encoding a fraction of a
            // container.
            case Types.TYPE_FRACTION:

            // The 'data' is a raw integer value of the form n..n.
            case Types.TYPE_INT_DEC:
                return(data.ToString());

            // The 'data' is a raw integer value of the form 0xn..n.
            case Types.TYPE_INT_HEX:
                return("0x" + data.ToString("X"));

            // The 'data' is either 0 or 1, for input "false" or "true" respectively.
            case Types.TYPE_INT_BOOLEAN:
                return((data == 0) ? "false" : "true");

            // The 'data' is a raw integer value of the form #aarrggbb.
            case Types.TYPE_INT_COLOR_ARGB8:
                return(string.Format("#{0:X8}", data));

            // The 'data' is a raw integer value of the form #rrggbb.
            case Types.TYPE_INT_COLOR_RGB8:
                return(string.Format("#{0:X6}", data));

            // The 'data' is a raw integer value of the form #argb.
            case Types.TYPE_INT_COLOR_ARGB4:
            {
                var all = data.ToString("X8");
                return("#" + all[0] + all[2] + all[4] + all[6]);
            }

            // The 'data' is a raw integer value of the form #rgb.
            case Types.TYPE_INT_COLOR_RGB4:
            {
                var all = data.ToString("X6");
                return("#" + all[0] + all[2] + all[4]);
            }

            default:
                return(string.Format("unknown type {0}", (int)type));
            }
        }
Ejemplo n.º 35
0
 /// <summary>
 /// Reading ctor
 /// </summary>
 internal CData(ResReader reader, XmlTree tree)
     : base(reader, tree, ChunkTypes.RES_XML_CDATA_TYPE)
 {
     Data = StringPoolRef.Read(reader, tree.StringPool);
     TypedData = new Value(reader);
 }
Ejemplo n.º 36
0
 /// <summary>
 /// Reading ctor
 /// </summary>
 internal EndElement(ResReader reader, XmlTree tree)
     : base(reader, tree, ChunkTypes.RES_XML_END_ELEMENT_TYPE)
 {
 }
Ejemplo n.º 37
0
 /// <summary>
 /// Creation ctor
 /// </summary>
 internal EndNamespace(XmlTree tree, StartNamespace start)
     : base(tree, ChunkTypes.RES_XML_END_NAMESPACE_TYPE)
 {
     Prefix = start.Prefix;
     Uri    = start.Uri;
 }