/// <summary>
        /// Sets builtin parent scheme to Default for light background schemes, and Darcula for dark
        /// background schemes.
        /// </summary>
        /// <param name="xml"></param>
        /// <returns></returns>
        private static string SetParentScheme(string xml)
        {
            var root       = XElement.Parse(xml);
            var textOption = root.Elements("attributes").Descendants("option")
                             .First(x => x.Attribute("name")?.Value == "TEXT");
            string textFG = textOption.Descendants("value").Descendants("option")
                            .First(x => x.Attribute("name")?.Value == "FOREGROUND").Attribute("value")?.Value;
            string textBG = textOption.Descendants("value").Descendants("option")
                            .First(x => x.Attribute("name")?.Value == "BACKGROUND").Attribute("value")?.Value;

            if (!string.IsNullOrEmpty(textFG) && !string.IsNullOrEmpty(textBG) && HexRgbUtil.IsValidHexString(textFG) &&
                HexRgbUtil.IsValidHexString(textBG))
            {
                var fg = HexRgbUtil.RGBStringToColor(textFG);
                var bg = HexRgbUtil.RGBStringToColor(textBG);
                Console.WriteLine(
                    $"Background #{textBG} ({bg.CompareValue():F3}), Foreground #{textFG} ({fg.CompareValue():F3})");
                var parentScheme = "Default";
                if (fg.GetBrightness() > bg.GetBrightness())
                {
                    parentScheme = "Darcula";
                }
                root.Attribute("parent_scheme")?.SetValue(parentScheme);
                return(root.ToString());
            }

            return(xml);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Converts RGB hex string to Color. Applies padding to short strings by the color scheme padding rules.
        /// </summary>
        /// <param name="rgbString"></param>
        /// <param name="formats"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public static Color PaddableHexStringToColor(string rgbString, IEnumerable <PaddableHexFormat> formats)
        {
            foreach (var format in formats)
            {
                string rgbHexFormat = format.HexFormat;
                if (format.Padding != null && format.Padding.Length != format.HexFormat.Length)
                {
                    throw new Exception("RGB hex string misconfiguration: " + format.HexFormat + " with padding " +
                                        format.Padding);
                }

                if (HexRgbUtil.IsValidHexString(rgbString) && rgbString.Length <= rgbHexFormat.Length)
                {
                    if (rgbString.Length < rgbHexFormat.Length)
                    {
                        if (format.PaddingDirection == PaddingDirection.Left ||
                            format.PaddingDirection == PaddingDirection.Right)
                        {
                            switch (format.PaddingDirection)
                            {
                            case PaddingDirection.Left:
                                rgbString = rgbString.PadLeft(format.Padding);
                                break;

                            case PaddingDirection.Right:
                                rgbString = rgbString.PadRight(format.Padding);
                                break;
                            }
                        }
                    }

                    if (rgbString.Length == rgbHexFormat.Length)
                    {
                        return(HexRgbUtil.HexStringToColor(rgbString, rgbHexFormat));
                    }
                }
            }

            throw new Exception("Invalid color string: " + rgbString);
        }