User:Odie5533/doctoparameter.py

# Simple script to create forms for my SnipManager
# Copyright (C) Odie5533
# GNU GPL 3.0+

import re
import urllib

def uniqify(seq):
    seen = {}
    result = []
    for item in seq:
        marker = item
        if marker in seen: continue
        seen[marker] = 1
        result.append(item)
    return result

base_url = "http://en.wikipedia.org/w/index.php?title=Template:%s&action=raw"
doc_base_url = "http://en.wikipedia.org/w/index.php?title=Template:%s/doc&action=raw"
wiki_page = raw_input("Template name (without Template:): ")
wiki_page = wiki_page.replace(" ", "_")
wiki_page_ = wiki_page.replace("_", " ")
page_url = base_url % (wiki_page)
doc_url = doc_base_url % (wiki_page)

uh = urllib.urlopen(page_url)
content = uh.read()
uh.close()

uh = urllib.urlopen(doc_url)
docs = uh.read()
uh.close()
if docs == '':
    docs = content

# Parse the parameters from the main template page
params = re.findall("{{{([^}\|]+)[^}]*}}}", content)
params = uniqify(params)

# Attempt to parse the help for the parameters from the docs
descriptions = {}
for param in params:
    reg = "'''%s''' (?:.\s+|–\s*)?(.*)" % (param)
    match = re.search(reg, docs, re.M)
    if match:
        desc = match.group(1)
        desc = desc.replace(r"'''", "")
        desc = desc.replace(r"''", "")
        desc = desc.replace("'", "\\'")
        desc = desc.replace("–", "-")
        if desc[3] == ' ':
            desc = desc[4:]
        descriptions[param] = desc

lines = ["'%s' : [ { 'prepend':'{{%s', 'append':'}}', 'description':'' }," % (wiki_page_, wiki_page_) ]
for s in params:
    help = ''
    if s in descriptions:
        help = descriptions[s]
    lines.append("        {'title':'%s:', 'code':'%s', 'help':'%s'}," % (s.capitalize(), s, help))
lines[-1] = lines[-1][:-1] #remove trailing comma
lines.append("    ],")

fo = open('%s.txt' % (wiki_page), 'w')
fo.write('\n'.join(lines))
fo.close()