/// <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); }
/// <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; }
/// <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; }
/// <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); }
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> /// 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; }
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); }
/// <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)); } }
/// <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; } }
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> /// 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; } }); }
/// <summary> /// Creation ctor /// </summary> protected Node(XmlTree tree, ChunkTypes expectedType) : base(expectedType) { this.tree = tree; }
/// <summary> /// Reading ctor /// </summary> internal EndNamespace(ResReader reader, XmlTree tree) : base(reader, tree, ChunkTypes.RES_XML_END_NAMESPACE_TYPE) { }
/// <summary> /// Creation ctor /// </summary> internal EndNamespace(XmlTree tree, StartNamespace start) : base(tree, ChunkTypes.RES_XML_END_NAMESPACE_TYPE) { Prefix = start.Prefix; Uri = start.Uri; }
/// <summary> /// Reading ctor /// </summary> internal StartNamespace(ResReader reader, XmlTree tree) : base(reader, tree, ChunkTypes.RES_XML_START_NAMESPACE_TYPE) { }
/// <summary> /// Creation ctor /// </summary> internal EndElement(XmlTree tree, StartElement start) : base(tree, ChunkTypes.RES_XML_END_ELEMENT_TYPE) { Name = start.Name; Namespace = start.Namespace; }
/// <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); } }
/// <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); }
/// <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); }
public void LoadXmlTest() { var xml = new XmlTree(new MemoryStream(TestResource.AndroidManifest)); var doc = xml.AsXml(); }
/// <summary> /// Reading ctor /// </summary> internal EndElement(ResReader reader, XmlTree tree) : base(reader, tree, ChunkTypes.RES_XML_END_ELEMENT_TYPE) { }
/// <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(); }
/// <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)); } }