예제 #1
0
 /// <summary>
 /// Write the header of this chunk.
 /// Always call the base method first.
 /// </summary>
 protected sealed override void WriteHeader(ResWriter writer)
 {
     base.WriteHeader(writer);
     writer.WriteInt32(LineNumber);
     StringPoolRef.Write(writer, tree.StringPool, Comment);
     // Extended data (in derived types) is not part of the header
 }
예제 #2
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);
 }
예제 #3
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);
        }
예제 #4
0
            /// <summary>
            /// Write the header of this chunk.
            /// Always call the base method first.
            /// </summary>
            protected override void WriteHeader(ResWriter writer)
            {
                var startPosition = writer.Position;
                base.WriteHeader(writer);
                writer.WriteByte(parent.Id);
                writer.WriteByte(0); // res0
                writer.WriteUInt16(0); // res1
                writer.WriteInt32(parent.EntryCount); // entryCount
                var entriesStartMark = writer.MarkInt32(); // entriesStart
                configuration.Write(writer);

                // Patch entriesStart
                entriesStartMark.Value = (writer.Position - startPosition) + (parent.EntryCount * 4);
            }
예제 #5
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);
        }
예제 #6
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);
        }
예제 #7
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());
        }
예제 #8
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());
        }
예제 #9
0
 /// <summary>
 /// Write helper
 /// </summary>
 internal static void Write(ResWriter writer, int value)
 {
     writer.WriteInt32(value);
 }
예제 #10
0
            /// <summary>
            /// Write the data of this chunk.
            /// </summary>
            protected override void WriteData(ResWriter writer)
            {
                base.WriteData(writer);
                typeStringsMark.Value = writer.Position - headerStartPosition;
                typeStrings.Write(writer);
                keyStringsMark.Value = writer.Position - headerStartPosition;
                keyStrings.Write(writer);

                // Write typeSpecs and types
                foreach (var typeSpec in typeSpecs)
                {
                    typeSpec.Write(writer);

                    foreach (var typeAndFlags in typeSpec.Types)
                    {
                        typeAndFlags.Write(writer);
                    }
                }
            }
예제 #11
0
 /// <summary>
 /// Write the header of this chunk.
 /// Always call the base method first.
 /// </summary>
 protected override void WriteHeader(ResWriter writer)
 {
     headerStartPosition = writer.Position;
     base.WriteHeader(writer);
     writer.WriteInt32(id);
     writer.WriteFixedLenghtUnicodeString(name, 128);
     typeStringsMark = writer.MarkInt32(); 
     writer.WriteInt32(typeStrings.Count); 
     keyStringsMark = writer.MarkInt32(); 
     writer.WriteInt32(KeyStrings.Count); 
 }
예제 #12
0
        /// <summary>
        /// Write helper
        /// </summary>
        internal static void Write(ResWriter writer, StringPool pool, string value, int resourceId = -1)
        {
            var index = (value == null) ? -1 : pool.Get(value, resourceId);

            writer.WriteInt32(index);
        }
예제 #13
0
 /// <summary>
 /// Write the data of this chunk.
 /// </summary>
 protected override void WriteData(ResWriter writer)
 {
     base.WriteData(writer);
     StringPoolRef.Write(writer, Tree.StringPool, Namespace);
     StringPoolRef.Write(writer, Tree.StringPool, Name);
 }
예제 #14
0
 /// <summary>
 /// Write the data of this chunk.
 /// </summary>
 protected override void WriteData(ResWriter writer)
 {
     base.WriteData(writer);
     writer.WriteIntArray(resourceIds.ToArray());
 }
예제 #15
0
 /// <summary>
 /// Write helper
 /// </summary>
 internal static void Write(ResWriter writer, StringPool pool, string value, int resourceId = -1)
 {
     var index = (value == null) ? -1 : pool.Get(value, resourceId);
     writer.WriteInt32(index);
 }
예제 #16
0
 /// <summary>
 /// Default ctor
 /// </summary>
 protected AbstractMark(ResWriter writer)
 {
     this.writer = writer;
     position    = writer.Stream.Position;
     Write(writer, default(T));
 }
예제 #17
0
파일: Table.cs 프로젝트: Xtremrules/dot42
 /// <summary>
 /// Write the header of this chunk.
 /// Always call the base method first.
 /// </summary>
 protected override void WriteHeader(ResWriter writer)
 {
     base.WriteHeader(writer);
     writer.WriteInt32(packages.Count); // packageCount
 }
예제 #18
0
 /// <summary>
 /// Write the header of this chunk.
 /// Always call the base method first.
 /// </summary>
 protected override void WriteHeader(ResWriter writer)
 {
     base.WriteHeader(writer);
     writer.WriteByte(id);
     writer.WriteByte(0); // res0
     writer.WriteUInt16(0); // res1
     writer.WriteInt32(entries.Count); // entryCount
 }
예제 #19
0
 /// <summary>
 /// Write the data of this chunk.
 /// </summary>
 protected override void WriteData(ResWriter writer)
 {
     base.WriteData(writer);
     var flags = entries.Select(x => x.Flags).ToArray();
     writer.WriteIntArray(flags.ToArray());
 }
예제 #20
0
파일: Table.cs 프로젝트: Xtremrules/dot42
 /// <summary>
 /// Write the data of this chunk.
 /// </summary>
 protected override void WriteData(ResWriter writer)
 {
     base.WriteData(writer);
     strings.Write(writer);
     packages.ForEach(x => x.Write(writer));
 }
예제 #21
0
 /// <summary>
 /// Write helper
 /// </summary>
 internal static void Write(ResWriter writer, int value)
 {
     writer.WriteInt32(value);
 }
예제 #22
0
 /// <summary>
 /// Write this entry.
 /// </summary>
 internal override void Write(ResWriter writer)
 {
     base.Write(writer);
     value.Write(writer);
 }
예제 #23
0
 /// <summary>
 /// Write this attribute.
 /// </summary>
 internal void Write(ResWriter writer)
 {
     StringPoolRef.Write(writer, tree.StringPool, Namespace);
     StringPoolRef.Write(writer, tree.StringPool, Name, resourceId);
     StringPoolRef.Write(writer, tree.StringPool, RawValue);
     var value = TypedValue ?? new Value(Value.Types.TYPE_STRING, tree.StringPool.Get(RawValue, -1));
     value.Write(writer);
 }
예제 #24
0
파일: Value.cs 프로젝트: Xtremrules/dot42
 /// <summary>
 /// Write this chunk.
 /// </summary>
 public void Write(ResWriter writer)
 {
     var size = 8;
     writer.WriteUInt16(size);
     writer.Fill(1); // res0
     writer.WriteByte((int) type);
     writer.WriteInt32(data);
 }
예제 #25
0
 /// <summary>
 /// Write the data of this chunk.
 /// </summary>
 protected override void WriteData(ResWriter writer)
 {
     base.WriteData(writer);
     writer.WriteUInt16(20); // attributeStart
     writer.WriteUInt16(20); // attributeSize
     writer.WriteUInt16(attributes.Count); // attributeCount
     writer.WriteUInt16(IndexOf("id"));
     writer.WriteUInt16(IndexOf("class"));
     writer.WriteUInt16(IndexOf("style"));
     foreach (var attr in attributes)
     {
         attr.Write(writer);
     }
 }
예제 #26
0
 /// <summary>
 /// Write the data of this chunk.
 /// </summary>
 protected override void WriteData(ResWriter writer)
 {
     base.WriteData(writer);
     StringPoolRef.Write(writer, Tree.StringPool, Namespace);
     StringPoolRef.Write(writer, Tree.StringPool, Name);
 }
예제 #27
0
            /// <summary>
            /// Write the data of this chunk.
            /// </summary>
            protected override void WriteData(ResWriter writer)
            {
                // Create offset marks
                var offsetMarks = new List<Mark.Int32>();
                foreach (var entry in parent.Entries)
                {
                    var mark = writer.MarkInt32();
                    offsetMarks.Add(mark);
                    EntryInstance instance;
                    if (!entry.TryGetInstance(this, out instance))
                    {
                        mark.Value = NO_ENTRY;
                    }
                }

                // Write entries, update offset marks while we go.
                var startPosition = writer.Position;

                for (var i = 0; i < parent.EntryCount; i++)
                {
                    var entry = parent.GetEntry(i);
                    EntryInstance instance;
                    if (!entry.TryGetInstance(this, out instance))
                        continue;

                    // Update mark
                    offsetMarks[i].Value = writer.Position - startPosition;
                    instance.Write(writer);
                }
            }
예제 #28
0
 /// <summary>
 /// Write the value to the given writer
 /// </summary>
 protected override void Write(ResWriter writer, int value)
 {
     writer.WriteInt32(value);
 }
예제 #29
0
 /// <summary>
 /// Write the data of this chunk.
 /// </summary>
 protected override void WriteData(ResWriter writer)
 {
     base.WriteData(writer);
     StringPoolRef.Write(writer, Tree.StringPool, Prefix);
     StringPoolRef.Write(writer, Tree.StringPool, Uri);
 }
예제 #30
0
파일: XmlTree.cs 프로젝트: Xtremrules/dot42
 /// <summary>
 /// Write the data of this chunk.
 /// </summary>
 protected override void WriteData(ResWriter writer)
 {
     base.WriteData(writer);
     strings.Write(writer);
     resourceMap.Write(writer);
     nodes.ForEach(x => x.Write(writer));
 }
예제 #31
0
 /// <summary>
 /// Write the value to the given writer
 /// </summary>
 protected abstract void Write(ResWriter writer, T value);
예제 #32
0
 /// <summary>
 /// Write the data of this chunk.
 /// </summary>
 protected override void WriteData(ResWriter writer)
 {
     base.WriteData(writer);
     StringPoolRef.Write(writer, Tree.StringPool, Data);
     TypedData.Write(writer);
 }
예제 #33
0
 /// <summary>
 /// Write the data of this chunk.
 /// </summary>
 protected override void WriteData(ResWriter writer)
 {
     base.WriteData(writer);
     StringPoolRef.Write(writer, Tree.StringPool, Prefix);
     StringPoolRef.Write(writer, Tree.StringPool, Uri);
 }
예제 #34
0
 /// <summary>
 /// Default ctor
 /// </summary>
 public UInt16(ResWriter writer)
     : base(writer)
 {
 }
예제 #35
0
 /// <summary>
 /// Write this entry.
 /// </summary>
 internal virtual void Write(ResWriter writer)
 {
     writer.WriteUInt16(IsComplex ? 16 : 8);
     writer.WriteUInt16((int) flags);
     StringPoolRef.Write(writer, parent.TypeSpec.Package.KeyStrings, key);
 }
예제 #36
0
 /// <summary>
 /// Default ctor
 /// </summary>
 public Int32(ResWriter writer)
     : base(writer)
 {
 }