void CreateSvgPolygon(SvgElement parentNode, HtmlElement elem) { SvgPolygonSpec spec = new SvgPolygonSpec(); SvgPolygon shape = new SvgPolygon(spec, elem); parentNode.AddChild(shape); foreach (WebDom.DomAttribute attr in elem.GetAttributeIterForward()) { WebDom.WellknownName wellknownName = (WebDom.WellknownName)attr.LocalNameIndex; switch (wellknownName) { case WebDom.WellknownName.Svg_Points: { //parse points spec.Points = ParsePointList(attr.Value); } break; case WebDom.WellknownName.Svg_Fill: { spec.FillColor = CssValueParser.GetActualColor(attr.Value); } break; case WebDom.WellknownName.Svg_Stroke: { spec.StrokeColor = CssValueParser.GetActualColor(attr.Value); } break; case WebDom.WellknownName.Svg_Stroke_Width: { spec.StrokeWidth = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Svg_Transform: { //TODO: parse svg transform function } break; default: { //other attrs } break; } } }
static void SetBorderSpacing(BoxSpec box, WebDom.CssCodeValueExpression value) { WebDom.CssCodePrimitiveExpression primValue = value as WebDom.CssCodePrimitiveExpression; if (primValue == null) { //2 values? //box.BorderSpacingHorizontal = new CssLength(r[0].Value); //box.BorderSpacingVertical = new CssLength(r[1].Value); throw new NotSupportedException(); } else { //primitive value box.BorderSpacingHorizontal = box.BorderSpacingVertical = UserMapUtil.AsLength(primValue); } }
static void CreateSvgGroupElement(SvgElement parentNode, HtmlElement elem) { SvgVisualSpec spec = new SvgVisualSpec(); SvgGroupElement svgGroupElement = new SvgGroupElement(spec, elem); parentNode.AddChild(svgGroupElement); foreach (WebDom.DomAttribute attr in elem.GetAttributeIterForward()) { WebDom.WellknownName wellknownName = (WebDom.WellknownName)attr.LocalNameIndex; switch (wellknownName) { case WebDom.WellknownName.Svg_Fill: { spec.ActualColor = CssValueParser.GetActualColor(attr.Value); } break; case WebDom.WellknownName.Svg_Stroke: { spec.StrokeColor = CssValueParser.GetActualColor(attr.Value); } break; case WebDom.WellknownName.Svg_Stroke_Width: { spec.StrokeWidth = UserMapUtil.ParseGenericLength(attr.Value); } break; default: { //other attrs } break; } } CreateSvgBoxContent(svgGroupElement, elem); }
static void SetPropertyValue(BoxSpec spec, WebDom.CssPropertyDeclaration decl) { //assign property CssCodeValueExpression cssValue = decl.GetPropertyValue(0); switch (decl.WellknownPropertyName) { case WellknownCssPropertyName.Display: spec.CssDisplay = UserMapUtil.GetDisplayType(cssValue); break; //------------------------------------------------ case WellknownCssPropertyName.BorderBottomWidth: spec.BorderBottomWidth = cssValue.AsBorderLength(); break; case WellknownCssPropertyName.BorderLeftWidth: spec.BorderLeftWidth = cssValue.AsBorderLength(); break; case WellknownCssPropertyName.BorderRightWidth: spec.BorderRightWidth = cssValue.AsBorderLength(); break; case WellknownCssPropertyName.BorderTopWidth: spec.BorderTopWidth = cssValue.AsBorderLength(); break; //------------------------------------------------ case WellknownCssPropertyName.BorderBottomStyle: spec.BorderBottomStyle = UserMapUtil.GetBorderStyle(cssValue); break; case WellknownCssPropertyName.BorderLeftStyle: spec.BorderLeftStyle = UserMapUtil.GetBorderStyle(cssValue); break; case WellknownCssPropertyName.BorderRightStyle: spec.BorderRightStyle = UserMapUtil.GetBorderStyle(cssValue); break; case WellknownCssPropertyName.BorderTopStyle: spec.BorderTopStyle = UserMapUtil.GetBorderStyle(cssValue); break; //------------------------------------------------ case WellknownCssPropertyName.BorderBottomColor: spec.BorderBottomColor = AsColor(cssValue); break; case WellknownCssPropertyName.BorderLeftColor: spec.BorderLeftColor = AsColor(cssValue); break; case WellknownCssPropertyName.BorderRightColor: spec.BorderRightColor = AsColor(cssValue); break; case WellknownCssPropertyName.BorderTopColor: spec.BorderTopColor = AsColor(cssValue);; break; //------------------------------------------------ case WellknownCssPropertyName.BorderSpacing: SetBorderSpacing(spec, cssValue); break; case WellknownCssPropertyName.BorderCollapse: spec.BorderCollapse = UserMapUtil.GetBorderCollapse(cssValue); break; //------------------------------------------------ case WellknownCssPropertyName.BoxSizing: spec.BoxSizing = UserMapUtil.GetBoxSizing(cssValue); break; case WellknownCssPropertyName.BoxShadow: SetBoxShadow(spec, decl); break; case WellknownCssPropertyName.CornerRadius: SetCornerRadius(spec, cssValue); break; case WellknownCssPropertyName.CornerNWRadius: spec.CornerNWRadius = cssValue.AsLength(); break; case WellknownCssPropertyName.CornerNERadius: spec.CornerNERadius = cssValue.AsLength(); break; case WellknownCssPropertyName.CornerSERadius: spec.CornerSERadius = cssValue.AsLength(); break; case WellknownCssPropertyName.CornerSWRadius: spec.CornerSWRadius = cssValue.AsLength(); break; //------------------------------------------------ case WellknownCssPropertyName.MarginBottom: spec.MarginBottom = cssValue.AsTranslatedLength(); break; case WellknownCssPropertyName.MarginLeft: spec.MarginLeft = cssValue.AsTranslatedLength(); break; case WellknownCssPropertyName.MarginRight: spec.MarginRight = cssValue.AsTranslatedLength(); break; case WellknownCssPropertyName.MarginTop: spec.MarginTop = cssValue.AsTranslatedLength(); break; //------------------------------------------------ case WellknownCssPropertyName.PaddingBottom: spec.PaddingBottom = cssValue.AsTranslatedLength(); break; case WellknownCssPropertyName.PaddingLeft: spec.PaddingLeft = cssValue.AsTranslatedLength(); break; case WellknownCssPropertyName.PaddingRight: spec.PaddingRight = cssValue.AsTranslatedLength(); break; case WellknownCssPropertyName.PaddingTop: spec.PaddingTop = cssValue.AsTranslatedLength(); break; //------------------------------------------------ case WellknownCssPropertyName.Left: spec.Left = cssValue.AsLength(); break; case WellknownCssPropertyName.Top: spec.Top = cssValue.AsLength(); break; case WellknownCssPropertyName.Width: spec.Width = cssValue.AsLength(); break; case WellknownCssPropertyName.MaxWidth: spec.MaxWidth = cssValue.AsLength(); break; case WellknownCssPropertyName.Height: spec.Height = cssValue.AsLength(); break; case WellknownCssPropertyName.BackgroundColor: spec.BackgroundColor = AsColor(cssValue); break; case WellknownCssPropertyName.BackgroundImage: spec.BackgroundImageBinder = new ClientImageBinder(cssValue.GetTranslatedStringValue()); break; case WellknownCssPropertyName.BackgroundPosition: SetBackgroundPosition(spec, cssValue); break; case WellknownCssPropertyName.BackgroundRepeat: spec.BackgroundRepeat = UserMapUtil.GetBackgroundRepeat(cssValue); break; case WellknownCssPropertyName.BackgroundGradient: spec.BackgroundGradient = AsColor(cssValue); break; case WellknownCssPropertyName.BackgroundGradientAngle: spec.BackgroundGradientAngle = cssValue.AsNumber(); break; case WellknownCssPropertyName.Color: spec.Color = AsColor(cssValue); break; case WellknownCssPropertyName.Direction: spec.CssDirection = UserMapUtil.GetCssDirection(cssValue); break; case WellknownCssPropertyName.EmptyCells: spec.EmptyCells = UserMapUtil.GetEmptyCell(cssValue); break; case WellknownCssPropertyName.Float: spec.Float = UserMapUtil.GetFloat(cssValue); break; case WellknownCssPropertyName.Position: spec.Position = UserMapUtil.GetCssPosition(cssValue); break; case WellknownCssPropertyName.LineHeight: spec.LineHeight = cssValue.AsLength(); break; case WellknownCssPropertyName.VerticalAlign: spec.VerticalAlign = UserMapUtil.GetVerticalAlign(cssValue); break; case WellknownCssPropertyName.TextIndent: spec.TextIndent = cssValue.AsLength(); break; case WellknownCssPropertyName.TextAlign: spec.CssTextAlign = UserMapUtil.GetTextAlign(cssValue); break; case WellknownCssPropertyName.TextDecoration: spec.TextDecoration = UserMapUtil.GetTextDecoration(cssValue); break; case WellknownCssPropertyName.Whitespace: spec.WhiteSpace = UserMapUtil.GetWhitespace(cssValue); break; case WellknownCssPropertyName.WordBreak: spec.WordBreak = UserMapUtil.GetWordBreak(cssValue); break; case WellknownCssPropertyName.Visibility: spec.Visibility = UserMapUtil.GetVisibility(cssValue); break; case WellknownCssPropertyName.WordSpacing: spec.WordSpacing = cssValue.AsLength(); break; case WellknownCssPropertyName.FontFamily: spec.FontFamily = cssValue.GetTranslatedStringValue(); break; case WellknownCssPropertyName.FontSize: SetFontSize(spec, cssValue); break; case WellknownCssPropertyName.FontStyle: spec.FontStyle = UserMapUtil.GetFontStyle(cssValue); break; case WellknownCssPropertyName.FontVariant: spec.FontVariant = UserMapUtil.GetFontVariant(cssValue); break; case WellknownCssPropertyName.FontWeight: spec.FontWeight = UserMapUtil.GetFontWeight(cssValue); break; case WellknownCssPropertyName.ListStyle: spec.ListStyle = cssValue.GetTranslatedStringValue(); break; case WellknownCssPropertyName.ListStylePosition: spec.ListStylePosition = UserMapUtil.GetListStylePosition(cssValue); break; case WellknownCssPropertyName.ListStyleImage: spec.ListStyleImage = cssValue.GetTranslatedStringValue(); break; case WellknownCssPropertyName.ListStyleType: spec.ListStyleType = UserMapUtil.GetListStyleType(cssValue); break; case WellknownCssPropertyName.Overflow: spec.Overflow = UserMapUtil.GetOverflow(cssValue); break; //------------------------------------------------ //for flex container case WellknownCssPropertyName.Flex: { //TODO: implement this } break; case WellknownCssPropertyName.FlexDirection: { //TODO: implement this } break; case WellknownCssPropertyName.FlexFlow: { //TODO: implement this } break; case WellknownCssPropertyName.FlexWrap: { //TODO: implement this } break; //------------------------------------------------ //for flex item case WellknownCssPropertyName.FlexGrow: spec.FlexGrow = (int)cssValue.AsNumber(); break; case WellknownCssPropertyName.FlexShrink: spec.FlexShrink = (int)cssValue.AsNumber(); break; case WellknownCssPropertyName.FlexOrder: spec.FlexOrder = (int)cssValue.AsNumber(); break; //------------------------------------------------ //experiment : for container case WellknownCssPropertyName.FlexExtensionNum: spec.FlexExtensionNum = (int)cssValue.AsNumber(); break; //experiment : for space part case WellknownCssPropertyName.FlexExtensionPart: spec.FlexExtensionPart = (int)cssValue.AsNumber(); break; } }
static void SetFontSize(this BoxSpec box, WebDom.CssCodeValueExpression value) { //number + value WebDom.CssCodePrimitiveExpression primValue = value as WebDom.CssCodePrimitiveExpression; if (primValue == null) { return; } switch (primValue.Hint) { case WebDom.CssValueHint.Number: { //has unit or not //? //or percent ? CssLength len = UserMapUtil.AsLength(primValue); if (len.HasError) { len = CssLength.FontSizeMedium; } box.FontSize = len; } break; case WebDom.CssValueHint.Iden: { switch (primValue.GetTranslatedStringValue()) { default: { throw new NotSupportedException(); } case CssConstants.Medium: box.FontSize = CssLength.FontSizeMedium; break; case CssConstants.Small: box.FontSize = CssLength.FontSizeSmall; break; case CssConstants.XSmall: box.FontSize = CssLength.FontSizeXSmall; break; case CssConstants.XXSmall: box.FontSize = CssLength.FontSizeXXSmall; break; case CssConstants.Large: box.FontSize = CssLength.FontSizeLarge; break; case CssConstants.XLarge: box.FontSize = CssLength.FontSizeLarge; break; case CssConstants.XXLarge: box.FontSize = CssLength.FontSizeLarger; break; case CssConstants.Smaller: box.FontSize = CssLength.FontSizeSmaller; break; case CssConstants.Larger: box.FontSize = CssLength.FontSizeLarger; break; } } break; } }
internal static Color AsColor(WebDom.CssCodeValueExpression value) { return(CssColorConv.ConvertToActualColor(UserMapUtil.AsColor(value))); }
internal static Color AsColor(WebDom.CssCodeValueExpression value) { return(UserMapUtil.AsColor(value)); }
void PrepareStylesAndContentOfChildNodes( HtmlElement parentElement, TopDownActiveCssTemplate activeCssTemplate) { //recursive CssBox principalCssBox = parentElement.CurrentPrincipalBox; bool isblockContext = true;//default if (principalCssBox != null) { isblockContext = principalCssBox.IsBlock; } foreach (WebDom.DomNode node in parentElement.GetChildNodeIterForward()) { activeCssTemplate.EnterLevel(); switch (node.NodeType) { case WebDom.HtmlNodeType.OpenElement: case WebDom.HtmlNodeType.ShortElement: { HtmlElement htmlElement = (HtmlElement)node; htmlElement.WellknownElementName = UserMapUtil.EvaluateTagName(htmlElement.LocalName); switch (htmlElement.WellknownElementName) { case WellKnownDomNodeName.style: { //style element should have textnode child int j = htmlElement.ChildrenCount; for (int i = 0; i < j; ++i) { var ch = htmlElement.GetChildNode(i); switch (ch.NodeType) { case HtmlNodeType.TextNode: { HtmlTextNode textNode = (HtmlTextNode)htmlElement.GetChildNode(0); activeCssTemplate.LoadRawStyleElementContent(new string(textNode.GetOriginalBuffer())); //break i = j; } break; } } activeCssTemplate.ExitLevel(); continue; } case WellKnownDomNodeName.link: { //<link rel="stylesheet" DomAttribute relAttr; if (htmlElement.TryGetAttribute(WellknownName.Rel, out relAttr)) { //switch link type switch (relAttr.Value.ToLower()) { case "stylesheet": { //if found DomAttribute hrefAttr; if (htmlElement.TryGetAttribute(WellknownName.Href, out hrefAttr)) { string stylesheet = RaiseRequestStyleSheet(hrefAttr.Value); if (stylesheet != null) { activeCssTemplate.LoadRawStyleElementContent(stylesheet); } } } break; case "import": { //load data canbe sync or async DomAttribute hrefAttr; if (htmlElement.TryGetAttribute(WellknownName.Href, out hrefAttr)) { //import other html, reuseable html component //TODO: implement import request algo here } } break; } } activeCssTemplate.ExitLevel(); continue; } } //----------------------------- //apply style for this node ApplyStyleSheetForSingleHtmlElement(htmlElement, parentElement.Spec, activeCssTemplate); //----------------------------- //recursive PrepareStylesAndContentOfChildNodes(htmlElement, activeCssTemplate); //----------------------------- } break; case WebDom.HtmlNodeType.TextNode: { HtmlTextNode textnode = (HtmlTextNode)node; //inner content is parsed here var parentSpec = parentElement.Spec; char[] originalBuffer = textnode.GetOriginalBuffer(); List <CssRun> runlist = new List <CssRun>(); bool hasSomeCharacter; contentTextSplitter.ParseWordContent(originalBuffer, parentSpec, isblockContext, runlist, out hasSomeCharacter); textnode.SetSplitParts(runlist, hasSomeCharacter); } break; } activeCssTemplate.ExitLevel(); } }
public virtual bool AddAttribute(string name, string value) { switch (name) { default: return(false); case "class": spec.Id = value; break; case "id": spec.Id = value; return(true); case "style": ParseStyle(spec, value); break; case "fill": { if (value != "none") { spec.FillColor = ConvToActualColor(CssValueParser2.GetActualColor(value)); } } break; case "fill-opacity": { //adjust fill opacity } break; case "stroke-width": { spec.StrokeWidth = UserMapUtil.ParseGenericLength(value); } break; case "stroke": { if (value != "none") { spec.StrokeColor = ConvToActualColor(CssValueParser2.GetActualColor(value)); } } break; case "stroke-linecap": //set line-cap and line join again break; case "stroke-linejoin": break; case "stroke-miterlimit": break; case "stroke-opacity": break; case "transform": { //parse trans ParseTransform(value, spec); } break; } return(true); }
static void CreateSvgPath(SvgElement parentNode, HtmlElement elem) { SvgPathSpec spec = new SvgPathSpec(); SvgPath svgPath = new SvgPath(spec, elem); parentNode.AddChild(svgPath); foreach (WebDom.DomAttribute attr in elem.GetAttributeIterForward()) { WebDom.WellknownName wellknownName = (WebDom.WellknownName)attr.LocalNameIndex; switch (wellknownName) { case WebDom.WellknownName.Svg_X: { spec.X = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Svg_Y: { spec.Y = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Width: { spec.Width = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Height: { spec.Height = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Svg_Fill: { spec.ActualColor = CssValueParser.GetActualColor(attr.Value); } break; case WebDom.WellknownName.Svg_Stroke: { spec.StrokeColor = CssValueParser.GetActualColor(attr.Value); } break; case WebDom.WellknownName.Svg_Stroke_Width: { spec.StrokeWidth = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Svg_Transform: { //TODO: parse svg transform function } break; default: { //other attrs switch (attr.Name) { case "d": { //parse vertex commands Svg.Pathing.SvgPathDataParser parser = new Svg.Pathing.SvgPathDataParser(); svgPath.Segments = parser.Parse(attr.Value.ToCharArray()); } break; } } break; } } }
static void CreateSvgEllipse(SvgElement parentNode, HtmlElement elem) { SvgEllipseSpec spec = new SvgEllipseSpec(); SvgEllipse shape = new SvgEllipse(spec, elem); parentNode.AddChild(shape); foreach (WebDom.DomAttribute attr in elem.GetAttributeIterForward()) { WebDom.WellknownName wellknownName = (WebDom.WellknownName)attr.LocalNameIndex; switch (wellknownName) { case WebDom.WellknownName.Svg_Cx: { spec.X = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Svg_Cy: { spec.Y = UserMapUtil.ParseGenericLength(attr.Value); } break; case WellknownName.Svg_Rx: { spec.RadiusX = UserMapUtil.ParseGenericLength(attr.Value); } break; case WellknownName.Svg_Ry: { spec.RadiusY = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Svg_Fill: { spec.ActualColor = CssValueParser.GetActualColor(attr.Value); } break; case WebDom.WellknownName.Svg_Stroke: { spec.StrokeColor = CssValueParser.GetActualColor(attr.Value); } break; case WebDom.WellknownName.Svg_Stroke_Width: { spec.StrokeWidth = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Svg_Transform: { //TODO: parse svg transform function } break; default: { //other attrs } break; } } }
static void CreateSvgLinearGradient(SvgElement parentNode, HtmlElement elem) { //linear gradient definition SvgLinearGradient linearGradient = new SvgLinearGradient(elem); foreach (WebDom.DomAttribute attr in elem.GetAttributeIterForward()) { WebDom.WellknownName wellknownName = (WebDom.WellknownName)attr.LocalNameIndex; switch (wellknownName) { case WellknownName.Svg_X1: { linearGradient.X1 = UserMapUtil.ParseGenericLength(attr.Value); } break; case WellknownName.Svg_X2: { linearGradient.X2 = UserMapUtil.ParseGenericLength(attr.Value); } break; case WellknownName.Svg_Y1: { linearGradient.Y1 = UserMapUtil.ParseGenericLength(attr.Value); } break; case WellknownName.Svg_Y2: { linearGradient.Y2 = UserMapUtil.ParseGenericLength(attr.Value); } break; } } //------------------------------------------------------------ int j = elem.ChildrenCount; List <StopColorPoint> stopColorPoints = new List <StopColorPoint>(j); for (int i = 0; i < j; ++i) { HtmlElement node = elem.GetChildNode(i) as HtmlElement; if (node == null) { continue; } switch (node.WellknownElementName) { case WellKnownDomNodeName.svg_stop: { //stop point StopColorPoint stopPoint = new StopColorPoint(); foreach (WebDom.DomAttribute attr in node.GetAttributeIterForward()) { WebDom.WellknownName wellknownName = (WebDom.WellknownName)attr.LocalNameIndex; switch (wellknownName) { case WellknownName.Svg_StopColor: { stopPoint.StopColor = CssValueParser.GetActualColor(attr.Value); } break; case WellknownName.Svg_Offset: { stopPoint.Offset = UserMapUtil.ParseGenericLength(attr.Value); } break; } } stopColorPoints.Add(stopPoint); } break; } } }
internal static LayoutFarm.Css.CssLength ParseGenericLength(string value) { return(UserMapUtil.ParseGenericLength(value)); }
void ParseStyle(SvgVisualSpec spec, string cssStyle) { if (!String.IsNullOrEmpty(cssStyle)) { #if DEBUG s_dbugIdCount++; #endif //*** CssRuleSet cssRuleSet = _ownerParser._cssParser.ParseCssPropertyDeclarationList(cssStyle.ToCharArray()); foreach (CssPropertyDeclaration propDecl in cssRuleSet.GetAssignmentIter()) { switch (propDecl.UnknownRawName) { default: break; case "fill": { int valueCount = propDecl.ValueCount; //1 string value = propDecl.GetPropertyValue(0).ToString(); if (value != "none") { spec.FillColor = ConvToActualColor(CssValueParser2.GetActualColor(value)); } } break; case "fill-opacity": { //TODO: //adjust fill opacity } break; case "stroke-width": { int valueCount = propDecl.ValueCount; //1 string value = propDecl.GetPropertyValue(0).ToString(); spec.StrokeWidth = UserMapUtil.ParseGenericLength(value); } break; case "stroke": { //TODO: //if (attr.Value != "none") //{ // spec.StrokeColor = ConvToActualColor(CssValueParser2.GetActualColor(attr.Value)); //} } break; case "stroke-linecap": //set line-cap and line join again //TODO: break; case "stroke-linejoin": //TODO: break; case "stroke-miterlimit": //TODO: break; case "stroke-opacity": //TODO: break; case "transform": { ////parse trans //ParseTransform(attr.Value, spec); } break; } } } }
static void AssignStylesFromTranslatedAttributesHTML5(HtmlElement tag) { //some html attr contains css value if (tag.AttributeCount > 0) { foreach (var attr in tag.GetAttributeIterForward()) { //attr switch by wellknown property name switch ((WebDom.WellknownName)attr.LocalNameIndex) { case WebDom.WellknownName.Align: { //deprecated in HTML4.1 //string value = attr.Value.ToLower(); //if (value == "left" // || value == "center" // || value == "right" // || value == "justify") //{ // WebDom.CssCodePrimitiveExpression propValue = new WebDom.CssCodePrimitiveExpression( // value, WebDom.CssValueHint.Iden); // box.CssTextAlign = UserMapUtil.GetTextAlign(propValue); //} //else //{ // WebDom.CssCodePrimitiveExpression propValue = new WebDom.CssCodePrimitiveExpression( // value, WebDom.CssValueHint.Iden); // box.VerticalAlign = UserMapUtil.GetVerticalAlign(propValue); //} //break; } break; case WebDom.WellknownName.Background: //deprecated in HTML4.1 //box.BackgroundImageBinder = new ImageBinder(attr.Value.ToLower()); break; case WebDom.WellknownName.BackgroundColor: //deprecated in HTML5 //box.BackgroundColor = CssValueParser.GetActualColor(attr.Value.ToLower()); break; case WebDom.WellknownName.Border: { //not support in HTML5 //CssLength borderLen = TranslateLength(UserMapUtil.MakeBorderLength(attr.Value.ToLower())); //if (!borderLen.HasError) //{ // if (borderLen.Number > 0) // { // box.BorderLeftStyle = // box.BorderTopStyle = // box.BorderRightStyle = // box.BorderBottomStyle = CssBorderStyle.Solid; // } // box.BorderLeftWidth = // box.BorderTopWidth = // box.BorderRightWidth = // box.BorderBottomWidth = borderLen; // if (tag.WellknownTagName == WellknownHtmlTagName.TABLE && borderLen.Number > 0) // { // //Cascades to the TD's the border spacified in the TABLE tag. // var borderWidth = CssLength.MakePixelLength(1); // ForEachCellInTable(box, cell => // { // //for all cells // cell.BorderLeftStyle = cell.BorderTopStyle = cell.BorderRightStyle = cell.BorderBottomStyle = CssBorderStyle.Solid; // CssConstants.Solid; // cell.BorderLeftWidth = cell.BorderTopWidth = cell.BorderRightWidth = cell.BorderBottomWidth = borderWidth; // }); // } //} } break; case WebDom.WellknownName.BorderColor: //box.BorderLeftColor = // box.BorderTopColor = // box.BorderRightColor = // box.BorderBottomColor = CssValueParser.GetActualColor(attr.Value.ToLower()); break; case WebDom.WellknownName.CellSpacing: //html5 not support in HTML5, use CSS instead //box.BorderSpacingHorizontal = box.BorderSpacingVertical = TranslateLength(attr); break; case WebDom.WellknownName.CellPadding: { //html5 not support in HTML5, use CSS instead *** // CssLength len01 = UserMapUtil.ParseGenericLength(attr.Value.ToLower()); // if (len01.HasError && (len01.Number > 0)) // { // CssLength len02 = CssLength.MakePixelLength(len01.Number); // ForEachCellInTable(box, cell => // { //#if DEBUG // // cell.dbugBB = dbugTT++; //#endif // cell.PaddingLeft = cell.PaddingTop = cell.PaddingRight = cell.PaddingBottom = len02; // }); // } // else // { // ForEachCellInTable(box, cell => // cell.PaddingLeft = cell.PaddingTop = cell.PaddingRight = cell.PaddingBottom = len01); // } } break; case WebDom.WellknownName.Color: //deprecate // box.Color = CssValueParser.GetActualColor(attr.Value.ToLower()); break; case WebDom.WellknownName.Dir: { WebDom.CssCodePrimitiveExpression propValue = new WebDom.CssCodePrimitiveExpression( attr.Value.ToLower(), WebDom.CssValueHint.Iden); //assign var spec = tag.Spec; spec.CssDirection = UserMapUtil.GetCssDirection(propValue); } break; case WebDom.WellknownName.Face: //deprecate //box.FontFamily = CssParser.ParseFontFamily(attr.Value.ToLower()); break; case WebDom.WellknownName.Height: { var spec = tag.Spec; spec.Height = TranslateLength(attr); } break; case WebDom.WellknownName.HSpace: //deprecated //box.MarginRight = box.MarginLeft = TranslateLength(attr); break; case WebDom.WellknownName.Nowrap: //deprecate //box.WhiteSpace = CssWhiteSpace.NoWrap; break; case WebDom.WellknownName.Size: { //deprecate //switch (tag.WellknownTagName) //{ // case WellknownHtmlTagName.HR: // { // box.Height = TranslateLength(attr); // } break; // case WellknownHtmlTagName.FONT: // { // var ruleset = activeTemplate.ParseCssBlock("", attr.Value.ToLower()); // foreach (WebDom.CssPropertyDeclaration propDecl in ruleset.GetAssignmentIter()) // { // //assign each property // AssignPropertyValue(box, box.ParentBox, propDecl); // } // //WebDom.CssCodePrimitiveExpression prim = new WebDom.CssCodePrimitiveExpression(value, // //box.SetFontSize(value); // } break; //} } break; case WebDom.WellknownName.VAlign: { //w3.org //valign for table display elements: //col,colgroup,tbody,td,tfoot,th,thead,tr WebDom.CssCodePrimitiveExpression propValue = new WebDom.CssCodePrimitiveExpression( attr.Value.ToLower(), WebDom.CssValueHint.Iden); tag.Spec.VerticalAlign = UserMapUtil.GetVerticalAlign(propValue); } break; case WebDom.WellknownName.VSpace: //deprecated //box.MarginTop = box.MarginBottom = TranslateLength(attr); break; case WebDom.WellknownName.Width: { var spec = tag.Spec; spec.Width = TranslateLength(attr); } break; case WellknownName.Src: { var cssBoxImage = HtmlElement.InternalGetPrincipalBox(tag) as CssBoxImage; if (cssBoxImage != null) { string imgsrc; //ImageBinder imgBinder = null; if (tag.TryGetAttribute(WellknownName.Src, out imgsrc)) { CssBoxImage cssBoxImage1 = HtmlElement.InternalGetPrincipalBox(tag) as CssBoxImage; PixelFarm.Drawing.ImageBinder imgbinder1 = cssBoxImage1.ImageBinder; if (imgbinder1.ImageSource != imgsrc) { //var clientImageBinder = new ClientImageBinder(imgsrc); //imgbinder1 = clientImageBinder; //clientImageBinder.SetOwner(tag); cssBoxImage1.ImageBinder = new PixelFarm.Drawing.ImageBinder(imgsrc); } } else { //var clientImageBinder = new ClientImageBinder(null); //imgBinder = clientImageBinder; //clientImageBinder.SetOwner(tag); } } } break; } } } }
/// <summary> /// Converts an HTML length into a Css length /// </summary> /// <param name="htmlLength"></param> /// <returns></returns> public static CssLength TranslateLength(DomAttribute attr) { return(UserMapUtil.TranslateLength(attr.Value.ToLower())); }
static void CreateSvgImage(SvgElement parentNode, HtmlElement elem) { SvgImageSpec spec = new SvgImageSpec(); SvgImage svgImage = new SvgImage(spec, elem); parentNode.AddChild(svgImage); foreach (WebDom.DomAttribute attr in elem.GetAttributeIterForward()) { WebDom.WellknownName wellknownName = (WebDom.WellknownName)attr.LocalNameIndex; switch (wellknownName) { case WebDom.WellknownName.Svg_X: { spec.X = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Svg_Y: { spec.Y = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Width: { spec.Width = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Height: { spec.Height = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Svg_Fill: { spec.ActualColor = CssValueParser.GetActualColor(attr.Value); } break; case WebDom.WellknownName.Svg_Stroke: { spec.StrokeColor = CssValueParser.GetActualColor(attr.Value); } break; case WebDom.WellknownName.Svg_Stroke_Width: { spec.StrokeWidth = UserMapUtil.ParseGenericLength(attr.Value); } break; case WebDom.WellknownName.Svg_Transform: { //TODO: parse svg transform function } break; case WellknownName.Href: { //image src*** spec.ImageSrc = attr.Value; } break; default: { } break; } } }