private static void FilterStyleAttributes(HtmlAttribute styleAttr)
        {
            if (styleAttr != null)
            {
                HtmlStyleAttributeCollection styles = HtmlStyleParser.Parse(styleAttr.Value);

                styles.Remove(style => _DefaultStyleAttributeBlackList.Contains(style.Expression.Expression) || style.Expression.Value.IsScriptRelative());

                styleAttr.Value = styles.Join();
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="style"></param>
        /// <returns></returns>
        public static HtmlStyleAttributeCollection Parse(string style)
        {
            HtmlStyleAttributeCollection result = new HtmlStyleAttributeCollection();

            if (style.IsNullOrEmpty())
            {
                return(result);
            }

            using (HtmlStyleParserContext context = new HtmlStyleParserContext())
            {
                HtmlStyleAttribute currentStyleAttr = new HtmlStyleAttribute();

                while (context.Index < style.Length)
                {
                    switch (context.Stage)
                    {
                    case HtmlStyleParsingStage.None:
                    {
                        if (SkipNotLetter(context, style))
                        {
                            context.Stage    = HtmlStyleParsingStage.KeyStage;
                            currentStyleAttr = new HtmlStyleAttribute();
                        }
                        break;
                    }

                    case HtmlStyleParsingStage.KeyStage:
                    {
                        if (style[context.Index] != ':')
                        {
                            context.Writer.Write(style[context.Index++]);
                        }
                        else
                        {
                            currentStyleAttr.Key = context.ChangeStage(HtmlStyleParsingStage.ValueStage);
                            context.Index++;
                        }

                        break;
                    }

                    case HtmlStyleParsingStage.ValueStage:
                    {
                        if (style[context.Index] != ';')
                        {
                            context.Writer.Write(style[context.Index++]);
                        }
                        else
                        {
                            currentStyleAttr.Value      = context.ChangeStage(HtmlStyleParsingStage.None);
                            currentStyleAttr.Expression = ParseValue(currentStyleAttr.Value);
                            result.AddNotExistsItem(currentStyleAttr);

                            currentStyleAttr = null;
                            context.Index++;
                        }

                        break;
                    }
                    }
                }

                currentStyleAttr = DoStylePostOperation(context, currentStyleAttr);

                if (currentStyleAttr != null)
                {
                    result.AddNotExistsItem(currentStyleAttr);
                }
            }

            return(result);
        }