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); }