parse_link_attrs (OpenID)

    # File lib/openid/consumer/html_parse.rb, line 36
      def OpenID.parse_link_attrs(html)
        stripped = html.gsub(REMOVED_RE,'')
        parser = HTMLTokenizer.new(stripped)

        links = []
        # to keep track of whether or not we are in the head element
        in_head = false
        in_html = false
        saw_head = false

        begin
          while el = parser.getTag('head', '/head', 'link', 'body', '/body',
                                   'html', '/html')

            # we are leaving head or have reached body, so we bail
            return links if ['/head', 'body', '/body', '/html'].member?(el.tag_name)

            # enforce html > head > link
            if el.tag_name == 'html'
              in_html = true
            end
            next unless in_html
            if el.tag_name == 'head'
              if saw_head
                return links #only allow one head
              end
              saw_head = true
              unless el.to_s[-2] == 47 # tag ends with a /: a short tag
                in_head = true
              end
            end
            next unless in_head

            return links if el.tag_name == 'html'

            if el.tag_name == 'link'
              links << unescape_hash(el.attr_hash)
            end

          end
        rescue Exception # just stop parsing if there's an error
        end
        return links
      end