Example #1
0
        /// <summary>
        /// Parses to CSS string.
        /// </summary>
        /// <returns>The to CSS string.</returns>
        /// <param name="tagName">Tag name.</param>
        /// <param name="style">Style.</param>
        public static string ParseToCSSString(string tagName, TextStyleParameters style)
        {
            var builder = new StringBuilder();

            builder.Append(tagName + "{");

            string cast;
            var    runtimeProperties = style.GetType().GetRuntimeProperties();

            foreach (var prop in runtimeProperties)
            {
                try {
                    var value = prop.GetValue(style);

                    if (value != null)
                    {
                        string parsedValue = null;
                        switch (prop.PropertyType.Name)
                        {
                        case "String":
                            if ((value as string).StartsWith("#"))
                            {
                                parsedValue = (string)value;
                            }
                            else
                            {
                                parsedValue = "'" + value + "'";
                            }
                            break;

                        case "Single":
                            if (Convert.ToSingle(value) > float.MinValue)
                            {
                                parsedValue = Convert.ToString(value);
                                if (prop.Name == "FontSize")                                 // Dirty, I really need a list of things that can be set in pixel values
                                {
                                    parsedValue += "px";
                                }
                            }
                            break;

                        case "Int32":
                            if (Convert.ToInt32(value) > int.MinValue)
                            {
                                parsedValue = Convert.ToString(value);
                            }
                            break;

                        case "Single[]":
                            parsedValue = Convert.ToString(value);
                            break;

                        case "TextStyleAlign":
                        case "TextStyleDecoration":
                        case "TextStyleTextTransform":
                        case "TextStyleTextOverflow":
                            cast = Convert.ToString(value);
                            if (cast != "None")
                            {
                                parsedValue = cast.ToLower();
                            }
                            break;

                        case "TextStyleFontStyle":
                        case "TextStyleFontWeight":
                            cast = Convert.ToString(value);
                            if (cast != "Normal")
                            {
                                parsedValue = cast.ToLower();
                            }
                            break;

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

                        var attributes = (CssAttribute [])prop.GetCustomAttributes(
                            typeof(CssAttribute), false);

                        if (attributes.Length > 0 && parsedValue != null)
                        {
                            builder.Append(attributes [0].Name + ":" + parsedValue + ";");
                        }
                    }
                } catch (Exception ex) {
                    throw ex;
                }
            }

            builder.Append("}");

            return(builder.ToString());
        }