Module: Infoboxer::Parser::Template

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

Instance Method Summary collapse

Instance Method Details

#templateObject

NB: here we are not distingish templates like {{Infobox|variable}} and "magic words" like {{formatnum:123}} Just calling all of them "templates". This behaviour will change in future, I presume More about magic words: https://www.mediawiki.org/wiki/Help:Magic_words



12
13
14
15
16
17
18
19
# File 'lib/infoboxer/parser/template.rb', line 12

def template
  name = @context.scan_continued_until(/\||:|}}/) or
    @context.fail!("Template name not found")

  name.strip!
  vars = @context.eat_matched?('}}') ? Nodes[] : template_vars
  @context.traits.templates.find(name).new(name, vars)
end

#template_varsObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/infoboxer/parser/template.rb', line 21

def template_vars
  num = 1
  res = Nodes[]

  guarded_loop do
    @context.next! while @context.eol?
    if @context.check(/\s*([^ =}|<]+)\s*=\s*/)
      name = @context.scan(/\s*([^ =]+)/).strip
      @context.skip(/\s*=\s*/)
    else
      name = num
      num += 1
    end

    value = long_inline(/\||}}/)
    unless value.empty? && name.is_a?(Numeric) # it was just empty line otherwise
      res << Var.new(name.to_s, value)
    end

    break if @context.eat_matched?('}}')
    @context.eof? and @context.fail!("Unexpected break of template variables: #{res}")
  end
  res
end