in Sample Applications/HtmlToXamlDemo/HtmlToXamlConverter.cs [2494:2633]
private static Hashtable GetElementProperties(XmlElement htmlElement, Hashtable inheritedProperties,
out Hashtable localProperties, CssStylesheet stylesheet, List<XmlElement> sourceContext)
{
// Start with context formatting properties
var currentProperties = new Hashtable();
var propertyEnumerator = inheritedProperties.GetEnumerator();
while (propertyEnumerator.MoveNext())
{
currentProperties[propertyEnumerator.Key] = propertyEnumerator.Value;
}
// Identify element name
var elementName = htmlElement.LocalName.ToLower();
var elementNamespace = htmlElement.NamespaceURI;
// update current formatting properties depending on element tag
localProperties = new Hashtable();
switch (elementName)
{
// Character formatting
case "i":
case "italic":
case "em":
localProperties["font-style"] = "italic";
break;
case "b":
case "bold":
case "strong":
case "dfn":
localProperties["font-weight"] = "bold";
break;
case "u":
case "underline":
localProperties["text-decoration-underline"] = "true";
break;
case "font":
var attributeValue = GetAttribute(htmlElement, "face");
if (attributeValue != null)
{
localProperties["font-family"] = attributeValue;
}
attributeValue = GetAttribute(htmlElement, "size");
if (attributeValue != null)
{
var fontSize = double.Parse(attributeValue)*(12.0/3.0);
if (fontSize < 1.0)
{
fontSize = 1.0;
}
else if (fontSize > 1000.0)
{
fontSize = 1000.0;
}
localProperties["font-size"] = fontSize.ToString(CultureInfo.InvariantCulture);
}
attributeValue = GetAttribute(htmlElement, "color");
if (attributeValue != null)
{
localProperties["color"] = attributeValue;
}
break;
case "samp":
localProperties["font-family"] = "Courier New"; // code sample
localProperties["font-size"] = XamlFontSizeXxSmall;
localProperties["text-align"] = "Left";
break;
case "sub":
break;
case "sup":
break;
// Hyperlinks
case "a": // href, hreflang, urn, methods, rel, rev, title
// Set default hyperlink properties
break;
case "acronym":
break;
// Paragraph formatting:
case "p":
// Set default paragraph properties
break;
case "div":
// Set default div properties
break;
case "pre":
localProperties["font-family"] = "Courier New"; // renders text in a fixed-width font
localProperties["font-size"] = XamlFontSizeXxSmall;
localProperties["text-align"] = "Left";
break;
case "blockquote":
localProperties["margin-left"] = "16";
break;
case "h1":
localProperties["font-size"] = XamlFontSizeXxLarge;
break;
case "h2":
localProperties["font-size"] = XamlFontSizeXLarge;
break;
case "h3":
localProperties["font-size"] = XamlFontSizeLarge;
break;
case "h4":
localProperties["font-size"] = XamlFontSizeMedium;
break;
case "h5":
localProperties["font-size"] = XamlFontSizeSmall;
break;
case "h6":
localProperties["font-size"] = XamlFontSizeXSmall;
break;
// List properties
case "ul":
localProperties["list-style-type"] = "disc";
break;
case "ol":
localProperties["list-style-type"] = "decimal";
break;
case "table":
case "body":
case "html":
break;
}
// Override html defaults by css attributes - from stylesheets and inline settings
HtmlCssParser.GetElementPropertiesFromCssAttributes(htmlElement, elementName, stylesheet, localProperties,
sourceContext);
// Combine local properties with context to create new current properties
propertyEnumerator = localProperties.GetEnumerator();
while (propertyEnumerator.MoveNext())
{
currentProperties[propertyEnumerator.Key] = propertyEnumerator.Value;
}
return currentProperties;
}