Omitting _table suffix for tests in wrpylib.mwdb.
[philipp/winterrodeln/wrpylib.git] / wrpylib / mwmarkup.py
1 #!/usr/bin/python3.4
2 # $Id$
3 # $HeadURL$
4 """For parsing MediaWiki text, we rely on the package mwparserfromhell (https://github.com/earwig/mwparserfromhell).
5 This module just contains a few additional useful functions.
6
7 Other Python MediaWiki parsers:
8 * py-wikimarkup https://github.com/dcramer/py-wikimarkup
9 * mwlib http://code.pediapress.com/wiki/wiki
10 * https://www.mediawiki.org/wiki/Alternative_parsers
11 """
12
13 class ParseError(RuntimeError):
14     """Exception used by some of the functions"""
15     pass
16
17
18 def format_template_table(template, keylen=None):
19     """Reformat the given template to be tabular.
20
21     >>> template
22     {{foo|bar|bazz=7}}
23     >>> format_template_table(template)
24     {{foo
25     | bar
26     | bazz = 7
27     }}
28
29     :param keylen: length of the keys or None for automatic determination
30     """
31     if keylen is None:
32         shown_keys = [len(param.name.strip()) for param in template.params if param.showkey]
33         keylen = max(shown_keys) if shown_keys else 0
34     template.name = '{}\n'.format(template.name.strip())
35     for param in template.params:
36         if param.showkey:
37             param.name = ' {{:{}}} '.format(keylen).format(param.name.strip())
38         value = param.value.strip()
39         if len(value) > 0:
40             param.value = ' {}\n'.format(value)
41         else:
42             param.value = '\n'
43
44
45 def format_template_oneline(template):
46     """Formats a template like this: {{template_name|param| }}
47     (whitespace is stripped and empty parameters are replaced with one space)."""
48     template.name = template.name.strip()
49     for param in template.params:
50         if param.showkey:
51             param.name = param.name.strip()
52         value = param.value.strip()
53         if value == '':
54             value = ' '
55         param.value = value