/// <summary> /// Parses the CSS rule. /// </summary> /// <param name="curStyle">Current style.</param> /// <param name="rule">Rule.</param> internal static void ParseCSSRule(ref TextStyleParameters curStyle, CssParserRule rule) { foreach (var declaration in rule.Declarations) { if (_textStyleProperties.ContainsKey (declaration.Property)) { var cleanedValue = declaration.Value.Replace ("\"", ""); cleanedValue = cleanedValue.Trim (); var prop = _textStyleProperties [declaration.Property]; switch (prop.PropertyType.Name) { case "String": curStyle.SetValue (prop.Name, cleanedValue); break; case "Int32": int numInt; if (int.TryParse (cleanedValue, out numInt)) { curStyle.SetValue (prop.Name, numInt); } break; case "Single": cleanedValue = cleanedValue.Replace ("px", ""); float numFloat; if (float.TryParse (cleanedValue, out numFloat)) { curStyle.SetValue (prop.Name, numFloat); } else throw new Exception ("Failed to Parse Single value " + cleanedValue); break; case "Single[]": var parts = cleanedValue.Split (new char[]{ ' ', ',' }, StringSplitOptions.RemoveEmptyEntries); var parsedValues = new float[parts.Length]; for (int i = 0; i < parts.Length; i++) { float numArrayFloat; if (float.TryParse (parts [i], out numArrayFloat)) { parsedValues [i] = numArrayFloat; } } curStyle.SetValue (prop.Name, parsedValues); break; case "TextStyleAlign": curStyle.TextAlign = EnumUtils.FromDescription<TextStyleAlign> (cleanedValue); break; case "TextStyleDecoration": curStyle.TextDecoration = EnumUtils.FromDescription<TextStyleDecoration> (cleanedValue); break; case "TextStyleTextTransform": curStyle.TextTransform = EnumUtils.FromDescription<TextStyleTextTransform> (cleanedValue); break; case "TextStyleTextOverflow": curStyle.TextOverflow = EnumUtils.FromDescription<TextStyleTextOverflow> (cleanedValue); break; default: throw new InvalidCastException ("Could not find the appropriate type " + prop.PropertyType.Name); } } } }
/// <summary> /// Parses the CSS rule. /// </summary> /// <param name="curStyle">Current style.</param> /// <param name="rule">Rule.</param> internal static void ParseCSSRule(ref TextStyleParameters curStyle, CssParserRule rule, Dictionary <string, string> cssVariables) { foreach (var declaration in rule.Declarations) { if (_textStyleProperties.ContainsKey(declaration.Property)) { // Assign the variable if it exists if (cssVariables != null && declaration.ReferencesVariable) { declaration.Value = cssVariables[declaration.Value]; } var cleanedValue = declaration.Value.Replace("\"", ""); cleanedValue = cleanedValue.Trim(); var prop = _textStyleProperties[declaration.Property]; switch (prop.PropertyType.Name) { case "String": curStyle.SetValue(prop.Name, cleanedValue); break; case "Int32": int numInt; if (int.TryParse(cleanedValue, out numInt)) { curStyle.SetValue(prop.Name, numInt); } break; case "Single": cleanedValue = cleanedValue.Replace("px", ""); float numFloat; if (float.TryParse(cleanedValue, out numFloat)) { curStyle.SetValue(prop.Name, numFloat); } else { throw new Exception("Failed to Parse Single value " + cleanedValue); } break; case "Single[]": var parts = cleanedValue.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries); var parsedValues = new float[parts.Length]; for (int i = 0; i < parts.Length; i++) { float numArrayFloat; if (float.TryParse(parts[i], out numArrayFloat)) { parsedValues[i] = numArrayFloat; } } curStyle.SetValue(prop.Name, parsedValues); break; case "ColorRGB": curStyle.SetValue(prop.Name, ColorRGB.FromHex(cleanedValue)); break; case "CssAlign": curStyle.TextAlign = EnumUtils.FromDescription <CssAlign>(cleanedValue); break; case "CssDecoration": curStyle.TextDecoration = EnumUtils.FromDescription <CssDecoration>(cleanedValue); break; case "CssTextTransform": curStyle.TextTransform = EnumUtils.FromDescription <CssTextTransform>(cleanedValue); break; case "CssTextOverflow": curStyle.TextOverflow = EnumUtils.FromDescription <CssTextOverflow>(cleanedValue); break; case "CssFontStyle": curStyle.FontStyle = EnumUtils.FromDescription <CssFontStyle>(cleanedValue); break; case "CssFontWeight": curStyle.FontWeight = EnumUtils.FromDescription <CssFontWeight>(cleanedValue); break; default: throw new InvalidCastException("Could not find the appropriate type " + prop.PropertyType.Name); } } } }