// "Therefore those skilled at the unorthodox // are infinite as heaven and earth, // inexhaustible as the great rivers. // When they come to an end, // they begin again, // like the days and months; // they die and are reborn, // like the four seasons." // // - Sun Tsu, // "The Art of War" using System; using TheArtOfDev.HtmlRenderer.Adapters; using TheArtOfDev.HtmlRenderer.Adapters.Entities; using TheArtOfDev.HtmlRenderer.Core.Dom; using TheArtOfDev.HtmlRenderer.Core.Parse; namespace TheArtOfDev.HtmlRenderer.Core.Utils { /// /// Utility method for handling CSS stuff. /// internal static class CssUtils { #region Fields and Consts /// /// Brush for selection background /// private static readonly RColor _defaultSelectionBackcolor = RColor.FromArgb(0xa9, 0x33, 0x99, 0xFF); #endregion /// /// Brush for selection background /// public static RColor DefaultSelectionBackcolor { get { return _defaultSelectionBackcolor; } } /// /// Gets the white space width of the specified box /// /// /// /// public static double WhiteSpace(RGraphics g, CssBoxProperties box) { double w = box.ActualFont.GetWhitespaceWidth(g); if (!(String.IsNullOrEmpty(box.WordSpacing) || box.WordSpacing == CssConstants.Normal)) { w += CssValueParser.ParseLength(box.WordSpacing, 0, box, true); } return w; } /// /// Get CSS box property value by the CSS name.
/// Used as a mapping between CSS property and the class property. ///
/// the CSS box to get it's property value /// the name of the CSS property /// the value of the property, null if no such property exists public static string GetPropertyValue(CssBox cssBox, string propName) { switch (propName) { case "border-bottom-width": return cssBox.BorderBottomWidth; case "border-left-width": return cssBox.BorderLeftWidth; case "border-right-width": return cssBox.BorderRightWidth; case "border-top-width": return cssBox.BorderTopWidth; case "border-bottom-style": return cssBox.BorderBottomStyle; case "border-left-style": return cssBox.BorderLeftStyle; case "border-right-style": return cssBox.BorderRightStyle; case "border-top-style": return cssBox.BorderTopStyle; case "border-bottom-color": return cssBox.BorderBottomColor; case "border-left-color": return cssBox.BorderLeftColor; case "border-right-color": return cssBox.BorderRightColor; case "border-top-color": return cssBox.BorderTopColor; case "border-spacing": return cssBox.BorderSpacing; case "border-collapse": return cssBox.BorderCollapse; case "corner-radius": return cssBox.CornerRadius; case "corner-nw-radius": return cssBox.CornerNwRadius; case "corner-ne-radius": return cssBox.CornerNeRadius; case "corner-se-radius": return cssBox.CornerSeRadius; case "corner-sw-radius": return cssBox.CornerSwRadius; case "margin-bottom": return cssBox.MarginBottom; case "margin-left": return cssBox.MarginLeft; case "margin-right": return cssBox.MarginRight; case "margin-top": return cssBox.MarginTop; case "padding-bottom": return cssBox.PaddingBottom; case "padding-left": return cssBox.PaddingLeft; case "padding-right": return cssBox.PaddingRight; case "padding-top": return cssBox.PaddingTop; case "left": return cssBox.Left; case "top": return cssBox.Top; case "width": return cssBox.Width; case "max-width": return cssBox.MaxWidth; case "height": return cssBox.Height; case "background-color": return cssBox.BackgroundColor; case "background-image": return cssBox.BackgroundImage; case "background-position": return cssBox.BackgroundPosition; case "background-repeat": return cssBox.BackgroundRepeat; case "background-gradient": return cssBox.BackgroundGradient; case "background-gradient-angle": return cssBox.BackgroundGradientAngle; case "color": return cssBox.Color; case "display": return cssBox.Display; case "direction": return cssBox.Direction; case "empty-cells": return cssBox.EmptyCells; case "float": return cssBox.Float; case "position": return cssBox.Position; case "line-height": return cssBox.LineHeight; case "vertical-align": return cssBox.VerticalAlign; case "text-indent": return cssBox.TextIndent; case "text-align": return cssBox.TextAlign; case "text-decoration": return cssBox.TextDecoration; case "white-space": return cssBox.WhiteSpace; case "word-break": return cssBox.WordBreak; case "visibility": return cssBox.Visibility; case "word-spacing": return cssBox.WordSpacing; case "font-family": return cssBox.FontFamily; case "font-size": return cssBox.FontSize; case "font-style": return cssBox.FontStyle; case "font-variant": return cssBox.FontVariant; case "font-weight": return cssBox.FontWeight; case "list-style": return cssBox.ListStyle; case "list-style-position": return cssBox.ListStylePosition; case "list-style-image": return cssBox.ListStyleImage; case "list-style-type": return cssBox.ListStyleType; case "overflow": return cssBox.Overflow; } return null; } /// /// Set CSS box property value by the CSS name.
/// Used as a mapping between CSS property and the class property. ///
/// the CSS box to set it's property value /// the name of the CSS property /// the value to set public static void SetPropertyValue(CssBox cssBox, string propName, string value) { switch (propName) { case "border-bottom-width": cssBox.BorderBottomWidth = value; break; case "border-left-width": cssBox.BorderLeftWidth = value; break; case "border-right-width": cssBox.BorderRightWidth = value; break; case "border-top-width": cssBox.BorderTopWidth = value; break; case "border-bottom-style": cssBox.BorderBottomStyle = value; break; case "border-left-style": cssBox.BorderLeftStyle = value; break; case "border-right-style": cssBox.BorderRightStyle = value; break; case "border-top-style": cssBox.BorderTopStyle = value; break; case "border-bottom-color": cssBox.BorderBottomColor = value; break; case "border-left-color": cssBox.BorderLeftColor = value; break; case "border-right-color": cssBox.BorderRightColor = value; break; case "border-top-color": cssBox.BorderTopColor = value; break; case "border-spacing": cssBox.BorderSpacing = value; break; case "border-collapse": cssBox.BorderCollapse = value; break; case "corner-radius": cssBox.CornerRadius = value; break; case "corner-nw-radius": cssBox.CornerNwRadius = value; break; case "corner-ne-radius": cssBox.CornerNeRadius = value; break; case "corner-se-radius": cssBox.CornerSeRadius = value; break; case "corner-sw-radius": cssBox.CornerSwRadius = value; break; case "margin-bottom": cssBox.MarginBottom = value; break; case "margin-left": cssBox.MarginLeft = value; break; case "margin-right": cssBox.MarginRight = value; break; case "margin-top": cssBox.MarginTop = value; break; case "padding-bottom": cssBox.PaddingBottom = value; break; case "padding-left": cssBox.PaddingLeft = value; break; case "padding-right": cssBox.PaddingRight = value; break; case "padding-top": cssBox.PaddingTop = value; break; case "left": cssBox.Left = value; break; case "top": cssBox.Top = value; break; case "width": cssBox.Width = value; break; case "max-width": cssBox.MaxWidth = value; break; case "height": cssBox.Height = value; break; case "background-color": cssBox.BackgroundColor = value; break; case "background-image": cssBox.BackgroundImage = value; break; case "background-position": cssBox.BackgroundPosition = value; break; case "background-repeat": cssBox.BackgroundRepeat = value; break; case "background-gradient": cssBox.BackgroundGradient = value; break; case "background-gradient-angle": cssBox.BackgroundGradientAngle = value; break; case "color": cssBox.Color = value; break; case "display": cssBox.Display = value; break; case "direction": cssBox.Direction = value; break; case "empty-cells": cssBox.EmptyCells = value; break; case "float": cssBox.Float = value; break; case "position": cssBox.Position = value; break; case "line-height": cssBox.LineHeight = value; break; case "vertical-align": cssBox.VerticalAlign = value; break; case "text-indent": cssBox.TextIndent = value; break; case "text-align": cssBox.TextAlign = value; break; case "text-decoration": cssBox.TextDecoration = value; break; case "white-space": cssBox.WhiteSpace = value; break; case "word-break": cssBox.WordBreak = value; break; case "visibility": cssBox.Visibility = value; break; case "word-spacing": cssBox.WordSpacing = value; break; case "font-family": cssBox.FontFamily = value; break; case "font-size": cssBox.FontSize = value; break; case "font-style": cssBox.FontStyle = value; break; case "font-variant": cssBox.FontVariant = value; break; case "font-weight": cssBox.FontWeight = value; break; case "list-style": cssBox.ListStyle = value; break; case "list-style-position": cssBox.ListStylePosition = value; break; case "list-style-image": cssBox.ListStyleImage = value; break; case "list-style-type": cssBox.ListStyleType = value; break; case "overflow": cssBox.Overflow = value; break; } } } }