class Markaby::Tagset

def can_handle? tag_name

def can_handle? tag_name
  false
end

def default_options

def default_options
  {tagset: self}
end

def handle_tag tag_name, builder, *args, &block

def handle_tag tag_name, builder, *args, &block
  raise NoMethodError.new
end

def transform_attribute_hash attributes, prefix

def transform_attribute_hash attributes, prefix
  values = attributes[prefix]
  expanded_attributes = {}
  values.each do |suffix, value|
    name = transform_attribute_name "#{prefix}-#{suffix}"
    expanded_attributes[name] = value
  end
  attributes.merge!(expanded_attributes).delete(prefix)
end

def transform_attribute_name name

def transform_attribute_name name
  name.to_s.downcase.tr("_", "-").to_sym
end

def transform_attributes tag_name, attributes

def transform_attributes tag_name, attributes
  attributes[:name] ||= attributes[:id] if forms.include?(tag_name) && attributes[:id]
  attributes.transform_keys! { |name| transform_attribute_name name }
  hashed_attributes = attributes.keys.select { |name| attributes[name].is_a? Hash }
  hashed_attributes.each { |name| transform_attribute_hash attributes, name }
  attributes.reject! { |name, value| name.nil? || (AttrsBoolean.include?(name) && value.nil?) }
  attributes.keys.each { |name| validate_attribute! tag_name, name }
  attributes
end

def valid_attribute_name? tag_name, attribute_name

def valid_attribute_name? tag_name, attribute_name
  attribute_name.to_s.start_with?(":", "data-", "aria-") || @tagset[tag_name].include?(attribute_name)
end

def validate_and_transform_attributes! tag_name, *args

def validate_and_transform_attributes! tag_name, *args
  args.last.respond_to?(:to_hash) ? transform_attributes(tag_name, args.last.to_hash) : {}
end

def validate_and_transform_tag_name! tag_name

def validate_and_transform_tag_name! tag_name
  raise(InvalidXhtmlError, "no element `#{tag_name}' for #{doctype}") unless @tagset.has_key?(tag_name)
  tag_name
end

def validate_attribute! tag_name, attribute_name

def validate_attribute! tag_name, attribute_name
  raise InvalidXhtmlError, "no attribute `#{attribute_name}' on #{tag_name} elements" unless valid_attribute_name? tag_name, attribute_name
end