This commit is contained in:
Roland Meister 2010-06-14 19:01:20 +02:00
commit 603f7e5ec8
28 changed files with 843 additions and 71 deletions

26
CHANGES
View File

@ -54,6 +54,8 @@ Features added
- 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:
@ -141,6 +143,7 @@ Features added
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:
@ -148,11 +151,32 @@ Features added
- 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)
============================

View File

@ -85,6 +85,7 @@ Documentation using the sphinxdoc theme
* 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/

View File

@ -285,6 +285,7 @@ Project information
* ``ca`` -- Catalan
* ``cs`` -- Czech
* ``da`` -- Danish
* ``de`` -- German
* ``en`` -- English
* ``es`` -- Spanish
@ -806,9 +807,11 @@ These options influence LaTeX output.
* *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

View File

@ -363,6 +363,13 @@ dot, this order is reversed. For example, in the documentation of Python's
: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.
@ -511,6 +518,15 @@ These roles link to the given object types:
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

View File

@ -362,7 +362,7 @@ are in HTML form), these variables are also available:
.. data:: meta
Document metadata, see :ref:`metadata`.
Document metadata (a dictionary), see :ref:`metadata`.
.. data:: sourcename

View File

@ -18,7 +18,7 @@ from os import path
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
@ -368,16 +368,16 @@ class Sphinx(object):
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 content or arguments or options:
raise ExtensionError('when adding directive classes, no '
'additional arguments may be given')
return obj
else:
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
def add_directive(self, name, obj, content=None, arguments=None, **options):
directives.register_directive(

View File

@ -800,6 +800,10 @@ class DirectoryHTMLBuilder(StandaloneHTMLBuilder):
return outfilename
def prepare_writing(self, docnames):
StandaloneHTMLBuilder.prepare_writing(self, docnames)
self.globalcontext['no_search_suffix'] = True
class SingleFileHTMLBuilder(StandaloneHTMLBuilder):
"""

View File

@ -96,7 +96,7 @@ class LaTeXBuilder(Builder):
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)

View File

@ -120,7 +120,7 @@ class LiteralInclude(Directive):
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):

View File

@ -547,7 +547,7 @@ class PythonDomain(Domain):
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:] == '()':
@ -557,6 +557,7 @@ class PythonDomain(Domain):
return None, None
objects = self.data['objects']
matches = []
newname = None
if searchorder == 1:
@ -567,6 +568,11 @@ class PythonDomain(Domain):
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
@ -585,14 +591,14 @@ class PythonDomain(Domain):
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:
@ -607,13 +613,19 @@ class PythonDomain(Domain):
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():

View File

@ -818,9 +818,10 @@ class BuildEnvironment:
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:

View File

@ -164,11 +164,12 @@ def cut_lines(pre, post=0, what=None):
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.
@ -178,7 +179,7 @@ def between(marker, what=None, keepempty=False):
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:

View File

@ -104,7 +104,7 @@ def collect_pages(app):
# 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

View File

@ -0,0 +1 @@
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"}});

Binary file not shown.

View File

@ -0,0 +1,678 @@
# 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]"

View File

@ -4,6 +4,7 @@
# 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 ""
@ -186,7 +187,7 @@ msgstr "%s() (méthode %s)"
#: 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
@ -357,7 +358,7 @@ msgstr "élément de grammaire"
#: 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"
@ -365,7 +366,7 @@ msgstr "variable d'environnement"
#: 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
@ -396,7 +397,7 @@ msgstr "alias de :class:`%s`"
#: sphinx/ext/todo.py:41
msgid "Todo"
msgstr "A faire"
msgstr "À faire"
#: sphinx/ext/todo.py:109
#, python-format
@ -431,7 +432,7 @@ msgstr "Vue d'ensemble : code du module"
#: 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"

View File

@ -23,7 +23,7 @@
{%- 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 %}
@ -68,7 +68,7 @@
<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 %}

View File

@ -24,7 +24,7 @@
<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 %}
@ -88,7 +88,7 @@
{%- 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" />
@ -101,7 +101,7 @@
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>
@ -132,13 +132,13 @@
{%- 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 %}

View File

@ -456,10 +456,23 @@ var Search = {
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);
@ -472,10 +485,10 @@ var Search = {
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

View File

@ -46,7 +46,7 @@
{%- 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>
@ -65,4 +65,4 @@
<div class="bottomnav">
{{ nav() }}
</div>
{% endblock %}
{% endblock %}

View File

@ -18,7 +18,7 @@
<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 %}
@ -39,4 +39,4 @@
{% block body %}{% endblock %}
</div>
</div>
{% endblock %}
{% endblock %}

View File

@ -67,7 +67,7 @@ class Field(object):
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)

View File

@ -266,7 +266,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
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

View File

@ -271,7 +271,7 @@ def test_docstring_processing():
app.disconnect(lid)
lid = app.connect('autodoc-process-docstring', between('---', ['function']))
def f():
def g():
"""
first line
---
@ -279,9 +279,21 @@ def test_docstring_processing():
---
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):

View File

@ -35,13 +35,14 @@ ENV_WARNINGS = """\
%(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; '
@ -278,8 +279,9 @@ def check_static_entries(outdir):
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()))

View File

@ -10,6 +10,7 @@
"""
import os
import re
import sys
import difflib
from StringIO import StringIO
@ -28,7 +29,7 @@ def teardown_module():
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''
"""
@ -39,7 +40,8 @@ def test_latex(app):
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