def self.store_attribute name, value, doc = nil, attrs = nil
if name.end_with? '!'
name, value = name.chop, nil
elsif name.start_with? '!'
name, value = (name.slice 1, name.length), nil
end
name = sanitize_attribute_name name
name = 'sectnums' if name == 'numbered'
if doc
if value
if name == 'leveloffset'
if value.start_with? '+'
value = ((doc.attr 'leveloffset', 0).to_i + (value[1..-1] || 0).to_i).to_s
elsif value.start_with? '-'
value = ((doc.attr 'leveloffset', 0).to_i - (value[1..-1] || 0).to_i).to_s
end
end
if (resolved_value = doc.set_attribute name, value)
value = resolved_value
(Document::AttributeEntry.new name, value).save_to attrs if attrs
end
elsif (doc.delete_attribute name) && attrs
(Document::AttributeEntry.new name, value).save_to attrs
end
elsif attrs
(Document::AttributeEntry.new name, value).save_to attrs
end
[name, value]
end