class Haml::AttributeParser

def parse_key!(tokens)

def parse_key!(tokens)
  _, type, str = tokens.shift
  case type
  when :on_sp
    parse_key!(tokens)
  when :on_label
    str.tr(':', '')
  when :on_symbeg
    _, _, key = tokens.shift
    assert_type!(tokens.shift, :on_tstring_end) if str != ':'
    skip_until_hash_rocket!(tokens)
    key
  when :on_tstring_beg
    _, _, key = tokens.shift
    next_token = tokens.shift
    unless next_token[1] == :on_label_end
      assert_type!(next_token, :on_tstring_end)
      skip_until_hash_rocket!(tokens)
    end
    key
  else
    raise ParseSkip
  end
end