public static string Preprocess()

in SharpGen/Config/Preprocessor.cs [38:89]


        public static string Preprocess(string xmlText, params string[] macros)
        {
            var doc = XDocument.Load(new StringReader(xmlText));

            XNamespace ns = ConfigFile.XmlNamespace;

            var list = doc.Descendants(ns + "ifndef").ToList();
            // Work on deepest first
            list.Reverse();
            foreach (var ifndef in list)
            {
                var attr = ifndef.Attribute("name");
                if (attr != null && macros.Contains(attr.Value))
                {
                    ifndef.Remove();
                }
                else
                {
                    foreach (var element in ifndef.Elements())
                    {
                        ifndef.AddBeforeSelf(element);
                    }

                    ifndef.Remove();
                }
            }

            list = doc.Descendants(ns + "ifdef").ToList();
            // Work on deepest first
            list.Reverse();
            foreach (var ifdef in list)
            {
                var attr = ifdef.Attribute("name");
                if(attr != null && !string.IsNullOrWhiteSpace(attr.Value))
                {
                    var values = attr.Value.Split(new []{ "|" }, StringSplitOptions.RemoveEmptyEntries);
                    if(values.Any(macros.Contains))
                    {
                        foreach(var element in ifdef.Elements())
                        {
                            ifdef.AddBeforeSelf(element);
                        }
                    }
                }
                ifdef.Remove();
            }

            var writer = new StringWriter();
            doc.Save(writer);

            return writer.ToString();
        }