User:Odie5533/doctoparameter.py
Appearance
# 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()