81 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable file
		
	
	
	
	
#!/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")
 |