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



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

def html
  case
  when @context.check(%r{/[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(%r{[a-z]+[^>/]*>})
    html_opening_tag
  else
    # not an HTML tag at all!
    nil
  end
end

#html_auto_closing_tagObject



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

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



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

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

#html_closing_tagObject



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

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

#html_opening_tagObject



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

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