class HTMLTag

Class representing an HTML tag

Attributes

end_tag[R]
tag_name[R]

Public Class Methods

new(text) click to toggle source
Calls superclass method HTMLToken.new
# File lib/openid/yadis/htmltokenizer.rb, line 225
def initialize(text)
  super(text)
  if ?< != text[0] or ?> != text[-1]
    raise HTMLTokenizerError, "Text passed to HTMLComment.initialize is not a comment"
  end

  @attr_hash = Hash.new
  @raw = text

  tag_name = text.scan(/[\w:-]+/)[0]
  if tag_name.nil?
    raise HTMLTokenizerError, "Error, tag is nil: #{tag_name}"
  end

  if ?/ == text[1]
    # It's an end tag
    @end_tag = true
    @tag_name = '/' + tag_name.downcase
  else
    @end_tag = false
    @tag_name = tag_name.downcase
  end

  @hashed = false
end

Public Instance Methods

attr_hash() click to toggle source

Retrieve a hash of all the tag's attributes. Lazily done, so that if you don't look at a tag's attributes things go quicker

# File lib/openid/yadis/htmltokenizer.rb, line 254
def attr_hash
  # Lazy initialize == don't build the hash until it's needed
  if !@hashed
    if !@end_tag
      # Get the attributes
      attr_arr = @raw.scan(/<[\w:-]+\s+(.*?)\/?>/m)[0]
      if attr_arr.kind_of?(Array)
        # Attributes found, parse them
        attrs = attr_arr[0]
        attr_arr = attrs.scan(/\s*([\w:-]+)(?:\s*=\s*("[^"]*"|'[^']*'|([^"'>][^\s>]*)))?/m)
        # clean up the array by:
        # * setting all nil elements to true
        # * removing enclosing quotes
        attr_arr.each {
          |item|
          val = if item[1].nil?
                  item[0]
                elsif '"'[0] == item[1][0] or '\'[0] == item[1][0]
                  item[1][1 .. -2]
                else
                  item[1]
                end
          @attr_hash[item[0].downcase] = val
        }
      end
    end
    @hashed = true
  end

  #p self

  @attr_hash
end
text() click to toggle source

Get the 'alt' text for a tag, if it exists, or an empty string otherwise

# File lib/openid/yadis/htmltokenizer.rb, line 289
def text
  if !end_tag
    case tag_name
    when 'img'
      if !attr_hash['alt'].nil?
        return attr_hash['alt']
      end
    when 'applet'
      if !attr_hash['alt'].nil?
        return attr_hash['alt']
      end
    end
  end
  return ''
end