#!/usr/bin/env ruby
$:.unshift('../vendor/ruby-mediawiki/lib')
require 'mediawiki/dotfile'
@wiki = MediaWiki.dotfile(nil,'camp')

def parse_template(title, template)
  template_re = Regexp.new("\\\{\\\{" + template + "(.*?)\\\}\\\}", Regexp::MULTILINE)

  info = []

  if (scanned = @wiki.article(title).text.scan(template_re)) != []
    scanned.each do |m|
      fields = {}
      fields_string = m[0]

      inlink = 0
      field = ""
      fields_string += "|" unless fields_string.match(/\|$/)
      fields_string.split(//).each do |c|
        if c == "|" && inlink == 0
          (key, value) = field.split(/=/)
          value.chomp! if value
          fields[key] = value
          field = ""
        else
          inlink += 1 if c == "["
          inlink -= 1 if c == "]"
          field += c
        end
      end
      info << fields
    end
  else
    $stderr.print "Template #{template} not found in #{title}!\n"
  end
 
  info
end

list = "
<!-- 


 _   _ _____ _     _     ___    
| | | | ____| |   | |   / _ \   
| |_| |  _| | |   | |  | | | |  
|  _  | |___| |___| |__| |_| |  
|_| |_|_____|_____|_____\___( ) 
                            |/  

-->

''This is an auto-generated list - please use [[Template:Workshop]] (description is there) to include your workshop here. Contact [[User:Neingeist|Neingeist]] if you have problems or questions (Jabber is preferred.)''


"

@wiki.category("Workshop").articles.each do |article|
  if article != "Template:Workshop" && article != "List of workshops" && article != "ExampleVille"

    workshops = parse_template(article, "Workshop")

    workshops.each do |workshop|
      list += "* '''[[#{article}|#{workshop["what"]}]]''' "
      if workshop["day"] != ""
        list += "Day " + workshop["day"] + "/" + workshop["start"]
      end
      list += "\n"
      list += ":''#{workshop["where"]}''\n"
      list += "::#{workshop["abstract"]}\n"
    end
  end
end

list += "\n[[Category:Workshop]]\n"

puts list
a = @wiki.article("List of workshops")
a.text = list
a.submit("wiki ex machina")
a.protect("Automatically generated article")