/// <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 }
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); }
/// <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); }
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); }
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()); }
/// <summary> /// Write helper /// </summary> internal static void Write(ResWriter writer, int value) { writer.WriteInt32(value); }
/// <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); } } }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// Write the data of this chunk. /// </summary> protected override void WriteData(ResWriter writer) { base.WriteData(writer); writer.WriteIntArray(resourceIds.ToArray()); }
/// <summary> /// Default ctor /// </summary> protected AbstractMark(ResWriter writer) { this.writer = writer; position = writer.Stream.Position; Write(writer, default(T)); }
/// <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 }
/// <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 }
/// <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()); }
/// <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)); }
/// <summary> /// Write this entry. /// </summary> internal override void Write(ResWriter writer) { base.Write(writer); value.Write(writer); }
/// <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); }
/// <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); }
/// <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); } }
/// <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); } }
/// <summary> /// Write the value to the given writer /// </summary> protected override void Write(ResWriter writer, int value) { writer.WriteInt32(value); }
/// <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); }
/// <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)); }
/// <summary> /// Write the value to the given writer /// </summary> protected abstract void Write(ResWriter writer, T value);
/// <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); }
/// <summary> /// Default ctor /// </summary> public UInt16(ResWriter writer) : base(writer) { }
/// <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); }
/// <summary> /// Default ctor /// </summary> public Int32(ResWriter writer) : base(writer) { }