class Gammo::Parser::InsertionMode

Attributes

parser[R]

Public Class Methods

new(parser) click to toggle source
# File lib/gammo/parser/insertion_mode.rb, line 8
def initialize(parser)
  @parser  = parser
end

Public Instance Methods

process() click to toggle source
# File lib/gammo/parser/insertion_mode.rb, line 12
def process
  case token = parser.token
  when Tokenizer::ErrorToken          then consume(:error_token)
  when Tokenizer::TextToken           then consume(:text_token)
  when Tokenizer::StartTagToken       then consume(:start_tag_token)
  when Tokenizer::EndTagToken         then consume(:end_tag_token)
  when Tokenizer::SelfClosingTagToken then consume(:self_closing_tag_token)
  when Tokenizer::CommentToken        then consume(:comment_token)
  when Tokenizer::DoctypeToken        then consume(:doctype_token)
  else default token
  end
end

Private Instance Methods

consume(name) click to toggle source
# File lib/gammo/parser/insertion_mode.rb, line 31
def consume(name)
  catch :halt do
    token = parser.token
    __send__(name, token) if respond_to?(name)
    default token
  end
end
copy_attributes(dst, src) click to toggle source
# File lib/gammo/parser/insertion_mode.rb, line 39
def copy_attributes(dst, src)
  return if src.attributes.length.zero?
  attr = {}
  dst.attributes.each { |dattr| attr[dattr.key] = dattr.value }
  src.attributes.each do |sattr|
    unless attr.has_key?(sattr.key)
      dst.attributes << sattr
      attr[sattr.key] = sattr.value
    end
  end
end
halt(consumed) click to toggle source
# File lib/gammo/parser/insertion_mode.rb, line 27
def halt(consumed)
  throw :halt, consumed
end