Example #1
0
        /// <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;

                    case "TextStyleFontStyle":
                        curStyle.FontStyle = EnumUtils.FromDescription <TextStyleFontStyle> (cleanedValue);
                        break;

                    case "TextStyleFontWeight":
                        curStyle.FontWeight = EnumUtils.FromDescription <TextStyleFontWeight> (cleanedValue);
                        break;

                    default:
                        throw new InvalidCastException("Could not find the appropriate type " + prop.PropertyType.Name);
                    }
                }
            }
        }