|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- Usage
- =====
-
- Normal usage is rather straightforward (where ``text`` is page text)::
-
- >>> import mwparserfromhell
- >>> wikicode = mwparserfromhell.parse(text)
-
- ``wikicode`` is a :py:class:`mwparserfromhell.Wikicode <.Wikicode>` object,
- which acts like an ordinary ``unicode`` object (or ``str`` in Python 3) with
- some extra methods. For example::
-
- >>> text = "I has a template! {{foo|bar|baz|eggs=spam}} See it?"
- >>> wikicode = mwparserfromhell.parse(text)
- >>> print wikicode
- I has a template! {{foo|bar|baz|eggs=spam}} See it?
- >>> templates = wikicode.filter_templates()
- >>> print templates
- ['{{foo|bar|baz|eggs=spam}}']
- >>> template = templates[0]
- >>> print template.name
- foo
- >>> print template.params
- ['bar', 'baz', 'eggs=spam']
- >>> print template.get(1).value
- bar
- >>> print template.get("eggs").value
- spam
-
- Since every node you reach is also a :py:class:`~.Wikicode` object, it's
- trivial to get nested templates::
-
- >>> code = mwparserfromhell.parse("{{foo|this {{includes a|template}}}}")
- >>> print code.filter_templates()
- ['{{foo|this {{includes a|template}}}}']
- >>> foo = code.filter_templates()[0]
- >>> print foo.get(1).value
- this {{includes a|template}}
- >>> print foo.get(1).value.filter_templates()[0]
- {{includes a|template}}
- >>> print foo.get(1).value.filter_templates()[0].get(1).value
- template
-
- Additionally, you can include nested templates in :py:meth:`~.filter_templates`
- by passing *recursive=True*::
-
- >>> text = "{{foo|{{bar}}={{baz|{{spam}}}}}}"
- >>> mwparserfromhell.parse(text).filter_templates(recursive=True)
- ['{{foo|{{bar}}={{baz|{{spam}}}}}}', '{{bar}}', '{{baz|{{spam}}}}', '{{spam}}']
-
- Templates can be easily modified to add, remove alter or params.
- :py:class:`~.Wikicode` can also be treated like a list with
- :py:meth:`~.Wikicode.append`, :py:meth:`~.Wikicode.insert`,
- :py:meth:`~.Wikicode.remove`, :py:meth:`~.Wikicode.replace`, and more::
-
- >>> text = "{{cleanup}} '''Foo''' is a [[bar]]. {{uncategorized}}"
- >>> code = mwparserfromhell.parse(text)
- >>> for template in code.filter_templates():
- ... if template.name == "cleanup" and not template.has_param("date"):
- ... template.add("date", "July 2012")
- ...
- >>> print code
- {{cleanup|date=July 2012}} '''Foo''' is a [[bar]]. {{uncategorized}}
- >>> code.replace("{{uncategorized}}", "{{bar-stub}}")
- >>> print code
- {{cleanup|date=July 2012}} '''Foo''' is a [[bar]]. {{bar-stub}}
- >>> print code.filter_templates()
- ['{{cleanup|date=July 2012}}', '{{bar-stub}}']
-
- You can then convert ``code`` back into a regular :py:class:`unicode` object
- (for saving the page!) by calling :py:func:`unicode` on it::
-
- >>> text = unicode(code)
- >>> print text
- {{cleanup|date=July 2012}} '''Foo''' is a [[bar]]. {{bar-stub}}
- >>> text == code
- True
-
- (Likewise, use :py:func:`str(code) <str>` in Python 3.)
-
- For more tips, check out :py:class:`Wikicode's full method list <.Wikicode>`
- and the :py:mod:`list of Nodes <.nodes>`.
|