Commits

Roland Meister  committed 7db6b52 Merge
  • Participants
  • Parent commits 18838ca, 10715f4

Comments (0)

Files changed (33)

 24a2061063212f1951507a35ed589a55cd9dd962 0.6.4
 f76fb0be8011dbecec8f39fba791feca24351bfb 0.6.5
 36de1ff4ba69967829b918b961e2097b8f9bd537 0.6.6
+e2723a4a64f07ee10ec24fef27f8bf79bb3d5b3b 0.6.7
 80dc1a872e49556dce681fdb2ea4be54ad847e6c 1.0b1
 b494009dccf19d0df894a4ce50754e866a099808 1.0b2
   - The :rst:role:`ref` role can now also reference tables by caption.
   - The :rst:dir:`include` directive now supports absolute paths, which
     are interpreted as relative to the source directory.
+  - In the Python domain, references like ``:func:`.name``` now look for
+    matching names with any prefix if no direct match is found.
 
 * Configuration:
 
     instead of PNG images, controlled by the
     :confval:`graphviz_output_format` config value.
   - Added ``alt`` option to :rst:dir:`graphviz` extension directives.
+  - Added ``exclude`` argument to :func:`.autodoc.between`.
 
 * Translations:
 
   - Added Turkish translation, thanks to Firat Ozgul.
   - Added Catalan translation, thanks to Pau Fernández.
   - Added simplified Chinese translation.
+  - Added Danish translation, thanks to Hjorth Larsen.
 
 
-Release 0.6.7 (in development)
+Release 0.6.8 (in development)
 ==============================
 
+* #445: Fix links to result pages when using the search function
+  of HTML built with the ``dirhtml`` builder.
+
+* #444: In templates, properly re-escape values treated with the
+  "striptags" Jinja filter.
+
+
+Release 0.6.7 (Jun 05, 2010)
+============================
+
+* #440: Remove usage of a Python >= 2.5 API in the ``literalinclude``
+  directive.
+
+* Fix a bug that prevented some references being generated in the
+  LaTeX builder.
+
+* #428: Add some missing CSS styles for standard docutils classes.
+
+* #432: Fix UnicodeErrors while building LaTeX in translated locale.
+
 
 Release 0.6.6 (May 25, 2010)
 ============================
 * Fityk: http://www.unipress.waw.pl/fityk/
 * MapServer: http://mapserver.org/
 * Matplotlib: http://matplotlib.sourceforge.net/
+* Music21: http://mit.edu/music21/doc/html/contents.html
 * MyHDL: http://www.myhdl.org/doc/0.6/
 * NetworkX: http://networkx.lanl.gov/
 * Pweave: http://mpastell.com/pweave/

File doc/config.rst

 
    * ``ca`` -- Catalan
    * ``cs`` -- Czech
+   * ``da`` -- Danish
    * ``de`` -- German
    * ``en`` -- English
    * ``es`` -- Spanish
    * *author*: Author for the LaTeX document.  The same LaTeX markup caveat as
      for *title* applies.  Use ``\and`` to separate multiple authors, as in:
      ``'John \and Sarah'``.
-   * *documentclass*: Must be one of ``'manual'`` or ``'howto'``.  Only "manual"
-     documents will get appendices.  Also, howtos will have a simpler title
-     page.
+   * *documentclass*: Normally, one of ``'manual'`` or ``'howto'`` (provided by
+     Sphinx).  Other document classes can be given, but they must include the
+     "sphinx" package in order to define Sphinx' custom LaTeX commands.
+     "howto" documents will not get appendices.  Also, howtos will have a simpler
+     title page.
    * *toctree_only*: Must be ``True`` or ``False``.  If ``True``, the *startdoc*
      document itself is not included in the output, only the documents
      referenced by it via TOC trees.  With this option, you can put extra stuff

File doc/domains.rst

 :mod:`codecs` module, ``:py:func:`open``` always refers to the built-in
 function, while ``:py:func:`.open``` refers to :func:`codecs.open`.
 
+Also, if the name is prefixed with a dot, and no exact match is found, the
+target is taken as a suffix and all object names with that suffix are
+searched.  For example, ``:py:meth:`.TarFile.close``` references the
+``tarfile.TarFile.close()`` function, even if the current module is not
+``tarfile``.  Since this can get ambiguous, if there is more than one possible
+match, you will get a warning from Sphinx.
+
 A similar heuristic is used to determine whether the name is an attribute of the
 currently documented class.
 
    Reference a C++ object.  You can give the full signature (and need to, for
    overloaded functions.)
 
+   .. note::
+
+      Sphinx' syntax to give references a custom title can interfere with
+      linking to template classes, if nothing follows the closing angle
+      bracket, i.e. if the link looks like this: ``:cpp:class:`MyClass<T>```.
+      This is interpreted as a link to ``T`` with a title of ``MyClass``.
+      In this case, please escape the opening angle bracket with a backslash,
+      like this: ``:cpp:class:`MyClass\<T>```.
+
 .. admonition:: Note on References
 
    It is currently impossible to link to a specific version of an

File doc/intro.rst

File contents unchanged.

File doc/templating.rst

 
 .. data:: meta
 
-   Document metadata, see :ref:`metadata`.
+   Document metadata (a dictionary), see :ref:`metadata`.
 
 .. data:: sourcename
 

File sphinx/__init__.py

File contents unchanged.

File sphinx/application.py

 from cStringIO import StringIO
 
 from docutils import nodes
-from docutils.parsers.rst import Directive, convert_directive_function, \
+from docutils.parsers.rst import convert_directive_function, \
      directives, roles
 
 import sphinx
                 setattr(translator, 'depart_'+node.__name__, depart)
 
     def _directive_helper(self, obj, content=None, arguments=None, **options):
-        if isinstance(obj, clstypes) and issubclass(obj, Directive):
+        if isinstance(obj, (types.FunctionType, types.MethodType)):
+            obj.content = content
+            obj.arguments = arguments or (0, 0, False)
+            obj.options = options
+            return convert_directive_function(obj)
+        else:
             if content or arguments or options:
                 raise ExtensionError('when adding directive classes, no '
                                      'additional arguments may be given')
             return obj
-        else:
-            obj.content = content
-            obj.arguments = arguments or (0, 0, False)
-            obj.options = options
-            return convert_directive_function(obj)
 
     def add_directive(self, name, obj, content=None, arguments=None, **options):
         directives.register_directive(

File sphinx/builders/html.py

 
         return outfilename
 
+    def prepare_writing(self, docnames):
+        StandaloneHTMLBuilder.prepare_writing(self, docnames)
+        self.globalcontext['no_search_suffix'] = True
+
 
 class SingleFileHTMLBuilder(StandaloneHTMLBuilder):
     """

File sphinx/builders/latex.py

                 encoding='utf-8')
             self.info("processing " + targetname + "... ", nonl=1)
             doctree = self.assemble_doctree(docname, toctree_only,
-                appendices=((docclass == 'manual') and
+                appendices=((docclass != 'howto') and
                             self.config.latex_appendices or []))
             self.post_process_images(doctree)
             self.info("writing... ", nonl=1)

File sphinx/directives/code.py

         codec_info = codecs.lookup(encoding)
         try:
             f = codecs.StreamReaderWriter(open(fn, 'U'),
-                    codec_info.streamreader, codec_info.streamwriter, 'strict')
+                    codec_info[2], codec_info[3], 'strict')
             lines = f.readlines()
             f.close()
         except (IOError, OSError):

File sphinx/domains/python.py

     def find_obj(self, env, modname, classname, name, type, searchorder=0):
         """
         Find a Python object for "name", perhaps using the given module and/or
-        classname.
+        classname.  Returns a list of (name, object entry) tuples.
         """
         # skip parens
         if name[-2:] == '()':
             return None, None
 
         objects = self.data['objects']
+        matches = []
 
         newname = None
         if searchorder == 1:
                 newname = modname + '.' + name
             elif name in objects:
                 newname = name
+            else:
+                # "fuzzy" searching mode
+                searchname = '.' + name
+                matches = [(name, objects[name]) for name in objects
+                           if name.endswith(searchname)]
         else:
             if name in objects:
                 newname = name
             elif type in ('func', 'meth') and '.' not in name and \
                  'object.' + name in objects:
                 newname = 'object.' + name
-        if newname is None:
-            return None, None
-        return newname, objects[newname]
+        if newname is not None:
+            matches.append((newname, objects[newname]))
+        return matches
 
     def resolve_xref(self, env, fromdocname, builder,
-                     typ, target, node, contnode):
-        if (typ == 'mod' or
-            typ == 'obj' and target in self.data['modules']):
+                     type, target, node, contnode):
+        if (type == 'mod' or
+            type == 'obj' and target in self.data['modules']):
             docname, synopsis, platform, deprecated = \
                 self.data['modules'].get(target, ('','','', ''))
             if not docname:
             modname = node.get('py:module')
             clsname = node.get('py:class')
             searchorder = node.hasattr('refspecific') and 1 or 0
-            name, obj = self.find_obj(env, modname, clsname,
-                                      target, typ, searchorder)
-            if not obj:
+            matches = self.find_obj(env, modname, clsname, target,
+                                    type, searchorder)
+            if not matches:
                 return None
-            else:
-                return make_refnode(builder, fromdocname, obj[0], name,
-                                    contnode, name)
+            elif len(matches) > 1:
+                env.warn(fromdocname,
+                         'more than one target found for cross-reference '
+                         '%r: %s' % (target,
+                                     ', '.join(match[0] for match in matches)),
+                         node.line)
+            name, obj = matches[0]
+            return make_refnode(builder, fromdocname, obj[0], name,
+                                contnode, name)
 
     def get_objects(self):
         for modname, info in self.data['modules'].iteritems():

File sphinx/environment.py

                                 imgtype = imghdr.what(f)
                             finally:
                                 f.close()
-                        except (OSError, IOError):
-                            self.warn(docname,
-                                      'image file %s not readable' % filename)
+                        except (OSError, IOError), err:
+                            self.warn(docname, 'image file %s not '
+                                      'readable: %s' % (filename, err),
+                                      node.line)
                         if imgtype:
                             candidates['image/' + imgtype] = new_imgpath
             else:

File sphinx/ext/autodoc.py

             lines.append('')
     return process
 
-def between(marker, what=None, keepempty=False):
+def between(marker, what=None, keepempty=False, exclude=False):
     """
-    Return a listener that only keeps lines between lines that match the
-    *marker* regular expression.  If no line matches, the resulting docstring
-    would be empty, so no change will be made unless *keepempty* is true.
+    Return a listener that either keeps, or if *exclude* is True excludes, lines
+    between lines that match the *marker* regular expression.  If no line
+    matches, the resulting docstring would be empty, so no change will be made
+    unless *keepempty* is true.
 
     If *what* is a sequence of strings, only docstrings of a type in *what* will
     be processed.
         if what and what_ not in what:
             return
         deleted = 0
-        delete = True
+        delete = not exclude
         orig_lines = lines[:]
         for i, line in enumerate(orig_lines):
             if delete:

File sphinx/ext/viewcode.py

         # now that we have code lines (starting at index 1), insert anchors for
         # the collected tags (HACK: this only works if the tag boundaries are
         # properly nested!)
-        maxindex = len(lines)
+        maxindex = len(lines) - 1
         for name, docname in used.iteritems():
             type, start, end = tags[name]
             backlink = urito(pagename, docname) + '#' + modname + '.' + name

File sphinx/locale/da/LC_MESSAGES/sphinx.js

+Documentation.addTranslations({"locale": "da", "plural_expr": "(n != 1)", "messages": {"Search Results": "S\u00f8geresultater", "Preparing search...": "Forbereder s\u00f8gning...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Din s\u00f8gning gav ingen resultater. Kontroll\u00e9r venligst at alle ord er stavet korrekt, og at du har valgt nok kategorier.", "Search finished, found %s page(s) matching the search query.": "S\u00f8gningen fuldf\u00f8rt - fandt %s sider for denne s\u00f8gning.", ", in ": ", i ", "Permalink to this headline": "Permalink til denne overskrift", "Searching": "S\u00f8ger", "Permalink to this definition": "Permalink til denne definition", "Hide Search Matches": "Skjul s\u00f8geresultater"}});

File sphinx/locale/da/LC_MESSAGES/sphinx.mo

Binary file added.

File sphinx/locale/da/LC_MESSAGES/sphinx.po

+# Translations template for Sphinx.
+# Copyright (C) 2009 The Sphinx Team
+# This file is distributed under the same license as the Sphinx project.
+#
+# Ask Hjorth Larsen <asklarsen@gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx 1.0pre/[?1034h2e1ab15e035e\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2009-11-08 16:28+0100\n"
+"PO-Revision-Date: 2010-06-03 23:47+0200\n"
+"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.4\n"
+
+# 21. april, 2010
+#: sphinx/environment.py:130 sphinx/writers/latex.py:184
+#, python-format
+msgid "%B %d, %Y"
+msgstr "%d. %B, %Y"
+
+#: sphinx/environment.py:348 sphinx/themes/basic/genindex-single.html:2
+#: sphinx/themes/basic/genindex-split.html:2
+#: sphinx/themes/basic/genindex-split.html:5
+#: sphinx/themes/basic/genindex.html:2 sphinx/themes/basic/genindex.html:5
+#: sphinx/themes/basic/genindex.html:48 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:190
+msgid "Index"
+msgstr "Indeks"
+
+#: sphinx/environment.py:349 sphinx/writers/latex.py:189
+msgid "Module Index"
+msgstr "Modulindeks"
+
+# Ikke 'Søg på side'
+#: sphinx/environment.py:350 sphinx/themes/basic/defindex.html:16
+msgid "Search Page"
+msgstr "Søgeside"
+
+#: sphinx/roles.py:167
+#, python-format
+msgid "Python Enhancement Proposals!PEP %s"
+msgstr "Python Enhancement Proposals!PEP %s"
+
+#: sphinx/builders/changes.py:70
+msgid "Builtins"
+msgstr "Indbyggede"
+
+#: sphinx/builders/changes.py:72
+msgid "Module level"
+msgstr "Modulniveau"
+
+# Apr 21, 2010
+#: sphinx/builders/html.py:224
+#, python-format
+msgid "%b %d, %Y"
+msgstr "%d. %b, %Y"
+
+#: sphinx/builders/html.py:243 sphinx/themes/basic/defindex.html:21
+msgid "General Index"
+msgstr "Generelt indeks"
+
+#: sphinx/builders/html.py:243
+msgid "index"
+msgstr "indeks"
+
+#: sphinx/builders/html.py:247 sphinx/builders/htmlhelp.py:220
+#: sphinx/builders/qthelp.py:133 sphinx/themes/basic/defindex.html:19
+#: sphinx/themes/basic/modindex.html:2 sphinx/themes/basic/modindex.html:13
+#: sphinx/themes/scrolls/modindex.html:2 sphinx/themes/scrolls/modindex.html:13
+msgid "Global Module Index"
+msgstr "Globalt modulindeks"
+
+#: sphinx/builders/html.py:248
+msgid "modules"
+msgstr "moduler"
+
+#: sphinx/builders/html.py:304
+msgid "next"
+msgstr "næste"
+
+#: sphinx/builders/html.py:313
+msgid "previous"
+msgstr "forrige"
+
+#: sphinx/builders/latex.py:162
+msgid " (in "
+msgstr " (i "
+
+#: sphinx/directives/__init__.py:78 sphinx/directives/__init__.py:79
+#: sphinx/directives/__init__.py:80 sphinx/directives/__init__.py:81
+msgid "Raises"
+msgstr "Rejser"
+
+#: sphinx/directives/__init__.py:82 sphinx/directives/__init__.py:83
+#: sphinx/directives/__init__.py:84
+msgid "Variable"
+msgstr "Variabel"
+
+#: sphinx/directives/__init__.py:85 sphinx/directives/__init__.py:86
+#: sphinx/directives/__init__.py:92 sphinx/directives/__init__.py:93
+msgid "Returns"
+msgstr "Returnerer"
+
+#: sphinx/directives/__init__.py:94
+msgid "Return type"
+msgstr "Returtype"
+
+#: sphinx/directives/__init__.py:169
+msgid "Parameter"
+msgstr "Parameter"
+
+#: sphinx/directives/__init__.py:173
+msgid "Parameters"
+msgstr "Parametre"
+
+#: sphinx/directives/other.py:127
+msgid "Section author: "
+msgstr "Afsnitsforfatter: "
+
+#: sphinx/directives/other.py:129
+msgid "Module author: "
+msgstr "Modulforfatter: "
+
+#: sphinx/directives/other.py:131
+msgid "Author: "
+msgstr "Forfatter: "
+
+#: sphinx/directives/other.py:233
+msgid "See also"
+msgstr "Se også"
+
+#: sphinx/domains/c.py:124
+#, python-format
+msgid "%s (C function)"
+msgstr "%s (C-funktion)"
+
+#: sphinx/domains/c.py:126
+#, python-format
+msgid "%s (C member)"
+msgstr "%s (C-medlem)"
+
+#: sphinx/domains/c.py:128
+#, python-format
+msgid "%s (C macro)"
+msgstr "%s (C-makro)"
+
+#: sphinx/domains/c.py:130
+#, python-format
+msgid "%s (C type)"
+msgstr "%s (C-type)"
+
+#: sphinx/domains/c.py:132
+#, python-format
+msgid "%s (C variable)"
+msgstr "%s (C-variabel)"
+
+#: sphinx/domains/c.py:162
+msgid "C function"
+msgstr "C-funktion"
+
+#: sphinx/domains/c.py:163
+msgid "C member"
+msgstr "C-medlem"
+
+#: sphinx/domains/c.py:164
+msgid "C macro"
+msgstr "C-makro"
+
+#: sphinx/domains/c.py:165
+msgid "C type"
+msgstr "C-type"
+
+#: sphinx/domains/c.py:166
+msgid "C variable"
+msgstr "C-variabel"
+
+#: sphinx/domains/python.py:186
+#, python-format
+msgid "%s() (built-in function)"
+msgstr "%s() (indbygget funktion)"
+
+#: sphinx/domains/python.py:187 sphinx/domains/python.py:244
+#: sphinx/domains/python.py:256 sphinx/domains/python.py:269
+#, python-format
+msgid "%s() (in module %s)"
+msgstr "%s() (i modulet %s)"
+
+#: sphinx/domains/python.py:190
+#, python-format
+msgid "%s (built-in variable)"
+msgstr "%s (indbygget variabel)"
+
+#: sphinx/domains/python.py:191 sphinx/domains/python.py:282
+#, python-format
+msgid "%s (in module %s)"
+msgstr "%s (i modulet %s)"
+
+#: sphinx/domains/python.py:207
+#, python-format
+msgid "%s (built-in class)"
+msgstr "%s (indbygget klasse)"
+
+#: sphinx/domains/python.py:208
+#, python-format
+msgid "%s (class in %s)"
+msgstr "%s (klasse i %s)"
+
+#: sphinx/domains/python.py:248
+#, python-format
+msgid "%s() (%s.%s method)"
+msgstr "%s() (metode i %s.%s)"
+
+#: sphinx/domains/python.py:250
+#, python-format
+msgid "%s() (%s method)"
+msgstr "%s() (metode i %s)"
+
+#: sphinx/domains/python.py:260
+#, python-format
+msgid "%s() (%s.%s static method)"
+msgstr "%s() (statisk metode i %s.%s)"
+
+#: sphinx/domains/python.py:263
+#, python-format
+msgid "%s() (%s static method)"
+msgstr "%s() (statisk metode i %s)"
+
+#: sphinx/domains/python.py:273
+#, python-format
+msgid "%s() (%s.%s class method)"
+msgstr "%s() (klassemetode i %s.%s)"
+
+#: sphinx/domains/python.py:276
+#, python-format
+msgid "%s() (%s class method)"
+msgstr "%s() (klassemetode i %s)"
+
+#: sphinx/domains/python.py:286
+#, python-format
+msgid "%s (%s.%s attribute)"
+msgstr "%s (attribut i %s.%s)"
+
+#: sphinx/domains/python.py:288
+#, python-format
+msgid "%s (%s attribute)"
+msgstr "%s (attribut i %s)"
+
+#: sphinx/domains/python.py:334
+msgid "Platforms: "
+msgstr "Platforme: "
+
+#: sphinx/domains/python.py:340
+#, python-format
+msgid "%s (module)"
+msgstr "%s (modul)"
+
+#: sphinx/domains/python.py:396
+msgid "function"
+msgstr "funktion"
+
+#: sphinx/domains/python.py:397
+msgid "data"
+msgstr "data"
+
+#: sphinx/domains/python.py:398
+msgid "class"
+msgstr "klasse"
+
+#: sphinx/domains/python.py:399 sphinx/locale/__init__.py:161
+msgid "exception"
+msgstr "undtagelse"
+
+#: sphinx/domains/python.py:400
+msgid "method"
+msgstr "metode"
+
+#: sphinx/domains/python.py:401
+msgid "attribute"
+msgstr "attribut"
+
+#: sphinx/domains/python.py:402 sphinx/locale/__init__.py:157
+msgid "module"
+msgstr "modul"
+
+#: sphinx/domains/std.py:67 sphinx/domains/std.py:83
+#, python-format
+msgid "environment variable; %s"
+msgstr "miljøvariabel; %s"
+
+#: sphinx/domains/std.py:156
+#, python-format
+msgid "%scommand line option; %s"
+msgstr "%skommandolinjetilvalg; %s"
+
+#: sphinx/domains/std.py:324
+msgid "glossary term"
+msgstr "begreb i ordliste"
+
+#: sphinx/domains/std.py:325
+msgid "grammar token"
+msgstr "grammatisk element"
+
+#: sphinx/domains/std.py:326
+msgid "environment variable"
+msgstr "miljøvariabel"
+
+#: sphinx/domains/std.py:327
+msgid "program option"
+msgstr "programtilvalg"
+
+#: sphinx/ext/autodoc.py:892
+#, python-format
+msgid "   Bases: %s"
+msgstr "   Baser: %s"
+
+#: sphinx/ext/autodoc.py:925
+#, python-format
+msgid "alias of :class:`%s`"
+msgstr "alias for :class:`%s`"
+
+#: sphinx/ext/todo.py:40
+msgid "Todo"
+msgstr "Todo"
+
+#: sphinx/ext/todo.py:98
+#, python-format
+msgid "(The original entry is located in %s, line %d and can be found "
+msgstr "(Det oprindelige punkt befinder sig i %s, linje %d, og kan findes "
+
+#: sphinx/ext/todo.py:104
+msgid "here"
+msgstr "her"
+
+#: sphinx/locale/__init__.py:138
+msgid "Attention"
+msgstr "Vær opmærksom"
+
+#: sphinx/locale/__init__.py:139
+msgid "Caution"
+msgstr "Forsigtig"
+
+#: sphinx/locale/__init__.py:140
+msgid "Danger"
+msgstr "Fare"
+
+#: sphinx/locale/__init__.py:141
+msgid "Error"
+msgstr "Fejl"
+
+#: sphinx/locale/__init__.py:142
+msgid "Hint"
+msgstr "Fif"
+
+#: sphinx/locale/__init__.py:143
+msgid "Important"
+msgstr "Vigtigt"
+
+#: sphinx/locale/__init__.py:144
+msgid "Note"
+msgstr "Bemærk"
+
+#: sphinx/locale/__init__.py:145
+msgid "See Also"
+msgstr "Se også"
+
+#: sphinx/locale/__init__.py:146
+msgid "Tip"
+msgstr "Tip"
+
+#: sphinx/locale/__init__.py:147
+msgid "Warning"
+msgstr "Advarsel"
+
+#: sphinx/locale/__init__.py:151
+#, python-format
+msgid "New in version %s"
+msgstr "Ny i version %s"
+
+#: sphinx/locale/__init__.py:152
+#, python-format
+msgid "Changed in version %s"
+msgstr "Ændret i version %s"
+
+#: sphinx/locale/__init__.py:153
+#, python-format
+msgid "Deprecated since version %s"
+msgstr "Deprecieret siden version %s"
+
+#: sphinx/locale/__init__.py:158
+msgid "keyword"
+msgstr "nøgleord"
+
+#: sphinx/locale/__init__.py:159
+msgid "operator"
+msgstr "operator"
+
+#: sphinx/locale/__init__.py:160
+msgid "object"
+msgstr "objekt"
+
+#: sphinx/locale/__init__.py:162
+msgid "statement"
+msgstr "erklæring"
+
+#: sphinx/locale/__init__.py:163
+msgid "built-in function"
+msgstr "indbygget funktion"
+
+#: sphinx/themes/basic/defindex.html:2
+msgid "Overview"
+msgstr "Oversigt"
+
+#: sphinx/themes/basic/defindex.html:11
+msgid "Indices and tables:"
+msgstr "Indeks og tabeller:"
+
+#: sphinx/themes/basic/defindex.html:14
+msgid "Complete Table of Contents"
+msgstr "Fuldstændig indholdsfortegnelse"
+
+#: sphinx/themes/basic/defindex.html:15
+msgid "lists all sections and subsections"
+msgstr "viser alle afsnit og underafsnit"
+
+#: sphinx/themes/basic/defindex.html:17
+msgid "search this documentation"
+msgstr "søg i denne dokumentation"
+
+#: sphinx/themes/basic/defindex.html:20
+msgid "quick access to all modules"
+msgstr "hurtig adgang til alle moduler"
+
+#: sphinx/themes/basic/defindex.html:22
+msgid "all functions, classes, terms"
+msgstr "alle funktioner, klasser, begreber"
+
+#: sphinx/themes/basic/genindex-single.html:5
+#, python-format
+msgid "Index &ndash; %(key)s"
+msgstr "Indeks &ndash; %(key)s"
+
+#: sphinx/themes/basic/genindex-single.html:44
+#: sphinx/themes/basic/genindex-split.html:14
+#: sphinx/themes/basic/genindex-split.html:27
+#: sphinx/themes/basic/genindex.html:54
+msgid "Full index on one page"
+msgstr "Fuldt indeks på én side"
+
+#: sphinx/themes/basic/genindex-split.html:7
+msgid "Index pages by letter"
+msgstr "Indeksér sider efter bogstav"
+
+# refererer til indeks
+#: sphinx/themes/basic/genindex-split.html:15
+msgid "can be huge"
+msgstr "kan være enormt"
+
+#: sphinx/themes/basic/layout.html:10
+msgid "Navigation"
+msgstr "Navigation"
+
+#: sphinx/themes/basic/layout.html:42
+msgid "Table Of Contents"
+msgstr "Indholdsfortegnelse"
+
+#: sphinx/themes/basic/layout.html:48
+msgid "Previous topic"
+msgstr "Forrige emne"
+
+#: sphinx/themes/basic/layout.html:50
+msgid "previous chapter"
+msgstr "forrige kapitel"
+
+#: sphinx/themes/basic/layout.html:53
+msgid "Next topic"
+msgstr "Næste emne"
+
+#: sphinx/themes/basic/layout.html:55
+msgid "next chapter"
+msgstr "næste kapitel"
+
+#: sphinx/themes/basic/layout.html:60
+msgid "This Page"
+msgstr "Denne side"
+
+#: sphinx/themes/basic/layout.html:63
+msgid "Show Source"
+msgstr "Vis kilde"
+
+#: sphinx/themes/basic/layout.html:73
+msgid "Quick search"
+msgstr "Hurtig søgning"
+
+# Referencen fra layout.html:76 er til en søgeknap
+#: sphinx/themes/basic/layout.html:76
+msgid "Go"
+msgstr "Søg"
+
+#: sphinx/themes/basic/layout.html:81
+msgid "Enter search terms or a module, class or function name."
+msgstr "Indtast søgeord eller navnet på et modul, en klasse eller en funktion."
+
+#: sphinx/themes/basic/layout.html:122
+#, python-format
+msgid "Search within %(docstitle)s"
+msgstr "Søg i %(docstitle)s"
+
+#: sphinx/themes/basic/layout.html:131
+msgid "About these documents"
+msgstr "Om disse dokumenter"
+
+#: sphinx/themes/basic/layout.html:137 sphinx/themes/basic/search.html:2
+#: sphinx/themes/basic/search.html:5
+msgid "Search"
+msgstr "Søg"
+
+#: sphinx/themes/basic/layout.html:140
+msgid "Copyright"
+msgstr "Ophavsret"
+
+#: sphinx/themes/basic/layout.html:187 sphinx/themes/scrolls/layout.html:83
+#, python-format
+msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
+msgstr "&copy; <a href=\"%(path)s\">Ophavsret</a> %(copyright)s."
+
+#: sphinx/themes/basic/layout.html:189 sphinx/themes/scrolls/layout.html:85
+#, python-format
+msgid "&copy; Copyright %(copyright)s."
+msgstr "&copy; Ophavsret %(copyright)s."
+
+# datoformatet passer ikke med "den %(last_updated)s"
+#: sphinx/themes/basic/layout.html:193 sphinx/themes/scrolls/layout.html:89
+#, python-format
+msgid "Last updated on %(last_updated)s."
+msgstr "Sidst opdateret %(last_updated)s."
+
+#: sphinx/themes/basic/layout.html:196 sphinx/themes/scrolls/layout.html:92
+#, python-format
+msgid ""
+"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
+msgstr "Bygget med <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s."
+
+#: sphinx/themes/basic/modindex.html:36 sphinx/themes/scrolls/modindex.html:37
+msgid "Deprecated"
+msgstr "Deprecieret"
+
+#: sphinx/themes/basic/opensearch.xml:4
+#, python-format
+msgid "Search %(docstitle)s"
+msgstr "Søg i %(docstitle)s"
+
+#: sphinx/themes/basic/search.html:9
+msgid ""
+"Please activate JavaScript to enable the search\n"
+"    functionality."
+msgstr ""
+"Aktivér venligst JavaScript for at aktivere\n"
+"    søgefunktionalitet."
+
+#: sphinx/themes/basic/search.html:14
+msgid ""
+"From here you can search these documents. Enter your search\n"
+"    words into the box below and click \"search\". Note that the search\n"
+"    function will automatically search for all of the words. Pages\n"
+"    containing fewer words won't appear in the result list."
+msgstr ""
+"Her fra kan du søge i disse dokumenter. Indtast dine søgeord\n"
+"    i boksen nedenfor og klik på \"søg\". Bemærk at søgefunktionen\n"
+"    automatisk vil søge på alle ordene. Sider, der indeholder\n"
+"    færre ord, vil ikke indgå i resultaterne."
+
+#: sphinx/themes/basic/search.html:21
+msgid "search"
+msgstr "søg"
+
+#: sphinx/themes/basic/search.html:25
+#: sphinx/themes/basic/static/searchtools.js:473
+msgid "Search Results"
+msgstr "Søgeresultater"
+
+#: sphinx/themes/basic/search.html:27
+msgid "Your search did not match any results."
+msgstr "Din søgning gav ingen resultater."
+
+#: sphinx/themes/basic/changes/frameset.html:5
+#: sphinx/themes/basic/changes/versionchanges.html:12
+#, python-format
+msgid "Changes in Version %(version)s &mdash; %(docstitle)s"
+msgstr "Ændringer i version %(version)s &mdash; %(docstitle)s"
+
+#: sphinx/themes/basic/changes/rstsource.html:5
+#, python-format
+msgid "%(filename)s &mdash; %(docstitle)s"
+msgstr "%(filename)s &mdash; %(docstitle)s"
+
+#: sphinx/themes/basic/changes/versionchanges.html:17
+#, python-format
+msgid "Automatically generated list of changes in version %(version)s"
+msgstr "Automatisk oprettet liste af ændringer i version %(version)s"
+
+#: sphinx/themes/basic/changes/versionchanges.html:18
+msgid "Library changes"
+msgstr "Biblioteksændringer"
+
+#: sphinx/themes/basic/changes/versionchanges.html:23
+msgid "C API changes"
+msgstr "Ændringer i C-API"
+
+#: sphinx/themes/basic/changes/versionchanges.html:25
+msgid "Other changes"
+msgstr "Andre ændringer"
+
+#: sphinx/themes/basic/static/doctools.js:138 sphinx/writers/html.py:462
+#: sphinx/writers/html.py:467
+msgid "Permalink to this headline"
+msgstr "Permalink til denne overskrift"
+
+#: sphinx/themes/basic/static/doctools.js:144 sphinx/writers/html.py:80
+msgid "Permalink to this definition"
+msgstr "Permalink til denne definition"
+
+#: sphinx/themes/basic/static/doctools.js:173
+msgid "Hide Search Matches"
+msgstr "Skjul søgeresultater"
+
+#: sphinx/themes/basic/static/searchtools.js:274
+msgid "Searching"
+msgstr "Søger"
+
+#: sphinx/themes/basic/static/searchtools.js:279
+msgid "Preparing search..."
+msgstr "Forbereder søgning..."
+
+#: sphinx/themes/basic/static/searchtools.js:352
+msgid ", in "
+msgstr ", i "
+
+#: sphinx/themes/basic/static/searchtools.js:475
+msgid ""
+"Your search did not match any documents. Please make sure that all words "
+"are spelled correctly and that you've selected enough categories."
+msgstr "Din søgning gav ingen resultater. Kontrollér venligst at alle ord er stavet korrekt, og at du har valgt nok kategorier."
+
+#: sphinx/themes/basic/static/searchtools.js:477
+#, python-format
+msgid "Search finished, found %s page(s) matching the search query."
+msgstr "Søgningen fuldført - fandt %s sider for denne søgning."
+
+#: sphinx/writers/latex.py:187
+msgid "Release"
+msgstr "Udgave"
+
+#: sphinx/writers/latex.py:579
+msgid "Footnotes"
+msgstr "Fodnoter"
+
+#: sphinx/writers/latex.py:647
+msgid "continued from previous page"
+msgstr "fortsat fra forrige side"
+
+#: sphinx/writers/latex.py:652
+msgid "Continued on next page"
+msgstr "Fortsættes på næste side"
+
+#: sphinx/writers/text.py:166
+#, python-format
+msgid "Platform: %s"
+msgstr "Platform: %s"
+
+#: sphinx/writers/text.py:428
+msgid "[image]"
+msgstr "[billede]"
+

File sphinx/locale/fr/LC_MESSAGES/sphinx.mo

Binary file modified.

File sphinx/locale/fr/LC_MESSAGES/sphinx.po

 # David Larlet <larlet@gmail.com>, 2008.
 # Sebastien Douche <sdouche@gmail.com>, 2008.
 # Jean-Daniel Browne <jeandaniel.browne@gmail.com>, 2010.
+# Florent Gallaire <fgallaire@gmail.com>, 2010.
 #
 msgid ""
 msgstr ""
 #: sphinx/domains/javascript.py:120
 #, python-format
 msgid "%s (global variable or constant)"
-msgstr "%s (variable globale or constant)"
+msgstr "%s (variable globale ou constante)"
 
 #: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
 #, python-format
 
 #: sphinx/domains/std.py:330
 msgid "reference label"
-msgstr "étiquette de reference"
+msgstr "étiquette de référence"
 
 #: sphinx/domains/std.py:331
 msgid "environment variable"
 
 #: sphinx/domains/std.py:332
 msgid "program option"
-msgstr "option de programme"
+msgstr "option du programme"
 
 #: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
 #: sphinx/themes/basic/genindex-split.html:11
 
 #: sphinx/ext/todo.py:41
 msgid "Todo"
-msgstr "A faire"
+msgstr "À faire"
 
 #: sphinx/ext/todo.py:109
 #, python-format
 
 #: sphinx/ext/viewcode.py:157
 msgid "<h1>All modules for which code is available</h1>"
-msgstr "<h1>Modules pour lesquelles le code est disponible</h1>"
+msgstr "<h1>Modules pour lesquels le code est disponible</h1>"
 
 #: sphinx/locale/__init__.py:139
 msgid "Attention"

File sphinx/themes/agogo/layout.html

         {%- endblock %}
         <div class="rel">
           {%- for rellink in rellinks %}
-          <a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags }}"
+          <a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags|e }}"
              {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a>
           {%- if not loop.last %}{{ reldelim2 }}{% endif %}
           {%- endfor %}
       <div class="footer">
         <div class="left">
           {%- for rellink in rellinks %}
-          <a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags }}"
+          <a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags|e }}"
              {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a>
           {%- if not loop.last %}{{ reldelim2 }}{% endif %}
           {%- endfor %}

File sphinx/themes/basic/layout.html

       <ul>
         {%- for rellink in rellinks %}
         <li class="right" {% if loop.first %}style="margin-right: 10px"{% endif %}>
-          <a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags }}"
+          <a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags|e }}"
              {{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a>
           {%- if not loop.first %}{{ reldelim2 }}{% endif %}</li>
         {%- endfor %}
       {%- set titlesuffix = "" %}
     {%- endif %}
     {%- block htmltitle %}
-    <title>{{ title|striptags }}{{ titlesuffix }}</title>
+    <title>{{ title|striptags|e }}{{ titlesuffix }}</title>
     {%- endblock %}
     <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
     <link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
         URL_ROOT:    '{{ url_root }}',
         VERSION:     '{{ release|e }}',
         COLLAPSE_INDEX: false,
-        FILE_SUFFIX: '{{ file_suffix }}',
+        FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}',
         HAS_SOURCE:  {{ has_source|lower }}
       };
     </script>
     {%- endif %}
     <link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" />
     {%- if parents %}
-    <link rel="up" title="{{ parents[-1].title|striptags }}" href="{{ parents[-1].link|e }}" />
+    <link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}" />
     {%- endif %}
     {%- if next %}
-    <link rel="next" title="{{ next.title|striptags }}" href="{{ next.link|e }}" />
+    <link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
     {%- endif %}
     {%- if prev %}
-    <link rel="prev" title="{{ prev.title|striptags }}" href="{{ prev.link|e }}" />
+    <link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
     {%- endif %}
 {%- endblock %}
 {%- block extrahead %} {% endblock %}

File sphinx/themes/basic/static/basic.css

File contents unchanged.

File sphinx/themes/basic/static/searchtools.js

       if (results.length) {
         var item = results.pop();
         var listItem = $('<li style="display:none"></li>');
-        listItem.append($('<a/>').attr(
-          'href',
-          item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
-          highlightstring + item[2]).html(item[1]));
+        if (DOCUMENTATION_OPTIONS.FILE_SUFFIX == '') {
+          // dirhtml builder
+          var dirname = item[0] + '/';
+          if (dirname.match(/\/index\/$/)) {
+            dirname = dirname.substring(0, dirname.length-6);
+          } else if (dirname == 'index/') {
+            dirname = '';
+          }
+          listItem.append($('<a/>').attr('href',
+            DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
+            highlightstring + item[2]).html(item[1]));
+        } else {
+          // normal html builders
+          listItem.append($('<a/>').attr('href',
+            item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
+            highlightstring + item[2]).html(item[1]));
+        }
         if (item[3]) {
           listItem.append($('<span> (' + item[3] + ')</span>'));
           Search.output.append(listItem);
             if (data != '') {
               listItem.append($.makeSearchSummary(data, searchterms, hlterms));
               Search.output.append(listItem);
-              listItem.slideDown(5, function() {
-                displayNextItem();
-              });
             }
+            listItem.slideDown(5, function() {
+              displayNextItem();
+            });
           });
         } else {
           // no source available, just display title

File sphinx/themes/haiku/layout.html

         {%- endif -%}
         <h1 class="heading"><a href="{{ pathto('index') }}">
           <span>{{ shorttitle|e }}</span></a></h1>
-        <h2 class="heading"><span>{{ title|striptags }}</span></h2>
+        <h2 class="heading"><span>{{ title|striptags|e }}</span></h2>
         {%- endif %}
         {%- endblock %}
       </div>
       <div class="bottomnav">
       {{ nav() }}
       </div>
-{% endblock %}
+{% endblock %}

File sphinx/themes/scrolls/layout.html

     <div id="content">
       <div class="header">
         <h1 class="heading"><a href="{{ pathto('index') }}"
-          title="back to the documentation overview"><span>{{ title|striptags }}</span></a></h1>
+          title="back to the documentation overview"><span>{{ title|striptags|e }}</span></a></h1>
       </div>
       <div class="relnav">
         {%- if prev %}
         {% block body %}{% endblock %}
       </div>
     </div>
-{% endblock %}
+{% endblock %}

File sphinx/util/docfields.py

             fieldname += nodes.Text(' ')
             fieldname += self.make_xref(self.rolename, domain,
                                         fieldarg, nodes.Text)
-        fieldbody = nodes.field_body('', nodes.paragraph('', *content))
+        fieldbody = nodes.field_body('', nodes.paragraph('', '', *content))
         return nodes.field('', fieldname, fieldbody)
 
 

File sphinx/writers/latex.py

             for i, (letter, entries) in enumerate(content):
                 if i > 0:
                     ret.append('\\indexspace\n')
-                ret.append('\\bigletter{%s}\n' % letter)
+                ret.append('\\bigletter{%s}\n' %
+                           letter.translate(tex_escape_map))
                 for entry in entries:
                     if not entry[3]:
                         continue

File tests/test_autodoc.py

     app.disconnect(lid)
 
     lid = app.connect('autodoc-process-docstring', between('---', ['function']))
-    def f():
+    def g():
         """
         first line
         ---
         ---
         third line
         """
-    assert process('function', 'f', f) == ['second line', '']
+    assert process('function', 'g', g) == ['second line', '']
     app.disconnect(lid)
 
+    lid = app.connect('autodoc-process-docstring', between('---', ['function'],
+                                                           exclude=True))
+    def h():
+        """
+        first line
+        ---
+        second line
+        ---
+        third line
+        """
+    assert process('function', 'h', h) == ['first line', 'third line', '']
+    app.disconnect(lid)
 
 def test_new_documenter():
     class MyDocumenter(ModuleLevelDocumenter):

File tests/test_build.py

File contents unchanged.

File tests/test_build_html.py

 %(root)s/images.txt:9: WARNING: image file not readable: foo.png
 %(root)s/images.txt:23: WARNING: nonlocal image URI found: \
 http://www.python.org/logo.png
-%(root)s/includes.txt:: (WARNING/2) Encoding 'utf-8-sig' used for reading \
-included file u'wrongenc.inc' seems to be wrong, try giving an :encoding: option
+%(root)s/includes.txt:\\d*: \\(WARNING/2\\) Encoding 'utf-8-sig' used for \
+reading included file u'wrongenc.inc' seems to be wrong, try giving an \
+:encoding: option
 %(root)s/includes.txt:4: WARNING: download file not readable: nonexisting.png
 """
 
 HTML_WARNINGS = ENV_WARNINGS + """\
-%(root)s/images.txt:20: WARNING: no matching candidate for image URI u'foo.*'
+%(root)s/images.txt:20: WARNING: no matching candidate for image URI u'foo.\\*'
 %(root)s/markup.txt:: WARNING: invalid index entry u''
 %(root)s/markup.txt:: WARNING: invalid pair index entry u''
 %(root)s/markup.txt:: WARNING: invalid pair index entry u'keyword; '
 def test_html(app):
     app.builder.build_all()
     html_warnings = html_warnfile.getvalue().replace(os.sep, '/')
-    html_warnings_exp = HTML_WARNINGS % {'root': app.srcdir}
-    assert html_warnings == html_warnings_exp, 'Warnings don\'t match:\n' + \
+    html_warnings_exp = HTML_WARNINGS % {'root': re.escape(app.srcdir)}
+    assert re.match(html_warnings_exp + '$', html_warnings), \
+           'Warnings don\'t match:\n' + \
            '\n'.join(difflib.ndiff(html_warnings_exp.splitlines(),
                                    html_warnings.splitlines()))
 

File tests/test_build_latex.py

 """
 
 import os
+import re
 import sys
 import difflib
 from StringIO import StringIO
 latex_warnfile = StringIO()
 
 LATEX_WARNINGS = ENV_WARNINGS + """\
-None:None: WARNING: no matching candidate for image URI u'foo.*'
+None:None: WARNING: no matching candidate for image URI u'foo.\\*'
 WARNING: invalid pair index entry u''
 """
 
     app.builder.build_all()
     latex_warnings = latex_warnfile.getvalue().replace(os.sep, '/')
     latex_warnings_exp = LATEX_WARNINGS % {'root': app.srcdir}
-    assert latex_warnings == latex_warnings_exp, 'Warnings don\'t match:\n' + \
+    assert re.match(latex_warnings_exp + '$', latex_warnings), \
+           'Warnings don\'t match:\n' + \
            '\n'.join(difflib.ndiff(latex_warnings_exp.splitlines(),
                                    latex_warnings.splitlines()))
     # file from latex_additional_files