HtmlDemo.002.zip
Html Demo.exe
System.Drawing.Html.dll
HtmlDemo.zip
Html Demo.exe
System.Drawing.Html.dll
System.Drawing.Html.002.zip
System.Drawing.Html
Html Demo
bin
Debug
Html Demo.exe
Html Demo.vshost.exe
HtmlDemo.zip
System.Drawing.Html.dll
Html Demo.csproj.user
Properties
Settings.settings
Resources
comment16.gif
delete16.gif
delete32.gif
exclamation32.png
favorites32.png
font32.png
formula32.png
image32.png
method16.gif
paly32.png
property16.gif
property32.png
refreshdocument32.png
web_pallete.gif
Window.gif
Samples
System.Drawing.Html.suo
System.Drawing.Html
bin
Debug
System.Drawing.Html.dll
System.Drawing.Html.vshost.exe
Properties
Settings.settings
System.Drawing.Html.zip
Html Demo.exe
Html Demo.vshost.exe
System.Drawing.Html.dll
Html Demo.csproj.user
Settings.settings
comment16.gif
delete16.gif
delete32.gif
exclamation32.png
favorites32.png
font32.png
formula32.png
image32.png
method16.gif
paly32.png
property16.gif
property32.png
refreshdocument32.png
web_pallete.gif
Window.gif
System.Drawing.Html.suo
System.Drawing.Html.dll
System.Drawing.Html.vshost.exe
Settings.settings
|
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Reflection;
namespace System.Drawing.Html
{
/// <summary>
/// Represents a block of CSS property values
/// </summary>
/// <remarks>
/// To learn more about CSS blocks visit CSS spec:
/// http://www.w3.org/TR/CSS21/syndata.html#block
/// </remarks>
public class CssBlock
{
#region Fields
private string _block;
private Dictionary<PropertyInfo, string> _propertyValues;
private Dictionary<string,string> _properties;
#endregion
#region Ctor
/// <summary>
/// Initializes internal's
/// </summary>
private CssBlock()
{
_propertyValues = new Dictionary<PropertyInfo, string>();
_properties = new Dictionary<string, string>();
}
/// <summary>
/// Creates a new block from the block's source
/// </summary>
/// <param name="blockSource"></param>
public CssBlock(string blockSource)
: this()
{
_block = blockSource;
//Extract property assignments
MatchCollection matches = Parser.Match(Parser.CssProperties, blockSource);
//Scan matches
foreach (Match match in matches)
{
//Split match by colon
string[] chunks = match.Value.Split(':');
if (chunks.Length != 2) continue;
//Extract property name and value
string propName = chunks[0].Trim();
string propValue = chunks[1].Trim();
//Remove semicolon
if (propValue.EndsWith(";")) propValue = propValue.Substring(0, propValue.Length - 1).Trim();
//Add property to list
Properties.Add(propName, propValue);
//Register only if property checks with reflection
if (CssBox._properties.ContainsKey(propName))
PropertyValues.Add(CssBox._properties[propName], propValue);
}
}
#endregion
#region Props
/// <summary>
/// Gets the properties and its values
/// </summary>
public Dictionary<string,string> Properties
{
get { return _properties; }
}
/// <summary>
/// Gets the dictionary with property-ready values
/// </summary>
public Dictionary<PropertyInfo, string> PropertyValues
{
get { return _propertyValues; }
}
/// <summary>
/// Gets the block's source
/// </summary>
public string BlockSource
{
get { return _block; }
}
#endregion
#region Method
/// <summary>
/// Updates the PropertyValues dictionary
/// </summary>
internal void UpdatePropertyValues()
{
PropertyValues.Clear();
foreach (string prop in Properties.Keys)
{
if (CssBox._properties.ContainsKey(prop))
PropertyValues.Add(CssBox._properties[prop], Properties[prop]);
}
}
/// <summary>
/// Asigns the style on this block o the specified box
/// </summary>
/// <param name="b"></param>
public void AssignTo(CssBox b)
{
foreach (PropertyInfo prop in PropertyValues.Keys)
{
string value = PropertyValues[prop];
if (value == CssConstants.Inherit && b.ParentBox != null)
{
value = Convert.ToString(prop.GetValue(b.ParentBox, null));
}
prop.SetValue(b, value, null);
}
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of use and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Jose Manuel Menéndez Poó
- I've been programming Windows and Web apps since 1997.
- My greatest concern nowadays is user interface usability.
Questions and stuff by twitter: @menendezpoo
Jose Runs Goplek in Mexico
www.goplek.com
Blog
menendezpoo.com