public bool SetAttribute(string name, string value, AttributeMergeStrategy mergeStrategy = AttributeMergeStrategy.Rename) { if (ContainsKey(name)) { if (name == "Text") { mergeStrategy = AttributeMergeStrategy.Append; } if (name == "style" && value == this[name]) { mergeStrategy = AttributeMergeStrategy.Skip; } switch (mergeStrategy) { case AttributeMergeStrategy.Merge: if (value != GetAttribute(name)) { return(false); } return(true); case AttributeMergeStrategy.Overwrite: RemoveAttribute(name); break; case AttributeMergeStrategy.Append: value = GetAttribute(name) + value; RemoveAttribute(name); break; case AttributeMergeStrategy.Skip: return(true); default: var keyIndex = 2; while (ContainsKey(name + "_" + keyIndex)) { keyIndex++; } name = name + "_" + keyIndex; break; } } Add(name, value); return(true); }
public bool CanSetAttribute(string name, string value, AttributeMergeStrategy mergeStrategy = AttributeMergeStrategy.Rename) { var alreadyContainsKey = ContainsKey(name); var valueIsNotIdentical = GetAttributeOrEmpty(name) != value; var doesNotHaveStyle = !ContainsKey("style"); if (name == "Text") { mergeStrategy = AttributeMergeStrategy.Append; } var canSetAttribute = !(alreadyContainsKey && mergeStrategy == AttributeMergeStrategy.Merge && valueIsNotIdentical && doesNotHaveStyle); return(canSetAttribute); }