private void Process(BamlImage bamlImage) { _state = new State(); _state.Node = bamlImage.FirstNode; ProcessNodes(); _state = null; }
private bool Map(BamlImage bamlImage) { _state = new State(); _state.Node = bamlImage.FirstNode; ProcessNodes(); bool changed = false; foreach (var mapping in _state.Mappings) { changed |= mapping.ApplyMapping(); } _state = null; return(changed); }
private void Map(ResourceReaderEx reader, ref byte[] resourceData, ref bool changed) { if (reader.TypeCode != ResourceTypeCode.Stream && reader.TypeCode != ResourceTypeCode.ByteArray) { return; } string name = reader.Name; if (0 != string.Compare(Path.GetExtension(name), BamlImage.FileExtension, true)) { return; } var resourceDataStream = new MemoryStream(resourceData); resourceDataStream.Position += 4; var bamlImage = BamlImage.Load(resourceDataStream); if (bamlImage == null) { return; } if (Map(bamlImage)) { resourceData = bamlImage.Save(); int pos = 0; var newResourceData = new byte[resourceData.Length + 4]; BufferUtils.Write(newResourceData, ref pos, (int)resourceData.Length); BufferUtils.Write(newResourceData, ref pos, (byte[])resourceData); resourceData = newResourceData; changed = true; } }
private void Analyze() { bool hasWpfResource = false; string resourceName = BamlUtils.GetWpfResourceName(_assembly.Name); foreach (BuildResource resource in _assembly.Resources) { if (resource.Name != resourceName) { continue; } resource.IsWpf = true; hasWpfResource = true; bool hasBaml = false; var data = resource.GetData(); if (!ResourceUtils.IsResource(data)) { continue; } using (var reader = new ResourceReaderEx(data)) { while (reader.Read()) { if (reader.TypeCode != ResourceTypeCode.Stream && reader.TypeCode != ResourceTypeCode.ByteArray) { continue; } if (0 != string.Compare(Path.GetExtension(reader.Name), BamlImage.FileExtension, true)) { continue; } byte[] resourceData = reader.Data; var resourceDataStream = new MemoryStream(resourceData); resourceDataStream.Position += 4; var bamlImage = BamlImage.Load(resourceDataStream); if (bamlImage == null) { continue; } Process(bamlImage); hasBaml = true; } } if (hasBaml) { resource.HasWpfBaml = true; } } if (hasWpfResource) { _assembly.HasWpfResource = true; } }