Module: Infoboxer::Parser::HTML

Includes:
Tree
Included in:
Infoboxer::Parser
Defined in:
lib/infoboxer/parser/html.rb

Instance Method Summary collapse

Instance Method Details

#htmlObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/infoboxer/parser/html.rb', line 7

def html
  case
  when @context.check(/\/[a-z]+>/)
    html_closing_tag
  when @context.check(/br\s*>/)
    html_br
  when @context.check(%r{[a-z]+[^/>]*/>})
    html_auto_closing_tag
  when @context.check(/[a-z]+[^>\/]*>/)
    html_opening_tag
  else
    # not an HTML tag at all!
    nil
  end
end

#html_auto_closing_tagObject



35
36
37
38
39
40
# File 'lib/infoboxer/parser/html.rb', line 35

def html_auto_closing_tag
  tag = @context.scan(/[a-z]+/)
  attrs = @context.scan(%r{[^/>]*})
  @context.skip(%r{/>})
  HTMLTag.new(tag, parse_params(attrs))
end

#html_brObject



30
31
32
33
# File 'lib/infoboxer/parser/html.rb', line 30

def html_br
  @context.skip(/br\s*>/)
  HTMLTag.new('br', {})
end

#html_closing_tagObject



23
24
25
26
27
28
# File 'lib/infoboxer/parser/html.rb', line 23

def html_closing_tag
  @context.skip(/\//)
  tag = @context.scan(/[a-z]+/)
  @context.skip(/>/)
  HTMLClosingTag.new(tag)
end

#html_opening_tagObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/infoboxer/parser/html.rb', line 42

def html_opening_tag
  tag = @context.scan(/[a-z]+/)
  attrs = @context.scan(/[^>]+/)
  @context.skip(/>/)
  contents = short_inline(/<\/#{tag}>/)
  if @context.matched =~ /<\/#{tag}>/
    HTMLTag.new(tag, parse_params(attrs), contents)
  else
    [
      HTMLOpeningTag.new(tag, parse_params(attrs)),
      *contents
    ]
  end
end