changeset 38:1d8e9b1153d6

docstrings: convert epydoc fields to rst/sphinx fields
author Thomas Waldmann <tw AT waldmann-edv DOT de>
date Mon, 28 Feb 2011 04:34:17 +0100
parents 74a543f57ce7
children 23c10f59e082
files MoinMoin/app.py MoinMoin/apps/frontend/views.py MoinMoin/auth/__init__.py MoinMoin/config/default.py MoinMoin/converter/__init__.py MoinMoin/converter/_args_wiki.py MoinMoin/converter/_wiki_macro.py MoinMoin/converter/link.py MoinMoin/converter/pygments_in.py MoinMoin/converter/rst_out.py MoinMoin/datastruct/backends/__init__.py MoinMoin/datastruct/backends/composite_dicts.py MoinMoin/datastruct/backends/composite_groups.py MoinMoin/datastruct/backends/config_groups.py MoinMoin/error.py MoinMoin/items/__init__.py MoinMoin/macro/Date.py MoinMoin/mail/sendmail.py MoinMoin/search/Xapian/indexing.py MoinMoin/search/Xapian/search.py MoinMoin/search/Xapian/tokenizer.py MoinMoin/search/__init__.py MoinMoin/search/builtin.py MoinMoin/search/queryparser/__init__.py MoinMoin/search/queryparser/expressions.py MoinMoin/search/results.py MoinMoin/search/term.py MoinMoin/security/__init__.py MoinMoin/security/textcha.py MoinMoin/security/ticket.py MoinMoin/storage/__init__.py MoinMoin/storage/backends/_fsutils.py MoinMoin/storage/backends/acl.py MoinMoin/storage/backends/fileserver.py MoinMoin/storage/backends/flatfile.py MoinMoin/storage/backends/fs.py MoinMoin/storage/backends/fs19.py MoinMoin/storage/backends/fs19_logfile.py MoinMoin/storage/backends/fs2.py MoinMoin/storage/backends/memory.py MoinMoin/storage/backends/router.py MoinMoin/storage/backends/sqla.py MoinMoin/storage/serialization.py MoinMoin/themes/__init__.py MoinMoin/user.py MoinMoin/util/__init__.py MoinMoin/util/diff_html.py MoinMoin/util/diff_text.py MoinMoin/util/filesys.py MoinMoin/util/interwiki.py MoinMoin/util/iri.py MoinMoin/util/lock.py MoinMoin/util/mime.py MoinMoin/util/paramparser.py MoinMoin/util/plugins.py MoinMoin/util/profile.py MoinMoin/util/pysupport.py MoinMoin/util/registry.py MoinMoin/util/tree.py MoinMoin/wikiutil.py
diffstat 60 files changed, 788 insertions(+), 788 deletions(-) [+]
line wrap: on
line diff
--- a/MoinMoin/app.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/app.py	Mon Feb 28 04:34:17 2011 +0100
@@ -45,18 +45,18 @@
     """
     Factory for moin wsgi apps
 
-    @param flask_config_file: a flask config file name (may have a MOINCFG class),
+    :param flask_config_file: a flask config file name (may have a MOINCFG class),
                               if not given, a config pointed to by MOINCFG env var
                               will be loaded (if possible).
-    @param flask_config_dict: a dict used to update flask config (applied after
+    :param flask_config_dict: a dict used to update flask config (applied after
                               flask_config_file was loaded [if given])
-    @param moin_config_class: if you give this, it'll be instantiated as app.cfg,
+    :param moin_config_class: if you give this, it'll be instantiated as app.cfg,
                               otherwise it'll use MOINCFG from flask config. If that
                               also is not there, it'll use the DefaultConfig built
                               into MoinMoin.
-    @param warn_default: emit a warning if moin falls back to its builtin default
+    :param warn_default: emit a warning if moin falls back to its builtin default
                          config (maybe user forgot to specify MOINCFG?)
-    @param **kwargs: if you give additional key/values here, they'll get patched
+    :param **kwargs: if you give additional key/values here, they'll get patched
                      into the moin configuration class (before it instance is created)
     """
     clock = Clock()
--- a/MoinMoin/apps/frontend/views.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/apps/frontend/views.py	Mon Feb 28 04:34:17 2011 +0100
@@ -487,9 +487,9 @@
     """
     Returns the list of all items that link or transclude item_name
 
-    @param item_name: the name of the current item
-    @type item_name: unicode
-    @return: a page with all the items which link or transclude item_name
+    :param item_name: the name of the current item
+    :type item_name: unicode
+    :returns: a page with all the items which link or transclude item_name
     """
     refs_here = _backrefs(flaskg.storage.iteritems(), item_name)
     return render_template('item_link_list.html',
@@ -503,11 +503,11 @@
     """
     Returns a list with all names of items which ref item_name
 
-    @param items: all the items
-    @type items: iteratable sequence
-    @param item_name: the name of the item transcluded or linked
-    @type item_name: unicode
-    @return: the list of all items which ref item_name
+    :param items: all the items
+    :type items: iteratable sequence
+    :param item_name: the name of the item transcluded or linked
+    :type item_name: unicode
+    :returns: the list of all items which ref item_name
     """
     refs_here = []
     for item in items:
@@ -570,9 +570,9 @@
     Returns a dict with all the names of non-existing items which are refed by
     other items and the items which are refed by
 
-    @param items: all the items
-    @type items: iteratable sequence
-    @return: a dict with all the wanted items and the items which are beign refed by
+    :param items: all the items
+    :type items: iteratable sequence
+    :returns: a dict with all the wanted items and the items which are beign refed by
     """
     all_items = set()
     wanteds = {}
@@ -616,9 +616,9 @@
     """
     Returns a list with the names of all existing items not being refed by any other item
 
-    @param items: the list of all items
-    @type items: iteratable sequence
-    @return: the list of all orphaned items
+    :param items: the list of all items
+    :type items: iteratable sequence
+    :returns: the list of all orphaned items
     """
     linked_items = set()
     transcluded_items = set()
@@ -1388,11 +1388,11 @@
 def findMatches(item_name, s_re=None, e_re=None):
     """ Find similar item names.
 
-    @param item_name: name to match
-    @param s_re: start re for wiki matching
-    @param e_re: end re for wiki matching
-    @rtype: tuple
-    @return: start word, end word, matches dict
+    :param item_name: name to match
+    :param s_re: start re for wiki matching
+    :param e_re: end re for wiki matching
+    :rtype: tuple
+    :returns: start word, end word, matches dict
     """
     item_names = [item.name for item in flaskg.storage.iteritems()]
     if item_name in item_names:
@@ -1425,12 +1425,12 @@
         2 - match end
         1 - match start
 
-    @param item_name: item name to match
-    @param item_names: list of item names
-    @param start_re: start word re (compile regex)
-    @param end_re: end word re (compile regex)
-    @rtype: tuple
-    @return: start, end, matches dict
+    :param item_name: item name to match
+    :param item_names: list of item names
+    :param start_re: start word re (compile regex)
+    :param end_re: end word re (compile regex)
+    :rtype: tuple
+    :returns: start, end, matches dict
     """
     if start_re is None:
         start_re = re.compile('([%s][%s]+)' % (config.chars_upper,
@@ -1475,10 +1475,10 @@
 
     Return all matching item names with rank above cutoff value.
 
-    @param item_name: item name to match
-    @param item_names: list of item names
-    @rtype: list
-    @return: list of matching item names, sorted by rank
+    :param item_name: item name to match
+    :param item_names: list of item names
+    :rtype: list
+    :returns: list of matching item names, sorted by rank
     """
     # Match using case insensitive matching
     # Make mapping from lower item names to item names.
--- a/MoinMoin/auth/__init__.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/auth/__init__.py	Mon Feb 28 04:34:17 2011 +0100
@@ -149,8 +149,8 @@
        authentication at the auth method requesting it (parameter auth_name.)
        Additional fields are added to the URL from the extra_fields dict.
 
-       @param auth_name: name of the auth method requesting the continuation
-       @param extra_fields: extra GET fields to add to the URL
+       :param auth_name: name of the auth method requesting the continuation
+       :param extra_fields: extra GET fields to add to the URL
     """
     # logically, this belongs to request, but semantically it should
     # live in auth so people do auth.get_multistage_continuation_url()
--- a/MoinMoin/config/default.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/config/default.py	Mon Feb 28 04:34:17 2011 +0100
@@ -267,7 +267,7 @@
 
         If you don't want to check passwords, use password_checker = None.
 
-        @return: None if there is no problem with the password,
+        :returns: None if there is no problem with the password,
                  some unicode object with an error msg, if the password is problematic.
     """
     # in any case, do a very simple built-in check to avoid the worst passwords
--- a/MoinMoin/converter/__init__.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/converter/__init__.py	Mon Feb 28 04:34:17 2011 +0100
@@ -74,7 +74,7 @@
         """
         Register a factory
 
-        @param factory: Factory to register. Callable, must return an object
+        :param factory: Factory to register. Callable, must return an object
         """
         return self._register(self.Entry(factory, type_input, type_output, priority))
 
--- a/MoinMoin/converter/_args_wiki.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/converter/_args_wiki.py	Mon Feb 28 04:34:17 2011 +0100
@@ -37,8 +37,8 @@
     Parse <input> for positional and keyword arguments, with value quoting and
     quotes escaping.
 
-    @param input: can be like: a b c d=e f="g h" i='j k' l="\"m\" n" o='\'p\' q'
-    @return: Argument instance
+    :param input: can be like: a b c d=e f="g h" i='j k' l="\"m\" n" o='\'p\' q'
+    :returns: Argument instance
     """
     ret = Arguments()
 
@@ -63,8 +63,8 @@
     Argument values that need quoting will be quoted.
     Keyword names must never need quoting (would raise ValueError).
 
-    @param args: Argument instance
-    @return: argument unicode object
+    :param args: Argument instance
+    :returns: argument unicode object
     """
     ret = []
 
--- a/MoinMoin/converter/_wiki_macro.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/converter/_wiki_macro.py	Mon Feb 28 04:34:17 2011 +0100
@@ -136,7 +136,7 @@
         """
         Should be overriden to format text in some macros according to the
         input type.
-        @return: Sequence of (ET.Element, unicode)
+        :returns: Sequence of (ET.Element, unicode)
         """
         return [text]
 
--- a/MoinMoin/converter/link.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/converter/link.py	Mon Feb 28 04:34:17 2011 +0100
@@ -83,12 +83,12 @@
         """
         Converts a relative iri path into an absolute one
 
-        @param path: the relative path to be converted
-        @type path: Iri.path
-        @param current_page_path: the path of the page where the link is
-        @type current_page_path: Iri.path
-        @return: the absolute equivalent of the relative path
-        @rtype: Iri.path
+        :param path: the relative path to be converted
+        :type path: Iri.path
+        :param current_page_path: the path of the page where the link is
+        :type current_page_path: Iri.path
+        :returns: the absolute equivalent of the relative path
+        :rtype: Iri.path
         """
         quoted_path = path.quoted
         # starts from 1 because 0 is always / for the current page
@@ -213,9 +213,9 @@
     def handle_wikilocal_links(self, elem, input, page):
         """
         Adds the link item from the input param to self.links
-        @param elem: the element of the link
-        @param input: the iri of the link
-        @param page: the iri of the page where the link is
+        :param elem: the element of the link
+        :param input: the iri of the link
+        :param page: the iri of the page where the link is
         """
         path = input.path
         if not path or ':' in path:
@@ -227,9 +227,9 @@
     def handle_wikilocal_transclusions(self, elem, input, page):
         """
         Adds the transclusion item from input argument to self.transclusions
-        @param elem: the element of the transclusion
-        @param input: the iri of the transclusion
-        @param page: the iri of the page where the transclusion is
+        :param elem: the element of the transclusion
+        :param input: the iri of the transclusion
+        :param page: the iri of the page where the transclusion is
         """
         path = input.path
         if not path or ':' in path:
--- a/MoinMoin/converter/pygments_in.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/converter/pygments_in.py	Mon Feb 28 04:34:17 2011 +0100
@@ -91,8 +91,8 @@
             """
             Create a Pygments Converter.
 
-            @param lexer: pygments lexer instance
-            @param mimetype: mimetype to get a lexer for
+            :param lexer: pygments lexer instance
+            :param mimetype: mimetype to get a lexer for
             """
             if lexer is None and mimetype is not None:
                 try:
--- a/MoinMoin/converter/rst_out.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/converter/rst_out.py	Mon Feb 28 04:34:17 2011 +0100
@@ -87,7 +87,7 @@
         """
         Adds cell to the row.
 
-        @param cs: number of columns spanned
+        :param cs: number of columns spanned
         """
         if cs < 1 or rs < 1:
             return
@@ -103,13 +103,13 @@
 
     def height(self):
         """
-        @return: number of rows in the table
+        :returns: number of rows in the table
         """
         return len(self.table)
 
     def width(self):
         """
-        @return: width of rows in the table or zero if rows have different width
+        :returns: width of rows in the table or zero if rows have different width
         """
         if not self.table:
             return 0
@@ -123,8 +123,8 @@
         """
         Counts the width of the column in ReSturcturedText representation.
 
-        @param col: index of the column
-        @return: number of characters
+        :param col: index of the column
+        :returns: number of characters
         """
         if self.width() <= col:
             return 0
@@ -138,8 +138,8 @@
         """
         Counts lines in ReSturcturedText representation of the row
 
-        @param row: index of the row
-        @return: number of lines
+        :param row: index of the row
+        :returns: number of lines
         """
         if self.height() <= row:
             return 0
--- a/MoinMoin/datastruct/backends/__init__.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/datastruct/backends/__init__.py	Mon Feb 28 04:34:17 2011 +0100
@@ -33,8 +33,8 @@
         """
         Initialize a group.
 
-        @param name: moin group name
-        @param backend: backend object which created this object
+        :param name: moin group name
+        :param backend: backend object which created this object
         """
         self.name = name
         self._backend = backend
@@ -68,7 +68,7 @@
         """
         Iterate over moin group names of the groups defined in this backend.
 
-        @return: moin group names
+        :returns: moin group names
         """
         raise NotImplementedError()
 
@@ -88,8 +88,8 @@
         """
         List all group names of groups containing <member>.
 
-        @param member: member name [unicode]
-        @return: list of group names [unicode]
+        :param member: member name [unicode]
+        :returns: list of group names [unicode]
         """
         for group_name in self:
             try:
@@ -194,8 +194,8 @@
         <processed_groups> is needed to avoid infinite recursion, if
         groups are defined recursively.
 
-        @param member: member name [unicode]
-        @param processed_groups: groups which were checked for containment before [set]
+        :param member: member name [unicode]
+        :param processed_groups: groups which were checked for containment before [set]
         """
 
         if processed_groups is None:
@@ -222,8 +222,8 @@
            OneGroup: Something, OtherGroup
            OtherGroup: OneGroup, SomethingOther
 
-        @param yielded_members: members which have been already yielded before [set]
-        @param processed_groups: group names which have been iterated before [set]
+        :param yielded_members: members which have been already yielded before [set]
+        :param processed_groups: group names which have been iterated before [set]
         """
 
         if processed_groups is None:
@@ -262,8 +262,8 @@
         Initialize a dict. Dicts are greedy, it stores all keys and
         items internally.
 
-        @param name: moin dict name
-        @param backend: backend object which created this object
+        :param name: moin dict name
+        :param backend: backend object which created this object
         """
         self.name = name
         self._backend = backend
--- a/MoinMoin/datastruct/backends/composite_dicts.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/datastruct/backends/composite_dicts.py	Mon Feb 28 04:34:17 2011 +0100
@@ -16,7 +16,7 @@
 
     def __init__(self, *backends):
         """
-        @param backends: list of dict backends which are used to get
+        :param backends: list of dict backends which are used to get
                          access to the dict definitions.
         """
         super(CompositeDicts, self).__init__()
--- a/MoinMoin/datastruct/backends/composite_groups.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/datastruct/backends/composite_groups.py	Mon Feb 28 04:34:17 2011 +0100
@@ -21,7 +21,7 @@
 
     def __init__(self, *backends):
         """
-        @param backends: list of group backends which are used to get
+        :param backends: list of group backends which are used to get
                          access to the group definitions.
         """
         super(CompositeGroups, self).__init__()
@@ -58,7 +58,7 @@
         """
         Check if a group called group_name is available in any of the backends.
 
-        @param group_name: name of the group [unicode]
+        :param group_name: name of the group [unicode]
         """
         for backend in self._backends:
             if group_name in backend:
--- a/MoinMoin/datastruct/backends/config_groups.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/datastruct/backends/config_groups.py	Mon Feb 28 04:34:17 2011 +0100
@@ -20,7 +20,7 @@
 
     def __init__(self, groups):
         """
-        @param groups: Dictionary of groups where key is group name,
+        :param groups: Dictionary of groups where key is group name,
         and value is list of members of that group.
         """
         super(ConfigGroups, self).__init__()
--- a/MoinMoin/error.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/error.py	Mon Feb 28 04:34:17 2011 +0100
@@ -31,7 +31,7 @@
     def __init__(self, message):
         """ Initialize an error, decode if needed
 
-        @param message: unicode, str or object that support __unicode__
+        :param message: unicode, str or object that support __unicode__
             and __str__. __str__ should use config.charset.
         """
         self.message = message
--- a/MoinMoin/items/__init__.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/items/__init__.py	Mon Feb 28 04:34:17 2011 +0100
@@ -464,8 +464,8 @@
         hook that can be used to add more meta data to a revision before
         it is committed.
 
-        @param newrev: new (still uncommitted) revision - modify as wanted
-        @param data: either str or open file (we can avoid having to read/seek
+        :param newrev: new (still uncommitted) revision - modify as wanted
+        :param data: either str or open file (we can avoid having to read/seek
                      rev's data with this)
         """
         remote_addr = request.remote_addr
@@ -730,7 +730,7 @@
         """
         return a file-like object with the member file data
 
-        @param name: name of the data in the container file
+        :param name: name of the data in the container file
         """
         self.rev.seek(0)
         tf = tarfile.open(fileobj=self.rev, mode='r')
@@ -742,10 +742,10 @@
         If all expected members have been put, it saves the tar container
         to a new item revision.
 
-        @param name: name of the data in the container file
-        @param content: the data to store into the tar file (str or file-like)
-        @param content_length: byte-length of content (for str, None can be given)
-        @param expected_members: set of expected member file names
+        :param name: name of the data in the container file
+        :param content: the data to store into the tar file (str or file-like)
+        :param content_length: byte-length of content (for str, None can be given)
+        :param expected_members: set of expected member file names
         """
         if not name in expected_members:
             raise StorageError("tried to add unexpected member %r to container item %r" % (name, self.name))
@@ -805,7 +805,7 @@
         """
         return a file-like object with the member file data
 
-        @param name: name of the data in the zip file
+        :param name: name of the data in the zip file
         """
         self.rev.seek(0)
         zf = zipfile.ZipFile(self.rev, mode='r')
--- a/MoinMoin/macro/Date.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/macro/Date.py	Mon Feb 28 04:34:17 2011 +0100
@@ -18,9 +18,9 @@
     def parse_time(self, args):
         """ parse a time specification argument for usage by Date and DateTime macro
 
-        @param args: YYYY-MM-DDTHH:MM:SS (plus optional Z for UTC, or +/-HHMM) or
+        :param args: YYYY-MM-DDTHH:MM:SS (plus optional Z for UTC, or +/-HHMM) or
                      float/int UNIX timestamp
-        @returns: UNIX timestamp (UTC)
+        :returns: UNIX timestamp (UTC)
         """
         if args is None:
             tm = time.time() # always UTC
--- a/MoinMoin/mail/sendmail.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/mail/sendmail.py	Mon Feb 28 04:34:17 2011 +0100
@@ -28,13 +28,13 @@
     e.g. '"J├╝rgen Hermann" <jh@web.de>'. According to the RFC, the name
     part should be encoded, the address should not.
 
-    @param address: email address, possibly using '"name" <address>' format
-    @type address: unicode
-    @param charset: specifying both the charset and the encoding, e.g
+    :param address: email address, possibly using '"name" <address>' format
+    :type address: unicode
+    :param charset: specifying both the charset and the encoding, e.g
                     quoted printable or base64.
-    @type charset: email.Charset.Charset instance
-    @rtype: string
-    @return: encoded address
+    :type charset: email.Charset.Charset instance
+    :rtype: string
+    :returns: encoded address
     """
     assert isinstance(address, unicode)
     composite = re.compile(r'(?P<phrase>.*?)(?P<blanks>\s*)\<(?P<addr>.*)\>', re.UNICODE)
@@ -62,13 +62,13 @@
 
     Return a tuple of success or error indicator and message.
 
-    @param to: recipients (list)
-    @param subject: subject of email (unicode)
-    @param text: email body text (unicode)
-    @param mail_from: override default mail_from
-    @type mail_from: unicode
-    @rtype: tuple
-    @return: (is_ok, Description of error or OK message)
+    :param to: recipients (list)
+    :param subject: subject of email (unicode)
+    :param text: email body text (unicode)
+    :param mail_from: override default mail_from
+    :type mail_from: unicode
+    :rtype: tuple
+    :returns: (is_ok, Description of error or OK message)
     """
     import smtplib, socket
     from email.Message import Message
@@ -179,12 +179,12 @@
 
 def encodeSpamSafeEmail(email_address, obfuscation_text=''):
     """ Encodes a standard email address to an obfuscated address
-    @param email_address: mail address to encode.
+    :param email_address: mail address to encode.
                           Known characters and their all-uppercase words translation:
                           "." -> " DOT "
                           "@" -> " AT "
                           "-" -> " DASH "
-    @param obfuscation_text: optional text to obfuscate the email.
+    :param obfuscation_text: optional text to obfuscate the email.
                              All characters in the string must be alphabetic
                              and they will be added in uppercase.
     """
@@ -214,9 +214,9 @@
 
     Blanks (spaces) simply get stripped.
 
-    @param address: obfuscated email address string
-    @rtype: string
-    @return: decoded email address
+    :param address: obfuscated email address string
+    :rtype: string
+    :returns: decoded email address
     """
     email = []
 
--- a/MoinMoin/search/Xapian/indexing.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/search/Xapian/indexing.py	Mon Feb 28 04:34:17 2011 +0100
@@ -34,7 +34,7 @@
 
     def __init__(self, *args, **kwargs):
         """
-        @keyword encoding: specify the encoding manually (default: value of config.charset)
+        :keyword encoding: specify the encoding manually (default: value of config.charset)
         """
         self.encoding = kwargs.get('encoding', config.charset)
 
@@ -149,9 +149,9 @@
         """
         Perform the search using xapian
 
-        @param query: the search query objects
-        @param sort: the sorting of the results (default: 'weight')
-        @param historysearch: whether to search in all page revisions (default: 0) TODO: use/implement this
+        :param query: the search query objects
+        :param sort: the sorting of the results (default: 'weight')
+        :param historysearch: whether to search in all page revisions (default: 0) TODO: use/implement this
         """
         while True:
             try:
@@ -184,7 +184,7 @@
     def do_queued_updates(self, amount=-1):
         """ Index <amount> entries from the indexer queue.
 
-            @param amount: amount of queue entries to process (default: -1 == all)
+            :param amount: amount of queue entries to process (default: -1 == all)
         """
         try:
             request = self._indexingRequest(self.request)
@@ -264,7 +264,7 @@
     def _get_languages(self, page):
         """ Get language of a page and the language to stem it in
 
-        @param page: the page instance
+        :param page: the page instance
         """
         lang = None
         default_lang = app.cfg.language_default
@@ -290,7 +290,7 @@
     def _get_domains(self, page):
         """ Returns a generator with all the domains the page belongs to
 
-        @param page: page
+        :param page: page
         """
         if page.isStandardPage():
             yield 'standard'
@@ -302,10 +302,10 @@
 
         Index all revisions (if wanted by configuration) and all attachments.
 
-        @param request: request suitable for indexing
-        @param connection: the Indexer connection object
-        @param pagename: a page name
-        @param mode: 'add' = just add, no checks
+        :param request: request suitable for indexing
+        :param connection: the Indexer connection object
+        :param pagename: a page name
+        :param mode: 'add' = just add, no checks
                      'update' = check if already in index and update if needed (mtime)
         """
         page = Page(request, pagename)
@@ -355,11 +355,11 @@
     def _index_page_rev(self, request, connection, pagename, revno, mode='update'):
         """ Index a page revision.
 
-        @param request: request suitable for indexing
-        @param connection: the Indexer connection object
-        @param pagename: the page name
-        @param revno: page revision number (int)
-        @param mode: 'add' = just add, no checks
+        :param request: request suitable for indexing
+        :param connection: the Indexer connection object
+        :param pagename: the page name
+        :param revno: page revision number (int)
+        :param mode: 'add' = just add, no checks
                      'update' = check if already in index and update if needed (mtime)
         """
         page = Page(request, pagename, rev=revno)
@@ -404,10 +404,10 @@
     def _remove_page_rev(self, request, connection, pagename, revno):
         """ Remove a page revision from the index.
 
-        @param request: request suitable for indexing
-        @param connection: the Indexer connection object
-        @param pagename: the page name
-        @param revno: a real revision number (int), > 0
+        :param request: request suitable for indexing
+        :param connection: the Indexer connection object
+        :param pagename: the page name
+        :param revno: a real revision number (int), > 0
         """
         wikiname = app.cfg.interwikiname or u"Self"
         revision = str(revno)
@@ -418,11 +418,11 @@
     def _index_attachment(self, request, connection, pagename, attachmentname, mode='update'):
         """ Index an attachment
 
-        @param request: request suitable for indexing
-        @param connection: the Indexer connection object
-        @param pagename: the page name
-        @param attachmentname: the attachment's name
-        @param mode: 'add' = just add, no checks
+        :param request: request suitable for indexing
+        :param connection: the Indexer connection object
+        :param pagename: the page name
+        :param attachmentname: the attachment's name
+        :param mode: 'add' = just add, no checks
                      'update' = check if already in index and update if needed (mtime)
         """
         from MoinMoin.action import AttachFile
@@ -466,10 +466,10 @@
     def _index_file(self, request, connection, filename, mode='update'):
         """ index files (that are NOT attachments, just arbitrary files)
 
-        @param request: request suitable for indexing
-        @param connection: the Indexer connection object
-        @param filename: a filesystem file name
-        @param mode: 'add' = just add, no checks
+        :param request: request suitable for indexing
+        :param connection: the Indexer connection object
+        :param filename: a filesystem file name
+        :param mode: 'add' = just add, no checks
                      'update' = check if already in index and update if needed (mtime)
         """
         wikiname = app.cfg.interwikiname or u"Self"
@@ -508,11 +508,11 @@
 
         This should be called from indexPages only!
 
-        @param request: request suitable for indexing
-        @param files: an optional list of files to index
-        @param mode: 'add' = just add, no checks
+        :param request: request suitable for indexing
+        :param files: an optional list of files to index
+        :param mode: 'add' = just add, no checks
                      'update' = check if already in index and update if needed (mtime)
-        @param pages: list of pages to index, if not given, all pages are indexed
+        :param pages: list of pages to index, if not given, all pages are indexed
         """
         if pages is None:
             # Index all pages
--- a/MoinMoin/search/Xapian/search.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/search/Xapian/search.py	Mon Feb 28 04:34:17 2011 +0100
@@ -30,7 +30,7 @@
     def _xapian_index(self):
         """ Get the xapian index if possible
 
-        @param request: current request
+        :param request: current request
         """
         index = XapianIndex(self.request)
 
--- a/MoinMoin/search/Xapian/tokenizer.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/search/Xapian/tokenizer.py	Mon Feb 28 04:34:17 2011 +0100
@@ -44,7 +44,7 @@
 
     def __init__(self, language=None):
         """
-        @param language: if given, the language in which to stem words
+        :param language: if given, the language in which to stem words
         """
         self.stemmer = None
         if app.cfg.xapian_stemming and language:
@@ -77,7 +77,7 @@
     def raw_tokenize(self, value):
         """ Yield a stream of words from a string.
 
-        @param value: string to split, must be an unicode object or a list of
+        :param value: string to split, must be an unicode object or a list of
                       unicode objects
         """
         if isinstance(value, list): # used for page links
@@ -104,7 +104,7 @@
         """
         Yield a stream of raw lower cased and stemmed words from a string.
 
-        @param value: string to split, must be an unicode object or a list of
+        :param value: string to split, must be an unicode object or a list of
                       unicode objects
         """
         if self.stemmer:
--- a/MoinMoin/search/__init__.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/search/__init__.py	Mon Feb 28 04:34:17 2011 +0100
@@ -23,16 +23,16 @@
     """
     Search the text of all pages for query.
 
-    @param request: current request
-    @param query: the expression (string or query objects) we want to search for
-    @keyword sort: sorting of the search results, either 'weight' or 'page_name'
-    @keyword mtime: only items modified since mtime
-    @keyword historysearch: include older revisions of items in search
-    @keyword titlesearch: treat all terms as title searches (passed to qp)
-    @keyword case: do case sensitive search (passed to qp)
-    @keyword regex: treat all terms as regular expression (passed to qp)
-    @rtype: SearchResults instance
-    @return: search results
+    :param request: current request
+    :param query: the expression (string or query objects) we want to search for
+    :keyword sort: sorting of the search results, either 'weight' or 'page_name'
+    :keyword mtime: only items modified since mtime
+    :keyword historysearch: include older revisions of items in search
+    :keyword titlesearch: treat all terms as title searches (passed to qp)
+    :keyword case: do case sensitive search (passed to qp)
+    :keyword regex: treat all terms as regular expression (passed to qp)
+    :rtype: SearchResults instance
+    :returns: search results
     """
     return _get_searcher(request, query, sort, mtime, historysearch, **kw).run()
 
--- a/MoinMoin/search/builtin.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/search/builtin.py	Mon Feb 28 04:34:17 2011 +0100
@@ -41,10 +41,10 @@
 
     def __init__(self, request, xapian_dir, queuename, timeout=10.0):
         """
-        @param request: request object
-        @param xapian_dir: the xapian main directory
-        @param queuename: name of the queue (used for caching key)
-        @param timeout: lock acquire timeout
+        :param request: request object
+        :param xapian_dir: the xapian main directory
+        :param queuename: name of the queue (used for caching key)
+        :param timeout: lock acquire timeout
         """
         self.request = request
         self.xapian_dir = xapian_dir
@@ -66,9 +66,9 @@
     def put(self, pagename, attachmentname=None, revno=None):
         """ Put an entry into the queue (append at end)
 
-        @param pagename: page name [unicode]
-        @param attachmentname: attachment name [unicode]
-        @param revno: revision number (int) or None (all revs)
+        :param pagename: page name [unicode]
+        :param attachmentname: attachment name [unicode]
+        :param revno: revision number (int) or None (all revs)
         """
         cache = self.get_cache(locking=False) # we lock manually
         cache.lock('w', 60.0)
@@ -101,7 +101,7 @@
 
     def __init__(self, request):
         """
-        @param request: current request
+        :param request: current request
         """
         self.request = request
         self.main_dir = self._main_dir()
@@ -127,24 +127,24 @@
     def _search(self, query):
         """ Actually perfom the search
 
-        @param query: the search query objects tree
+        :param query: the search query objects tree
         """
         raise NotImplemented('...')
 
     def search(self, query, **kw):
         """ Search for items in the index
 
-        @param query: the search query objects to pass to the index
+        :param query: the search query objects to pass to the index
         """
         return self._search(query, **kw)
 
     def update_item(self, pagename, attachmentname=None, revno=None, now=True):
         """ Update a single item (page or attachment) in the index
 
-        @param pagename: the name of the page to update
-        @param attachmentname: the name of the attachment to update
-        @param revno: a specific revision number (int) or None (all revs)
-        @param now: do all updates now (default: True)
+        :param pagename: the name of the page to update
+        :param attachmentname: the name of the attachment to update
+        :param revno: a specific revision number (int) or None (all revs)
+        :param now: do all updates now (default: True)
         """
         self.update_queue.put(pagename, attachmentname, revno)
         if now:
@@ -153,9 +153,9 @@
     def indexPages(self, files=None, mode='update', pages=None):
         """ Index pages (and files, if given)
 
-        @param files: iterator or list of files to index additionally
-        @param mode: set the mode of indexing the pages, either 'update' or 'add'
-        @param pages: list of pages to index, if not given, all pages are indexed
+        :param files: iterator or list of files to index additionally
+        :param mode: set the mode of indexing the pages, either 'update' or 'add'
+        :param pages: list of pages to index, if not given, all pages are indexed
         """
         start = time.time()
         request = self._indexingRequest(self.request)
@@ -168,10 +168,10 @@
 
         This should be called from indexPages only!
 
-        @param request: current request
-        @param files: iterator or list of files to index additionally
-        @param mode: set the mode of indexing the pages, either 'update' or 'add'
-        @param pages: list of pages to index, if not given, all pages are indexed
+        :param request: current request
+        :param files: iterator or list of files to index additionally
+        :param mode: set the mode of indexing the pages, either 'update' or 'add'
+        :param pages: list of pages to index, if not given, all pages are indexed
 
         """
         raise NotImplemented('...')
@@ -179,8 +179,8 @@
     def do_queued_updates(self, amount=-1):
         """ Perform updates in the queues
 
-        @param request: the current request
-        @keyword amount: how many updates to perform at once (default: -1 == all)
+        :param request: the current request
+        :keyword amount: how many updates to perform at once (default: -1 == all)
         """
         raise NotImplemented('...')
 
@@ -191,7 +191,7 @@
     def contentfilter(self, filename):
         """ Get a filter for content of filename and return unicode content.
 
-        @param filename: name of the file
+        :param filename: name of the file
         """
         mt = wikiutil.MimeType(filename=filename)
         return mt.mime_type(), u'not implemented' # XXX see moin 1.9 code about how it was done there
@@ -203,7 +203,7 @@
         read any page. Without this policy some pages will not render,
         which will create broken pagelinks index.
 
-        @param request: current request
+        :param request: current request
         """
         import copy
         from MoinMoin.security import Permissions
@@ -228,11 +228,11 @@
 
     def __init__(self, request, query, sort='weight', mtime=None, historysearch=0):
         """
-        @param request: current request
-        @param query: search query objects tree
-        @keyword sort: the sorting of the results (default: 'weight')
-        @keyword mtime: only show items newer than this timestamp (default: None)
-        @keyword historysearch: whether to show old revisions of a page (default: 0)
+        :param request: current request
+        :param query: search query objects tree
+        :keyword sort: the sorting of the results (default: 'weight')
+        :keyword mtime: only show items newer than this timestamp (default: None)
+        :keyword historysearch: whether to show old revisions of a page (default: 0)
         """
         self.request = request
         self.query = query
@@ -271,7 +271,7 @@
         """
         Filter out deleted or acl protected pages
 
-        @param hits: list of hits
+        :param hits: list of hits
         """
         userMayRead = flaskg.user.may.read
         fs_rootpage = self.fs_rootpage + "/"
@@ -291,7 +291,7 @@
         """
         Get all matches
 
-        @param page: the current page instance
+        :param page: the current page instance
         """
         if page:
             return self.query.search(page)
--- a/MoinMoin/search/queryparser/__init__.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/search/queryparser/__init__.py	Mon Feb 28 04:34:17 2011 +0100
@@ -31,9 +31,9 @@
 
     def __init__(self, **kw):
         """
-        @keyword titlesearch: treat all terms as title searches
-        @keyword case: do case sensitive search
-        @keyword regex: treat all terms as regular expressions
+        :keyword titlesearch: treat all terms as title searches
+        :keyword case: do case sensitive search
+        :keyword regex: treat all terms as regular expressions
         """
         self.titlesearch = kw.get('titlesearch', 0)
         self.case = kw.get('case', 0)
--- a/MoinMoin/search/queryparser/expressions.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/search/queryparser/expressions.py	Mon Feb 28 04:34:17 2011 +0100
@@ -34,9 +34,9 @@
     def __init__(self, pattern, use_re=False, case=False):
         """ Init a text search
 
-        @param pattern: pattern to search for, ascii string or unicode
-        @param use_re: treat pattern as re of plain text, bool
-        @param case: do case sensitive search, bool
+        :param pattern: pattern to search for, ascii string or unicode
+        :param use_re: treat pattern as re of plain text, bool
+        :param case: do case sensitive search, bool
         """
         self._pattern = unicode(pattern)
         self.negated = 0
@@ -283,7 +283,7 @@
     def search(self, page):
         """ Search page with terms
 
-        @param page: the page instance
+        :param page: the page instance
         """
         # XXX Do we have any reason to sort here? we are not breaking out
         # of the search in any case.
@@ -442,9 +442,9 @@
     def __init__(self, pattern, use_re=False, case=True):
         """ Init a link search
 
-        @param pattern: pattern to search for, ascii string or unicode
-        @param use_re: treat pattern as re of plain text, bool
-        @param case: do case sensitive search, bool
+        :param pattern: pattern to search for, ascii string or unicode
+        :param use_re: treat pattern as re of plain text, bool
+        :param case: do case sensitive search, bool
         """
 
         super(LinkSearch, self).__init__(pattern, use_re, case)
@@ -487,9 +487,9 @@
     def __init__(self, pattern, use_re=False, case=False):
         """ Init a language search
 
-        @param pattern: pattern to search for, ascii string or unicode
-        @param use_re: treat pattern as re of plain text, bool
-        @param case: do case sensitive search, bool
+        :param pattern: pattern to search for, ascii string or unicode
+        :param use_re: treat pattern as re of plain text, bool
+        :param case: do case sensitive search, bool
         """
         # iso language code, always lowercase and not case-sensitive
         super(LanguageSearch, self).__init__(pattern.lower(), use_re, case=False)
@@ -512,9 +512,9 @@
     def __init__(self, pattern, use_re=False, case=False):
         """ Init a mimetype search
 
-        @param pattern: pattern to search for, ascii string or unicode
-        @param use_re: treat pattern as re of plain text, bool
-        @param case: do case sensitive search, bool
+        :param pattern: pattern to search for, ascii string or unicode
+        :param use_re: treat pattern as re of plain text, bool
+        :param case: do case sensitive search, bool
         """
         # always lowercase and not case-sensitive
         super(MimetypeSearch, self).__init__(pattern.lower(), use_re, case=False)
@@ -539,9 +539,9 @@
     def __init__(self, pattern, use_re=False, case=False):
         """ Init a domain search
 
-        @param pattern: pattern to search for, ascii string or unicode
-        @param use_re: treat pattern as re of plain text, bool
-        @param case: do case sensitive search, bool
+        :param pattern: pattern to search for, ascii string or unicode
+        :param use_re: treat pattern as re of plain text, bool
+        :param case: do case sensitive search, bool
         """
         # always lowercase and not case-sensitive
         super(DomainSearch, self).__init__(pattern.lower(), use_re, case=False)
--- a/MoinMoin/search/results.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/search/results.py	Mon Feb 28 04:34:17 2011 +0100
@@ -112,9 +112,9 @@
 
         Summarize the weight of all page matches
 
-        @param unique: ignore identical matches
-        @rtype: int
-        @return: page weight
+        :param unique: ignore identical matches
+        :rtype: int
+        :returns: page weight
         """
         weight = 0
         for match in self.get_matches(unique=unique):
@@ -132,11 +132,11 @@
     def get_matches(self, unique=1, sort='start', type=Match):
         """ Return all matches of type sorted by sort
 
-        @param unique: return only unique matches (bool)
-        @param sort: match attribute to sort by (string)
-        @param type: type of match to return (Match or sub class)
-        @rtype: list
-        @return: list of matches
+        :param unique: return only unique matches (bool)
+        :param sort: match attribute to sort by (string)
+        :param type: type of match to return (Match or sub class)
+        :rtype: list
+        :returns: list of matches
         """
         if unique:
             matches = self._unique_matches(type=type)
@@ -164,9 +164,9 @@
         The result is sorted by match.start, because its easy to remove
         duplicates like this.
 
-        @param type: type of match to return
-        @rtype: list
-        @return: list of matches of type, sorted by match.start
+        :param type: type of match to return
+        :rtype: list
+        :returns: list of matches of type, sorted by match.start
         """
         # Filter by type and sort by match.start using fast schwartzian transform.
         tmp = [(match.start, match) for match in self._matches if isinstance(match, type)]
@@ -272,11 +272,11 @@
     def stats(self, request, formatter, hitsFrom):
         """ Return search statistics, formatted with formatter
 
-        @param request: current request
-        @param formatter: formatter to use
-        @param hitsFrom: current position in the hits
-        @rtype: unicode
-        @return: formatted statistics
+        :param request: current request
+        :param formatter: formatter to use
+        :param hitsFrom: current position in the hits
+        :rtype: unicode
+        :returns: formatted statistics
         """
         if not self.estimated_hits:
             self.estimated_hits = ('', len(self.hits))
@@ -305,15 +305,15 @@
             paging=True, hitsFrom=0, hitsInfo=0):
         """ Format a list of found pages
 
-        @param request: current request
-        @param formatter: formatter to use
-        @param info: show match info in title
-        @param numbered: use numbered list for display
-        @param paging: toggle paging
-        @param hitsFrom: current position in the hits
-        @param hitsInfo: toggle hits info line
-        @rtype: unicode
-        @return: formatted page list
+        :param request: current request
+        :param formatter: formatter to use
+        :param info: show match info in title
+        :param numbered: use numbered list for display
+        :param paging: toggle paging
+        :param hitsFrom: current position in the hits
+        :param hitsInfo: toggle hits info line
+        :rtype: unicode
+        :returns: formatted page list
         """
         self._reset(request, formatter)
         f = formatter
@@ -385,16 +385,16 @@
                             maxlines=1, paging=True, hitsFrom=0, hitsInfo=0):
         """ Format a list of found pages with context
 
-        @param request: current request
-        @param formatter: formatter to use
-        @param info: show match info near the page link
-        @param context: how many characters to show around each match.
-        @param maxlines: how many contexts lines to show.
-        @param paging: toggle paging
-        @param hitsFrom: current position in the hits
-        @param hitsInfo: toggle hits info line
-        @rtype: unicode
-        @return: formatted page list with context
+        :param request: current request
+        :param formatter: formatter to use
+        :param info: show match info near the page link
+        :param context: how many characters to show around each match.
+        :param maxlines: how many contexts lines to show.
+        :param paging: toggle paging
+        :param hitsFrom: current position in the hits
+        :param hitsInfo: toggle hits info line
+        :rtype: unicode
+        :returns: formatted page list with context
         """
         self._reset(request, formatter)
         f = formatter
@@ -554,8 +554,8 @@
         Try to find the first match in the page text. If we can't find
         one, we return the first match and start=0.
 
-        @rtype: tuple
-        @return: index of first match, start of text
+        :rtype: tuple
+        :returns: index of first match, start of text
         """
         header = page.page.getPageHeader()
         start = len(header)
@@ -572,13 +572,13 @@
         Add context around each match. If there is no room for context
         before or after the match, show more context on the other side.
 
-        @param context: context length
-        @param match: current match
-        @param start: context should not start before that index, unless
+        :param context: context length
+        :param match: current match
+        :param start: context should not start before that index, unless
                       end is past the last character.
-        @param last: last character index
-        @rtype: tuple
-        @return: start, end of context
+        :param last: last character index
+        :rtype: tuple
+        :returns: start, end of context
         """
         # Start by giving equal context on both sides of match
         contextlen = max(context - len(match), 0)
@@ -605,9 +605,9 @@
 
         Invoke format match on all unique matches in page title.
 
-        @param page: found page
-        @rtype: unicode
-        @return: formatted title
+        :param page: found page
+        :rtype: unicode
+        :returns: formatted title
         """
         # Get unique title matches sorted by match.start
         matches = page.get_matches(unique=1, sort='start', type=TitleMatch)
@@ -646,11 +646,11 @@
         text. Matches behind location are ignored and an empty string is
         returned.
 
-        @param body: text containing match
-        @param match: search match in text
-        @param location: current location in text
-        @rtype: unicode
-        @return: formatted match or empty string
+        :param body: text containing match
+        :param match: search match in text
+        :param location: current location in text
+        :rtype: unicode
+        :returns: formatted match or empty string
         """
         start = max(location, match.start)
         if start < match.end:
@@ -666,11 +666,11 @@
     def formatPageLinks(self, hitsFrom, hitsPerPage, hitsNum):
         """ Format previous and next page links in page
 
-        @param hitsFrom: current position in the hits
-        @param hitsPerPage: number of hits per page
-        @param hitsNum: number of hits
-        @rtype: unicode
-        @return: links to previous and next pages (if exist)
+        :param hitsFrom: current position in the hits
+        :param hitsPerPage: number of hits per page
+        :param hitsNum: number of hits
+        :rtype: unicode
+        :returns: links to previous and next pages (if exist)
         """
         f = self.formatter
         querydict = dict(wikiutil.parseQueryString(self.request.query_string))
@@ -731,7 +731,7 @@
     def formatHitInfoBar(self, page):
         """ Returns the code for the information below a search hit
 
-        @param page: the FoundPage instance
+        :param page: the FoundPage instance
         """
         request = self.request
         f = self.formatter
@@ -757,7 +757,7 @@
     def querystring(self, querydict=None):
         """ Return query string, used in the page link
 
-        @keyword querydict: use these parameters (default: None)
+        :keyword querydict: use these parameters (default: None)
         """
         if querydict is None:
             querydict = {}
@@ -771,8 +771,8 @@
     def formatInfo(self, formatter, page):
         """ Return formatted match info
 
-        @param formatter: the formatter instance to use
-        @param page: the current page instance
+        :param formatter: the formatter instance to use
+        :param page: the current page instance
         """
         template = u' . . . %s %s'
         template = u"%s%s%s" % (formatter.span(1, css_class="info"),
@@ -799,8 +799,8 @@
 
         Each request might need different translations or other user preferences.
 
-        @param request: current request
-        @param formatter: the formatter instance to use
+        :param request: current request
+        :param formatter: the formatter instance to use
         """
         self.buffer = StringIO.StringIO()
         self.formatter = formatter
@@ -812,12 +812,12 @@
 def getSearchResults(request, query, hits, start, sort, estimated_hits):
     """ Return a SearchResults object with the specified properties
 
-    @param request: current request
-    @param query: the search query object tree
-    @param hits: list of hits
-    @param start: position to start showing the hits
-    @param sort: sorting of the results, either 'weight' or 'page_name'
-    @param estimated_hits: if true, use this estimated hit count
+    :param request: current request
+    :param query: the search query object tree
+    :param hits: list of hits
+    :param start: position to start showing the hits
+    :param sort: sorting of the results, either 'weight' or 'page_name'
+    :param estimated_hits: if true, use this estimated hit count
     """
     result_hits = []
     for wikiname, page, attachment, match, rev in hits:
--- a/MoinMoin/search/term.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/search/term.py	Mon Feb 28 04:34:17 2011 +0100
@@ -46,7 +46,7 @@
         Evaluate this term and return True or False if the
         item identified by the parameters matches.
 
-        @param item: the item
+        :param item: the item
         """
         assert hasattr(self, '_result')
 
--- a/MoinMoin/security/__init__.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/security/__init__.py	Mon Feb 28 04:34:17 2011 +0100
@@ -56,9 +56,9 @@
         if attr is one of the rights in acl_rights_valid, then return a
         checking function for it. Else raise an AttributeError.
 
-        @param attr: one of ACL rights as defined in acl_rights_valid
-        @rtype: function
-        @return: checking function for that right, accepting an itemname
+        :param attr: one of ACL rights as defined in acl_rights_valid
+        :rtype: function
+        :returns: checking function for that right, accepting an itemname
         """
         if attr not in app.cfg.acl_rights_valid:
             raise AttributeError(attr)
@@ -199,8 +199,8 @@
 
         This can be used in multiple subsequent calls to process longer lists.
 
-        @param aclstring: acl string from item or configuration
-        @param remember: should add the line to self.acl_lines
+        :param aclstring: acl string from item or configuration
+        :param remember: should add the line to self.acl_lines
         """
         # Remember lines
         if remember:
@@ -300,8 +300,8 @@
     def __init__(self, rights, aclstring):
         """ Initialize acl iterator
 
-        @param rights: the acl rights to consider when parsing
-        @param aclstring: string to parse
+        :param rights: the acl rights to consider when parsing
+        :param aclstring: string to parse
         """
         self.rights = rights
         self.rest = aclstring.strip()
@@ -318,8 +318,8 @@
         raises a StopIteration. The iterator finishes as soon as the
         string is fully parsed or can not be parsed any more.
 
-        @rtype: 3 tuple - (modifier, [entry, ...], [right, ...])
-        @return: values for one item in an acl string
+        :rtype: 3 tuple - (modifier, [entry, ...], [right, ...])
+        :returns: values for one item in an acl string
         """
         # Handle finished state, required by iterator protocol
         if self.rest == '':
--- a/MoinMoin/security/textcha.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/security/textcha.py	Mon Feb 28 04:34:17 2011 +0100
@@ -49,7 +49,7 @@
     def __init__(self, form):
         """ Initialize the TextCha.
 
-            @param form: flatland form to use; must subclass TextChaizedForm
+            :param form: flatland form to use; must subclass TextChaizedForm
         """
         self.user_info = flaskg.user.valid and flaskg.user.name or request.remote_addr
         self.textchas = self._get_textchas()
@@ -83,7 +83,7 @@
     def init_qa(self, question=None):
         """ Initialize the question / answer.
 
-         @param question: If given, the given question will be used.
+         :param question: If given, the given question will be used.
                           If None, a new question will be generated.
         """
         if self.is_enabled():
--- a/MoinMoin/security/ticket.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/security/ticket.py	Mon Feb 28 04:34:17 2011 +0100
@@ -22,8 +22,8 @@
 def createTicket(tm=None, **kw):
     """ Create a ticket using a configured secret
 
-        @param tm: unix timestamp (optional, uses current time if not given)
-        @param kw: key/value stuff put into ticket, must be same for ticket
+        :param tm: unix timestamp (optional, uses current time if not given)
+        :param kw: key/value stuff put into ticket, must be same for ticket
                    creation and ticket check
     """
     if tm is None:
@@ -48,8 +48,8 @@
 def checkTicket(ticket, **kw):
     """ Check validity of a previously created ticket.
 
-        @param ticket: a str as created by createTicket
-        @param kw: see createTicket kw
+        :param ticket: a str as created by createTicket
+        :param kw: see createTicket kw
     """
     try:
         timestamp_str = ticket.split('.')[0]
--- a/MoinMoin/storage/__init__.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/storage/__init__.py	Mon Feb 28 04:34:17 2011 +0100
@@ -82,9 +82,9 @@
         Takes a MoinMoin search term and returns an iterator (maybe empty) over
         matching item objects (NOT item names!).
 
-        @type searchterm: MoinMoin search term
-        @param searchterm: The term for which to search.
-        @rtype: iterator of item objects
+        :type searchterm: MoinMoin search term
+        :param searchterm: The term for which to search.
+        :rtype: iterator of item objects
         """
         # Very simple implementation because we have no indexing
         # or anything like that. If you want to optimize this, override it.
@@ -100,10 +100,10 @@
 
         When implementing this, don't rely on has_item unless you've overridden it.
 
-        @type itemname: unicode
-        @param itemname: The name of the item we want to get.
-        @rtype: item object
-        @raise NoSuchItemError: No item with name 'itemname' is known to this backend.
+        :type itemname: unicode
+        :param itemname: The name of the item we want to get.
+        :rtype: item object
+        :raises NoSuchItemError: No item with name 'itemname' is known to this backend.
         """
         raise NotImplementedError()
 
@@ -114,9 +114,9 @@
         This method is added for convenience. With it you don't need to try get_item
         and catch an exception that may be thrown if the item doesn't exist yet.
 
-        @type itemname: unicode
-        @param itemname: The name of the item of which we want to know whether it exists.
-        @rtype: bool
+        :type itemname: unicode
+        :param itemname: The name of the item of which we want to know whether it exists.
+        :rtype: bool
         """
         try:
             self.get_item(itemname)
@@ -129,10 +129,10 @@
         Creates an item with a given itemname. If that item already exists,
         raise an exception.
 
-        @type itemname: unicode
-        @param itemname: Name of the item we want to create.
-        @rtype: item object
-        @raise ItemAlreadyExistsError: The item you were trying to create already exists.
+        :type itemname: unicode
+        :param itemname: Name of the item we want to create.
+        :rtype: item object
+        :raises ItemAlreadyExistsError: The item you were trying to create already exists.
         """
         raise NotImplementedError()
 
@@ -141,7 +141,7 @@
         Returns an iterator over all items available in this backend (like the
         dict method).
 
-        @rtype: iterator of item objects
+        :rtype: iterator of item objects
         """
         raise NotImplementedError()
 
@@ -156,9 +156,9 @@
               another) requires that the iterator goes over really every
               revision we have.
 
-        @type reverse: bool
-        @param reverse: Indicate whether the iterator should go in reverse order.
-        @rtype: iterator of revision objects
+        :type reverse: bool
+        :param reverse: Indicate whether the iterator should go in reverse order.
+        :rtype: iterator of revision objects
         """
         # generic and slow history implementation
         revs = []
@@ -179,13 +179,13 @@
         of that item.
         Note: If you pass -1 as revno, this shall return the latest revision of the item.
 
-        @type item: Object of class Item.
-        @param item: The Item on which we want to operate.
-        @type revno: int
-        @param revno: Indicate which revision is wanted precisely. If revno is
+        :type item: Object of class Item.
+        :param item: The Item on which we want to operate.
+        :type revno: int
+        :param revno: Indicate which revision is wanted precisely. If revno is
         -1, return the most recent revision.
-        @rtype: Object of class Revision
-        @raise NoSuchRevisionError: No revision with that revno was found on item.
+        :rtype: Object of class Revision
+        :raises NoSuchRevisionError: No revision with that revno was found on item.
         """
         raise NotImplementedError()
 
@@ -197,9 +197,9 @@
         Since we allow to totally destroy certain revisions, list_revisions does
         not need to return subsequent, but only monotone revision numbers.
 
-        @type item: Object of class Item.
-        @param item: The Item on which we want to operate.
-        @return: list of ints (possibly empty)
+        :type item: Object of class Item.
+        :param item: The Item on which we want to operate.
+        :returns: list of ints (possibly empty)
         """
         raise NotImplementedError()
 
@@ -210,15 +210,15 @@
         greater than the revision number of the item's most recent revision.
         The newly created revision object is returned to the caller.
 
-        @type item: Object of class Item.
-        @param item: The Item on which we want to operate.
-        @type revno: int
-        @param revno: Indicate which revision we want to create.
+        :type item: Object of class Item.
+        :param item: The Item on which we want to operate.
+        :type revno: int
+        :param revno: Indicate which revision we want to create.
         @precondition: item.get_revision(-1).revno < revno
-        @return: Object of class Revision.
-        @raise RevisionAlreadyExistsError: Raised if a revision with that number
+        :returns: Object of class Revision.
+        :raises RevisionAlreadyExistsError: Raised if a revision with that number
         already exists on item.
-        @raise RevisionNumberMismatchError: Raised if precondition is not
+        :raises RevisionNumberMismatchError: Raised if precondition is not
         fulfilled.
         """
         raise NotImplementedError()
@@ -238,9 +238,9 @@
               least ignore the existence of the revision in question. (The only hint will
               be the gap in item.list_revisions().
 
-        @type revision: Object of class StoredRevision
-        @param revision: The revision we want to destroy completely.
-        @raises CouldNotDestroyError: Raised in case the revision could not be destroyed.
+        :type revision: Object of class StoredRevision
+        :param revision: The revision we want to destroy completely.
+        :raises CouldNotDestroyError: Raised in case the revision could not be destroyed.
         """
         raise NotImplementedError()
 
@@ -249,15 +249,15 @@
         Renames a given item. Raises Exception if the item you are trying to rename
         does not exist or if the newname is already chosen by another item.
 
-        @type item: Object of class Item.
-        @param item: The Item on which we want to operate.
-        @type newname: string
-        @param newname: Name of item after this operation has succeeded.
+        :type item: Object of class Item.
+        :param item: The Item on which we want to operate.
+        :type newname: string
+        :param newname: Name of item after this operation has succeeded.
         @precondition: self.has_item(newname) == False
         @postcondition: self.has_item(newname) == True
-        @raises ItemAlreadyExistsError: Raised if an item with name 'newname'
+        :raises ItemAlreadyExistsError: Raised if an item with name 'newname'
         already exists.
-        @return: None
+        :returns: None
         """
         raise NotImplementedError()
 
@@ -268,9 +268,9 @@
         commit() it. You need to pass the revision you want to commit. The item
         can be looked up by the revision's 'item' property.
 
-        @type revision: Object of class NewRevision.
-        @param revision: The revision we want to commit to  storage.
-        @return: None
+        :type revision: Object of class NewRevision.
+        :param revision: The revision we want to commit to  storage.
+        :returns: None
         """
         raise NotImplementedError()
 
@@ -279,9 +279,9 @@
         This method is invoked when external events happen that cannot be handled in a
         sane way and thus the changes that have been made must be rolled back.
 
-        @type revision: Object of class NewRevision.
-        @param revision: The revision we want to roll back.
-        @return: None
+        :type revision: Object of class NewRevision.
+        :param revision: The revision we want to roll back.
+        :returns: None
         """
         raise NotImplementedError()
 
@@ -313,10 +313,10 @@
               from time to time to get rid of the stuff, or not choose a backend of this
               kind (in case disk space is limited and large items are uploaded).
 
-        @type item: Object of class Item
-        @param item: The item we want to destroy
-        @raises CouldNotDestroyError: Raised in case the revision could not be destroyed.
-        @return: None
+        :type item: Object of class Item
+        :param item: The item we want to destroy
+        :raises CouldNotDestroyError: Raised in case the revision could not be destroyed.
+        :returns: None
         """
         # XXX Should this perhaps return a bool indicating whether erasure was actually performed on disk or something like that?
         raise NotImplementedError()
@@ -334,10 +334,10 @@
         As you can see, the lock acquired by this method is released by calling
         the publish_metadata() method on the item.
 
-        @type item: Object of class Item.
-        @param item: The Item on which we want to operate.
+        :type item: Object of class Item.
+        :param item: The Item on which we want to operate.
         @precondition: item not already locked
-        @return: None
+        :returns: None
         """
         raise NotImplementedError()
 
@@ -353,10 +353,10 @@
 
         The lock this method releases is acquired by the _change_metadata method.
 
-        @type item: Object of class Item.
-        @param item: The Item on which we want to operate.
-        @raise AssertionError: item was not locked XXX use more special exception
-        @return: None
+        :type item: Object of class Item.
+        :param item: The Item on which we want to operate.
+        :raises AssertionError: item was not locked XXX use more special exception
+        :returns: None
         """
         raise NotImplementedError()
 
@@ -365,11 +365,11 @@
         Called to read a given amount of bytes of a revision's data. By default, all
         data is read.
 
-        @type revision: Object of class StoredRevision.
-        @param revision: The revision on which we want to operate.
-        @type chunksize: int
-        @param chunksize: amount of bytes to be read at a time
-        @return: string
+        :type revision: Object of class StoredRevision.
+        :param revision: The revision on which we want to operate.
+        :type chunksize: int
+        :param chunksize: amount of bytes to be read at a time
+        :returns: string
         """
         raise NotImplementedError()
 
@@ -377,11 +377,11 @@
         """
         When this method is called, the passed data is written to the revision's data.
 
-        @type revision: Object of class NewRevision.
-        @param revision: The revision on which we want to operate.
-        @type data: str
-        @param data: The data to be written on the revision.
-        @return: None
+        :type revision: Object of class NewRevision.
+        :param revision: The revision on which we want to operate.
+        :type data: str
+        :param data: The data to be written on the revision.
+        :returns: None
         """
         raise NotImplementedError()
 
@@ -389,9 +389,9 @@
         """
         Load metadata for a given item, return dict.
 
-        @type item: Object of class Item.
-        @param item: The Item on which we want to operate.
-        @return: dict of metadata key / value pairs.
+        :type item: Object of class Item.
+        :param item: The Item on which we want to operate.
+        :returns: dict of metadata key / value pairs.
         """
         raise NotImplementedError()
 
@@ -399,9 +399,9 @@
         """
         Load metadata for a given revision, returns dict.
 
-        @type revision: Object of a subclass of Revision.
-        @param revision: The revision on which we want to operate.
-        @return: dict of metadata key / value pairs.
+        :type revision: Object of a subclass of Revision.
+        :param revision: The revision on which we want to operate.
+        :returns: dict of metadata key / value pairs.
         """
         raise NotImplementedError()
 
@@ -411,9 +411,9 @@
         be given as a parameter to StoredRevision instantiation instead.
         Return the timestamp (a long).
 
-        @type revision: Object of a subclass of Revision.
-        @param revision: The revision on which we want to operate.
-        @return: long
+        :type revision: Object of a subclass of Revision.
+        :param revision: The revision on which we want to operate.
+        :returns: long
         """
         raise NotImplementedError()
 
@@ -423,9 +423,9 @@
         if all StoredRevision objects are instantiated with the size= keyword
         parameter.
 
-        @type revision: Object of a subclass of Revision.
-        @param revision: The revision on which we want to operate.
-        @return: int
+        :type revision: Object of a subclass of Revision.
+        :param revision: The revision on which we want to operate.
+        :returns: int
         """
         raise NotImplementedError()
 
@@ -433,14 +433,14 @@
         """
         Set the revision's cursor on the revision's data.
 
-        @type revision: Object of StoredRevision.
-        @param revision: The revision on which we want to operate.
-        @type position: int
-        @param position: Indicates where to position the cursor
-        @type mode: int
-        @param mode: 0 for 'absolute positioning', 1 to seek 'relatively to the
+        :type revision: Object of StoredRevision.
+        :param revision: The revision on which we want to operate.
+        :type position: int
+        :param position: Indicates where to position the cursor
+        :type mode: int
+        :param mode: 0 for 'absolute positioning', 1 to seek 'relatively to the
         current position', 2 to seek 'relative to the files end'.
-        @return: None
+        :returns: None
         """
         raise NotImplementedError()
 
@@ -448,9 +448,9 @@
         """
         Tell the revision's cursor's position on the revision's data.
 
-        @type revision: Object of type StoredRevision.
-        @param revision: The revision on which tell() was invoked.
-        @return: int indicating the cursor's position.
+        :type revision: Object of type StoredRevision.
+        :param revision: The revision on which tell() was invoked.
+        :returns: int indicating the cursor's position.
         """
         raise NotImplementedError()
 
@@ -580,10 +580,10 @@
         """
         Initialize an item. Memorize the backend to which it belongs.
 
-        @type backend: Object of a subclass of Backend.
-        @param backend: The backend that stores this item.
-        @type itemname: unicode
-        @param itemname: The name representing this item in the backend. Unique
+        :type backend: Object of a subclass of Backend.
+        :param backend: The backend that stores this item.
+        :type itemname: unicode
+        :param itemname: The name representing this item in the backend. Unique
         within the backend.
         """
         self._backend = backend
@@ -625,10 +625,10 @@
         You must wrap write accesses to metadata in change_metadata/publish_metadata calls.
         Keys starting with two underscores are reserved and cannot be used.
 
-        @type key: str or unicode
-        @param key: The keyword that is used to look up the corresponding value.
-        @type value: str, unicode, int, long, float, bool, complex or a nested tuple thereof.
-        @param value: The value that is referenced by the keyword `key` in this
+        :type key: str or unicode
+        :param key: The keyword that is used to look up the corresponding value.
+        :type value: str, unicode, int, long, float, bool, complex or a nested tuple thereof.
+        :param value: The value that is referenced by the keyword `key` in this
         specific item's metadata dict.
         """
         if not self._locked:
@@ -646,8 +646,8 @@
         """
         Delete an item metadata key/value pair.
 
-        @type key: str or unicode
-        @param key: Key identifying a unique key/value pair in this item's metadata.
+        :type key: str or unicode
+        :param key: Key identifying a unique key/value pair in this item's metadata.
         @postcondition: self[key] raises KeyError
         """
         if not self._locked:
@@ -663,9 +663,9 @@
         See __setitem__.__doc__ -- You may use my_item["key"] to get the corresponding
         metadata value. Note however, that the key you pass must be of type str or unicode.
 
-        @type key: str or unicode
-        @param key: The key refering to the value we want to return.
-        @return: self._metadata[key]
+        :type key: str or unicode
+        :param key: The key refering to the value we want to return.
+        :returns: self._metadata[key]
         """
         self._read_accessed = True
         if not isinstance(key, (unicode, str)):
@@ -682,7 +682,7 @@
         This method returns a list of all metadata keys of this item (i.e., a list of Strings.)
         That allows using Python's `for mdkey in itemobj: do_something` syntax.
 
-        @return: list of metadata keys not starting with two leading underscores
+        :returns: list of metadata keys not starting with two leading underscores
         """
         if self._metadata is None:
             self._metadata = self._backend._get_item_metadata(self)
@@ -799,12 +799,12 @@
         """
         Initialize the revision.
 
-        @type item: Object of class Item.
-        @param item: The item to which this revision belongs.
-        @type revno: int
-        @param revno: The unique number identifying this revision on the item.
-        @type timestamp: int
-        @param timestamp: int representing the UNIX time this revision was
+        :type item: Object of class Item.
+        :param item: The item to which this revision belongs.
+        :type revno: int
+        :param revno: The unique number identifying this revision on the item.
+        :type timestamp: int
+        :param timestamp: int representing the UNIX time this revision was
         created. (UNIX time: seconds since the epoch, i.e. 1st of January 1970, 00:00 UTC)
         """
         self._revno = revno
@@ -956,10 +956,10 @@
         Internal method used for dict-like access to the NewRevisions metadata-dict.
         Keys starting with two underscores are reserved and cannot be used.
 
-        @type key: str or unicode
-        @param key: The keyword that is used to look up the corresponding value.
-        @type value: str, unicode, int, long, float, bool, complex or a nested tuple thereof.
-        @param value: The value that is referenced by the keyword `key` in this
+        :type key: str or unicode
+        :param key: The keyword that is used to look up the corresponding value.
+        :type value: str, unicode, int, long, float, bool, complex or a nested tuple thereof.
+        :param value: The value that is referenced by the keyword `key` in this
         specific items metadata-dict.
         """
         if not isinstance(key, (str, unicode)):
@@ -992,9 +992,9 @@
     str, unicode, bool, int, long, float, complex and tuple.
     Since tuples can contain other types, we need to check the types recursively.
 
-    @type value: str, unicode, int, long, float, complex, tuple
-    @param value: A value of which we want to know if it is a valid metadata value.
-    @return: bool
+    :type value: str, unicode, int, long, float, complex, tuple
+    :param value: A value of which we want to know if it is a valid metadata value.
+    :returns: bool
     """
     accepted = (bool, str, unicode, int, long, float, complex)
     if isinstance(value, accepted):
--- a/MoinMoin/storage/backends/_fsutils.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/storage/backends/_fsutils.py	Mon Feb 28 04:34:17 2011 +0100
@@ -23,10 +23,10 @@
     charset. The default value of config.charset, 'utf-8' can encode any
     character.
 
-    @param wikiname: wiki name [unicode]
-    @param charset: charset to encode string (before quoting)
-    @rtype: string
-    @return: quoted name, safe for any file system
+    :param wikiname: wiki name [unicode]
+    :param charset: charset to encode string (before quoting)
+    :rtype: string
+    :returns: quoted name, safe for any file system
     """
     filename = wikiname.encode(charset)
 
@@ -57,10 +57,10 @@
 
     raises an InvalidFileNameError in case of unquoting problems.
 
-    @param filename: quoted wiki name
-    @param charset: charset to use for decoding (after unquoting)
-    @rtype: unicode
-    @return: WikiName
+    :param filename: quoted wiki name
+    :param charset: charset to use for decoding (after unquoting)
+    :rtype: unicode
+    :returns: WikiName
     """
     # From some places we get called with Unicode strings
     if isinstance(filename, unicode):
--- a/MoinMoin/storage/backends/acl.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/storage/backends/acl.py	Mon Feb 28 04:34:17 2011 +0100
@@ -70,18 +70,18 @@
     """
     def __init__(self, cfg, backend, hierarchic=False, before=u"", default=u"", after=u"", valid=None):
         """
-        @type backend: Some object that implements the storage API.
-        @param backend: The unprotected backend that we want to protect.
-        @type hierarchic: bool
-        @param hierarchic: Indicate whether we want to process ACLs in hierarchic mode.
-        @type before: unicode
-        @param before: ACL to be applied before all the other ACLs.
-        @type default: unicode
-        @param default: If no ACL information is given on the item in question, use this default.
-        @type after: unicode
-        @param after: ACL to be applied after all the other ACLs.
-        @type valid: list of strings or None
-        @param valid: If a list is given, only strings in the list are treated as valid acl privilege descriptors.
+        :type backend: Some object that implements the storage API.
+        :param backend: The unprotected backend that we want to protect.
+        :type hierarchic: bool
+        :param hierarchic: Indicate whether we want to process ACLs in hierarchic mode.
+        :type before: unicode
+        :param before: ACL to be applied before all the other ACLs.
+        :type default: unicode
+        :param default: If no ACL information is given on the item in question, use this default.
+        :type after: unicode
+        :param after: ACL to be applied after all the other ACLs.
+        :type valid: list of strings or None
+        :param valid: If a list is given, only strings in the list are treated as valid acl privilege descriptors.
                       If None is give, the global wiki default is used.
         """
         self.cfg = cfg
@@ -194,11 +194,11 @@
         `default` is only used if there is no ACL on the item (and none on
         any of the item's parents when using hierarchic.)
 
-        @param itemname: item to get permissions from
-        @param right: the right to check
+        :param itemname: item to get permissions from
+        :param right: the right to check
 
-        @rtype: bool
-        @return: True if you have permission or False
+        :rtype: bool
+        :returns: True if you have permission or False
         """
         username = flaskg.user.name
 
@@ -253,10 +253,10 @@
     """
     def __init__(self, item, aclbackend):
         """
-        @type item: Object adhering to the storage item API.
-        @param item: The unprotected item we want to wrap.
-        @type aclbackend: Instance of AclWrapperBackend.
-        @param aclbackend: The AMW this item belongs to.
+        :type item: Object adhering to the storage item API.
+        :param item: The unprotected item we want to wrap.
+        :type aclbackend: Instance of AclWrapperBackend.
+        :param aclbackend: The AMW this item belongs to.
         """
         self._backend = aclbackend
         self._item = item
@@ -284,8 +284,8 @@
         that represent the permissions to check, such as READ and WRITE
         (see module level constants; don't pass strings, please).
 
-        @type privileges: List of strings.
-        @param privileges: Represent the privileges to check.
+        :type privileges: List of strings.
+        :param privileges: Represent the privileges to check.
         """
         def wrap(f):
             def wrapped_f(self, *args, **kwargs):
@@ -424,10 +424,10 @@
     """
     def __init__(self, revision, item):
         """
-        @type revision: Object adhering to the storage revision API.
-        @param revision: The revision we want to protect.
-        @type item: Object adhering to the storage item API.
-        @param item: The item this revision belongs to
+        :type revision: Object adhering to the storage revision API.
+        :param revision: The revision we want to protect.
+        :type item: Object adhering to the storage item API.
+        :param item: The item this revision belongs to
         """
         self._revision = revision
         self._item = item
--- a/MoinMoin/storage/backends/fileserver.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/storage/backends/fileserver.py	Mon Feb 28 04:34:17 2011 +0100
@@ -45,8 +45,8 @@
         """
         Initialise file serving backend.
 
-        @type root_dir: unicode
-        @param root_dir: root directory below which we serve files
+        :type root_dir: unicode
+        :param root_dir: root directory below which we serve files
         """
         root_dir = root_dir.rstrip('/')
         assert root_dir
--- a/MoinMoin/storage/backends/flatfile.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/storage/backends/flatfile.py	Mon Feb 28 04:34:17 2011 +0100
@@ -40,7 +40,7 @@
         """
         Initialise filesystem backend, creating initial files and some internal structures.
 
-        @param path: storage path
+        :param path: storage path
         """
         self._path = path
         try:
--- a/MoinMoin/storage/backends/fs.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/storage/backends/fs.py	Mon Feb 28 04:34:17 2011 +0100
@@ -56,8 +56,8 @@
         Initialise filesystem backend, creating initial files and
         some internal structures.
 
-        @param path: storage path
-        @param reserved_metadata_space: space reserved for revision metadata
+        :param path: storage path
+        :param reserved_metadata_space: space reserved for revision metadata
                                         initially, increase if you expect a
                                         lot of very long ACL strings or so.
                                         We need four additional bookkeeping bytes
@@ -93,7 +93,7 @@
         """
         Get ID of item (or None if no such item exists)
 
-        @param itemname: name of item (unicode)
+        :param itemname: name of item (unicode)
         """
         c = cdb.init(self._name_db)
         return c.get(itemname.encode('utf-8'))
@@ -314,8 +314,8 @@
         If the item's name already exists, it doesn't do anything but raise
         a ItemAlreadyExistsError; if the newrev was given the file is unlinked.
 
-        @param newrev: new revision's temporary file path
-        @param metadata: item metadata dict
+        :param newrev: new revision's temporary file path
+        :param metadata: item metadata dict
         """
         self._do_locked(os.path.join(self._path, 'name-mapping.lock'),
                         self._add_item_internally_locked, (item, newrev, metadata))
--- a/MoinMoin/storage/backends/fs19.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/storage/backends/fs19.py	Mon Feb 28 04:34:17 2011 +0100
@@ -87,8 +87,8 @@
         """
         Get uuid for user name, create a new uuid if we don't already have one.
 
-        @param name: name of user (unicode)
-        @param old_id: moin 1.x user id (str)
+        :param name: name of user (unicode)
+        :param old_id: moin 1.x user id (str)
         """
         idx = self.users
         if old_id:
@@ -123,7 +123,7 @@
         """
         Get old_id for some user with uuid <uuid>.
 
-        @param name: uuid - uuid of user (str)
+        :param name: uuid - uuid of user (str)
         """
         idx = self.users
         results = idx.select(idx.c.uuid==uuid).execute()
@@ -137,7 +137,7 @@
         """
         Get uuid for a content name, create a new uuid if we don't already have one.
 
-        @param name: name of content item (page or page/attachment, unicode)
+        :param name: name of content item (page or page/attachment, unicode)
         """
         idx = self.content
         results = idx.select(idx.c.name==name).execute()
@@ -168,10 +168,10 @@
         """
         Initialise filesystem backend.
 
-        @param path: storage path (data_dir)
-        @param idx_path: path for index storage
-        @param syspages: either False (not syspages) or revision number of syspages
-        @param deleted_mode: 'kill' - just ignore deleted pages (pages with
+        :param path: storage path (data_dir)
+        :param idx_path: path for index storage
+        :param syspages: either False (not syspages) or revision number of syspages
+        :param deleted_mode: 'kill' - just ignore deleted pages (pages with
                                       non-existing current revision) and their attachments
                                       as if they were not there.
                                       Non-deleted pages (pages with an existing current
@@ -179,7 +179,7 @@
                                       will be treated as for 'keep'.
                              'keep' - keep deleted pages as items with empty revisions,
                                       keep their attachments. (default)
-        @param default_markup: used if a page has no #format line, moin 1.9's default
+        :param default_markup: used if a page has no #format line, moin 1.9's default
                                'wiki' and we also use this default here.
         """
         self._path = path
@@ -605,9 +605,9 @@
         """
         Initialise filesystem backend.
 
-        @param path: storage path (user_dir)
-        @param idx_path: path for index storage
-        @param data_path: storage path (data_dir) - only used for index storage
+        :param path: storage path (user_dir)
+        :param idx_path: path for index storage
+        :param data_path: storage path (data_dir) - only used for index storage
         """
         self._path = path
         if kill_save:
@@ -766,9 +766,9 @@
     """
     Decode list of items from user data file
 
-    @param line: line containing list of items, encoded with _encode_list
-    @rtype: list of unicode strings
-    @return: list of items in encoded in line
+    :param line: line containing list of items, encoded with _encode_list
+    :rtype: list of unicode strings
+    :returns: list of items in encoded in line
     """
     items = [item.strip() for item in line.split('\t')]
     items = [item for item in items if item]
@@ -778,9 +778,9 @@
     """
     Decode dict of key:value pairs from user data file
 
-    @param line: line containing a dict, encoded with _encode_dict
-    @rtype: dict
-    @return: dict  unicode:unicode items
+    :param line: line containing a dict, encoded with _encode_dict
+    :rtype: dict
+    :returns: dict  unicode:unicode items
     """
     items = [item.strip() for item in line.split('\t')]
     items = [item for item in items if item]
--- a/MoinMoin/storage/backends/fs19_logfile.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/storage/backends/fs19_logfile.py	Mon Feb 28 04:34:17 2011 +0100
@@ -34,11 +34,11 @@
 
         TODO: when this gets refactored, don't use "file" (is a builtin)
 
-        @param file: open file object
-        @param offset: position in file to start from
-        @param size: aproximate number of bytes to read
-        @param forward : read from offset on or from offset-size to offset
-        @type forward: boolean
+        :param file: open file object
+        :param offset: position in file to start from
+        :param size: aproximate number of bytes to read
+        :param forward : read from offset on or from offset-size to offset
+        :type forward: boolean
         """
         self.loglevel = logging.NOTSET
         if forward:
@@ -89,8 +89,8 @@
 
     def __init__(self, filename, buffer_size=4096):
         """
-        @param filename: name of the log file
-        @param buffer_size: approx. size of one buffer in bytes
+        :param filename: name of the log file
+        :param buffer_size: approx. size of one buffer in bytes
         """
         self.loglevel = logging.NOTSET
         self.__filename = filename
@@ -107,7 +107,7 @@
     def reverse(self):
         """ yield log entries in reverse direction starting from last one
 
-        @rtype: iterator
+        :rtype: iterator
         """
         self.to_end()
         while 1:
@@ -121,7 +121,7 @@
     def sanityCheck(self):
         """ Check for log file write access.
 
-        @rtype: string (error message) or None
+        :rtype: string (error message) or None
         """
         if not os.access(self.__filename, os.W_OK):
             return "The log '%s' is not writable!" % (self.__filename, )
@@ -169,8 +169,8 @@
 
         Return 0 if the file does not exist. Raises other OSError.
 
-        @return: size of log file in bytes
-        @rtype: Int
+        :returns: size of log file in bytes
+        :rtype: Int
         """
         try:
             return os.path.getsize(self.__filename)
@@ -186,8 +186,8 @@
 
         Expensive for big log files - O(n)
 
-        @return: size of log file in lines
-        @rtype: Int
+        :returns: size of log file in lines
+        :rtype: Int
         """
         try:
             f = file(self.__filename, 'r')
@@ -209,9 +209,9 @@
         It adjusts .__lineno if set.
         This function is not aware of filters!
 
-        @param lines: number of lines, may be negative to move backward
-        @rtype: boolean
-        @return: True if moving more than to the beginning and moving
+        :param lines: number of lines, may be negative to move backward
+        :rtype: boolean
+        :returns: True if moving more than to the beginning and moving
                  to the end or beyond
         """
         logging.log(self.loglevel, "LogFile.peek %s" % self.__filename)
@@ -280,7 +280,7 @@
 
     def next(self):
         """get next line that passes through the filter
-        @return: next entry
+        :returns: next entry
         raises StopIteration at file end
         """
         result = None
@@ -300,7 +300,7 @@
 
     def previous(self):
         """get previous line that passes through the filter
-        @return: previous entry
+        :returns: previous entry
         raises StopIteration at file begin
         """
         result = None
@@ -402,7 +402,7 @@
         self.__lineno = line_no
 
     def line_no(self):
-        """@return: the current line number or None if line number is unknown"""
+        """:returns: the current line number or None if line number is unknown"""
         return self.__lineno
 
     def calculate_line_no(self):
@@ -418,8 +418,8 @@
 
     def parser(self, line):
         """
-        @param line: line as read from file
-        @return: parsed line or None on error
+        :param line: line as read from file
+        :returns: parsed line or None on error
         Converts the line from file to program representation
         This implementation uses TAB separated strings.
         This method should be overwritten by the sub classes.
@@ -437,8 +437,8 @@
 
     def _add(self, line):
         """
-        @param line: flat line
-        @type line: String
+        :param line: flat line
+        :type line: String
         write on entry in the log file
         """
         if line is not None:
--- a/MoinMoin/storage/backends/fs2.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/storage/backends/fs2.py	Mon Feb 28 04:34:17 2011 +0100
@@ -107,7 +107,7 @@
         """
         Initialise filesystem backend, creating initial files and some internal structures.
 
-        @param path: storage path
+        :param path: storage path
         """
         self._path = path
 
@@ -140,7 +140,7 @@
         """
         Get ID of item (or None if no such item exists)
 
-        @param itemname: name of item (unicode)
+        :param itemname: name of item (unicode)
         """
         name2id = self._name2id
         results = name2id.select(name2id.c.item_name==itemname).execute()
@@ -155,7 +155,7 @@
         """
         Get name of item (or None if no such item exists)
 
-        @param itemid: id of item (str)
+        :param itemid: id of item (str)
         """
         name2id = self._name2id
         results = name2id.select(name2id.c.item_id==itemid).execute()
@@ -304,9 +304,9 @@
         If the item's name already exists, it doesn't do anything but raise
         a ItemAlreadyExistsError; if the newrev was given the file is unlinked.
 
-        @param revmeta: new revision's temporary meta file path
-        @param revdata: new revision's temporary data file path
-        @param itemmeta: item metadata dict
+        :param revmeta: new revision's temporary meta file path
+        :param revdata: new revision's temporary data file path
+        :param itemmeta: item metadata dict
         """
         self._do_locked(self._make_path('name-mapping.lock'),
                         self._add_item_internally_locked, (item, revmeta, revdata, revdata_target, itemmeta))
--- a/MoinMoin/storage/backends/memory.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/storage/backends/memory.py	Mon Feb 28 04:34:17 2011 +0100
@@ -243,8 +243,8 @@
         Item a unique ID.
         Not defined by superclass.
 
-        @type item: Object of class Item.
-        @param item: Item we want to add.
+        :type item: Object of class Item.
+        :param item: Item we want to add.
         """
         item._item_id = self._last_itemid
         self._itemmap[item.name] = item._item_id
@@ -326,9 +326,9 @@
         """
         Load metadata for a given item, return dict.
 
-        @type item: Object of class Item.
-        @param item: Item for which we want to get the metadata dict.
-        @return: dict
+        :type item: Object of class Item.
+        :param item: Item for which we want to get the metadata dict.
+        :returns: dict
         """
         try:
             return dict(self._item_metadata[item._item_id])
@@ -339,9 +339,9 @@
         """
         Load metadata for a given Revision, returns dict.
 
-        @type revision: Object of subclass of Revision.
-        @param revision: Revision for which we want to get the metadata dict.
-        @return: dict
+        :type revision: Object of subclass of Revision.
+        :param revision: Revision for which we want to get the metadata dict.
+        :returns: dict
         """
         item = revision._item
         return self._item_revisions[item._item_id][revision.revno][1]
--- a/MoinMoin/storage/backends/router.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/storage/backends/router.py	Mon Feb 28 04:34:17 2011 +0100
@@ -53,8 +53,8 @@
               that all items that don't lie in the namespace of any other
               backend are stored there.
 
-        @type mapping: list of tuples of mountpoint -> backend mappings
-        @param mapping: [(mountpoint, backend), ...]
+        :type mapping: list of tuples of mountpoint -> backend mappings
+        :param mapping: [(mountpoint, backend), ...]
         """
         super(BareRouterBackend, self).__init__(*args, **kw)
         self.mapping = [(mountpoint.rstrip('/'), backend) for mountpoint, backend in mapping]
@@ -68,9 +68,9 @@
         Note: Internally (i.e. in all Router* classes) we always use the normalized
               item name for consistency reasons.
 
-        @type itemname: str
-        @param itemname: fully-qualified itemname
-        @return: tuple of (backend, itemname, mountpoint)
+        :type itemname: str
+        :param itemname: fully-qualified itemname
+        :returns: tuple of (backend, itemname, mountpoint)
         """
         if not isinstance(itemname, (str, unicode)):
             raise TypeError("Item names must have string type, not %s" % (type(itemname)))
@@ -85,8 +85,8 @@
         """
         Given a namespace, return the backend mounted there.
 
-        @type namespace: basestring
-        @param namespace: The namespace of which we look the backend up.
+        :type namespace: basestring
+        :param namespace: The namespace of which we look the backend up.
         """
         return self._get_backend(namespace)[0]
 
@@ -162,14 +162,14 @@
     """
     def __init__(self, backend, item_name, item, mountpoint, *args, **kw):
         """
-        @type backend: Object adhering to the storage API.
-        @param backend: The backend this item belongs to.
-        @type itemname: basestring.
-        @param itemname: The name of the item (not the FQIN).
-        @type item: Object adhering to the storage item API.
-        @param item: The item we want to wrap.
-        @type mountpoint: basestring.
-        @param mountpoint: The mountpoint where this item is located.
+        :type backend: Object adhering to the storage API.
+        :param backend: The backend this item belongs to.
+        :type itemname: basestring.
+        :param itemname: The name of the item (not the FQIN).
+        :type item: Object adhering to the storage item API.
+        :param item: The item we want to wrap.
+        :type mountpoint: basestring.
+        :param mountpoint: The mountpoint where this item is located.
         """
         self._get_backend = backend._get_backend
         self._itemname = item_name
@@ -189,8 +189,8 @@
     @property
     def name(self):
         """
-        @rtype: str
-        @return: the item's fully-qualified name
+        :rtype: str
+        :returns: the item's fully-qualified name
         """
         mountpoint = self._mountpoint
         if mountpoint:
--- a/MoinMoin/storage/backends/sqla.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/storage/backends/sqla.py	Mon Feb 28 04:34:17 2011 +0100
@@ -94,11 +94,11 @@
     """
     def __init__(self, db_uri=None, verbose=False):
         """
-        @type db_uri: str
-        @param db_uri: The database uri that we pass on to SQLAlchemy.
+        :type db_uri: str
+        :param db_uri: The database uri that we pass on to SQLAlchemy.
                        May contain user/password/host/port/etc.
-        @type verbose: bool
-        @param verbose: Verbosity setting. If set to True this will print all SQL queries
+        :type verbose: bool
+        :param verbose: Verbosity setting. If set to True this will print all SQL queries
                         to the console.
         """
         if db_uri is None:
@@ -477,8 +477,8 @@
         This does *only* support sequential writing of data, because otherwise
         we'd need to re-order potentially all chunks after the cursor position.
 
-        @type data: str
-        @param data: The data we want to split and write to the DB in chunks.
+        :type data: str
+        :param data: The data we want to split and write to the DB in chunks.
         """
         # XXX This currently relies on the autoflush feature of the session. It should ideally
         #     flush after every chunk.
@@ -499,8 +499,8 @@
 
         Behaves like file-API's read().
 
-        @type amount: int
-        @param amount: amount of bytes we want to read.
+        :type amount: int
+        :param amount: amount of bytes we want to read.
         """
         chunksize = self._last_chunk.chunksize
 
--- a/MoinMoin/storage/serialization.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/storage/serialization.py	Mon Feb 28 04:34:17 2011 +0100
@@ -176,9 +176,9 @@
     use some of XMLSelectiveGenerator child classes to do selective serialization,
     e.g. of just a list of items or just of items that match some search term.
 
-    @arg obj: object to serialize (must mix in Serializable)
-    @arg xmlfile: output file (file-like or filename)
-    @arg xmlgen_cls: XMLSelectiveGenerator (sub)class instance (all args/kwargs
+    :arg obj: object to serialize (must mix in Serializable)
+    :arg xmlfile: output file (file-like or filename)
+    :arg xmlgen_cls: XMLSelectiveGenerator (sub)class instance (all args/kwargs
                      given after this will be given to xmlgen_cls.__init__()
     """
     xg = xmlgen_cls(xmlfile, *args, **kwargs)
@@ -202,8 +202,8 @@
     """
     Unserialize <xmlfile> to <obj>.
 
-    @arg obj: object to write unserialized data to (must mix in Serializable)
-    @arg xmlfile: input file (file-like or filename)
+    :arg obj: object to write unserialized data to (must mix in Serializable)
+    :arg xmlfile: input file (file-like or filename)
     """
     context = context_cls(xmlfile, *args, **kwargs)
     obj.unserialize(context)
--- a/MoinMoin/themes/__init__.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/themes/__init__.py	Mon Feb 28 04:34:17 2011 +0100
@@ -75,8 +75,8 @@
         Get a translated item name.
         If a translated item exists return its name, if not return item name in English.
 
-        @param item_name: unicode
-        @rtype: unicode
+        :param item_name: unicode
+        :rtype: unicode
         """
         item_lang_request = _(item_en)
         if self.storage.has_item(item_lang_request):
@@ -91,8 +91,8 @@
         """
         Assemble the location using breadcrumbs (was: title)
 
-        @rtype: list
-        @return: location breadcrumbs items in tuple (segment_name, item_name, exists)
+        :rtype: list
+        :returns: location breadcrumbs items in tuple (segment_name, item_name, exists)
         """
         breadcrumbs = []
         current_item = ''
@@ -106,8 +106,8 @@
         """
         Assemble the path breadcrumbs (a.k.a.: trail)
 
-        @rtype: list
-        @return: path breadcrumbs items in tuple (wiki_name, item_name, url, exists, err)
+        :rtype: list
+        :returns: path breadcrumbs items in tuple (wiki_name, item_name, url, exists, err)
         """
         user = self.user
         breadcrumbs = []
@@ -128,8 +128,8 @@
         """
         Assemble arguments used to build user homepage link
 
-        @rtype: tuple
-        @return: arguments of user homepage link in tuple (wiki_href, aliasname, title, exists)
+        :rtype: tuple
+        :returns: arguments of user homepage link in tuple (wiki_href, aliasname, title, exists)
         """
         user = self.user
         name = user.name
@@ -165,9 +165,9 @@
             * url
             * all targets as seen above with title: [[target|title]]
 
-        @param text: the text used in config or user preferences
-        @rtype: tuple
-        @return: pagename or url, link to page or url
+        :param text: the text used in config or user preferences
+        :rtype: tuple
+        :returns: pagename or url, link to page or url
         """
         title = None
         wiki_local = ''  # means local wiki
@@ -220,8 +220,8 @@
         """
         Assemble the navibar
 
-        @rtype: list
-        @return: list of tuples (css_class, url, link_text, title)
+        :rtype: list
+        :returns: list of tuples (css_class, url, link_text, title)
         """
         items = []  # navibar items
         current = item_name
@@ -273,8 +273,8 @@
         """
         Return name of parent item for the current item
 
-        @rtype: unicode
-        @return: parent item name
+        :rtype: unicode
+        :returns: parent item name
         """
         parent_item_name = wikiutil.ParentItemName(item_name)
         if item_name and parent_item_name:
@@ -288,8 +288,8 @@
         """
         Return URL usable for user login
 
-        @rtype: unicode (or None, if no login url is supported)
-        @return: url for user login
+        :rtype: unicode (or None, if no login url is supported)
+        :returns: url for user login
         """
         url = None
         if self.cfg.auth_login_inputs == ['special_no_input']:
@@ -310,8 +310,8 @@
         enabled browsers, and acceptable behavior for those who prefer
         not to use Javascript.
 
-        @rtype: list
-        @return: options of actions menu
+        :rtype: list
+        :returns: options of actions menu
         """
         not_exists = not flaskg.storage.has_item(item_name)
         menu = [
@@ -401,10 +401,10 @@
     interface. The short name is usually fine, unless really stupid
     long names are used (WYGIWYD).
 
-    @param name: item name, unicode
-    @param length: maximum length for shortened item names, int
-    @rtype: unicode
-    @return: shortened version.
+    :param name: item name, unicode
+    :param length: maximum length for shortened item names, int
+    :rtype: unicode
+    :returns: shortened version.
     """
     # First use only the sub page name, that might be enough
     if len(name) > length:
--- a/MoinMoin/user.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/user.py	Mon Feb 28 04:34:17 2011 +0100
@@ -102,8 +102,8 @@
 def getUserList():
     """ Get a list of all (numerical) user IDs.
 
-    @rtype: list
-    @return: all user IDs
+    :rtype: list
+    :returns: all user IDs
     """
     all_users = get_user_backend().iteritems()
     return [item.name for item in all_users]
@@ -128,10 +128,10 @@
     """
     Searches for a user using an openid identifier.
 
-    @param openid: the openid to filter with
-    @type openid: unicode
-    @return: the user whose openid is this one
-    @rtype: user object or None
+    :param openid: the openid to filter with
+    :type openid: unicode
+    :returns: the user whose openid is this one
+    :rtype: user object or None
     """
     users = get_by_filter('openid', openid)
     if len(users) > 0:
@@ -140,9 +140,9 @@
 def getUserId(searchName):
     """ Get the user ID for a specific user NAME.
 
-    @param searchName: the user name to look up
-    @rtype: string
-    @return: the corresponding user ID or None
+    :param searchName: the user name to look up
+    :rtype: string
+    :returns: the corresponding user ID or None
     """
     from MoinMoin.search import term
     try:
@@ -178,10 +178,10 @@
 def encodePassword(pwd, salt=None):
     """ Encode a cleartext password
 
-    @param pwd: the cleartext password, (unicode)
-    @param salt: the salt for the password (string)
-    @rtype: string
-    @return: the password in SHA256-encoding
+    :param pwd: the cleartext password, (unicode)
+    :param salt: the salt for the password (string)
+    :rtype: string
+    :returns: the password in SHA256-encoding
     """
     pwd = pwd.encode('utf-8')
 
@@ -206,9 +206,9 @@
 
     Prevent using ':' and ',' which are reserved by acl.
 
-    @param name: user name, unicode
-    @rtype: unicode
-    @return: user name that can be used in acl lines
+    :param name: user name, unicode
+    :rtype: unicode
+    :returns: user name that can be used in acl lines
     """
     username_allowedchars = "'@.-_" # ' for names like O'Brian or email addresses.
                                     # "," and ":" must not be allowed (ACL delimiters).
@@ -226,7 +226,7 @@
 def isValidName(name):
     """ Validate user name
 
-    @param name: user name, unicode
+    :param name: user name, unicode
     """
     normalized = normalizeName(name)
     return (name == normalized) and not wikiutil.isGroupItem(name)
@@ -238,14 +238,14 @@
     def __init__(self, uid=None, name="", password=None, auth_username="", **kw):
         """ Initialize User object
 
-        @param uid: (optional) user ID
-        @param name: (optional) user name
-        @param password: (optional) user password (unicode)
-        @param auth_username: (optional) already authenticated user name
+        :param uid: (optional) user ID
+        :param name: (optional) user name
+        :param password: (optional) user password (unicode)
+        :param auth_username: (optional) already authenticated user name
                               (e.g. when using http basic auth) (unicode)
-        @keyword auth_method: method that was used for authentication,
+        :keyword auth_method: method that was used for authentication,
                               default: 'internal'
-        @keyword auth_attribs: tuple of user object attribute names that are
+        :keyword auth_attribs: tuple of user object attribute names that are
                                determined by auth method and should not be
                                changeable by preferences, default: ().
                                First tuple element was used for authentication.
@@ -331,7 +331,7 @@
     def create_or_update(self, changed=False):
         """ Create or update a user profile
 
-        @param changed: bool, set this to True if you updated the user profile values
+        :param changed: bool, set this to True if you updated the user profile values
         """
         if not self.valid and not self.disabled or changed: # do we need to save/update?
             self.save() # yes, create/update user profile
@@ -339,8 +339,8 @@
     def exists(self):
         """ Do we have a user account for this user?
 
-        @rtype: bool
-        @return: true, if we have a user account
+        :rtype: bool
+        :returns: true, if we have a user account
         """
         return self._user_backend.has_item(self.id)
 
@@ -352,7 +352,7 @@
         This loads all member variables, except "id" and "valid" and
         those starting with an underscore.
 
-        @param password: If not None, then the given password must match the
+        :param password: If not None, then the given password must match the
                          password in the user account file.
         """
         if not self.exists():
@@ -397,10 +397,10 @@
 
         This is a private method and should not be used by clients.
 
-        @param data: dict with user data (from storage)
-        @param password: password to verify [unicode]
-        @rtype: 2 tuple (bool, bool)
-        @return: password is valid, enc_password changed
+        :param data: dict with user data (from storage)
+        :param password: password to verify [unicode]
+        :rtype: 2 tuple (bool, bool)
+        :returns: password is valid, enc_password changed
         """
         epwd = data['enc_password']
 
@@ -520,7 +520,7 @@
     def setBookmark(self, tm):
         """ Set bookmark timestamp.
 
-        @param tm: timestamp
+        :param tm: timestamp
         """
         if self.valid:
             interwikiname = self._cfg.interwikiname or u''
@@ -531,8 +531,8 @@
     def getBookmark(self):
         """ Get bookmark timestamp.
 
-        @rtype: int
-        @return: bookmark timestamp or None
+        :rtype: int
+        :returns: bookmark timestamp or None
         """
         bm = None
         interwikiname = self._cfg.interwikiname or u''
@@ -546,8 +546,8 @@
     def delBookmark(self):
         """ Removes bookmark timestamp.
 
-        @rtype: int
-        @return: 0 on success, 1 on failure
+        :rtype: int
+        :returns: 0 on success, 1 on failure
         """
         interwikiname = self._cfg.interwikiname or u''
         if self.valid:
@@ -565,8 +565,8 @@
     def getSubscriptionList(self):
         """ Get list of pages this user has subscribed to
 
-        @rtype: list
-        @return: pages this user has subscribed to
+        :rtype: list
+        :returns: pages this user has subscribed to
         """
         return self.subscribed_items
 
@@ -579,9 +579,9 @@
         TODO: check if it's fast enough when getting called for many
               users from page.getSubscribersList()
 
-        @param pagelist: list of pages to check for subscription
-        @rtype: bool
-        @return: if user is subscribed any page in pagelist
+        :param pagelist: list of pages to check for subscription
+        :rtype: bool
+        :returns: if user is subscribed any page in pagelist
         """
         if not self.valid:
             return False
@@ -614,10 +614,10 @@
         To enable shared farm users, if the wiki has an interwiki name,
         page names are saved as interwiki names.
 
-        @param pagename: name of the page to subscribe
-        @type pagename: unicode
-        @rtype: bool
-        @return: if page was subscribed
+        :param pagename: name of the page to subscribe
+        :type pagename: unicode
+        :rtype: bool
+        :returns: if page was subscribed
         """
         if self._cfg.interwikiname:
             pagename = self._interWikiName(pagename)
@@ -644,10 +644,10 @@
         must check if the user is still subscribed to the page after we
         try to remove names from the list.
 
-        @param pagename: name of the page to subscribe
-        @type pagename: unicode
-        @rtype: bool
-        @return: if unsubscrieb was successful. If the user has a
+        :param pagename: name of the page to subscribe
+        :type pagename: unicode
+        :rtype: bool
+        :returns: if unsubscrieb was successful. If the user has a
             regular expression that match, it will always fail.
         """
         changed = False
@@ -670,17 +670,17 @@
     def getQuickLinks(self):
         """ Get list of pages this user wants in the navibar
 
-        @rtype: list
-        @return: quicklinks from user account
+        :rtype: list
+        :returns: quicklinks from user account
         """
         return self.quicklinks
 
     def isQuickLinkedTo(self, pagelist):
         """ Check if user quicklink matches any page in pagelist.
 
-        @param pagelist: list of pages to check for quicklinks
-        @rtype: bool
-        @return: if user has quicklinked any page in pagelist
+        :param pagelist: list of pages to check for quicklinks
+        :rtype: bool
+        :returns: if user has quicklinked any page in pagelist
         """
         if not self.valid:
             return False
@@ -700,10 +700,10 @@
         If the wiki has an interwiki name, all links are saved as
         interwiki names. If not, as simple page name.
 
-        @param pagename: page name
-        @type pagename: unicode
-        @rtype: bool
-        @return: if pagename was added
+        :param pagename: page name
+        :type pagename: unicode
+        :rtype: bool
+        :returns: if pagename was added
         """
         changed = False
         interWikiName = self._interWikiName(pagename)
@@ -728,10 +728,10 @@
 
         Remove both interwiki and simple name from quicklinks.
 
-        @param pagename: page name
-        @type pagename: unicode
-        @rtype: bool
-        @return: if pagename was removed
+        :param pagename: page name
+        :type pagename: unicode
+        :rtype: bool
+        :returns: if pagename was removed
         """
         changed = False
         interWikiName = self._interWikiName(pagename)
@@ -749,8 +749,8 @@
     def _interWikiName(self, pagename):
         """ Return the inter wiki name of a page name
 
-        @param pagename: page name
-        @type pagename: unicode
+        :param pagename: page name
+        :type pagename: unicode
         """
         if not self._cfg.interwikiname:
             return None
@@ -763,7 +763,7 @@
     def addTrail(self, item_name):
         """ Add item name to trail.
 
-        @param item_name: the item name (unicode) to add to the trail
+        :param item_name: the item name (unicode) to add to the trail
         """
         # Save interwiki links internally
         if self._cfg.interwikiname:
@@ -779,8 +779,8 @@
     def getTrail(self):
         """ Return list of recently visited item names.
 
-        @rtype: list
-        @return: item names (unicode) in trail
+        :rtype: list
+        :returns: item names (unicode) in trail
         """
         return session.get('trail', [])
 
--- a/MoinMoin/util/__init__.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/__init__.py	Mon Feb 28 04:34:17 2011 +0100
@@ -88,10 +88,10 @@
     """ Generate a random string with given length consisting
         of the given characters.
 
-        @param length: length of the string
-        @param allowed_chars: string with allowed characters or None
+        :param length: length of the string
+        :param allowed_chars: string with allowed characters or None
                               to indicate all 256 byte values should be used
-        @return: random string
+        :returns: random string
     """
     if allowed_chars is None:
         return ''.join([chr(random.randint(0, 255)) for dummy in xrange(length)])
--- a/MoinMoin/util/diff_html.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/diff_html.py	Mon Feb 28 04:34:17 2011 +0100
@@ -30,8 +30,8 @@
     """ Find changes between old and new and return
         HTML markup visualising them.
 
-        @param old: old text [unicode]
-        @param new: new text [unicode]
+        :param old: old text [unicode]
+        :param new: new text [unicode]
     """
     seq1 = old.splitlines()
     seq2 = new.splitlines()
--- a/MoinMoin/util/diff_text.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/diff_text.py	Mon Feb 28 04:34:17 2011 +0100
@@ -12,11 +12,11 @@
     """
     Find changes between oldlines and newlines.
 
-    @param oldlines: list of old text lines
-    @param newlines: list of new text lines
-    @keyword ignorews: if 1: ignore whitespace
-    @rtype: list
-    @return: lines like diff tool does output.
+    :param oldlines: list of old text lines
+    :param newlines: list of new text lines
+    :keyword ignorews: if 1: ignore whitespace
+    :rtype: list
+    :returns: lines like diff tool does output.
     """
     false = lambda s: None
     if kw.get('ignorews', 0):
--- a/MoinMoin/util/filesys.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/filesys.py	Mon Feb 28 04:34:17 2011 +0100
@@ -140,13 +140,13 @@
               using file's mtime though.
               max_staleness tries to avoid the worst for these cases.
 
-        @param filename: file name of the file to look at
-        @param max_staleness: if a file is older than that, we may consider
+        :param filename: file name of the file to look at
+        :param max_staleness: if a file is older than that, we may consider
                               it stale and return a different uid - this is a
                               dirty trick to work around changes never being
                               detected. Default is 3600 seconds, use None to
                               disable this trickery. See below for more details.
-        @return: an object that changes value if the file changed,
+        :returns: an object that changes value if the file changed,
                  None is returned if there were problems accessing the file
     """
     try:
--- a/MoinMoin/util/interwiki.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/interwiki.py	Mon Feb 28 04:34:17 2011 +0100
@@ -27,9 +27,9 @@
     'MoinMoin:Page with blanks' -> "MoinMoin", "Page with blanks"
     'MoinMoin:' -> "MoinMoin", ""
 
-    @param wikiurl: the url to split
-    @rtype: tuple
-    @return: (wikiname, pagename)
+    :param wikiurl: the url to split
+    :rtype: tuple
+    :returns: (wikiname, pagename)
     """
     try:
         wikiname, pagename = wikiurl.split(":", 1)
@@ -41,10 +41,10 @@
 def resolve_interwiki(wikiname, pagename):
     """ Resolve an interwiki reference (wikiname:pagename).
 
-    @param wikiname: interwiki wiki name
-    @param pagename: interwiki page name
-    @rtype: tuple
-    @return: (wikitag, wikiurl, wikitail, err)
+    :param wikiname: interwiki wiki name
+    :param pagename: interwiki page name
+    :rtype: tuple
+    :returns: (wikitag, wikiurl, wikitail, err)
     """
     this_wiki_url = request.script_root + '/'
     if wikiname in ('Self', app.cfg.interwikiname):
@@ -63,10 +63,10 @@
     Note: We can't know what kind of URL quoting a remote wiki expects.
           We just use a utf-8 encoded string with standard URL quoting.
 
-    @param wikiurl: wiki url, maybe including a $PAGE placeholder
-    @param wikitail: page name
-    @rtype: string
-    @return: generated URL of the page in the other wiki
+    :param wikiurl: wiki url, maybe including a $PAGE placeholder
+    :param wikitail: page name
+    :rtype: string
+    :returns: generated URL of the page in the other wiki
     """
     wikitail = url_quote(wikitail, charset=config.charset, safe='/')
     if '$PAGE' in wikiurl:
@@ -85,9 +85,9 @@
 
     'SomeOtherWiki' means we store user homepages in another wiki.
 
-    @param username: the user's name
-    @rtype: tuple
-    @return: (wikiname, itemname)
+    :param username: the user's name
+    :rtype: tuple
+    :returns: (wikiname, itemname)
     """
     homewiki = app.cfg.user_homewiki
     if homewiki == app.cfg.interwikiname:
--- a/MoinMoin/util/iri.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/iri.py	Mon Feb 28 04:34:17 2011 +0100
@@ -308,9 +308,9 @@
         """
         Quote all illegal characters.
 
-        @param rules: List of unicode ranges
-        @param requote: Input string is already quoted
-        @return: Quoted string
+        :param rules: List of unicode ranges
+        :param requote: Input string is already quoted
+        :returns: Quoted string
         """
         quote_filter = cls.quote_filter
 
@@ -333,8 +333,8 @@
         """
         Unquotes percent-encoded strings.
 
-        @param s: Input string
-        @return: Tuple of full decoded and minimal quoted string
+        :param s: Input string
+        :returns: Tuple of full decoded and minimal quoted string
         """
         ret1 = []
         ret2 = []
--- a/MoinMoin/util/lock.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/lock.py	Mon Feb 28 04:34:17 2011 +0100
@@ -79,9 +79,9 @@
     def __init__(self, dir, timeout=None):
         """ Init a write lock
 
-        @param dir: the lock directory. Since this lock uses a empty
+        :param dir: the lock directory. Since this lock uses a empty
             filename, the dir is the lockDir.
-        @param timeout: while trying to acquire, the lock will expire
+        :param timeout: while trying to acquire, the lock will expire
             other exclusive locks older than timeout.
             WARNING: because of file system timing limitations, timeouts
             must be at least 2 seconds.
@@ -199,11 +199,11 @@
     def __init__(self, dir, timeout=None, readlocktimeout=None):
         """ Init a write lock
 
-        @param dir: the lock directory. Every resource should have one
+        :param dir: the lock directory. Every resource should have one
             lock directory, which may contain read or write locks.
-        @param timeout: while trying to acquire, the lock will expire
+        :param timeout: while trying to acquire, the lock will expire
             other unreleased write locks older than timeout.
-        @param readlocktimeout: while trying to acquire, the lock will
+        :param readlocktimeout: while trying to acquire, the lock will
             expire other read locks older than readlocktimeout.
         """
         ExclusiveLock.__init__(self, dir, timeout)
@@ -276,9 +276,9 @@
     def __init__(self, dir, timeout=None):
         """ Init a read lock
 
-        @param dir: the lock directory. Every resource should have one
+        :param dir: the lock directory. Every resource should have one
             lock directory, which may contain read or write locks.
-        @param timeout: while trying to acquire, the lock will expire
+        :param timeout: while trying to acquire, the lock will expire
             other unreleased write locks older than timeout.
         """
         ExclusiveLock.__init__(self, dir, timeout)
--- a/MoinMoin/util/mime.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/mime.py	Mon Feb 28 04:34:17 2011 +0100
@@ -9,22 +9,22 @@
 
 class Type(object):
     """
-    @ivar type: Type part
-    @type type: unicode
-    @ivar subtype: Subtype part
-    @type subtype: unicode
-    @ivar parameters: Parameters part
-    @type parameters: dict
+    :ivar type: Type part
+    :type type: unicode
+    :ivar subtype: Subtype part
+    :type subtype: unicode
+    :ivar parameters: Parameters part
+    :type parameters: dict
     """
 
     __token_allowed = s = frozenset(r"""!#$%&'*+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz{|}~""")
 
     def __init__(self, _type=None, type=None, subtype=None, parameters=None):
         """
-        @param _type: Type object or string representation
-        @keyword type: Type part
-        @keyword subtype: Subtype part
-        @keyword parameters: Parameters part
+        :param _type: Type object or string representation
+        :keyword type: Type part
+        :keyword subtype: Subtype part
+        :keyword parameters: Parameters part
         """
         if isinstance(_type, Type):
             self.type = _type.type
--- a/MoinMoin/util/paramparser.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/paramparser.py	Mon Feb 28 04:34:17 2011 +0100
@@ -86,17 +86,17 @@
     multiple keys, e.g.
         "a=b=c" -> ('a', 'b', 'c')
 
-    @param args: arguments to parse
-    @param separator: the argument separator, defaults to None, meaning any
+    :param args: arguments to parse
+    :param separator: the argument separator, defaults to None, meaning any
         space separates arguments
-    @param name_value_separator: separator for name=value, default '=',
+    :param name_value_separator: separator for name=value, default '=',
         name=value keywords not parsed if evaluates to False
-    @param brackets: a list of two-character strings giving
+    :param brackets: a list of two-character strings giving
         opening and closing brackets
-    @param seplimit: limits the number of parsed arguments
-    @param multikey: multiple keys allowed for a single value
-    @rtype: list
-    @returns: list of unicode strings and tuples containing
+    :param seplimit: limits the number of parsed arguments
+    :param multikey: multiple keys allowed for a single value
+    :rtype: list
+    :returns: list of unicode strings and tuples containing
         unicode strings, or lists containing the same for
         bracketing support
     """
@@ -288,11 +288,11 @@
     Valid input is 'true'/'false', 'yes'/'no' and '1'/'0' or None for
     the default value.
 
-    @param arg: The argument, may be None or a unicode string
-    @param name: Name of the argument, for error messages
-    @param default: default value if arg is None
-    @rtype: boolean or None
-    @returns: the boolean value of the string according to above rules
+    :param arg: The argument, may be None or a unicode string
+    :param name: Name of the argument, for error messages
+    :param default: default value if arg is None
+    :rtype: boolean or None
+    :returns: the boolean value of the string according to above rules
               (or default value)
     """
     assert default is None or isinstance(default, bool)
@@ -321,11 +321,11 @@
     containing the decimal representation of a number.
     None is a valid input and yields the default value.
 
-    @param arg: The argument, may be None or a unicode string
-    @param name: Name of the argument, for error messages
-    @param default: default value if arg is None
-    @rtype: int or None
-    @returns: the integer value of the string (or default value)
+    :param arg: The argument, may be None or a unicode string
+    :param name: Name of the argument, for error messages
+    :param default: default value if arg is None
+    :rtype: int or None
+    :returns: the integer value of the string (or default value)
     """
     assert default is None or isinstance(default, (int, long))
     if arg is None:
@@ -349,11 +349,11 @@
     as macro parameters, return a float from a unicode string.
     None is a valid input and yields the default value.
 
-    @param arg: The argument, may be None or a unicode string
-    @param name: Name of the argument, for error messages
-    @param default: default return value if arg is None
-    @rtype: float or None
-    @returns: the float value of the string (or default value)
+    :param arg: The argument, may be None or a unicode string
+    :param name: Name of the argument, for error messages
+    :param default: default return value if arg is None
+    :rtype: float or None
+    :returns: the float value of the string (or default value)
     """
     assert default is None or isinstance(default, (int, long, float))
     if arg is None:
@@ -377,11 +377,11 @@
     as macro parameters, return a complex from a unicode string.
     None is a valid input and yields the default value.
 
-    @param arg: The argument, may be None or a unicode string
-    @param name: Name of the argument, for error messages
-    @param default: default return value if arg is None
-    @rtype: complex or None
-    @returns: the complex value of the string (or default value)
+    :param arg: The argument, may be None or a unicode string
+    :param name: Name of the argument, for error messages
+    :param default: default return value if arg is None
+    :rtype: complex or None
+    :returns: the complex value of the string (or default value)
     """
     assert default is None or isinstance(default, (int, long, float, complex))
     if arg is None:
@@ -407,11 +407,11 @@
     as macro parameters, return a unicode string from a unicode string.
     None is a valid input and yields the default value.
 
-    @param arg: The argument, may be None or a unicode string
-    @param name: Name of the argument, for error messages
-    @param default: default return value if arg is None;
-    @rtype: unicode or None
-    @returns: the unicode string (or default value)
+    :param arg: The argument, may be None or a unicode string
+    :param name: Name of the argument, for error messages
+    :param default: default return value if arg is None;
+    :rtype: unicode or None
+    :returns: the unicode string (or default value)
     """
     assert default is None or isinstance(default, unicode)
     if arg is None:
@@ -429,15 +429,15 @@
     choices given. None is a valid input and yields first of the valid
     choices.
 
-    @param arg: The argument, may be None or a unicode string
-    @param name: Name of the argument, for error messages
-    @param choices: the possible choices
-    @param default_none: If False (default), get_choice returns first available
+    :param arg: The argument, may be None or a unicode string
+    :param name: Name of the argument, for error messages
+    :param choices: the possible choices
+    :param default_none: If False (default), get_choice returns first available
                          choice if arg is None. If True, get_choice returns
                          None if arg is None. This is useful if some arg value
                          is required (no default choice).
-    @rtype: unicode or None
-    @returns: the unicode string (or default value)
+    :rtype: unicode or None
+    :returns: the unicode string (or default value)
     """
     assert isinstance(choices, (tuple, list))
     if arg is None:
@@ -542,7 +542,7 @@
     def __init__(self, argtype):
         """
         Initialise a required_arg
-        @param argtype: the type the argument should have
+        :param argtype: the type the argument should have
         """
         if not (argtype in (bool, int, long, float, complex, unicode) or
                 isinstance(argtype, (IEFArgument, tuple, list))):
@@ -561,10 +561,10 @@
     it to the macro function. That way, macros need not call the
     wikiutil.get_* functions for any arguments that have a default.
 
-    @param function: the function to invoke
-    @param args: unicode string with arguments (or evaluating to False)
-    @param fixed_args: fixed arguments to pass as the first arguments
-    @returns: the return value from the function called
+    :param function: the function to invoke
+    :param args: unicode string with arguments (or evaluating to False)
+    :param fixed_args: fixed arguments to pass as the first arguments
+    :returns: the return value from the function called
     """
     from inspect import getargspec, isfunction, isclass, ismethod
 
--- a/MoinMoin/util/plugins.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/plugins.py	Mon Feb 28 04:34:17 2011 +0100
@@ -44,12 +44,12 @@
     specific plugin, use either importWikiPlugin or importBuiltinPlugin
     directly.
 
-    @param cfg: wiki config instance
-    @param kind: what kind of module we want to import
-    @param name: the name of the module
-    @param function: the function name
-    @rtype: any object
-    @return: "function" of module "name" of kind "kind", or None
+    :param cfg: wiki config instance
+    :param kind: what kind of module we want to import
+    :param name: the name of the module
+    :param function: the function name
+    :rtype: any object
+    :returns: "function" of module "name" of kind "kind", or None
     """
     try:
         return importWikiPlugin(cfg, kind, name, function)
@@ -109,9 +109,9 @@
 def builtinPlugins(kind):
     """ Gets a list of modules in MoinMoin.'kind'
 
-    @param kind: what kind of modules we look for
-    @rtype: list
-    @return: module names
+    :param kind: what kind of modules we look for
+    :rtype: list
+    :returns: module names
     """
     modulename = "MoinMoin." + kind
     return pysupport.importName(modulename, "modules")
@@ -122,9 +122,9 @@
     Gets a dict containing the names of all plugins of <kind>
     as the key and the containing module name as the value.
 
-    @param kind: what kind of modules we look for
-    @rtype: dict
-    @return: plugin name to containing module name mapping
+    :param kind: what kind of modules we look for
+    :rtype: dict
+    :returns: plugin name to containing module name mapping
     """
     # short-cut if we've loaded the dict already
     # (or already failed to load it)
@@ -150,9 +150,9 @@
 def getPlugins(kind, cfg):
     """ Gets a list of plugin names of kind
 
-    @param kind: what kind of modules we look for
-    @rtype: list
-    @return: module names
+    :param kind: what kind of modules we look for
+    :rtype: list
+    :returns: module names
     """
     # Copy names from builtin plugins - so we dont destroy the value
     all_plugins = builtinPlugins(kind)[:]
--- a/MoinMoin/util/profile.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/profile.py	Mon Feb 28 04:34:17 2011 +0100
@@ -53,9 +53,9 @@
     def __init__(self, name, requestsPerSample=100, collect=0):
         """ Initialize a profiler
 
-        @param name: profiler name, used in the log file name
-        @param requestsPerSample: how many request to run between samples
-        @param collect: should call gc.collect() in each sample
+        :param name: profiler name, used in the log file name
+        :param requestsPerSample: how many request to run between samples
+        :param collect: should call gc.collect() in each sample
         """
         logname = '%s--%s.log' % (name, time.strftime('%Y-%m-%d--%H-%M'))
         self.logfile = file(logname, 'a')
--- a/MoinMoin/util/pysupport.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/pysupport.py	Mon Feb 28 04:34:17 2011 +0100
@@ -73,10 +73,10 @@
 
     Any error raised here must be handled by the caller.
 
-    @param modulename: full qualified mudule name, e.g. x.y.z
-    @param name: name to import from modulename
-    @rtype: any object
-    @return: name from module
+    :param modulename: full qualified mudule name, e.g. x.y.z
+    :param name: name to import from modulename
+    :rtype: any object
+    :returns: name from module
     """
     module = __import__(modulename, globals(), {}, [name])
     return getattr(module, name)
@@ -90,10 +90,10 @@
     functions use same lock, e.g. all functions that change same data
     structure.
 
-    @param function: function to make thread safe
-    @param lock: threading.Lock instance or None
-    @rtype: function
-    @return: function decorated with locking
+    :param function: function to make thread safe
+    :param lock: threading.Lock instance or None
+    :rtype: function
+    :returns: function decorated with locking
     """
     if lock is None:
         import threading
--- a/MoinMoin/util/registry.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/registry.py	Mon Feb 28 04:34:17 2011 +0100
@@ -71,7 +71,7 @@
         """
         Unregister a factory
 
-        @param factory: Factory to unregister
+        :param factory: Factory to unregister
         """
         old_entries = self._entries
         entries = [i for i in old_entries if not i.factory is factory]
@@ -86,6 +86,6 @@
         """
         Register a factory
 
-        @param factory: Factory to register. Callable, have to return a class
+        :param factory: Factory to register. Callable, have to return a class
         """
         return self._register(self.Entry(factory, priority))
--- a/MoinMoin/util/tree.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/util/tree.py	Mon Feb 28 04:34:17 2011 +0100
@@ -25,8 +25,8 @@
         """
         Create a Name within this namespace
 
-        @param name: The name within this namespace.
-        @return: A Name
+        :param name: The name within this namespace.
+        :returns: A Name
         """
         return Name(name, self)
 
@@ -39,7 +39,7 @@
          - a trailing "_" (underscore) is removed and
          - all included "_" (underscore) are replaced by "-" (hyphen).
 
-        @return: A Name
+        :returns: A Name
         """
         if '_' in key:
             if key.startswith('_'):
--- a/MoinMoin/wikiutil.py	Mon Feb 28 03:46:52 2011 +0100
+++ b/MoinMoin/wikiutil.py	Mon Feb 28 04:34:17 2011 +0100
@@ -51,9 +51,9 @@
     WARNING: Use this function only for data that you view, not for data
     that you save in the wiki.
 
-    @param text: the text to decode, string
-    @rtype: unicode
-    @return: decoded text (maybe wrong)
+    :param text: the text to decode, string
+    :rtype: unicode
+    :returns: decoded text (maybe wrong)
     """
     # Shortcut for unicode input
     if isinstance(text, unicode):
@@ -74,10 +74,10 @@
     """
     Decodes input from the user.
 
-    @param s: the string to unquote
-    @param charsets: list of charsets to assume the string is in
-    @rtype: unicode
-    @return: the unquoted string as unicode
+    :param s: the string to unquote
+    :param charsets: list of charsets to assume the string is in
+    :rtype: unicode
+    :returns: the unquoted string as unicode
     """
     for charset in charsets:
         try:
@@ -92,9 +92,9 @@
         replace CR, LF, TAB by whitespace
         delete control chars
 
-        @param text: unicode text to clean (if we get str, we decode)
-        @rtype: unicode
-        @return: cleaned text
+        :param text: unicode text to clean (if we get str, we decode)
+        :rtype: unicode
+        :returns: cleaned text
     """
     # we only have input fields with max 200 chars, but spammers send us more
     length = len(text)
@@ -130,9 +130,9 @@
 def isSystemItem(itemname):
     """ Is this a system page?
 
-    @param itemname: the item name
-    @rtype: bool
-    @return: True if page is a system item
+    :param itemname: the item name
+    :rtype: bool
+    :returns: True if page is a system item
     """
     from MoinMoin.items import IS_SYSITEM
     try:
@@ -147,9 +147,9 @@
 def isGroupItem(itemname):
     """ Is this a name of group item?
 
-    @param itemname: the item name
-    @rtype: bool
-    @return: True if item is a group item
+    :param itemname: the item name
+    :rtype: bool
+    :returns: True if item is a group item
     """
     return app.cfg.cache.item_group_regexact.search(itemname) is not None
 
@@ -158,10 +158,10 @@
     """
     Return the absolute item name for a (possibly) relative item name.
 
-    @param context: name of the item where "itemname" appears on
-    @param itemname: the (possibly relative) item name
-    @rtype: unicode
-    @return: the absolute item name
+    :param context: name of the item where "itemname" appears on
+    :param itemname: the (possibly relative) item name
+    :rtype: unicode
+    :returns: the absolute item name
     """
     if itemname.startswith(PARENT_PREFIX):
         while context and itemname.startswith(PARENT_PREFIX):
@@ -179,10 +179,10 @@
     """
     Return the relative item name for some context.
 
-    @param context: name of the item where "itemname" appears on
-    @param itemname: the absolute item name
-    @rtype: unicode
-    @return: the relative item name
+    :param context: name of the item where "itemname" appears on
+    :param itemname: the absolute item name
+    :rtype: unicode
+    :returns: the relative item name
     """
     if context == '':
         # special case, context is some "virtual root" item with name == ''
@@ -212,9 +212,9 @@
     """
     Return the parent item name.
 
-    @param itemname: the absolute item name (unicode)
-    @rtype: unicode
-    @return: the parent item name (or empty string for toplevel items)
+    :param itemname: the absolute item name (unicode)
+    :rtype: unicode
+    :returns: the parent item name (or empty string for toplevel items)
     """
     if itemname:
         pos = itemname.rfind('/')
@@ -426,9 +426,9 @@
 
     Restrict even more group pages, so they can be used inside acl lines.
 
-    @param name: page name, unicode
-    @rtype: unicode
-    @return: decoded and sanitized page name
+    :param name: page name, unicode
+    :rtype: unicode
+    :returns: decoded and sanitized page name
     """
     # Strip invalid characters
     name = config.page_invalid_chars_regex.sub(u'', name)
@@ -478,9 +478,9 @@
     Return a group letter for `name`, which must be a unicode string.
     Currently supported: Hangul Syllables (U+AC00 - U+D7AF)
 
-    @param name: a string
-    @rtype: string
-    @return: group letter or None
+    :param name: a string
+    :rtype: string
+    :returns: group letter or None
     """
     c = name[0]
     if u'\uAC00' <= c <= u'\uD7AF': # Hangul Syllables
@@ -571,11 +571,11 @@
         """
         Compute http headers for sending a file
 
-        @param filename: filename for content-disposition header and for autodetecting
+        :param filename: filename for content-disposition header and for autodetecting
                          content_type (unicode, default: None)
-        @param content_type: content-type header value (str, default: autodetect from filename)
-        @param content_disposition: type for content-disposition header (str, default: None)
-        @param content_length: for content-length header (int, default:None)
+        :param content_type: content-type header value (str, default: autodetect from filename)
+        :param content_disposition: type for content-disposition header (str, default: None)
+        :param content_length: for content-length header (int, default:None)
         """
         if filename:
             # make sure we just have a simple filename (without path)
@@ -610,7 +610,7 @@
     * The key must be different for different **kw.
     * Key is pure ascii
 
-    @param **kw: keys/values to compute cache key from
+    :param **kw: keys/values to compute cache key from
     """
     return hashlib.md5(repr(kw)).hexdigest()