using System.Collections.Generic; using System.Linq; using System.Drawing; using System.Xml.Linq; namespace Novacode { internal static class Extensions { internal static string ToHex(this Color source) { byte red = source.R; byte green = source.G; byte blue = source.B; string redHex = red.ToString("X"); if (redHex.Length < 2) redHex = "0" + redHex; string blueHex = blue.ToString("X"); if (blueHex.Length < 2) blueHex = "0" + blueHex; string greenHex = green.ToString("X"); if (greenHex.Length < 2) greenHex = "0" + greenHex; return string.Format("{0}{1}{2}", redHex, greenHex, blueHex); } public static void Flatten(this XElement e, XName name, List flat) { // Add this element (without its children) to the flat list. XElement clone = CloneElement(e); clone.Elements().Remove(); // Filter elements using XName. if (clone.Name == name) flat.Add(clone); // Process the children. if (e.HasElements) foreach (XElement elem in e.Elements(name)) // Filter elements using XName elem.Flatten(name, flat); } static XElement CloneElement(XElement element) { return new XElement(element.Name, element.Attributes(), element.Nodes().Select(n => { XElement e = n as XElement; if (e != null) return CloneElement(e); return n; } ) ); } public static string GetAttribute(this XElement el, XName name, string defaultValue = "") { var attr = el.Attribute(name); if (attr != null) return attr.Value; return defaultValue; } } }