Пример #1
0
        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);
        }
Пример #2
0
        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);
        }