# File lib/asciidoctor/lexer.rb, line 1714
  def self.store_attribute(name, value, doc = nil, attrs = nil)
    if name.end_with?('!')
      # a nil value signals the attribute should be deleted (undefined)
      value = nil
      name = name.chop
    end

    name = sanitize_attribute_name(name)
    accessible = true
    unless doc.nil?
      accessible = value.nil? ? doc.delete_attribute(name) : doc.set_attribute(name, value)
    end

    unless !accessible || attrs.nil?
      Document::AttributeEntry.new(name, value).save_to(attrs)
    end

    [name, value]
  end