Browse Source

Document all other methods except the last three in Wikicode.

tags/v0.1
Ben Kurtovic 12 years ago
parent
commit
1bc6aa7d3e
1 changed files with 80 additions and 8 deletions
  1. +80
    -8
      mwparserfromhell/wikicode.py

+ 80
- 8
mwparserfromhell/wikicode.py View File

@@ -218,10 +218,11 @@ class Wikicode(StringMixIn):
def insert_before(self, obj, value, recursive=True): def insert_before(self, obj, value, recursive=True):
"""Insert *value* immediately before *obj* in the list of nodes. """Insert *value* immediately before *obj* in the list of nodes.


*value* can be anything parasable by
:py:func:`mwparserfromhell.utils.parse_anything`. If *recursive* is
``True``, we will try to find *obj* within our child nodes even if it
is not a direct descendant of this
*obj* can be either a string or a
:py:class:`~mwparserfromhell.nodes.Node`. *value* can be anything
parasable by :py:func:`mwparserfromhell.utils.parse_anything`. If
*recursive* is ``True``, we will try to find *obj* within our child
nodes even if it is not a direct descendant of this
:py:class:`~mwparserfromhell.wikicode.Wikicode` object. If *obj* is not :py:class:`~mwparserfromhell.wikicode.Wikicode` object. If *obj* is not
in the node list, :py:exc:`ValueError` is raised. in the node list, :py:exc:`ValueError` is raised.
""" """
@@ -231,10 +232,11 @@ class Wikicode(StringMixIn):
def insert_after(self, obj, value, recursive=True): def insert_after(self, obj, value, recursive=True):
"""Insert *value* immediately after *obj* in the list of nodes. """Insert *value* immediately after *obj* in the list of nodes.


*value* can be anything parasable by
:py:func:`mwparserfromhell.utils.parse_anything`. If *recursive* is
``True``, we will try to find *obj* within our child nodes even if it
is not a direct descendant of this
*obj* can be either a string or a
:py:class:`~mwparserfromhell.nodes.Node`. *value* can be anything
parasable by :py:func:`mwparserfromhell.utils.parse_anything`. If
*recursive* is ``True``, we will try to find *obj* within our child
nodes even if it is not a direct descendant of this
:py:class:`~mwparserfromhell.wikicode.Wikicode` object. If *obj* is not :py:class:`~mwparserfromhell.wikicode.Wikicode` object. If *obj* is not
in the node list, :py:exc:`ValueError` is raised. in the node list, :py:exc:`ValueError` is raised.
""" """
@@ -242,6 +244,16 @@ class Wikicode(StringMixIn):
self._do_search(obj, recursive, callback, self, value) self._do_search(obj, recursive, callback, self, value)


def replace(self, obj, value, recursive=True): def replace(self, obj, value, recursive=True):
"""Replace *obj* with *value* in the list of nodes.

*obj* can be either a string or a
:py:class:`~mwparserfromhell.nodes.Node`. *value* can be anything
parasable by :py:func:`mwparserfromhell.utils.parse_anything`. If
*recursive* is ``True``, we will try to find *obj* within our child
nodes even if it is not a direct descendant of this
:py:class:`~mwparserfromhell.wikicode.Wikicode` object. If *obj* is not
in the node list, :py:exc:`ValueError` is raised.
"""
def callback(self, i, value): def callback(self, i, value):
self.nodes.pop(i) self.nodes.pop(i)
self.insert(i, value) self.insert(i, value)
@@ -249,16 +261,41 @@ class Wikicode(StringMixIn):
self._do_search(obj, recursive, callback, self, value) self._do_search(obj, recursive, callback, self, value)


def append(self, value): def append(self, value):
"""Insert *value* at the end of the list of nodes.

*value* can be anything parasable by
:py:func:`mwparserfromhell.utils.parse_anything`.
"""
nodes = parse_anything(value).nodes nodes = parse_anything(value).nodes
for node in nodes: for node in nodes:
self.nodes.append(node) self.nodes.append(node)


def remove(self, obj, recursive=True): def remove(self, obj, recursive=True):
"""Remove *obj* from the list of nodes.

*obj* can be either a string or a
:py:class:`~mwparserfromhell.nodes.Node`. If *recursive* is ``True``,
we will try to find *obj* within our child nodes even if it is not a
direct descendant of this
:py:class:`~mwparserfromhell.wikicode.Wikicode` object. If *obj* is not
in the node list, :py:exc:`ValueError` is raised.
"""
callback = lambda self, i: self.nodes.pop(i) callback = lambda self, i: self.nodes.pop(i)
self._do_search(obj, recursive, callback, self) self._do_search(obj, recursive, callback, self)


def ifilter(self, recursive=False, matches=None, flags=FLAGS, def ifilter(self, recursive=False, matches=None, flags=FLAGS,
forcetype=None): forcetype=None):
"""Iterate over nodes in our list matching certain conditions.

If *recursive* is ``True``, we will iterate over our children and all
descendants of our children, otherwise just our immediate children. If
*matches* is given, we will only yield the nodes that match the given
regular expression (with :py:func:`re.search`). The default flags used
are :py:const:`re.IGNORECASE`, :py:const:`re.DOTALL`, and
:py:const:`re.UNICODE`, but custom flags can be specified by passing
*flags*. If *forcetype* is given, only nodes that are instances of this
type are yielded.
"""
if recursive: if recursive:
nodes = self._get_all_nodes(self) nodes = self._get_all_nodes(self)
else: else:
@@ -269,25 +306,60 @@ class Wikicode(StringMixIn):
yield node yield node


def ifilter_templates(self, recursive=False, matches=None, flags=FLAGS): def ifilter_templates(self, recursive=False, matches=None, flags=FLAGS):
"""Iterate over template nodes.

This is equivalent to :py:meth:`ifilter` with *forcetype* set to
:py:class:`~mwparserfromhell.nodes.template.Template`. It takes all
other arguments passable to :py:meth:`ifilter`.
"""
return self.filter(recursive, matches, flags, forcetype=Template) return self.filter(recursive, matches, flags, forcetype=Template)


def ifilter_text(self, recursive=False, matches=None, flags=FLAGS): def ifilter_text(self, recursive=False, matches=None, flags=FLAGS):
"""Iterate over text nodes.

This is equivalent to :py:meth:`ifilter` with *forcetype* set to
:py:class:`~mwparserfromhell.nodes.text.Text`.
"""
return self.filter(recursive, matches, flags, forcetype=Text) return self.filter(recursive, matches, flags, forcetype=Text)


def ifilter_tags(self, recursive=False, matches=None, flags=FLAGS): def ifilter_tags(self, recursive=False, matches=None, flags=FLAGS):
"""Iterate over tag nodes.

This is equivalent to :py:meth:`ifilter` with *forcetype* set to
:py:class:`~mwparserfromhell.nodes.tag.Tag`.
"""
return self.ifilter(recursive, matches, flags, forcetype=Tag) return self.ifilter(recursive, matches, flags, forcetype=Tag)


def filter(self, recursive=False, matches=None, flags=FLAGS, def filter(self, recursive=False, matches=None, flags=FLAGS,
forcetype=None): forcetype=None):
"""Return a list of nodes within our list matching certain conditions.

This is equivalent to calling :py:func:`list` on :py:meth:`ifilter`.
"""
return list(self.ifilter(recursive, matches, flags, forcetype)) return list(self.ifilter(recursive, matches, flags, forcetype))


def filter_templates(self, recursive=False, matches=None, flags=FLAGS): def filter_templates(self, recursive=False, matches=None, flags=FLAGS):
"""Return a list of template nodes.

This is equivalent to calling :py:func:`list` on
:py:meth:`ifilter_templates`.
"""
return list(self.ifilter_templates(recursive, matches, flags)) return list(self.ifilter_templates(recursive, matches, flags))


def filter_text(self, recursive=False, matches=None, flags=FLAGS): def filter_text(self, recursive=False, matches=None, flags=FLAGS):
"""Return a list of text nodes.

This is equivalent to calling :py:func:`list` on
:py:meth:`ifilter_text`.
"""
return list(self.ifilter_text(recursive, matches, flags)) return list(self.ifilter_text(recursive, matches, flags))


def filter_tags(self, recursive=False, matches=None, flags=FLAGS): def filter_tags(self, recursive=False, matches=None, flags=FLAGS):
"""Return a list of tag nodes.

This is equivalent to calling :py:func:`list` on
:py:meth:`ifilter_tags`.
"""
return list(self.ifilter_tags(recursive, matches, flags)) return list(self.ifilter_tags(recursive, matches, flags))


def get_sections(self, flat=True, matches=None, levels=None, flags=FLAGS, def get_sections(self, flat=True, matches=None, levels=None, flags=FLAGS,


Loading…
Cancel
Save