Example #1
0
        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;
            }
        }
Example #4
0
        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;
            }
        }