{"record":{"id":"90dc96d993d4470d","repo":"SubtitleEdit/subtitleedit","slug":"color-colorname-not-found-in-skcolors","errorCode":null,"errorMessage":"Color '{colorName}' not found in SKColors.","messagePattern":"Color '(.+?)' not found in SKColors\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"warning","filePath":"src/libse/Common/ColorTranslator.cs","lineNumber":37,"sourceCode":"                                string.Equals(f.Name, colorName, StringComparison.OrdinalIgnoreCase));\n\n            if (field != null)\n            {\n                return (SKColor)field.GetValue(null);\n            }\n\n            // Search properties (in case any are defined as such)\n            var property = type.GetProperties(BindingFlags.Public | BindingFlags.Static)\n                               .FirstOrDefault(p =>\n                                   p.PropertyType == typeof(SKColor) &&\n                                   string.Equals(p.Name, colorName, StringComparison.OrdinalIgnoreCase));\n\n            if (property != null)\n            {\n                return (SKColor)property.GetValue(null);\n            }\n\n            throw new ArgumentException($\"Color '{colorName}' not found in SKColors.\");\n        }\n\n        public static SKColor FromHtml(string htmlColor)\n        {\n            return SKColor.TryParse(htmlColor, out var color) ? color : ParseNamedColor(htmlColor);\n        }\n\n        public static object ToHtml(SKColor color)\n        {\n            if (color.Alpha == 255)\n            {\n                return $\"#{color.Red:X2}{color.Green:X2}{color.Blue:X2}\";\n            }\n            else\n            {\n                return $\"#{color.Alpha:X2}{color.Red:X2}{color.Green:X2}{color.Blue:X2}\";\n            }\n        }","sourceCodeStart":19,"sourceCodeEnd":55,"githubUrl":"https://github.com/SubtitleEdit/subtitleedit/blob/17a9f0748781032255db3526b7215d2fb891e3af/src/libse/Common/ColorTranslator.cs#L19-L55","documentation":"ColorTranslator.FromName does case-insensitive reflection over SkiaSharp's SKColors static properties; if no property of type SKColor matches the supplied name, it throws ArgumentException. The library uses this to resolve user-supplied or config-file color strings (e.g. \"Red\", \"LightBlue\") into SKColor values.","triggerScenarios":"Calling ColorTranslator.FromName / ParseNamedColor with a name that is not an SKColors member (misspelling, HTML name like 'cyan1', CSS name not in SKColors, leading/trailing whitespace, trailing semicolon).","commonSituations":"Typo in a settings XML/JSON color attribute; migrating from System.Drawing.Color names (which has many more entries than SKColors); locale-specific or vendor-specific color names; user input from a color picker text field.","solutions":["Prefer ColorTranslator.FromHtml which tries SKColor.TryParse first and only falls back to named lookup.","Strip whitespace and trim a trailing ';' before lookup.","Validate the name against SKColors.GetFields()/GetProperties() at app startup to build a known set.","Provide a default/fallback SKColor (e.g. SKColors.Black) when the name is unknown instead of throwing."],"exampleFix":"// before\nvar property = type.GetProperties(...).FirstOrDefault(p => /* match */);\nif (property != null) return (SKColor)property.GetValue(null);\nthrow new ArgumentException($\"Color '{colorName}' not found in SKColors.\");\n\n// after\nvar property = type.GetProperties(...).FirstOrDefault(p => /* match */);\nif (property != null) return (SKColor)property.GetValue(null);\nreturn SKColors.Black; // or return false from a Try-pattern","handlingStrategy":"fallback","validationCode":"var known = typeof(SKColors).GetProperties().Select(p => p.Name).ToHashSet(StringComparer.OrdinalIgnoreCase);\nif (!known.Contains(colorName.Trim().TrimEnd(';'))) return SKColors.Black;","typeGuard":"static bool IsKnownColor(string name) =>\n    typeof(SKColors).GetProperties(BindingFlags.Public | BindingFlags.Static)\n        .Any(p => p.PropertyType == typeof(SKColor) &&\n                  string.Equals(p.Name, name, StringComparison.OrdinalIgnoreCase));","tryCatchPattern":"try { return ColorTranslator.FromName(name); }\ncatch (ArgumentException) { return SKColors.Black; }","preventionTips":["Prefer FromHtml which tries hex parsing first.","Trim whitespace and trailing semicolons before lookup.","Validate against a known set at startup."],"tags":["color","skia","config","validation","reflection"],"backgroundTag":null,"analyzedSha":"17a9f0748781032255db3526b7215d2fb891e3af","analyzedAt":"2026-08-13T18:11:43.374Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}