Ejemplo n.º 1
0
        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;
                }
            }
        }
Ejemplo n.º 2
0
 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);
     }
 }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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;
            }
        }
Ejemplo n.º 5
0
        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;
            }
        }
Ejemplo n.º 6
0
 internal static Color AsColor(WebDom.CssCodeValueExpression value)
 {
     return(CssColorConv.ConvertToActualColor(UserMapUtil.AsColor(value)));
 }
Ejemplo n.º 7
0
 internal static Color AsColor(WebDom.CssCodeValueExpression value)
 {
     return(UserMapUtil.AsColor(value));
 }
Ejemplo n.º 8
0
        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();
            }
        }
Ejemplo n.º 9
0
            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);
            }
Ejemplo n.º 10
0
        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;
                }
            }
        }
Ejemplo n.º 11
0
        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;
                }
            }
        }
Ejemplo n.º 12
0
        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;
                }
            }
        }
Ejemplo n.º 13
0
 internal static LayoutFarm.Css.CssLength ParseGenericLength(string value)
 {
     return(UserMapUtil.ParseGenericLength(value));
 }
Ejemplo n.º 14
0
            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;
                        }
                    }
                }
            }
Ejemplo n.º 15
0
        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;
                    }
                }
            }
        }
Ejemplo n.º 16
0
 /// <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()));
 }
Ejemplo n.º 17
0
        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;
                }
            }
        }