#!/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")