Example #1
0
        private XslCompiledTransform GetCompiledTransform()
        {
            var resolver  = new EmbeddedResourceResolver();
            var transform = new XslCompiledTransform();

            using (var reader = XmlReader.Create(
                       Assembly.GetExecutingAssembly().GetManifestResourceStream(
                           "WashNamespaces.xslt")))
            {
                transform.Load(
                    reader,
                    XsltSettings.TrustedXslt,
                    resolver
                    );
            }
            return(transform);
        }
Example #2
0
        private CSharpProject(string filename)
        {
            var resolver  = new EmbeddedResourceResolver();
            var transform = new XslCompiledTransform();

            using (var reader = XmlReader.Create(
                       Assembly.GetExecutingAssembly().GetManifestResourceStream(
                           "LineariseProject.xslt")))
            {
                transform.Load(
                    reader,
                    XsltSettings.TrustedXslt,
                    resolver
                    );
            }
            XDocument result;

            using (var memory = new MemoryStream())
            {
                using (var reader = XmlReader.Create(filename))
                {
                    using (var writer = XmlWriter.Create(memory))
                    {
                        transform.Transform(reader, writer);
                    }
                }
                memory.Seek(0, SeekOrigin.Begin);
                using (var reader = XmlReader.Create(memory))
                {
                    result = XDocument.Load(reader);
                }
            }

            // Load the data.
            this.References = (from node in result.Descendants()
                               where node.Name.LocalName == "Reference"
                               select node.Value).ToList();
            this.Elements = (from node in result.Descendants()
                             where node.Name.LocalName == "Included"
                             select node.Elements().First().ToXmlElement()).ToList();
        }
Example #3
0
        private CSharpProject(string filename)
        {
            var resolver = new EmbeddedResourceResolver();
            var transform = new XslCompiledTransform();
            using (var reader = XmlReader.Create(
                Assembly.GetExecutingAssembly().GetManifestResourceStream(
                    "Protobuild.ProjectReader.LineariseProject.xslt")))
            {
                transform.Load(
                    reader,
                    XsltSettings.TrustedXslt,
                    resolver
                );
            }
            XDocument result;
            using (var memory = new MemoryStream())
            {
                using (var reader = XmlReader.Create(filename))
                {
                    using (var writer = XmlWriter.Create(memory))
                    {
                        transform.Transform(reader, writer);
                    }
                }
                memory.Seek(0, SeekOrigin.Begin);
                using (var reader = XmlReader.Create(memory))
                {
                    result = XDocument.Load(reader);
                }
            }

            // Load the data.
            this.References = (from node in result.Descendants()
                               where node.Name.LocalName == "Reference"
                               select node.Value).ToList();
            this.Elements = (from node in result.Descendants()
                             where node.Name.LocalName == "Included"
                             select node.Elements().First().ToXmlElement()).ToList();
        }
        public XslCompiledTransform LoadXSLT(ResourceType resourceType, Language language, string platform)
        {
            var currentDir = m_WorkingDirectoryProvider.GetPath();

            if (!m_CachedTransforms.ContainsKey(currentDir))
            {
                m_CachedTransforms[currentDir] = new Dictionary <int, XslCompiledTransform>();
            }
            var cache = m_CachedTransforms[currentDir];

            int hash;

            unchecked
            {
                hash = 17 *
                       resourceType.GetHashCode() * 31 +
                       language.GetHashCode() * 31 +
                       platform.GetHashCode() * 31;
            }
            if (cache.ContainsKey(hash))
            {
                return(cache[hash]);
            }

            var source = this.LoadOverriddableResource(resourceType, language, platform);

            var reader2       = new StreamReader(source);
            var readerInspect = reader2.ReadToEnd();

            source.Seek(0, SeekOrigin.Begin);

            var resolver = new EmbeddedResourceResolver();
            var result   = new XslCompiledTransform();

            using (var reader = XmlReader.Create(source))
            {
                try
                {
                    result.Load(
                        reader,
                        XsltSettings.TrustedXslt,
                        resolver
                        );
                }
                catch (XsltException ex)
                {
                    var lines         = readerInspect.Split(new[] { "\r\n", "\n" }, StringSplitOptions.None);
                    var line          = ex.LineNumber;
                    var minLine       = Math.Max(line - 10, 0);
                    var maxLine       = Math.Min(line + 10, lines.Length - 1);
                    var selectedLines = new List <string>();
                    for (var l = minLine; l <= maxLine; l++)
                    {
                        if (l == line)
                        {
                            selectedLines.Add(">> " + lines[l]);
                        }
                        else
                        {
                            selectedLines.Add("   " + lines[l]);
                        }
                    }
                    var context = string.Join(Environment.NewLine, selectedLines);
                    throw new XsltCompileException(
                              ex.Message + "\r\n" + context,
                              ex);
                }
            }

            cache[hash] = result;
            return(result);
        }
 private XslCompiledTransform GetCompiledTransform()
 {
     var resolver = new EmbeddedResourceResolver();
     var transform = new XslCompiledTransform();
     using (var reader = XmlReader.Create(
         Assembly.GetExecutingAssembly().GetManifestResourceStream(
             "WashNamespaces.xslt")))
     {
         transform.Load(
             reader,
             XsltSettings.TrustedXslt,
             resolver
         );
     }
     return transform;
 }
Example #6
0
        public XslCompiledTransform LoadXSLT(ResourceType resourceType, Language language)
        {
            var hash = resourceType.GetHashCode() + language.GetHashCode();

            if (m_CachedTransforms.ContainsKey(hash))
            {
                return(m_CachedTransforms[hash]);
            }

            string name       = null;
            string fileSuffix = string.Empty;
            bool   applyAdditionalTransforms = false;

            switch (resourceType)
            {
            case ResourceType.GenerateProject:
                name       = "GenerateProject";
                fileSuffix = "." + this.m_LanguageStringProvider.GetFileSuffix(language);
                applyAdditionalTransforms = true;
                break;

            case ResourceType.GenerateSolution:
                name = "GenerateSolution";
                break;

            case ResourceType.SelectSolution:
                name = "SelectSolution";
                break;

            default:
                throw new NotSupportedException();
            }

            var onDiskNames = new List <string>();

            onDiskNames.Add(name + fileSuffix + ".xslt");

            if (resourceType == ResourceType.GenerateProject && language == Language.CSharp)
            {
                onDiskNames.Add(name + ".xslt");
            }

            Stream source = null;

            foreach (var filename in onDiskNames)
            {
                var path = Path.Combine(this.m_WorkingDirectoryProvider.GetPath(), "Build", filename);

                if (File.Exists(path))
                {
                    source = File.Open(path, FileMode.Open);
                    break;
                }
            }

            if (source == null)
            {
                var embeddedName   = name + fileSuffix + ".xslt.lzma";
                var embeddedStream = Assembly
                                     .GetExecutingAssembly()
                                     .GetManifestResourceStream(embeddedName);
                source = this.GetTransparentDecompressionStream(embeddedStream);
            }

            if (applyAdditionalTransforms)
            {
                var memory = new MemoryStream();
                using (var stream = source)
                {
                    using (var writer = new StringWriter())
                    {
                        var additional     = "";
                        var additionalPath = Path.Combine(this.m_WorkingDirectoryProvider.GetPath(), "Build", "AdditionalProjectTransforms.xslt");
                        if (File.Exists(additionalPath))
                        {
                            using (var reader = new StreamReader(additionalPath))
                            {
                                additional = reader.ReadToEnd();
                            }
                        }
                        using (var reader = new StreamReader(stream))
                        {
                            var text = reader.ReadToEnd();
                            text = text.Replace("{ADDITIONAL_TRANSFORMS}", additional);
                            writer.Write(text);
                            writer.Flush();
                        }

                        var resultBytes = Encoding.UTF8.GetBytes(writer.GetStringBuilder().ToString());
                        memory.Write(resultBytes, 0, resultBytes.Length);
                        memory.Seek(0, SeekOrigin.Begin);
                    }
                }

                source = memory;
            }

            var resolver = new EmbeddedResourceResolver();
            var result   = new XslCompiledTransform();

            using (var reader = XmlReader.Create(source))
            {
                result.Load(
                    reader,
                    XsltSettings.TrustedXslt,
                    resolver
                    );
            }

            m_CachedTransforms[hash] = result;
            return(result);
        }
Example #7
0
        public XslCompiledTransform LoadXSLT(ResourceType resourceType, Language language)
        {
            string name = null;
            string fileSuffix = string.Empty;
            bool applyAdditionalTransforms = false;
            switch (resourceType)
            {
                case ResourceType.GenerateProject:
                    name = "GenerateProject";
                    fileSuffix = "." + this.m_LanguageStringProvider.GetFileSuffix(language);
                    applyAdditionalTransforms = true;
                    break;
                case ResourceType.GenerateSolution:
                    name = "GenerateSolution";
                    break;
                case ResourceType.SelectSolution:
                    name = "SelectSolution";
                    break;
                default:
                    throw new NotSupportedException();
            }

            var onDiskNames = new List<string>();
            onDiskNames.Add(name + fileSuffix + ".xslt");

            if (resourceType == ResourceType.GenerateProject && language == Language.CSharp)
            {
                onDiskNames.Add(name + ".xslt");
            }

            Stream source = null;

            foreach (var filename in onDiskNames)
            {
                var path = Path.Combine(this.m_WorkingDirectoryProvider.GetPath(), "Build", filename);

                if (File.Exists(path))
                {
                    source = File.Open(path, FileMode.Open);
                    break;
                }
            }

            if (source == null)
            {
                var embeddedName = name + fileSuffix + ".xslt.lzma";
                var embeddedStream = Assembly
                    .GetExecutingAssembly()
                    .GetManifestResourceStream(embeddedName);
                source = this.GetTransparentDecompressionStream(embeddedStream);
            }

            if (applyAdditionalTransforms)
            {
                var memory = new MemoryStream();
                using (var stream = source)
                {
                    using (var writer = new StringWriter())
                    {
                        var additional = "";
                        var additionalPath = Path.Combine(this.m_WorkingDirectoryProvider.GetPath(), "Build", "AdditionalProjectTransforms.xslt");
                        if (File.Exists(additionalPath))
                        {
                            using (var reader = new StreamReader(additionalPath))
                            {
                                additional = reader.ReadToEnd();
                            }
                        }
                        using (var reader = new StreamReader(stream))
                        {
                            var text = reader.ReadToEnd();
                            text = text.Replace("{ADDITIONAL_TRANSFORMS}", additional);
                            writer.Write(text);
                            writer.Flush();
                        }

                        var resultBytes = Encoding.UTF8.GetBytes(writer.GetStringBuilder().ToString());
                        memory.Write(resultBytes, 0, resultBytes.Length);
                        memory.Seek(0, SeekOrigin.Begin);
                    }
                }

                source = memory;
            }

            var resolver = new EmbeddedResourceResolver();
            var result = new XslCompiledTransform();
            using (var reader = XmlReader.Create(source))
            {
                result.Load(
                    reader,
                    XsltSettings.TrustedXslt,
                    resolver
                );
            }
            return result;
        }
        public XslCompiledTransform LoadXSLT(ResourceType resourceType, Language language, string platform)
        {
            var currentDir = m_WorkingDirectoryProvider.GetPath();
            if (!m_CachedTransforms.ContainsKey(currentDir))
            {
                m_CachedTransforms[currentDir] = new Dictionary<int, XslCompiledTransform>();
            }
            var cache = m_CachedTransforms[currentDir];

            int hash;
            unchecked
            {
                hash = 17 *
                       resourceType.GetHashCode() * 31 +
                       language.GetHashCode() * 31 +
                       platform.GetHashCode() * 31;
            }
            if (cache.ContainsKey(hash))
            {
                return cache[hash];
            }

            var source = this.LoadOverriddableResource(resourceType, language, platform);

            var reader2 = new StreamReader(source);
            var readerInspect = reader2.ReadToEnd();
            source.Seek(0, SeekOrigin.Begin);

            var resolver = new EmbeddedResourceResolver();
            var result = new XslCompiledTransform();
            using (var reader = XmlReader.Create(source))
            {
                try
                {
                    result.Load(
                        reader,
                        XsltSettings.TrustedXslt,
                        resolver
                        );
                }
                catch (XsltException ex)
                {
                    var lines = readerInspect.Split(new[] {"\r\n", "\n"}, StringSplitOptions.None);
                    var line = ex.LineNumber;
                    var minLine = Math.Max(line - 10, 0);
                    var maxLine = Math.Min(line + 10, lines.Length - 1);
                    var selectedLines = new List<string>();
                    for (var l = minLine; l <= maxLine; l++)
                    {
                        if (l == line)
                        {
                            selectedLines.Add(">> " + lines[l]);
                        }
                        else
                        {
                            selectedLines.Add("   " + lines[l]);
                        }
                    }
                    var context = string.Join(Environment.NewLine, selectedLines);
                    throw new XsltCompileException(
                        ex.Message + "\r\n" + context,
                        ex);
                }
            }

            cache[hash] = result;
            return result;
        }