summaryrefslogtreecommitdiff
path: root/sphinx
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2011-09-22 10:42:09 +0200
committerGeorg Brandl <georg@python.org>2011-09-22 10:42:09 +0200
commitc5599ea28eeac416ab4646a9ef1b9eb3d783f8b7 (patch)
tree76a1db0ec536f130b4394c48be68fee820d8024b /sphinx
parentccef6db7cb04db18258c41a4fd5af6384525737a (diff)
parent7cabc9f2a989a78753f9ddcbfd941dd3fc45e106 (diff)
downloadsphinx-c5599ea28eeac416ab4646a9ef1b9eb3d783f8b7.tar.gz
Merge with 1.0
Diffstat (limited to 'sphinx')
-rw-r--r--sphinx/__init__.py25
-rw-r--r--sphinx/addnodes.py198
-rw-r--r--sphinx/apidoc.py269
-rw-r--r--sphinx/application.py38
-rw-r--r--sphinx/builders/__init__.py50
-rw-r--r--sphinx/builders/changes.py3
-rw-r--r--sphinx/builders/devhelp.py1
-rw-r--r--sphinx/builders/epub.py83
-rw-r--r--sphinx/builders/gettext.py126
-rw-r--r--sphinx/builders/html.py98
-rw-r--r--sphinx/builders/htmlhelp.py1
-rw-r--r--sphinx/builders/linkcheck.py179
-rw-r--r--sphinx/builders/qthelp.py14
-rw-r--r--sphinx/builders/texinfo.py227
-rw-r--r--sphinx/builders/websupport.py155
-rw-r--r--sphinx/cmdline.py10
-rw-r--r--sphinx/config.py70
-rw-r--r--sphinx/directives/code.py51
-rw-r--r--sphinx/directives/other.py70
-rw-r--r--sphinx/domains/__init__.py29
-rw-r--r--sphinx/domains/c.py2
-rw-r--r--sphinx/domains/cpp.py91
-rw-r--r--sphinx/domains/javascript.py6
-rw-r--r--sphinx/domains/python.py107
-rw-r--r--sphinx/domains/rst.py9
-rw-r--r--sphinx/domains/std.py122
-rw-r--r--sphinx/environment.py456
-rw-r--r--sphinx/ext/autodoc.py334
-rw-r--r--sphinx/ext/autosummary/__init__.py119
-rw-r--r--sphinx/ext/autosummary/generate.py21
-rw-r--r--sphinx/ext/coverage.py29
-rw-r--r--sphinx/ext/doctest.py88
-rw-r--r--sphinx/ext/graphviz.py148
-rw-r--r--sphinx/ext/inheritance_diagram.py53
-rw-r--r--sphinx/ext/intersphinx.py26
-rw-r--r--sphinx/ext/mathbase.py50
-rw-r--r--sphinx/ext/mathjax.py68
-rw-r--r--sphinx/ext/oldcmarkup.py1
-rw-r--r--sphinx/ext/pngmath.py29
-rw-r--r--sphinx/ext/todo.py3
-rw-r--r--sphinx/ext/viewcode.py8
-rw-r--r--sphinx/highlighting.py64
-rw-r--r--sphinx/jinja2glue.py16
-rw-r--r--sphinx/locale/__init__.py41
-rw-r--r--sphinx/locale/bn/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/bn/LC_MESSAGES/sphinx.mobin12509 -> 12147 bytes
-rw-r--r--sphinx/locale/bn/LC_MESSAGES/sphinx.po697
-rw-r--r--sphinx/locale/ca/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/ca/LC_MESSAGES/sphinx.mobin9378 -> 9093 bytes
-rw-r--r--sphinx/locale/ca/LC_MESSAGES/sphinx.po360
-rw-r--r--sphinx/locale/cs/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/cs/LC_MESSAGES/sphinx.mobin9067 -> 8687 bytes
-rw-r--r--sphinx/locale/cs/LC_MESSAGES/sphinx.po363
-rw-r--r--sphinx/locale/da/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/da/LC_MESSAGES/sphinx.mobin8668 -> 9357 bytes
-rw-r--r--sphinx/locale/da/LC_MESSAGES/sphinx.po670
-rw-r--r--sphinx/locale/de/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/de/LC_MESSAGES/sphinx.mobin10038 -> 9672 bytes
-rw-r--r--sphinx/locale/de/LC_MESSAGES/sphinx.po349
-rw-r--r--sphinx/locale/es/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/es/LC_MESSAGES/sphinx.mobin8121 -> 7603 bytes
-rw-r--r--sphinx/locale/es/LC_MESSAGES/sphinx.po353
-rw-r--r--sphinx/locale/et/LC_MESSAGES/sphinx.js1
-rw-r--r--sphinx/locale/et/LC_MESSAGES/sphinx.mobin0 -> 9137 bytes
-rw-r--r--sphinx/locale/et/LC_MESSAGES/sphinx.po770
-rw-r--r--sphinx/locale/fa/LC_MESSAGES/sphinx.js1
-rw-r--r--sphinx/locale/fa/LC_MESSAGES/sphinx.mobin0 -> 8588 bytes
-rw-r--r--sphinx/locale/fa/LC_MESSAGES/sphinx.po779
-rw-r--r--sphinx/locale/fi/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/fi/LC_MESSAGES/sphinx.mobin9102 -> 8836 bytes
-rw-r--r--sphinx/locale/fi/LC_MESSAGES/sphinx.po349
-rw-r--r--sphinx/locale/fr/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/fr/LC_MESSAGES/sphinx.mobin8938 -> 8513 bytes
-rw-r--r--sphinx/locale/fr/LC_MESSAGES/sphinx.po374
-rw-r--r--sphinx/locale/hr/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/hr/LC_MESSAGES/sphinx.mobin9195 -> 8859 bytes
-rw-r--r--sphinx/locale/hr/LC_MESSAGES/sphinx.po379
-rw-r--r--sphinx/locale/it/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/it/LC_MESSAGES/sphinx.mobin9461 -> 9100 bytes
-rw-r--r--sphinx/locale/it/LC_MESSAGES/sphinx.po358
-rw-r--r--sphinx/locale/ja/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/ja/LC_MESSAGES/sphinx.mobin9950 -> 10186 bytes
-rw-r--r--sphinx/locale/ja/LC_MESSAGES/sphinx.po433
-rw-r--r--sphinx/locale/ko/LC_MESSAGES/sphinx.js1
-rw-r--r--sphinx/locale/ko/LC_MESSAGES/sphinx.mobin0 -> 7126 bytes
-rw-r--r--sphinx/locale/ko/LC_MESSAGES/sphinx.po777
-rw-r--r--sphinx/locale/lt/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/lt/LC_MESSAGES/sphinx.mobin10244 -> 9845 bytes
-rw-r--r--sphinx/locale/lt/LC_MESSAGES/sphinx.po349
-rw-r--r--sphinx/locale/lv/LC_MESSAGES/sphinx.js1
-rw-r--r--sphinx/locale/lv/LC_MESSAGES/sphinx.mobin0 -> 9651 bytes
-rw-r--r--sphinx/locale/lv/LC_MESSAGES/sphinx.po771
-rw-r--r--sphinx/locale/ne/LC_MESSAGES/sphinx.js1
-rw-r--r--sphinx/locale/ne/LC_MESSAGES/sphinx.mobin0 -> 12378 bytes
-rw-r--r--sphinx/locale/ne/LC_MESSAGES/sphinx.po768
-rw-r--r--sphinx/locale/nl/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/nl/LC_MESSAGES/sphinx.mobin9352 -> 9096 bytes
-rw-r--r--sphinx/locale/nl/LC_MESSAGES/sphinx.po418
-rw-r--r--sphinx/locale/pl/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/pl/LC_MESSAGES/sphinx.mobin9370 -> 9551 bytes
-rw-r--r--sphinx/locale/pl/LC_MESSAGES/sphinx.po468
-rw-r--r--sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mobin10252 -> 9663 bytes
-rw-r--r--sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po399
-rw-r--r--sphinx/locale/ru/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/ru/LC_MESSAGES/sphinx.mobin11308 -> 10794 bytes
-rw-r--r--sphinx/locale/ru/LC_MESSAGES/sphinx.po360
-rw-r--r--sphinx/locale/sl/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/sl/LC_MESSAGES/sphinx.mobin9146 -> 8883 bytes
-rw-r--r--sphinx/locale/sl/LC_MESSAGES/sphinx.po359
-rw-r--r--sphinx/locale/sphinx.pot346
-rw-r--r--sphinx/locale/sv/LC_MESSAGES/sphinx.js1
-rw-r--r--sphinx/locale/sv/LC_MESSAGES/sphinx.mobin0 -> 9153 bytes
-rw-r--r--sphinx/locale/sv/LC_MESSAGES/sphinx.po766
-rw-r--r--sphinx/locale/tr/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/tr/LC_MESSAGES/sphinx.mobin10111 -> 9718 bytes
-rw-r--r--sphinx/locale/tr/LC_MESSAGES/sphinx.po405
-rw-r--r--sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mobin10983 -> 10486 bytes
-rw-r--r--sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po360
-rw-r--r--sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mobin8755 -> 8592 bytes
-rw-r--r--sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po362
-rw-r--r--sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mobin8934 -> 8398 bytes
-rw-r--r--sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po349
-rw-r--r--sphinx/pycode/__init__.py51
-rw-r--r--sphinx/pycode/nodes.py2
-rw-r--r--sphinx/pycode/pgen2/literals.py2
-rw-r--r--sphinx/pycode/pgen2/tokenize.py4
-rw-r--r--sphinx/pygments_styles.py96
-rw-r--r--sphinx/quickstart.py179
-rw-r--r--sphinx/roles.py50
-rw-r--r--sphinx/search/__init__.py (renamed from sphinx/search.py)154
-rw-r--r--sphinx/search/en.py244
-rw-r--r--sphinx/search/ja.py273
-rw-r--r--sphinx/setup_command.py3
-rw-r--r--sphinx/texinputs/sphinx.sty18
-rw-r--r--sphinx/themes/agogo/layout.html3
-rw-r--r--sphinx/themes/agogo/static/agogo.css_t5
-rw-r--r--sphinx/themes/basic/genindex-single.html49
-rw-r--r--sphinx/themes/basic/genindex.html62
-rw-r--r--sphinx/themes/basic/layout.html45
-rw-r--r--sphinx/themes/basic/searchresults.html36
-rw-r--r--sphinx/themes/basic/static/ajax-loader.gifbin0 -> 673 bytes
-rw-r--r--sphinx/themes/basic/static/basic.css_t (renamed from sphinx/themes/basic/static/basic.css)7
-rw-r--r--sphinx/themes/basic/static/comment-bright.pngbin0 -> 3500 bytes
-rw-r--r--sphinx/themes/basic/static/comment-close.pngbin0 -> 3578 bytes
-rw-r--r--sphinx/themes/basic/static/comment.pngbin0 -> 3445 bytes
-rw-r--r--sphinx/themes/basic/static/down-pressed.pngbin0 -> 368 bytes
-rw-r--r--sphinx/themes/basic/static/down.pngbin0 -> 363 bytes
-rw-r--r--sphinx/themes/basic/static/searchtools.js_t (renamed from sphinx/themes/basic/static/searchtools.js)312
-rw-r--r--sphinx/themes/basic/static/underscore.js7
-rw-r--r--sphinx/themes/basic/static/up-pressed.pngbin0 -> 372 bytes
-rw-r--r--sphinx/themes/basic/static/up.pngbin0 -> 363 bytes
-rw-r--r--sphinx/themes/basic/static/websupport.js808
-rw-r--r--sphinx/themes/basic/theme.conf1
-rw-r--r--sphinx/themes/default/static/default.css_t4
-rw-r--r--sphinx/themes/default/static/sidebar.js3
-rw-r--r--sphinx/themes/epub/epub-cover.html24
-rw-r--r--sphinx/themes/nature/static/nature.css_t2
-rw-r--r--sphinx/themes/pyramid/layout.html24
-rw-r--r--sphinx/themes/pyramid/static/dialog-note.pngbin0 -> 1582 bytes
-rw-r--r--sphinx/themes/pyramid/static/dialog-seealso.pngbin0 -> 1502 bytes
-rw-r--r--sphinx/themes/pyramid/static/dialog-topic.pngbin0 -> 1910 bytes
-rw-r--r--sphinx/themes/pyramid/static/dialog-warning.pngbin0 -> 1391 bytes
-rw-r--r--sphinx/themes/pyramid/static/epub.css310
-rw-r--r--sphinx/themes/pyramid/static/footerbg.pngbin0 -> 333 bytes
-rw-r--r--sphinx/themes/pyramid/static/headerbg.pngbin0 -> 203 bytes
-rw-r--r--sphinx/themes/pyramid/static/ie6.css7
-rw-r--r--sphinx/themes/pyramid/static/middlebg.pngbin0 -> 2797 bytes
-rw-r--r--sphinx/themes/pyramid/static/pyramid.css_t323
-rw-r--r--sphinx/themes/pyramid/static/transparent.gifbin0 -> 49 bytes
-rw-r--r--sphinx/themes/pyramid/theme.conf4
-rw-r--r--sphinx/themes/sphinxdoc/static/sphinxdoc.css_t (renamed from sphinx/themes/sphinxdoc/static/sphinxdoc.css)4
-rw-r--r--sphinx/themes/traditional/static/traditional.css_t (renamed from sphinx/themes/traditional/static/traditional.css)36
-rw-r--r--sphinx/theming.py25
-rw-r--r--sphinx/util/__init__.py84
-rw-r--r--sphinx/util/docstrings.py32
-rw-r--r--sphinx/util/inspect.py47
-rw-r--r--sphinx/util/jsdump.py4
-rw-r--r--sphinx/util/jsonimpl.py2
-rw-r--r--sphinx/util/matching.py11
-rw-r--r--sphinx/util/nodes.py75
-rw-r--r--sphinx/util/osutil.py22
-rw-r--r--sphinx/util/png.py14
-rw-r--r--sphinx/util/pycompat.py113
-rw-r--r--sphinx/util/websupport.py12
-rw-r--r--sphinx/versioning.py127
-rw-r--r--sphinx/websupport/__init__.py456
-rw-r--r--sphinx/websupport/errors.py26
-rw-r--r--sphinx/websupport/search/__init__.py126
-rw-r--r--sphinx/websupport/search/nullsearch.py24
-rw-r--r--sphinx/websupport/search/whooshsearch.py59
-rw-r--r--sphinx/websupport/search/xapiansearch.py81
-rw-r--r--sphinx/websupport/storage/__init__.py115
-rw-r--r--sphinx/websupport/storage/differ.py85
-rw-r--r--sphinx/websupport/storage/sqlalchemy_db.py208
-rw-r--r--sphinx/websupport/storage/sqlalchemystorage.py177
-rw-r--r--sphinx/writers/html.py79
-rw-r--r--sphinx/writers/latex.py161
-rw-r--r--sphinx/writers/manpage.py19
-rw-r--r--sphinx/writers/texinfo.py1372
-rw-r--r--sphinx/writers/text.py36
-rw-r--r--sphinx/writers/websupport.py46
205 files changed, 17879 insertions, 6038 deletions
diff --git a/sphinx/__init__.py b/sphinx/__init__.py
index 4671a449..468b3406 100644
--- a/sphinx/__init__.py
+++ b/sphinx/__init__.py
@@ -9,11 +9,14 @@
:license: BSD, see LICENSE for details.
"""
+# Keep this file executable as-is in Python 3!
+# (Otherwise getting the version out of it from setup.py is impossible.)
+
import sys
from os import path
-__version__ = '1.0.7+'
-__released__ = '1.0.7' # used when Sphinx builds its own docs
+__version__ = '1.1pre'
+__released__ = '1.1 (hg)' # used when Sphinx builds its own docs
package_dir = path.abspath(path.dirname(__file__))
@@ -34,14 +37,16 @@ if '+' in __version__ or 'pre' in __version__:
def main(argv=sys.argv):
+ """Sphinx build "main" command-line entry."""
if sys.version_info[:3] < (2, 4, 0):
- print >>sys.stderr, \
- 'Error: Sphinx requires at least Python 2.4 to run.'
+ sys.stderr.write('Error: Sphinx requires at least '
+ 'Python 2.4 to run.\n')
return 1
try:
from sphinx import cmdline
- except ImportError, err:
+ except ImportError:
+ err = sys.exc_info()[1]
errstr = str(err)
if errstr.lower().startswith('no module named'):
whichmod = errstr[16:]
@@ -54,14 +59,14 @@ def main(argv=sys.argv):
whichmod = 'roman module (which is distributed with Docutils)'
hint = ('This can happen if you upgraded docutils using\n'
'easy_install without uninstalling the old version'
- 'first.')
+ 'first.\n')
else:
whichmod += ' module'
- print >>sys.stderr, ('Error: The %s cannot be found. '
- 'Did you install Sphinx and its dependencies '
- 'correctly?' % whichmod)
+ sys.stderr.write('Error: The %s cannot be found. '
+ 'Did you install Sphinx and its dependencies '
+ 'correctly?\n' % whichmod)
if hint:
- print >> sys.stderr, hint
+ sys.stderr.write(hint)
return 1
raise
return cmdline.main(argv)
diff --git a/sphinx/addnodes.py b/sphinx/addnodes.py
index 384b51e4..94f1d615 100644
--- a/sphinx/addnodes.py
+++ b/sphinx/addnodes.py
@@ -11,103 +11,171 @@
from docutils import nodes
-# index markup
-class index(nodes.Invisible, nodes.Inline, nodes.TextElement): pass
+
+class toctree(nodes.General, nodes.Element):
+ """Node for inserting a "TOC tree"."""
+
# domain-specific object descriptions (class, function etc.)
-# parent node for signature and content
-class desc(nodes.Admonition, nodes.Element): pass
+class desc(nodes.Admonition, nodes.Element):
+ """Node for object descriptions.
+
+ This node is similar to a "definition list" with one definition. It
+ contains one or more ``desc_signature`` and a ``desc_content``.
+ """
+
+class desc_signature(nodes.Part, nodes.Inline, nodes.TextElement):
+ """Node for object signatures.
-# additional name parts (module name, class name)
-class desc_addname(nodes.Part, nodes.Inline, nodes.TextElement): pass
+ The "term" part of the custom Sphinx definition list.
+ """
+
+
+# nodes to use within a desc_signature
+
+class desc_addname(nodes.Part, nodes.Inline, nodes.TextElement):
+ """Node for additional name parts (module name, class name)."""
# compatibility alias
desc_classname = desc_addname
-# return type (C); object type
-class desc_type(nodes.Part, nodes.Inline, nodes.TextElement): pass
-# -> annotation (Python)
+
+class desc_type(nodes.Part, nodes.Inline, nodes.TextElement):
+ """Node for return types or object type names."""
+
class desc_returns(desc_type):
+ """Node for a "returns" annotation (a la -> in Python)."""
def astext(self):
return ' -> ' + nodes.TextElement.astext(self)
-# main name of object
-class desc_name(nodes.Part, nodes.Inline, nodes.TextElement): pass
-# argument list
-class desc_signature(nodes.Part, nodes.Inline, nodes.TextElement): pass
+
+class desc_name(nodes.Part, nodes.Inline, nodes.TextElement):
+ """Node for the main object name."""
+
class desc_parameterlist(nodes.Part, nodes.Inline, nodes.TextElement):
+ """Node for a general parameter list."""
child_text_separator = ', '
-class desc_parameter(nodes.Part, nodes.Inline, nodes.TextElement): pass
+
+class desc_parameter(nodes.Part, nodes.Inline, nodes.TextElement):
+ """Node for a single parameter."""
+
class desc_optional(nodes.Part, nodes.Inline, nodes.TextElement):
+ """Node for marking optional parts of the parameter list."""
child_text_separator = ', '
def astext(self):
return '[' + nodes.TextElement.astext(self) + ']'
-# annotation (not Python 3-style annotations)
-class desc_annotation(nodes.Part, nodes.Inline, nodes.TextElement): pass
-# node for content
-class desc_content(nodes.General, nodes.Element): pass
+class desc_annotation(nodes.Part, nodes.Inline, nodes.TextElement):
+ """Node for signature annotations (not Python 3-style annotations)."""
+
+class desc_content(nodes.General, nodes.Element):
+ """Node for object description content.
+
+ This is the "definition" part of the custom Sphinx definition list.
+ """
+
+
+# new admonition-like constructs
+
+class versionmodified(nodes.Admonition, nodes.TextElement):
+ """Node for version change entries.
+
+ Currently used for "versionadded", "versionchanged" and "deprecated"
+ directives.
+ """
+
+class seealso(nodes.Admonition, nodes.Element):
+ """Custom "see also" admonition."""
+
+class productionlist(nodes.Admonition, nodes.Element):
+ """Node for grammar production lists.
+
+ Contains ``production`` nodes.
+ """
+
+class production(nodes.Part, nodes.Inline, nodes.TextElement):
+ """Node for a single grammar production rule."""
+
+
+# other directive-level nodes
+
+class index(nodes.Invisible, nodes.Inline, nodes.TextElement):
+ """Node for index entries.
+
+ This node is created by the ``index`` directive and has one attribute,
+ ``entries``. Its value is a list of 4-tuples of ``(entrytype, entryname,
+ target, ignored)``.
+
+ *entrytype* is one of "single", "pair", "double", "triple".
+ """
+
+class centered(nodes.Part, nodes.Element):
+ """Deprecated."""
+
+class acks(nodes.Element):
+ """Special node for "acks" lists."""
+
+class hlist(nodes.Element):
+ """Node for "horizontal lists", i.e. lists that should be compressed to
+ take up less vertical space.
+ """
+
+class hlistcol(nodes.Element):
+ """Node for one column in a horizontal list."""
-# \versionadded, \versionchanged, \deprecated
-class versionmodified(nodes.Admonition, nodes.TextElement): pass
+class compact_paragraph(nodes.paragraph):
+ """Node for a compact paragraph (which never makes a <p> node)."""
-# seealso
-class seealso(nodes.Admonition, nodes.Element): pass
+class glossary(nodes.Element):
+ """Node to insert a glossary."""
-# productionlist
-class productionlist(nodes.Admonition, nodes.Element): pass
-class production(nodes.Part, nodes.Inline, nodes.TextElement): pass
+class only(nodes.Element):
+ """Node for "only" directives (conditional inclusion based on tags)."""
-# toc tree
-class toctree(nodes.General, nodes.Element): pass
-# centered
-class centered(nodes.Part, nodes.Element): pass
+# meta-information nodes
-# pending xref
-class pending_xref(nodes.Inline, nodes.Element): pass
+class start_of_file(nodes.Element):
+ """Node to mark start of a new file, used in the LaTeX builder only."""
-# compact paragraph -- never makes a <p>
-class compact_paragraph(nodes.paragraph): pass
+class highlightlang(nodes.Element):
+ """Inserted to set the highlight language and line number options for
+ subsequent code blocks.
+ """
-# reference to a file to download
-class download_reference(nodes.reference): pass
+class tabular_col_spec(nodes.Element):
+ """Node for specifying tabular columns, used for LaTeX output."""
-# for the ACKS list
-class acks(nodes.Element): pass
+class meta(nodes.Special, nodes.PreBibliographic, nodes.Element):
+ """Node for meta directive -- same as docutils' standard meta node,
+ but pickleable.
+ """
-# for horizontal lists
-class hlist(nodes.Element): pass
-class hlistcol(nodes.Element): pass
-# sets the highlighting language for literal blocks
-class highlightlang(nodes.Element): pass
+# inline nodes
-# like emphasis, but doesn't apply further text processors, e.g. smartypants
-class literal_emphasis(nodes.emphasis): pass
+class pending_xref(nodes.Inline, nodes.Element):
+ """Node for cross-references that cannot be resolved without complete
+ information about all documents.
-# for abbreviations (with explanations)
-class abbreviation(nodes.Inline, nodes.TextElement): pass
+ These nodes are resolved before writing output, in
+ BuildEnvironment.resolve_references.
+ """
-# glossary
-class glossary(nodes.Element): pass
+class download_reference(nodes.reference):
+ """Node for download references, similar to pending_xref."""
-# start of a file, used in the LaTeX builder only
-class start_of_file(nodes.Element): pass
+class literal_emphasis(nodes.emphasis):
+ """Node that behaves like `emphasis`, but further text processors are not
+ applied (e.g. smartypants for HTML output).
+ """
-# tabular column specification, used for the LaTeX writer
-class tabular_col_spec(nodes.Element): pass
+class abbreviation(nodes.Inline, nodes.TextElement):
+ """Node for abbreviations with explanations."""
-# only (in/exclusion based on tags)
-class only(nodes.Element): pass
+class termsep(nodes.Structural, nodes.Element):
+ """Separates two terms within a <term> node."""
-# meta directive -- same as docutils' standard meta node, but pickleable
-class meta(nodes.Special, nodes.PreBibliographic, nodes.Element): pass
-# make them known to docutils. this is needed, because the HTML writer
-# will choke at some point if these are not added
-nodes._add_node_class_names("""index desc desc_content desc_signature
- desc_type desc_returns desc_addname desc_name desc_parameterlist
- desc_parameter desc_optional download_reference hlist hlistcol
- centered versionmodified seealso productionlist production toctree
- pending_xref compact_paragraph highlightlang literal_emphasis
- abbreviation glossary acks module start_of_file tabular_col_spec
- meta""".split())
+# make the new nodes known to docutils; needed because the HTML writer will
+# choke at some point if these are not added
+nodes._add_node_class_names(k for k in globals().keys()
+ if k != 'nodes' and k[0] != '_')
diff --git a/sphinx/apidoc.py b/sphinx/apidoc.py
new file mode 100644
index 00000000..af404333
--- /dev/null
+++ b/sphinx/apidoc.py
@@ -0,0 +1,269 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.apidoc
+ ~~~~~~~~~~~~~
+
+ Parses a directory tree looking for Python modules and packages and creates
+ ReST files appropriately to create code documentation with Sphinx. It also
+ creates a modules index (named modules.<suffix>).
+
+ This is derived from the "sphinx-autopackage" script, which is:
+ Copyright 2008 Société des arts technologiques (SAT), http://www.sat.qc.ca/.
+
+ :copyright: 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+import os
+import sys
+import optparse
+from os import path
+
+# automodule options
+OPTIONS = [
+ 'members',
+ 'undoc-members',
+ # 'inherited-members', # disabled because there's a bug in sphinx
+ 'show-inheritance',
+]
+
+INITPY = '__init__.py'
+
+def makename(package, module):
+ """Join package and module with a dot."""
+ # Both package and module can be None/empty.
+ if package:
+ name = package
+ if module:
+ name += '.' + module
+ else:
+ name = module
+ return name
+
+def write_file(name, text, opts):
+ """Write the output file for module/package <name>."""
+ fname = path.join(opts.destdir, "%s.%s" % (name, opts.suffix))
+ if opts.dryrun:
+ print 'Would create file %s.' % fname
+ return
+ if not opts.force and path.isfile(fname):
+ print 'File %s already exists, skipping.' % fname
+ else:
+ print 'Creating file %s.' % fname
+ f = open(fname, 'w')
+ try:
+ f.write(text)
+ finally:
+ f.close()
+
+def format_heading(level, text):
+ """Create a heading of <level> [1, 2 or 3 supported]."""
+ underlining = ['=', '-', '~', ][level-1] * len(text)
+ return '%s\n%s\n\n' % (text, underlining)
+
+def format_directive(module, package=None):
+ """Create the automodule directive and add the options."""
+ directive = '.. automodule:: %s\n' % makename(package, module)
+ for option in OPTIONS:
+ directive += ' :%s:\n' % option
+ return directive
+
+def create_module_file(package, module, opts):
+ """Build the text of the file and write the file."""
+ text = format_heading(1, '%s Module' % module)
+ #text += format_heading(2, ':mod:`%s` Module' % module)
+ text += format_directive(module, package)
+ write_file(makename(package, module), text, opts)
+
+def create_package_file(root, master_package, subroot, py_files, opts, subs):
+ """Build the text of the file and write the file."""
+ package = path.split(root)[-1]
+ text = format_heading(1, '%s Package' % package)
+ # add each module in the package
+ for py_file in py_files:
+ if shall_skip(path.join(root, py_file)):
+ continue
+ is_package = py_file == INITPY
+ py_file = path.splitext(py_file)[0]
+ py_path = makename(subroot, py_file)
+ if is_package:
+ heading = ':mod:`%s` Package' % package
+ else:
+ heading = ':mod:`%s` Module' % py_file
+ text += format_heading(2, heading)
+ text += format_directive(is_package and subroot or py_path,
+ master_package)
+ text += '\n'
+
+ # build a list of directories that are packages (contain an INITPY file)
+ subs = [sub for sub in subs if path.isfile(path.join(root, sub, INITPY))]
+ # if there are some package directories, add a TOC for theses subpackages
+ if subs:
+ text += format_heading(2, 'Subpackages')
+ text += '.. toctree::\n\n'
+ for sub in subs:
+ text += ' %s.%s\n' % (makename(master_package, subroot), sub)
+ text += '\n'
+
+ write_file(makename(master_package, subroot), text, opts)
+
+def create_modules_toc_file(master_package, modules, opts, name='modules'):
+ """
+ Create the module's index.
+ """
+ text = format_heading(1, '%s Modules' % opts.header)
+ text += '.. toctree::\n'
+ text += ' :maxdepth: %s\n\n' % opts.maxdepth
+
+ modules.sort()
+ prev_module = ''
+ for module in modules:
+ # look if the module is a subpackage and, if yes, ignore it
+ if module.startswith(prev_module + '.'):
+ continue
+ prev_module = module
+ text += ' %s\n' % module
+
+ write_file(name, text, opts)
+
+def shall_skip(module):
+ """
+ Check if we want to skip this module.
+ """
+ # skip it, if there is nothing (or just \n or \r\n) in the file
+ return path.getsize(module) < 3
+
+def recurse_tree(rootpath, excludes, opts):
+ """
+ Look for every file in the directory tree and create the corresponding
+ ReST files.
+ """
+ # use absolute path for root, as relative paths like '../../foo' cause
+ # 'if "/." in root ...' to filter out *all* modules otherwise
+ rootpath = os.path.abspath(rootpath)
+ # check if the base directory is a package and get is name
+ if INITPY in os.listdir(rootpath):
+ package_name = rootpath.split(path.sep)[-1]
+ else:
+ package_name = None
+
+ toc = []
+ tree = os.walk(rootpath, False)
+ for root, subs, files in tree:
+ # keep only the Python script files
+ py_files = sorted([f for f in files if path.splitext(f)[1] == '.py'])
+ if INITPY in py_files:
+ py_files.remove(INITPY)
+ py_files.insert(0, INITPY)
+ # remove hidden ('.') and private ('_') directories
+ subs = sorted([sub for sub in subs if sub[0] not in ['.', '_']])
+ # check if there are valid files to process
+ # TODO: could add check for windows hidden files
+ if "/." in root or "/_" in root \
+ or not py_files \
+ or is_excluded(root, excludes):
+ continue
+ if INITPY in py_files:
+ # we are in package ...
+ if (# ... with subpackage(s)
+ subs
+ or
+ # ... with some module(s)
+ len(py_files) > 1
+ or
+ # ... with a not-to-be-skipped INITPY file
+ not shall_skip(path.join(root, INITPY))
+ ):
+ subroot = root[len(rootpath):].lstrip(path.sep).\
+ replace(path.sep, '.')
+ create_package_file(root, package_name, subroot,
+ py_files, opts, subs)
+ toc.append(makename(package_name, subroot))
+ elif root == rootpath:
+ # if we are at the root level, we don't require it to be a package
+ for py_file in py_files:
+ if not shall_skip(path.join(rootpath, py_file)):
+ module = path.splitext(py_file)[0]
+ create_module_file(package_name, module, opts)
+ toc.append(makename(package_name, module))
+
+ # create the module's index
+ if not opts.notoc:
+ create_modules_toc_file(package_name, toc, opts)
+
+def normalize_excludes(rootpath, excludes):
+ """
+ Normalize the excluded directory list:
+ * must be either an absolute path or start with rootpath,
+ * otherwise it is joined with rootpath
+ * with trailing slash
+ """
+ sep = path.sep
+ f_excludes = []
+ for exclude in excludes:
+ if not path.isabs(exclude) and not exclude.startswith(rootpath):
+ exclude = path.join(rootpath, exclude)
+ if not exclude.endswith(sep):
+ exclude += sep
+ f_excludes.append(exclude)
+ return f_excludes
+
+def is_excluded(root, excludes):
+ """
+ Check if the directory is in the exclude list.
+
+ Note: by having trailing slashes, we avoid common prefix issues, like
+ e.g. an exlude "foo" also accidentally excluding "foobar".
+ """
+ sep = path.sep
+ if not root.endswith(sep):
+ root += sep
+ for exclude in excludes:
+ if root.startswith(exclude):
+ return True
+ return False
+
+def main(argv=sys.argv):
+ """
+ Parse and check the command line arguments.
+ """
+ parser = optparse.OptionParser(
+ usage="""\
+usage: %prog [options] -o <output_path> <module_path> [exclude_paths, ...]
+
+Look recursively in <module_path> for Python modules and packages and create
+a reST file with automodule directives per package in the <output_path>.
+
+Note: By default this script will not overwrite already created files.""")
+
+ parser.add_option('-o', '--output-dir', action='store', dest='destdir',
+ help='Directory to place all output', default='')
+ parser.add_option('-d', '--maxdepth', action='store', dest='maxdepth',
+ help='Maximum depth of submodules to show in the TOC '
+ '(default: 4)', type='int', default=4)
+ parser.add_option('-f', '--force', action='store_true', dest='force',
+ help='Overwrite all the files')
+ parser.add_option('-n', '--dry-run', action='store_true', dest='dryrun',
+ help='Run the script without creating the files')
+ parser.add_option('-T', '--no-toc', action='store_true', dest='notoc',
+ help='Don\'t create the table of contents file')
+ parser.add_option('-H', '--doc-header', action='store', dest='header',
+ help='Documentation Header (default: Project)',
+ default='Project')
+ parser.add_option('-s', '--suffix', action='store', dest='suffix',
+ help='file suffix (default: rst)', default='rst')
+
+ (opts, args) = parser.parse_args(argv[1:])
+
+ if not args:
+ parser.error('A package path is required.')
+ if not opts.destdir:
+ parser.error('An output directory is required.')
+ rootpath, excludes = args[0], args[1:]
+ if not path.isdir(rootpath):
+ print >>sys.stderr, '%s is not a directory.' % rootpath
+ sys.exit(1)
+ if not path.isdir(opts.destdir):
+ print '%s is not a valid output directory.' % opts.destdir
+ sys.exit(1)
+ excludes = normalize_excludes(rootpath, excludes)
+ recurse_tree(rootpath, excludes, opts)
diff --git a/sphinx/application.py b/sphinx/application.py
index 3f03ffa7..dec9c13c 100644
--- a/sphinx/application.py
+++ b/sphinx/application.py
@@ -37,12 +37,10 @@ from sphinx.util.osutil import ENOENT
from sphinx.util.console import bold
-# Directive is either new-style or old-style
-clstypes = (type, types.ClassType)
-
# List of all known core events. Maps name to arguments description.
events = {
'builder-inited': '',
+ 'env-get-outdated': 'env, added, changed, removed',
'env-purge-doc': 'env, docname',
'source-read': 'docname, source text',
'doctree-read': 'the doctree before being pickled',
@@ -136,9 +134,8 @@ class Sphinx(object):
self._init_builder(buildername)
def _init_i18n(self):
- """
- Load translated strings from the configured localedirs if
- enabled in the configuration.
+ """Load translated strings from the configured localedirs if enabled in
+ the configuration.
"""
if self.config.language is not None:
self.info(bold('loading translations [%s]... ' %
@@ -368,6 +365,9 @@ class Sphinx(object):
elif key == 'man':
from sphinx.writers.manpage import ManualPageTranslator \
as translator
+ elif key == 'texinfo':
+ from sphinx.writers.texinfo import TexinfoTranslator \
+ as translator
else:
# ignore invalid keys for compatibility
continue
@@ -472,8 +472,11 @@ class Sphinx(object):
def add_stylesheet(self, filename):
from sphinx.builders.html import StandaloneHTMLBuilder
- StandaloneHTMLBuilder.css_files.append(
- posixpath.join('_static', filename))
+ if '://' in filename:
+ StandaloneHTMLBuilder.css_files.append(filename)
+ else:
+ StandaloneHTMLBuilder.css_files.append(
+ posixpath.join('_static', filename))
def add_lexer(self, alias, lexer):
from sphinx.highlighting import lexers
@@ -490,6 +493,11 @@ class Sphinx(object):
from sphinx.ext import autodoc
autodoc.AutoDirective._special_attrgetters[type] = getter
+ def add_search_language(self, cls):
+ from sphinx.search import languages, SearchLanguage
+ assert isinstance(cls, SearchLanguage)
+ languages[cls.lang] = cls
+
class TemplateBridge(object):
"""
@@ -498,8 +506,7 @@ class TemplateBridge(object):
"""
def init(self, builder, theme=None, dirs=None):
- """
- Called by the builder to initialize the template system.
+ """Called by the builder to initialize the template system.
*builder* is the builder object; you'll probably want to look at the
value of ``builder.config.templates_path``.
@@ -510,23 +517,20 @@ class TemplateBridge(object):
raise NotImplementedError('must be implemented in subclasses')
def newest_template_mtime(self):
- """
- Called by the builder to determine if output files are outdated
+ """Called by the builder to determine if output files are outdated
because of template changes. Return the mtime of the newest template
file that was changed. The default implementation returns ``0``.
"""
return 0
def render(self, template, context):
- """
- Called by the builder to render a template given as a filename with a
- specified context (a Python dictionary).
+ """Called by the builder to render a template given as a filename with
+ a specified context (a Python dictionary).
"""
raise NotImplementedError('must be implemented in subclasses')
def render_string(self, template, context):
- """
- Called by the builder to render a template given as a string with a
+ """Called by the builder to render a template given as a string with a
specified context (a Python dictionary).
"""
raise NotImplementedError('must be implemented in subclasses')
diff --git a/sphinx/builders/__init__.py b/sphinx/builders/__init__.py
index 32db8659..5240a1c7 100644
--- a/sphinx/builders/__init__.py
+++ b/sphinx/builders/__init__.py
@@ -31,9 +31,12 @@ class Builder(object):
name = ''
# builder's output format, or '' if no document output is produced
format = ''
+ # doctree versioning method
+ versioning_method = 'none'
def __init__(self, app):
self.env = app.env
+ self.env.set_versioning_method(self.versioning_method)
self.srcdir = app.srcdir
self.confdir = app.confdir
self.outdir = app.outdir
@@ -55,16 +58,13 @@ class Builder(object):
# helper methods
def init(self):
- """
- Load necessary templates and perform initialization. The default
+ """Load necessary templates and perform initialization. The default
implementation does nothing.
"""
pass
def create_template_bridge(self):
- """
- Return the template bridge configured.
- """
+ """Return the template bridge configured."""
if self.config.template_bridge:
self.templates = self.app.import_object(
self.config.template_bridge, 'template_bridge setting')()
@@ -73,23 +73,23 @@ class Builder(object):
self.templates = BuiltinTemplateLoader()
def get_target_uri(self, docname, typ=None):
- """
- Return the target URI for a document name (*typ* can be used to qualify
- the link characteristic for individual builders).
+ """Return the target URI for a document name.
+
+ *typ* can be used to qualify the link characteristic for individual
+ builders.
"""
raise NotImplementedError
def get_relative_uri(self, from_, to, typ=None):
- """
- Return a relative URI between two source filenames. May raise
- environment.NoUri if there's no way to return a sensible URI.
+ """Return a relative URI between two source filenames.
+
+ May raise environment.NoUri if there's no way to return a sensible URI.
"""
return relative_uri(self.get_target_uri(from_),
self.get_target_uri(to, typ))
def get_outdated_docs(self):
- """
- Return an iterable of output files that are outdated, or a string
+ """Return an iterable of output files that are outdated, or a string
describing what an update build will build.
If the builder does not output individual files corresponding to
@@ -129,9 +129,7 @@ class Builder(object):
supported_image_types = []
def post_process_images(self, doctree):
- """
- Pick the best candidate for all image URIs.
- """
+ """Pick the best candidate for all image URIs."""
for node in doctree.traverse(nodes.image):
if '?' in node['candidates']:
# don't rewrite nonlocal image URIs
@@ -198,9 +196,9 @@ class Builder(object):
'out of date' % len(to_build))
def build(self, docnames, summary=None, method='update'):
- """
- Main build method. First updates the environment, and then
- calls :meth:`write`.
+ """Main build method.
+
+ First updates the environment, and then calls :meth:`write`.
"""
if summary:
self.info(bold('building [%s]: ' % self.name), nonl=1)
@@ -303,15 +301,18 @@ class Builder(object):
raise NotImplementedError
def finish(self):
- """
- Finish the building process. The default implementation does nothing.
+ """Finish the building process.
+
+ The default implementation does nothing.
"""
pass
def cleanup(self):
+ """Cleanup any resources.
+
+ The default implementation does nothing.
"""
- Cleanup any resources. The default implementation does nothing.
- """
+ pass
BUILTIN_BUILDERS = {
@@ -328,6 +329,9 @@ BUILTIN_BUILDERS = {
'latex': ('latex', 'LaTeXBuilder'),
'text': ('text', 'TextBuilder'),
'man': ('manpage', 'ManualPageBuilder'),
+ 'texinfo': ('texinfo', 'TexinfoBuilder'),
'changes': ('changes', 'ChangesBuilder'),
'linkcheck': ('linkcheck', 'CheckExternalLinksBuilder'),
+ 'websupport': ('websupport', 'WebSupportBuilder'),
+ 'gettext': ('gettext', 'MessageCatalogBuilder'),
}
diff --git a/sphinx/builders/changes.py b/sphinx/builders/changes.py
index 6c19fd30..3e351e6c 100644
--- a/sphinx/builders/changes.py
+++ b/sphinx/builders/changes.py
@@ -30,7 +30,8 @@ class ChangesBuilder(Builder):
def init(self):
self.create_template_bridge()
- Theme.init_themes(self)
+ Theme.init_themes(self.confdir, self.config.html_theme_path,
+ warn=self.warn)
self.theme = Theme('default')
self.templates.init(self, self.theme)
diff --git a/sphinx/builders/devhelp.py b/sphinx/builders/devhelp.py
index fca1602e..a1b41945 100644
--- a/sphinx/builders/devhelp.py
+++ b/sphinx/builders/devhelp.py
@@ -42,7 +42,6 @@ except ImportError:
class DevhelpBuilder(StandaloneHTMLBuilder):
"""
Builder that also outputs GNOME Devhelp file.
-
"""
name = 'devhelp'
diff --git a/sphinx/builders/epub.py b/sphinx/builders/epub.py
index a356254b..e946e0d3 100644
--- a/sphinx/builders/epub.py
+++ b/sphinx/builders/epub.py
@@ -12,6 +12,7 @@
import os
import re
+import sys
import time
import codecs
import zipfile
@@ -97,6 +98,12 @@ _content_template = u'''\
</package>
'''
+_cover_template = u'''\
+ <meta name="cover" content="%(cover)s"/>
+'''
+
+_coverpage_name = u'epub-cover.html'
+
_file_template = u'''\
<item id="%(id)s"
href="%(href)s"
@@ -132,7 +139,8 @@ _refuri_re = re.compile("([^#:]*#)(.*)")
# The epub publisher
class EpubBuilder(StandaloneHTMLBuilder):
- """Builder that outputs epub files.
+ """
+ Builder that outputs epub files.
It creates the metainfo files container.opf, toc.ncx, mimetype, and
META-INF/container.xml. Afterwards, all necessary files are zipped to an
@@ -234,6 +242,7 @@ class EpubBuilder(StandaloneHTMLBuilder):
def fix_ids(self, tree):
"""Replace colons with hyphens in href and id attributes.
+
Some readers crash because they interpret the part as a
transport protocol specification.
"""
@@ -252,8 +261,7 @@ class EpubBuilder(StandaloneHTMLBuilder):
node.attributes['ids'] = newids
def add_visible_links(self, tree):
- """Append visible link targets after external links.
- """
+ """Append visible link targets after external links."""
for node in tree.traverse(nodes.reference):
uri = node.get('refuri', '')
if (uri.startswith('http:') or uri.startswith('https:') or
@@ -267,6 +275,7 @@ class EpubBuilder(StandaloneHTMLBuilder):
def write_doc(self, docname, doctree):
"""Write one document file.
+
This method is overwritten in order to fix fragment identifiers
and to add visible external links.
"""
@@ -275,28 +284,29 @@ class EpubBuilder(StandaloneHTMLBuilder):
return StandaloneHTMLBuilder.write_doc(self, docname, doctree)
def fix_genindex(self, tree):
- """Fix href attributes for genindex pages.
- """
+ """Fix href attributes for genindex pages."""
# XXX: modifies tree inline
# Logic modeled from themes/basic/genindex.html
for key, columns in tree:
for entryname, (links, subitems) in columns:
- for (i, link) in enumerate(links):
+ for (i, (ismain, link)) in enumerate(links):
m = _refuri_re.match(link)
if m:
- links[i] = self.fix_fragment(m.group(1), m.group(2))
+ links[i] = (ismain,
+ self.fix_fragment(m.group(1), m.group(2)))
for subentryname, subentrylinks in subitems:
- for (i, link) in enumerate(subentrylinks):
+ for (i, (ismain, link)) in enumerate(subentrylinks):
m = _refuri_re.match(link)
if m:
- subentrylinks[i] = \
- self.fix_fragment(m.group(1), m.group(2))
+ subentrylinks[i] = (ismain,
+ self.fix_fragment(m.group(1), m.group(2)))
def handle_page(self, pagename, addctx, templatename='page.html',
outfilename=None, event_arg=None):
"""Create a rendered page.
- This method is overwritten for genindex pages in order to fix
- href link attributes.
+
+ This method is overwritten for genindex pages in order to fix href link
+ attributes.
"""
if pagename.startswith('genindex'):
self.fix_genindex(addctx['genindexentries'])
@@ -387,7 +397,6 @@ class EpubBuilder(StandaloneHTMLBuilder):
'media_type': self.esc(_media_types[ext])
})
self.files.append(filename)
- projectfiles = '\n'.join(projectfiles)
# spine
spine = []
@@ -407,12 +416,38 @@ class EpubBuilder(StandaloneHTMLBuilder):
spine.append(_spine_template % {
'idref': self.esc(self.make_id('genindex' + self.out_suffix))
})
+
+ # add the optional cover
+ content_tmpl = _content_template
+ if self.config.epub_cover:
+ image, tmpl = self.config.epub_cover
+ mpos = content_tmpl.rfind('</metadata>')
+ cpos = content_tmpl.rfind('\n', 0 , mpos) + 1
+ content_tmpl = content_tmpl[:cpos] + \
+ _cover_template % {'cover': self.esc(self.make_id(image))} + \
+ content_tmpl[cpos:]
+ if tmpl:
+ spine.insert(0, _spine_template % {
+ 'idref': self.esc(self.make_id(_coverpage_name))})
+ if _coverpage_name not in self.files:
+ ext = path.splitext(_coverpage_name)[-1]
+ self.files.append(_coverpage_name)
+ projectfiles.append(_file_template % {
+ 'href': self.esc(_coverpage_name),
+ 'id': self.esc(self.make_id(_coverpage_name)),
+ 'media_type': self.esc(_media_types[ext])
+ })
+ ctx = {'image': self.esc(image), 'title': self.config.project}
+ self.handle_page(
+ os.path.splitext(_coverpage_name)[0], ctx, tmpl)
+
+ projectfiles = '\n'.join(projectfiles)
spine = '\n'.join(spine)
# write the project file
f = codecs.open(path.join(outdir, outname), 'w', 'utf-8')
try:
- f.write(_content_template % \
+ f.write(content_tmpl % \
self.content_metadata(projectfiles, spine))
finally:
f.close()
@@ -429,6 +464,7 @@ class EpubBuilder(StandaloneHTMLBuilder):
def insert_subnav(self, node, subnav):
"""Insert nested navpoints for given node.
+
The node and subnav are already rendered to text.
"""
nlist = node.rsplit('\n', 1)
@@ -438,8 +474,8 @@ class EpubBuilder(StandaloneHTMLBuilder):
def build_navpoints(self, nodes):
"""Create the toc navigation structure.
- Subelements of a node are nested inside the navpoint.
- For nested nodes the parent node is reinserted in the subnav.
+ Subelements of a node are nested inside the navpoint. For nested nodes
+ the parent node is reinserted in the subnav.
"""
navstack = []
navlist = []
@@ -479,8 +515,8 @@ class EpubBuilder(StandaloneHTMLBuilder):
return '\n'.join(navlist)
def toc_metadata(self, level, navpoints):
- """Create a dictionary with all metadata for the toc.ncx
- file properly escaped.
+ """Create a dictionary with all metadata for the toc.ncx file
+ properly escaped.
"""
metadata = {}
metadata['uid'] = self.config.epub_uid
@@ -505,8 +541,8 @@ class EpubBuilder(StandaloneHTMLBuilder):
def build_epub(self, outdir, outname):
"""Write the epub file.
- It is a zip file with the mimetype file stored uncompressed
- as the first entry.
+ It is a zip file with the mimetype file stored uncompressed as the first
+ entry.
"""
self.info('writing %s file...' % outname)
projectfiles = ['META-INF/container.xml', 'content.opf', 'toc.ncx'] \
@@ -516,7 +552,8 @@ class EpubBuilder(StandaloneHTMLBuilder):
epub.write(path.join(outdir, 'mimetype'), 'mimetype', \
zipfile.ZIP_STORED)
for file in projectfiles:
- if isinstance(file, unicode):
- file = file.encode('utf-8')
- epub.write(path.join(outdir, file), file, zipfile.ZIP_DEFLATED)
+ fp = path.join(outdir, file)
+ if isinstance(fp, unicode):
+ fp = fp.encode(sys.getfilesystemencoding())
+ epub.write(fp, file, zipfile.ZIP_DEFLATED)
epub.close()
diff --git a/sphinx/builders/gettext.py b/sphinx/builders/gettext.py
new file mode 100644
index 00000000..41a5acbc
--- /dev/null
+++ b/sphinx/builders/gettext.py
@@ -0,0 +1,126 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.builders.gettext
+ ~~~~~~~~~~~~~~~~~~~~~~~
+
+ The MessageCatalogBuilder class.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from os import path
+from codecs import open
+from datetime import datetime
+from collections import defaultdict
+
+from sphinx.builders import Builder
+from sphinx.util.nodes import extract_messages
+from sphinx.util.osutil import SEP, safe_relpath
+from sphinx.util.console import darkgreen
+
+POHEADER = ur"""
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) %(copyright)s
+# This file is distributed under the same license as the %(project)s package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: %(version)s\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: %(ctime)s\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+"""[1:]
+
+
+class Catalog(object):
+ """Catalog of translatable messages."""
+
+ def __init__(self):
+ self.messages = [] # retain insertion order, a la OrderedDict
+ self.metadata = {} # msgid -> file, line, uid
+
+ def add(self, msg, origin):
+ if msg not in self.metadata: # faster lookup in hash
+ self.messages.append(msg)
+ self.metadata[msg] = []
+ self.metadata[msg].append((origin.source, origin.line, origin.uid))
+
+
+class I18nBuilder(Builder):
+ """
+ General i18n builder.
+ """
+ name = 'i18n'
+ versioning_method = 'text'
+
+ def init(self):
+ Builder.init(self)
+ self.catalogs = defaultdict(Catalog)
+
+ def get_target_uri(self, docname, typ=None):
+ return ''
+
+ def get_outdated_docs(self):
+ return self.env.found_docs
+
+ def prepare_writing(self, docnames):
+ return
+
+ def write_doc(self, docname, doctree):
+ catalog = self.catalogs[docname.split(SEP, 1)[0]]
+
+ for node, msg in extract_messages(doctree):
+ catalog.add(msg, node)
+
+
+class MessageCatalogBuilder(I18nBuilder):
+ """
+ Builds gettext-style message catalogs (.pot files).
+ """
+ name = 'gettext'
+
+ def finish(self):
+ I18nBuilder.finish(self)
+ data = dict(
+ version = self.config.version,
+ copyright = self.config.copyright,
+ project = self.config.project,
+ # XXX should supply tz
+ ctime = datetime.now().strftime('%Y-%m-%d %H:%M%z'),
+ )
+ for section, catalog in self.status_iterator(
+ self.catalogs.iteritems(), "writing message catalogs... ",
+ lambda (section, _):darkgreen(section), len(self.catalogs)):
+
+ pofn = path.join(self.outdir, section + '.pot')
+ pofile = open(pofn, 'w', encoding='utf-8')
+ try:
+ pofile.write(POHEADER % data)
+
+ for message in catalog.messages:
+ positions = catalog.metadata[message]
+
+ # generate "#: file1:line1\n#: file2:line2 ..."
+ pofile.write(u"#: %s\n" % "\n#: ".join("%s:%s" %
+ (safe_relpath(source, self.outdir), line)
+ for source, line, _ in positions))
+ # generate "# uuid1\n# uuid2\n ..."
+ pofile.write(u"# %s\n" % "\n# ".join(uid for _, _, uid
+ in positions))
+
+ # message contains *one* line of text ready for translation
+ message = message.replace(u'\\', ur'\\'). \
+ replace(u'"', ur'\"')
+ pofile.write(u'msgid "%s"\nmsgstr ""\n\n' % message)
+
+ finally:
+ pofile.close()
diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py
index 8ff628c9..b6f9d133 100644
--- a/sphinx/builders/html.py
+++ b/sphinx/builders/html.py
@@ -35,7 +35,7 @@ from sphinx.util.osutil import SEP, os_path, relative_uri, ensuredir, \
movefile, ustrftime, copyfile
from sphinx.util.nodes import inline_all_toctrees
from sphinx.util.matching import patmatch, compile_matchers
-from sphinx.util.pycompat import any
+from sphinx.util.pycompat import any, b
from sphinx.errors import SphinxError
from sphinx.locale import _
from sphinx.search import js_index
@@ -63,6 +63,7 @@ class StandaloneHTMLBuilder(Builder):
out_suffix = '.html'
link_suffix = '.html' # defaults to matching out_suffix
indexer_format = js_index
+ indexer_dumps_unicode = True
supported_image_types = ['image/svg+xml', 'image/png',
'image/gif', 'image/jpeg']
searchindex_filename = 'searchindex.js'
@@ -122,7 +123,8 @@ class StandaloneHTMLBuilder(Builder):
return self.config.html_theme, self.config.html_theme_options
def init_templates(self):
- Theme.init_themes(self)
+ Theme.init_themes(self.confdir, self.config.html_theme_path,
+ warn=self.warn)
themename, themeoptions = self.get_theme_config()
self.theme = Theme(themename)
self.theme_options = themeoptions.copy()
@@ -154,8 +156,9 @@ class StandaloneHTMLBuilder(Builder):
cfgdict = dict((name, self.config[name])
for (name, desc) in self.config.values.iteritems()
if desc[1] == 'html')
- self.config_hash = md5(str(cfgdict)).hexdigest()
- self.tags_hash = md5(str(sorted(self.tags))).hexdigest()
+ self.config_hash = md5(unicode(cfgdict).encode('utf-8')).hexdigest()
+ self.tags_hash = md5(unicode(sorted(self.tags)).encode('utf-8')) \
+ .hexdigest()
old_config_hash = old_tags_hash = ''
try:
fp = open(path.join(self.outdir, '.buildinfo'))
@@ -207,7 +210,7 @@ class StandaloneHTMLBuilder(Builder):
"""Utility: Render a lone doctree node."""
if node is None:
return {'fragment': ''}
- doc = new_document('<partial node>')
+ doc = new_document(b('<partial node>'))
doc.append(node)
if self._publisher is None:
@@ -229,10 +232,15 @@ class StandaloneHTMLBuilder(Builder):
return pub.writer.parts
def prepare_writing(self, docnames):
- from sphinx.search import IndexBuilder
-
- self.indexer = IndexBuilder(self.env)
+ # create the search indexer
+ from sphinx.search import IndexBuilder, languages
+ lang = self.config.html_search_language or self.config.language
+ if not lang or lang not in languages:
+ lang = 'en'
+ self.indexer = IndexBuilder(self.env, lang,
+ self.config.html_search_options)
self.load_indexer(docnames)
+
self.docwriter = HTMLWriter(self)
self.docsettings = OptionParser(
defaults=self.env.settings,
@@ -379,7 +387,8 @@ class StandaloneHTMLBuilder(Builder):
meta = self.env.metadata.get(docname)
# local TOC and global TOC tree
- toc = self.render_partial(self.env.get_toc_for(docname))['fragment']
+ self_toc = self.env.get_toc_for(docname, self)
+ toc = self.render_partial(self_toc)['fragment']
return dict(
parents = parents,
@@ -536,13 +545,18 @@ class StandaloneHTMLBuilder(Builder):
if jsfile:
copyfile(jsfile, path.join(self.outdir, '_static',
'translations.js'))
+
+ # add context items for search function used in searchtools.js_t
+ ctx = self.globalcontext.copy()
+ ctx.update(self.indexer.context_for_searchtool())
+
# then, copy over theme-supplied static files
if self.theme:
themeentries = [path.join(themepath, 'static')
for themepath in self.theme.get_dirchain()[::-1]]
for entry in themeentries:
copy_static_entry(entry, path.join(self.outdir, '_static'),
- self, self.globalcontext)
+ self, ctx)
# then, copy over all user-supplied static files
staticentries = [path.join(self.confdir, spath)
for spath in self.config.html_static_path]
@@ -555,7 +569,7 @@ class StandaloneHTMLBuilder(Builder):
self.warn('html_static_path entry %r does not exist' % entry)
continue
copy_static_entry(entry, path.join(self.outdir, '_static'), self,
- self.globalcontext, exclude_matchers=matchers)
+ ctx, exclude_matchers=matchers)
# copy logo and favicon files if not already in static path
if self.config.html_logo:
logobase = path.basename(self.config.html_logo)
@@ -589,8 +603,7 @@ class StandaloneHTMLBuilder(Builder):
self.theme.cleanup()
def post_process_images(self, doctree):
- """
- Pick the best candidate for an image and link down-scaled images to
+ """Pick the best candidate for an image and link down-scaled images to
their high res version.
"""
Builder.post_process_images(self, doctree)
@@ -614,7 +627,11 @@ class StandaloneHTMLBuilder(Builder):
def load_indexer(self, docnames):
keep = set(self.env.all_docs) - set(docnames)
try:
- f = open(path.join(self.outdir, self.searchindex_filename), 'rb')
+ searchindexfn = path.join(self.outdir, self.searchindex_filename)
+ if self.indexer_dumps_unicode:
+ f = codecs.open(searchindexfn, 'r', encoding='utf-8')
+ else:
+ f = open(searchindexfn, 'rb')
try:
self.indexer.load(f, self.indexer_format)
finally:
@@ -737,10 +754,12 @@ class StandaloneHTMLBuilder(Builder):
self.info(bold('dumping object inventory... '), nonl=True)
f = open(path.join(self.outdir, INVENTORY_FILENAME), 'wb')
try:
- f.write('# Sphinx inventory version 2\n')
- f.write('# Project: %s\n' % self.config.project.encode('utf-8'))
- f.write('# Version: %s\n' % self.config.version.encode('utf-8'))
- f.write('# The remainder of this file is compressed using zlib.\n')
+ f.write((u'# Sphinx inventory version 2\n'
+ u'# Project: %s\n'
+ u'# Version: %s\n'
+ u'# The remainder of this file is compressed using zlib.\n'
+ % (self.config.project, self.config.version)
+ ).encode('utf-8'))
compressor = zlib.compressobj(9)
for domainname, domain in self.env.domains.iteritems():
for name, dispname, type, docname, anchor, prio in \
@@ -752,11 +771,9 @@ class StandaloneHTMLBuilder(Builder):
if dispname == name:
dispname = u'-'
f.write(compressor.compress(
- '%s %s:%s %s %s %s\n' % (name.encode('utf-8'),
- domainname.encode('utf-8'),
- type.encode('utf-8'), prio,
- uri.encode('utf-8'),
- dispname.encode('utf-8'))))
+ (u'%s %s:%s %s %s %s\n' % (name, domainname, type,
+ prio, uri, dispname)
+ ).encode('utf-8')))
f.write(compressor.flush())
finally:
f.close()
@@ -768,7 +785,10 @@ class StandaloneHTMLBuilder(Builder):
searchindexfn = path.join(self.outdir, self.searchindex_filename)
# first write to a temporary file, so that if dumping fails,
# the existing index won't be overwritten
- f = open(searchindexfn + '.tmp', 'wb')
+ if self.indexer_dumps_unicode:
+ f = codecs.open(searchindexfn + '.tmp', 'w', encoding='utf-8')
+ else:
+ f = open(searchindexfn + '.tmp', 'wb')
try:
self.indexer.dump(f, self.indexer_format)
finally:
@@ -925,6 +945,9 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder):
#: implements a `dump`, `load`, `dumps` and `loads` functions
#: (pickle, simplejson etc.)
implementation = None
+ implementation_dumps_unicode = False
+ #: additional arguments for dump()
+ additional_dump_args = ()
#: the filename for the global context file
globalcontext_filename = None
@@ -947,6 +970,16 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder):
return docname[:-5] # up to sep
return docname + SEP
+ def dump_context(self, context, filename):
+ if self.implementation_dumps_unicode:
+ f = codecs.open(filename, 'w', encoding='utf-8')
+ else:
+ f = open(filename, 'wb')
+ try:
+ self.implementation.dump(context, f, *self.additional_dump_args)
+ finally:
+ f.close()
+
def handle_page(self, pagename, ctx, templatename='page.html',
outfilename=None, event_arg=None):
ctx['current_page_name'] = pagename
@@ -960,11 +993,7 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder):
ctx, event_arg)
ensuredir(path.dirname(outfilename))
- f = open(outfilename, 'wb')
- try:
- self.implementation.dump(ctx, f, 2)
- finally:
- f.close()
+ self.dump_context(ctx, outfilename)
# if there is a source file, copy the source file for the
# "show source" link
@@ -977,11 +1006,7 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder):
def handle_finish(self):
# dump the global context
outfilename = path.join(self.outdir, self.globalcontext_filename)
- f = open(outfilename, 'wb')
- try:
- self.implementation.dump(self.globalcontext, f, 2)
- finally:
- f.close()
+ self.dump_context(self.globalcontext, outfilename)
# super here to dump the search index
StandaloneHTMLBuilder.handle_finish(self)
@@ -1001,7 +1026,10 @@ class PickleHTMLBuilder(SerializingHTMLBuilder):
A Builder that dumps the generated HTML into pickle files.
"""
implementation = pickle
+ implementation_dumps_unicode = False
+ additional_dump_args = (pickle.HIGHEST_PROTOCOL,)
indexer_format = pickle
+ indexer_dumps_unicode = False
name = 'pickle'
out_suffix = '.fpickle'
globalcontext_filename = 'globalcontext.pickle'
@@ -1016,7 +1044,9 @@ class JSONHTMLBuilder(SerializingHTMLBuilder):
A builder that dumps the generated HTML into JSON files.
"""
implementation = jsonimpl
+ implementation_dumps_unicode = True
indexer_format = jsonimpl
+ indexer_dumps_unicode = True
name = 'json'
out_suffix = '.fjson'
globalcontext_filename = 'globalcontext.json'
diff --git a/sphinx/builders/htmlhelp.py b/sphinx/builders/htmlhelp.py
index 9d367183..143f6df9 100644
--- a/sphinx/builders/htmlhelp.py
+++ b/sphinx/builders/htmlhelp.py
@@ -132,6 +132,7 @@ chm_locales = {
'fr': (0x40c, 'iso8859_1'),
'it': (0x410, 'iso8859_1'),
'ja': (0x411, 'cp932'),
+ 'lv': (0x426, 'cp1257'),
'nl': (0x413, 'iso8859_1'),
'pl': (0x415, 'iso8859_2'),
'pt_BR': (0x416, 'iso8859_1'),
diff --git a/sphinx/builders/linkcheck.py b/sphinx/builders/linkcheck.py
index ee114398..ad15b55d 100644
--- a/sphinx/builders/linkcheck.py
+++ b/sphinx/builders/linkcheck.py
@@ -9,9 +9,13 @@
:license: BSD, see LICENSE for details.
"""
+import re
+import sys
+import Queue
import socket
+import threading
from os import path
-from urllib2 import build_opener, HTTPError
+from urllib2 import build_opener, Request
from docutils import nodes
@@ -23,6 +27,12 @@ opener = build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
+class HeadRequest(Request):
+ """Subclass of urllib2.Request that sends a HEAD request."""
+ def get_method(self):
+ return 'HEAD'
+
+
class CheckExternalLinksBuilder(Builder):
"""
Checks for broken external links.
@@ -30,6 +40,7 @@ class CheckExternalLinksBuilder(Builder):
name = 'linkcheck'
def init(self):
+ self.to_ignore = map(re.compile, self.app.config.linkcheck_ignore)
self.good = set()
self.broken = {}
self.redirected = {}
@@ -38,6 +49,83 @@ class CheckExternalLinksBuilder(Builder):
# create output file
open(path.join(self.outdir, 'output.txt'), 'w').close()
+ # create queues and worker threads
+ self.wqueue = Queue.Queue()
+ self.rqueue = Queue.Queue()
+ self.workers = []
+ for i in range(self.app.config.linkcheck_workers):
+ thread = threading.Thread(target=self.check_thread)
+ thread.setDaemon(True)
+ thread.start()
+ self.workers.append(thread)
+
+ def check_thread(self):
+ kwargs = {}
+ if sys.version_info > (2, 5) and self.app.config.linkcheck_timeout:
+ kwargs['timeout'] = self.app.config.linkcheck_timeout
+
+ def check():
+ # check for various conditions without bothering the network
+ if len(uri) == 0 or uri[0:7] == 'mailto:' or uri[0:4] == 'ftp:':
+ return 'unchecked', ''
+ elif not (uri[0:5] == 'http:' or uri[0:6] == 'https:'):
+ return 'local', ''
+ elif uri in self.good:
+ return 'working', ''
+ elif uri in self.broken:
+ return 'broken', self.broken[uri]
+ elif uri in self.redirected:
+ return 'redirected', self.redirected[uri]
+ for rex in self.to_ignore:
+ if rex.match(uri):
+ return 'ignored', ''
+
+ # need to actually check the URI
+ try:
+ f = opener.open(HeadRequest(uri), **kwargs)
+ f.close()
+ except Exception, err:
+ self.broken[uri] = str(err)
+ return 'broken', str(err)
+ if f.url.rstrip('/') == uri.rstrip('/'):
+ self.good.add(uri)
+ return 'working', 'new'
+ else:
+ self.redirected[uri] = f.url
+ return 'redirected', f.url
+
+ while True:
+ uri, docname, lineno = self.wqueue.get()
+ if uri is None:
+ break
+ status, info = check()
+ self.rqueue.put((uri, docname, lineno, status, info))
+
+ def process_result(self, result):
+ uri, docname, lineno, status, info = result
+ if status == 'unchecked':
+ return
+ if status == 'working' and info != 'new':
+ return
+ if lineno:
+ self.info('(line %3d) ' % lineno, nonl=1)
+ if status == 'ignored':
+ self.info(uri + ' - ' + darkgray('ignored'))
+ elif status == 'local':
+ self.info(uri + ' - ' + darkgray('local'))
+ self.write_entry('local', docname, lineno, uri)
+ elif status == 'working':
+ self.info(uri + ' - ' + darkgreen('working'))
+ elif status == 'broken':
+ self.info(uri + ' - ' + red('broken: ') + info)
+ self.write_entry('broken', docname, lineno, uri + ': ' + info)
+ if self.app.quiet:
+ self.warn('broken link: %s' % uri,
+ '%s:%s' % (self.env.doc2path(docname), lineno))
+ elif status == 'redirected':
+ self.info(uri + ' - ' + purple('redirected') + ' to ' + info)
+ self.write_entry('redirected', docname, lineno, uri + ' to ' + info)
+
def get_target_uri(self, docname, typ=None):
return ''
@@ -49,61 +137,25 @@ class CheckExternalLinksBuilder(Builder):
def write_doc(self, docname, doctree):
self.info()
+ n = 0
for node in doctree.traverse(nodes.reference):
- try:
- self.check(node, docname)
- except KeyError:
+ if 'refuri' not in node:
continue
-
- def check(self, node, docname):
- uri = node['refuri']
-
- if '#' in uri:
- uri = uri.split('#')[0]
-
- if uri in self.good:
- return
-
- lineno = None
- while lineno is None:
- node = node.parent
- if node is None:
- break
- lineno = node.line
-
- if len(uri) == 0 or uri[0:7] == 'mailto:' or uri[0:4] == 'ftp:':
- return
-
- if lineno:
- self.info('(line %3d) ' % lineno, nonl=1)
- if uri[0:5] == 'http:' or uri[0:6] == 'https:':
- self.info(uri, nonl=1)
-
- if uri in self.broken:
- (r, s) = self.broken[uri]
- elif uri in self.redirected:
- (r, s) = self.redirected[uri]
- else:
- (r, s) = self.resolve(uri)
-
- if r == 0:
- self.info(' - ' + darkgreen('working'))
- self.good.add(uri)
- elif r == 2:
- self.info(' - ' + red('broken: ') + s)
- self.write_entry('broken', docname, lineno, uri + ': ' + s)
- self.broken[uri] = (r, s)
- if self.app.quiet:
- self.warn('broken link: %s' % uri,
- '%s:%s' % (self.env.doc2path(docname), lineno))
- else:
- self.info(' - ' + purple('redirected') + ' to ' + s)
- self.write_entry('redirected', docname,
- lineno, uri + ' to ' + s)
- self.redirected[uri] = (r, s)
- else:
- self.info(uri + ' - ' + darkgray('local'))
- self.write_entry('local', docname, lineno, uri)
+ uri = node['refuri']
+ if '#' in uri:
+ uri = uri.split('#')[0]
+ lineno = None
+ while lineno is None:
+ node = node.parent
+ if node is None:
+ break
+ lineno = node.line
+ self.wqueue.put((uri, docname, lineno), False)
+ n += 1
+ done = 0
+ while done < n:
+ self.process_result(self.rqueue.get())
+ done += 1
if self.broken:
self.app.statuscode = 1
@@ -114,21 +166,6 @@ class CheckExternalLinksBuilder(Builder):
line, what, uri))
output.close()
- def resolve(self, uri):
- try:
- f = opener.open(uri)
- f.close()
- except HTTPError, err:
- #if err.code == 403 and uri.startswith('http://en.wikipedia.org/'):
- # # Wikipedia blocks requests from urllib User-Agent
- # return (0, 0)
- return (2, str(err))
- except Exception, err:
- return (2, str(err))
- if f.url.rstrip('/') == uri.rstrip('/'):
- return (0, 0)
- else:
- return (1, f.url)
-
def finish(self):
- return
+ for worker in self.workers:
+ self.wqueue.put((None, None, None), False)
diff --git a/sphinx/builders/qthelp.py b/sphinx/builders/qthelp.py
index bf536dba..5598aad2 100644
--- a/sphinx/builders/qthelp.py
+++ b/sphinx/builders/qthelp.py
@@ -130,8 +130,16 @@ class QtHelpBuilder(StandaloneHTMLBuilder):
for indexname, indexcls, content, collapse in self.domain_indices:
item = section_template % {'title': indexcls.localname,
'ref': '%s.html' % indexname}
- sections.append(' '*4*4 + item)
- sections = '\n'.join(sections)
+ sections.append((' ' * 4 * 4 + item).encode('utf-8'))
+ # sections may be unicode strings or byte strings, we have to make sure
+ # they are all byte strings before joining them
+ new_sections = []
+ for section in sections:
+ if isinstance(section, unicode):
+ new_sections.append(section.encode('utf-8'))
+ else:
+ new_sections.append(section)
+ sections = u'\n'.encode('utf-8').join(new_sections)
# keywords
keywords = []
@@ -231,7 +239,7 @@ class QtHelpBuilder(StandaloneHTMLBuilder):
link = node['refuri']
title = escape(node.astext()).replace('"','&quot;')
item = section_template % {'title': title, 'ref': link}
- item = ' '*4*indentlevel + item.encode('ascii', 'xmlcharrefreplace')
+ item = u' ' * 4 * indentlevel + item
parts.append(item.encode('ascii', 'xmlcharrefreplace'))
elif isinstance(node, nodes.bullet_list):
for subnode in node:
diff --git a/sphinx/builders/texinfo.py b/sphinx/builders/texinfo.py
new file mode 100644
index 00000000..535c527e
--- /dev/null
+++ b/sphinx/builders/texinfo.py
@@ -0,0 +1,227 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.builders.texinfo
+ ~~~~~~~~~~~~~~~~~~~~~~~
+
+ Texinfo builder.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from os import path
+
+from docutils import nodes
+from docutils.io import FileOutput
+from docutils.utils import new_document
+from docutils.frontend import OptionParser
+
+from sphinx import addnodes
+from sphinx.locale import _
+from sphinx.builders import Builder
+from sphinx.environment import NoUri
+from sphinx.util.nodes import inline_all_toctrees
+from sphinx.util.osutil import SEP, copyfile
+from sphinx.util.console import bold, darkgreen
+from sphinx.writers.texinfo import TexinfoWriter
+
+
+TEXINFO_MAKEFILE = '''\
+# Makefile for Sphinx Texinfo output
+
+infodir ?= /usr/share/info
+
+MAKEINFO = makeinfo --no-split
+MAKEINFO_html = makeinfo --no-split --html
+MAKEINFO_plaintext = makeinfo --no-split --plaintext
+TEXI2PDF = texi2pdf --batch --expand
+INSTALL_INFO = install-info
+
+ALLDOCS = $(basename $(wildcard *.texi))
+
+all: info
+info: $(addsuffix .info,$(ALLDOCS))
+plaintext: $(addsuffix .txt,$(ALLDOCS))
+html: $(addsuffix .html,$(ALLDOCS))
+pdf: $(addsuffix .pdf,$(ALLDOCS))
+
+install-info: info
+\tfor f in *.info; do \\
+\t cp -t $(infodir) "$$f" && \\
+\t $(INSTALL_INFO) --info-dir=$(infodir) "$$f" ; \\
+\tdone
+
+uninstall-info: info
+\tfor f in *.info; do \\
+\t rm -f "$(infodir)/$$f" ; \\
+\t $(INSTALL_INFO) --delete --info-dir=$(infodir) "$$f" ; \\
+\tdone
+
+%.info: %.texi
+\t$(MAKEINFO) -o '$@' '$<'
+
+%.txt: %.texi
+\t$(MAKEINFO_plaintext) -o '$@' '$<'
+
+%.html: %.texi
+\t$(MAKEINFO_html) -o '$@' '$<'
+
+%.pdf: %.texi
+\t-$(TEXI2PDF) '$<'
+\t-$(TEXI2PDF) '$<'
+\t-$(TEXI2PDF) '$<'
+
+clean:
+\t-rm -f *.info *.pdf *.txt *.html
+\t-rm -f *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ky *.pg
+\t-rm -f *.vr *.tp *.fn *.fns *.def *.defs *.cp *.cps *.ge *.ges *.mo
+
+.PHONY: all info plaintext html pdf install-info uninstall-info clean
+'''
+
+
+class TexinfoBuilder(Builder):
+ """
+ Builds Texinfo output to create Info documentation.
+ """
+ name = 'texinfo'
+ format = 'texinfo'
+ supported_image_types = ['image/png', 'image/jpeg',
+ 'image/gif',]
+
+ def init(self):
+ self.docnames = []
+ self.document_data = []
+
+ def get_outdated_docs(self):
+ return 'all documents' # for now
+
+ def get_target_uri(self, docname, typ=None):
+ if docname not in self.docnames:
+ raise NoUri
+ else:
+ return '%' + docname
+
+ def get_relative_uri(self, from_, to, typ=None):
+ # ignore source path
+ return self.get_target_uri(to, typ)
+
+ def init_document_data(self):
+ preliminary_document_data = map(list, self.config.texinfo_documents)
+ if not preliminary_document_data:
+ self.warn('no "texinfo_documents" config value found; no documents '
+ 'will be written')
+ return
+ # assign subdirs to titles
+ self.titles = []
+ for entry in preliminary_document_data:
+ docname = entry[0]
+ if docname not in self.env.all_docs:
+ self.warn('"texinfo_documents" config value references unknown '
+ 'document %s' % docname)
+ continue
+ self.document_data.append(entry)
+ if docname.endswith(SEP+'index'):
+ docname = docname[:-5]
+ self.titles.append((docname, entry[2]))
+
+ def write(self, *ignored):
+ self.init_document_data()
+ for entry in self.document_data:
+ docname, targetname, title, author = entry[:4]
+ targetname += '.texi'
+ direntry = description = category = ''
+ if len(entry) > 6:
+ direntry, description, category = entry[4:7]
+ toctree_only = False
+ if len(entry) > 7:
+ toctree_only = entry[7]
+ destination = FileOutput(
+ destination_path=path.join(self.outdir, targetname),
+ encoding='utf-8')
+ self.info("processing " + targetname + "... ", nonl=1)
+ doctree = self.assemble_doctree(docname, toctree_only,
+ appendices=(self.config.texinfo_appendices or []))
+ self.info("writing... ", nonl=1)
+ self.post_process_images(doctree)
+ docwriter = TexinfoWriter(self)
+ settings = OptionParser(
+ defaults=self.env.settings,
+ components=(docwriter,)).get_default_values()
+ settings.author = author
+ settings.title = title
+ settings.texinfo_filename = targetname[:-5] + '.info'
+ settings.texinfo_elements = self.config.texinfo_elements
+ settings.texinfo_dir_entry = direntry or ''
+ settings.texinfo_dir_category = category or ''
+ settings.texinfo_dir_description = description or ''
+ settings.docname = docname
+ doctree.settings = settings
+ docwriter.write(doctree, destination)
+ self.info("done")
+
+ def assemble_doctree(self, indexfile, toctree_only, appendices):
+ self.docnames = set([indexfile] + appendices)
+ self.info(darkgreen(indexfile) + " ", nonl=1)
+ tree = self.env.get_doctree(indexfile)
+ tree['docname'] = indexfile
+ if toctree_only:
+ # extract toctree nodes from the tree and put them in a
+ # fresh document
+ new_tree = new_document('<texinfo output>')
+ new_sect = nodes.section()
+ new_sect += nodes.title(u'<Set title in conf.py>',
+ u'<Set title in conf.py>')
+ new_tree += new_sect
+ for node in tree.traverse(addnodes.toctree):
+ new_sect += node
+ tree = new_tree
+ largetree = inline_all_toctrees(self, self.docnames, indexfile, tree,
+ darkgreen)
+ largetree['docname'] = indexfile
+ for docname in appendices:
+ appendix = self.env.get_doctree(docname)
+ appendix['docname'] = docname
+ largetree.append(appendix)
+ self.info()
+ self.info("resolving references...")
+ self.env.resolve_references(largetree, indexfile, self)
+ # TODO: add support for external :ref:s
+ for pendingnode in largetree.traverse(addnodes.pending_xref):
+ docname = pendingnode['refdocname']
+ sectname = pendingnode['refsectname']
+ newnodes = [nodes.emphasis(sectname, sectname)]
+ for subdir, title in self.titles:
+ if docname.startswith(subdir):
+ newnodes.append(nodes.Text(_(' (in '), _(' (in ')))
+ newnodes.append(nodes.emphasis(title, title))
+ newnodes.append(nodes.Text(')', ')'))
+ break
+ else:
+ pass
+ pendingnode.replace_self(newnodes)
+ return largetree
+
+ def finish(self):
+ # copy image files
+ if self.images:
+ self.info(bold('copying images...'), nonl=1)
+ for src, dest in self.images.iteritems():
+ self.info(' '+src, nonl=1)
+ copyfile(path.join(self.srcdir, src),
+ path.join(self.outdir, dest))
+ self.info()
+
+ self.info(bold('copying Texinfo support files... '), nonl=True)
+ # copy Makefile
+ fn = path.join(self.outdir, 'Makefile')
+ self.info(fn, nonl=1)
+ try:
+ mkfile = open(fn, 'w')
+ try:
+ mkfile.write(TEXINFO_MAKEFILE)
+ finally:
+ mkfile.close()
+ except (IOError, OSError), err:
+ self.warn("error writing file %s: %s" % (fn, err))
+ self.info(' done')
diff --git a/sphinx/builders/websupport.py b/sphinx/builders/websupport.py
new file mode 100644
index 00000000..b7757309
--- /dev/null
+++ b/sphinx/builders/websupport.py
@@ -0,0 +1,155 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.builders.websupport
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Builder for the web support package.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from os import path
+import posixpath
+import shutil
+
+from docutils.io import StringOutput
+
+from sphinx.jinja2glue import BuiltinTemplateLoader
+from sphinx.util.osutil import os_path, relative_uri, ensuredir, copyfile
+from sphinx.builders.html import PickleHTMLBuilder
+from sphinx.writers.websupport import WebSupportTranslator
+
+
+class WebSupportBuilder(PickleHTMLBuilder):
+ """
+ Builds documents for the web support package.
+ """
+ name = 'websupport'
+ versioning_method = 'commentable'
+
+ def init(self):
+ PickleHTMLBuilder.init(self)
+ # templates are needed for this builder, but the serializing
+ # builder does not initialize them
+ self.init_templates()
+ if not isinstance(self.templates, BuiltinTemplateLoader):
+ raise RuntimeError('websupport builder must be used with '
+ 'the builtin templates')
+ # add our custom JS
+ self.script_files.append('_static/websupport.js')
+
+ def set_webinfo(self, staticdir, virtual_staticdir, search, storage):
+ self.staticdir = staticdir
+ self.virtual_staticdir = virtual_staticdir
+ self.search = search
+ self.storage = storage
+
+ def init_translator_class(self):
+ self.translator_class = WebSupportTranslator
+
+ def prepare_writing(self, docnames):
+ PickleHTMLBuilder.prepare_writing(self, docnames)
+ self.globalcontext['no_search_suffix'] = True
+
+ def write_doc(self, docname, doctree):
+ destination = StringOutput(encoding='utf-8')
+ doctree.settings = self.docsettings
+
+ self.cur_docname = docname
+ self.secnumbers = self.env.toc_secnumbers.get(docname, {})
+ self.imgpath = '/' + posixpath.join(self.virtual_staticdir, '_images')
+ self.post_process_images(doctree)
+ self.dlpath = '/' + posixpath.join(self.virtual_staticdir, '_downloads')
+ self.docwriter.write(doctree, destination)
+ self.docwriter.assemble_parts()
+ body = self.docwriter.parts['fragment']
+ metatags = self.docwriter.clean_meta
+
+ ctx = self.get_doc_context(docname, body, metatags)
+ self.index_page(docname, doctree, ctx.get('title', ''))
+ self.handle_page(docname, ctx, event_arg=doctree)
+
+ def load_indexer(self, docnames):
+ self.indexer = self.search
+ self.indexer.init_indexing(changed=docnames)
+
+ def _render_page(self, pagename, addctx, templatename, event_arg=None):
+ # This is mostly copied from StandaloneHTMLBuilder. However, instead
+ # of rendering the template and saving the html, create a context
+ # dict and pickle it.
+ ctx = self.globalcontext.copy()
+ ctx['pagename'] = pagename
+
+ def pathto(otheruri, resource=False,
+ baseuri=self.get_target_uri(pagename)):
+ if resource and '://' in otheruri:
+ return otheruri
+ elif not resource:
+ otheruri = self.get_target_uri(otheruri)
+ return relative_uri(baseuri, otheruri) or '#'
+ else:
+ return '/' + posixpath.join(self.virtual_staticdir, otheruri)
+ ctx['pathto'] = pathto
+ ctx['hasdoc'] = lambda name: name in self.env.all_docs
+ ctx['encoding'] = self.config.html_output_encoding
+ ctx['toctree'] = lambda **kw: self._get_local_toctree(pagename, **kw)
+ self.add_sidebars(pagename, ctx)
+ ctx.update(addctx)
+
+ self.app.emit('html-page-context', pagename, templatename,
+ ctx, event_arg)
+
+ # create a dict that will be pickled and used by webapps
+ doc_ctx = {
+ 'body': ctx.get('body', ''),
+ 'title': ctx.get('title', ''),
+ }
+ # partially render the html template to get at interesting macros
+ template = self.templates.environment.get_template(templatename)
+ template_module = template.make_module(ctx)
+ for item in ['sidebar', 'relbar', 'script', 'css']:
+ if hasattr(template_module, item):
+ doc_ctx[item] = getattr(template_module, item)()
+
+ return ctx, doc_ctx
+
+ def handle_page(self, pagename, addctx, templatename='page.html',
+ outfilename=None, event_arg=None):
+ ctx, doc_ctx = self._render_page(pagename, addctx,
+ templatename, event_arg)
+
+ if not outfilename:
+ outfilename = path.join(self.outdir, 'pickles',
+ os_path(pagename) + self.out_suffix)
+ ensuredir(path.dirname(outfilename))
+ self.dump_context(doc_ctx, outfilename)
+
+ # if there is a source file, copy the source file for the
+ # "show source" link
+ if ctx.get('sourcename'):
+ source_name = path.join(self.staticdir,
+ '_sources', os_path(ctx['sourcename']))
+ ensuredir(path.dirname(source_name))
+ copyfile(self.env.doc2path(pagename), source_name)
+
+ def handle_finish(self):
+ # get global values for css and script files
+ _, doc_ctx = self._render_page('tmp', {}, 'page.html')
+ self.globalcontext['css'] = doc_ctx['css']
+ self.globalcontext['script'] = doc_ctx['script']
+
+ PickleHTMLBuilder.handle_finish(self)
+
+ # move static stuff over to separate directory
+ directories = ['_images', '_static']
+ for directory in directories:
+ src = path.join(self.outdir, directory)
+ dst = path.join(self.staticdir, directory)
+ if path.isdir(src):
+ if path.isdir(dst):
+ shutil.rmtree(dst)
+ shutil.move(src, dst)
+
+ def dump_search_index(self):
+ self.indexer.finish_indexing()
diff --git a/sphinx/cmdline.py b/sphinx/cmdline.py
index 5be530be..5340aa88 100644
--- a/sphinx/cmdline.py
+++ b/sphinx/cmdline.py
@@ -22,6 +22,7 @@ from sphinx.errors import SphinxError
from sphinx.application import Sphinx
from sphinx.util import Tee, format_exception_cut_frames, save_traceback
from sphinx.util.console import red, nocolor, color_terminal
+from sphinx.util.pycompat import terminal_safe
def usage(argv, msg=None):
@@ -190,8 +191,7 @@ def main(argv):
except KeyboardInterrupt:
if use_pdb:
import pdb
- print >>error, red('Interrupted while building, '
- 'starting debugger:')
+ print >>error, red('Interrupted while building, starting debugger:')
traceback.print_exc()
pdb.post_mortem(sys.exc_info()[2])
return 1
@@ -199,17 +199,17 @@ def main(argv):
if use_pdb:
import pdb
print >>error, red('Exception occurred while building, '
- 'starting debugger:')
+ 'starting debugger:')
traceback.print_exc()
pdb.post_mortem(sys.exc_info()[2])
else:
print >>error
if isinstance(err, SystemMessage):
print >>error, red('reST markup error:')
- print >>error, err.args[0].encode('ascii', 'backslashreplace')
+ print >>error, terminal_safe(err.args[0])
elif isinstance(err, SphinxError):
print >>error, red('%s:' % err.category)
- print >>error, unicode(err).encode('ascii', 'backslashreplace')
+ print >>error, terminal_safe(unicode(err))
else:
print >>error, red('Exception occurred:')
print >>error, format_exception_cut_frames().rstrip()
diff --git a/sphinx/config.py b/sphinx/config.py
index 19e29919..2250c57f 100644
--- a/sphinx/config.py
+++ b/sphinx/config.py
@@ -11,16 +11,24 @@
import os
import re
+import sys
from os import path
from sphinx.errors import ConfigError
+from sphinx.locale import l_
from sphinx.util.osutil import make_filename
+from sphinx.util.pycompat import bytes, b, convert_with_2to3
-nonascii_re = re.compile(r'[\x80-\xff]')
+nonascii_re = re.compile(b(r'[\x80-\xff]'))
+CONFIG_SYNTAX_ERROR = "There is a syntax error in your configuration file: %s"
+if sys.version_info >= (3, 0):
+ CONFIG_SYNTAX_ERROR += "\nDid you change the syntax from 2.x to 3.x?"
class Config(object):
- """Configuration file abstraction."""
+ """
+ Configuration file abstraction.
+ """
# the values are: (default, what needs to be rebuilt if changed)
@@ -64,12 +72,13 @@ class Config(object):
primary_domain = ('py', 'env'),
needs_sphinx = (None, None),
nitpicky = (False, 'env'),
+ nitpick_ignore = ([], 'env'),
# HTML options
html_theme = ('default', 'html'),
html_theme_path = ([], 'html'),
html_theme_options = ({}, 'html'),
- html_title = (lambda self: '%s v%s documentation' %
+ html_title = (lambda self: l_('%s %s documentation') %
(self.project, self.release),
'html'),
html_short_title = (lambda self: self.html_title, 'html'),
@@ -85,7 +94,7 @@ class Config(object):
html_additional_pages = ({}, 'html'),
html_use_modindex = (True, 'html'), # deprecated
html_domain_indices = (True, 'html'),
- html_add_permalinks = (True, 'html'),
+ html_add_permalinks = (u'\u00B6', 'html'),
html_use_index = (True, 'html'),
html_split_index = (False, 'html'),
html_copy_source = (True, 'html'),
@@ -99,6 +108,8 @@ class Config(object):
html_output_encoding = ('utf-8', 'html'),
html_compact_lists = (True, 'html'),
html_secnumber_suffix = ('. ', 'html'),
+ html_search_language = (None, 'html'),
+ html_search_options = ({}, 'html'),
# HTML help only options
htmlhelp_basename = (lambda self: make_filename(self.project), None),
@@ -120,6 +131,7 @@ class Config(object):
epub_identifier = ('unknown', 'html'),
epub_scheme = ('unknown', 'html'),
epub_uid = ('unknown', 'env'),
+ epub_cover = ((), 'env'),
epub_pre_files = ([], 'env'),
epub_post_files = ([], 'env'),
epub_exclude_files = ([], 'env'),
@@ -133,7 +145,7 @@ class Config(object):
latex_use_parts = (False, None),
latex_use_modindex = (True, None), # deprecated
latex_domain_indices = (True, None),
- latex_show_urls = (False, None),
+ latex_show_urls = ('no', None),
latex_show_pagerefs = (False, None),
# paper_size and font_size are still separate values
# so that you can give them easily on the command line
@@ -146,11 +158,24 @@ class Config(object):
latex_preamble = ('', None),
# text options
- text_sectionchars = ('*=-~"+`', 'text'),
- text_windows_newlines = (False, 'text'),
+ text_sectionchars = ('*=-~"+`', 'env'),
+ text_newlines = ('unix', 'env'),
# manpage options
man_pages = ([], None),
+ man_show_urls = (False, None),
+
+ # Texinfo options
+ texinfo_documents = ([], None),
+ texinfo_appendices = ([], None),
+ texinfo_elements = ({}, None),
+ texinfo_domain_indices = (True, None),
+ texinfo_show_urls = ('footnote', None),
+
+ # linkcheck options
+ linkcheck_ignore = ([], None),
+ linkcheck_timeout = (None, None),
+ linkcheck_workers = (5, None),
)
def __init__(self, dirname, filename, overrides, tags):
@@ -163,12 +188,30 @@ class Config(object):
config['tags'] = tags
olddir = os.getcwd()
try:
+ # we promise to have the config dir as current dir while the
+ # config file is executed
+ os.chdir(dirname)
+ # get config source
+ f = open(config_file, 'rb')
+ try:
+ source = f.read()
+ finally:
+ f.close()
try:
- os.chdir(dirname)
- execfile(config['__file__'], config)
+ # compile to a code object, handle syntax errors
+ try:
+ code = compile(source, config_file, 'exec')
+ except SyntaxError:
+ if convert_with_2to3:
+ # maybe the file uses 2.x syntax; try to refactor to
+ # 3.x syntax using 2to3
+ source = convert_with_2to3(config_file)
+ code = compile(source, config_file, 'exec')
+ else:
+ raise
+ exec code in config
except SyntaxError, err:
- raise ConfigError('There is a syntax error in your '
- 'configuration file: ' + str(err))
+ raise ConfigError(CONFIG_SYNTAX_ERROR % err)
finally:
os.chdir(olddir)
@@ -182,10 +225,11 @@ class Config(object):
# check all string values for non-ASCII characters in bytestrings,
# since that can result in UnicodeErrors all over the place
for name, value in self._raw_config.iteritems():
- if isinstance(value, str) and nonascii_re.search(value):
+ if isinstance(value, bytes) and nonascii_re.search(value):
warn('the config value %r is set to a string with non-ASCII '
'characters; this can lead to Unicode errors occurring. '
- 'Please use Unicode strings, e.g. u"Content".' % name)
+ 'Please use Unicode strings, e.g. %r.' % (name, u'Content')
+ )
def init_values(self):
config = self._raw_config
diff --git a/sphinx/directives/code.py b/sphinx/directives/code.py
index 6073a7de..f41ca3a6 100644
--- a/sphinx/directives/code.py
+++ b/sphinx/directives/code.py
@@ -7,10 +7,8 @@
:license: BSD, see LICENSE for details.
"""
-import os
import sys
import codecs
-from os import path
from docutils import nodes
from docutils.parsers.rst import Directive, directives
@@ -57,13 +55,28 @@ class CodeBlock(Directive):
final_argument_whitespace = False
option_spec = {
'linenos': directives.flag,
+ 'emphasize-lines': directives.unchanged_required,
}
def run(self):
code = u'\n'.join(self.content)
+
+ linespec = self.options.get('emphasize-lines')
+ if linespec:
+ try:
+ nlines = len(self.content)
+ hl_lines = [x+1 for x in parselinenos(linespec, nlines)]
+ except ValueError, err:
+ document = self.state.document
+ return [document.reporter.warning(str(err), line=self.lineno)]
+ else:
+ hl_lines = None
+
literal = nodes.literal_block(code, code)
literal['language'] = self.arguments[0]
literal['linenos'] = 'linenos' in self.options
+ if hl_lines is not None:
+ literal['highlight_args'] = {'hl_lines': hl_lines}
literal.line = self.lineno
return [literal]
@@ -90,27 +103,16 @@ class LiteralInclude(Directive):
'end-before': directives.unchanged_required,
'prepend': directives.unchanged_required,
'append': directives.unchanged_required,
+ 'emphasize-lines': directives.unchanged_required,
}
def run(self):
document = self.state.document
- filename = self.arguments[0]
if not document.settings.file_insertion_enabled:
return [document.reporter.warning('File insertion disabled',
line=self.lineno)]
env = document.settings.env
- if filename.startswith('/') or filename.startswith(os.sep):
- rel_fn = filename[1:]
- else:
- docdir = path.dirname(env.doc2path(env.docname, base=None))
- rel_fn = path.join(docdir, filename)
- try:
- fn = path.join(env.srcdir, rel_fn)
- except UnicodeDecodeError:
- # the source directory is a bytestring with non-ASCII characters;
- # let's try to encode the rel_fn in the file system encoding
- rel_fn = rel_fn.encode(sys.getfilesystemencoding())
- fn = path.join(env.srcdir, rel_fn)
+ rel_filename, filename = env.relfn2path(self.arguments[0])
if 'pyobject' in self.options and 'lines' in self.options:
return [document.reporter.warning(
@@ -120,7 +122,7 @@ class LiteralInclude(Directive):
encoding = self.options.get('encoding', env.config.source_encoding)
codec_info = codecs.lookup(encoding)
try:
- f = codecs.StreamReaderWriter(open(fn, 'U'),
+ f = codecs.StreamReaderWriter(open(filename, 'rb'),
codec_info[2], codec_info[3], 'strict')
lines = f.readlines()
f.close()
@@ -137,7 +139,7 @@ class LiteralInclude(Directive):
objectname = self.options.get('pyobject')
if objectname is not None:
from sphinx.pycode import ModuleAnalyzer
- analyzer = ModuleAnalyzer.for_file(fn, '')
+ analyzer = ModuleAnalyzer.for_file(filename, '')
tags = analyzer.find_tags()
if objectname not in tags:
return [document.reporter.warning(
@@ -160,6 +162,15 @@ class LiteralInclude(Directive):
'Line spec %r: no lines pulled from include file %r' %
(linespec, filename), line=self.lineno)]
+ linespec = self.options.get('emphasize-lines')
+ if linespec:
+ try:
+ hl_lines = [x+1 for x in parselinenos(linespec, len(lines))]
+ except ValueError, err:
+ return [document.reporter.warning(str(err), line=self.lineno)]
+ else:
+ hl_lines = None
+
startafter = self.options.get('start-after')
endbefore = self.options.get('end-before')
prepend = self.options.get('prepend')
@@ -185,14 +196,16 @@ class LiteralInclude(Directive):
text = ''.join(lines)
if self.options.get('tab-width'):
text = text.expandtabs(self.options['tab-width'])
- retnode = nodes.literal_block(text, text, source=fn)
+ retnode = nodes.literal_block(text, text, source=filename)
retnode.line = 1
retnode.attributes['line_number'] = self.lineno
if self.options.get('language', ''):
retnode['language'] = self.options['language']
if 'linenos' in self.options:
retnode['linenos'] = True
- document.settings.env.note_dependency(rel_fn)
+ if hl_lines is not None:
+ retnode['highlight_args'] = {'hl_lines': hl_lines}
+ env.note_dependency(rel_filename)
return [retnode]
diff --git a/sphinx/directives/other.py b/sphinx/directives/other.py
index f59a29e1..7647e738 100644
--- a/sphinx/directives/other.py
+++ b/sphinx/directives/other.py
@@ -11,21 +11,28 @@ import os
from docutils import nodes
from docutils.parsers.rst import Directive, directives
+from docutils.parsers.rst.directives.misc import Class
+from docutils.parsers.rst.directives.misc import Include as BaseInclude
from sphinx import addnodes
-from sphinx.locale import pairindextypes, _
+from sphinx.locale import _
from sphinx.util import url_re, docname_join
-from sphinx.util.nodes import explicit_title_re
+from sphinx.util.nodes import explicit_title_re, process_index_entry
from sphinx.util.compat import make_admonition
from sphinx.util.matching import patfilter
+def int_or_nothing(argument):
+ if not argument:
+ return 999
+ return int(argument)
+
+
class TocTree(Directive):
"""
Directive to notify Sphinx about the hierarchical structure of the docs,
and to include a table-of-contents like tree in the current document.
"""
-
has_content = True
required_arguments = 0
optional_arguments = 0
@@ -34,7 +41,7 @@ class TocTree(Directive):
'maxdepth': int,
'glob': directives.flag,
'hidden': directives.flag,
- 'numbered': directives.flag,
+ 'numbered': int_or_nothing,
'titlesonly': directives.flag,
}
@@ -99,7 +106,7 @@ class TocTree(Directive):
subnode['maxdepth'] = self.options.get('maxdepth', -1)
subnode['glob'] = glob
subnode['hidden'] = 'hidden' in self.options
- subnode['numbered'] = 'numbered' in self.options
+ subnode['numbered'] = self.options.get('numbered', 0)
subnode['titlesonly'] = 'titlesonly' in self.options
wrappernode = nodes.compound(classes=['toctree-wrapper'])
wrappernode.append(subnode)
@@ -112,7 +119,6 @@ class Author(Directive):
Directive to give the name of the author of the current document
or section. Shown in the output only if the show_authors option is on.
"""
-
has_content = False
required_arguments = 1
optional_arguments = 0
@@ -145,17 +151,12 @@ class Index(Directive):
"""
Directive to add entries to the index.
"""
-
has_content = False
required_arguments = 1
optional_arguments = 0
final_argument_whitespace = True
option_spec = {}
- indextypes = [
- 'single', 'pair', 'double', 'triple',
- ]
-
def run(self):
arguments = self.arguments[0].split('\n')
env = self.state.document.settings.env
@@ -166,28 +167,7 @@ class Index(Directive):
indexnode['entries'] = ne = []
indexnode['inline'] = False
for entry in arguments:
- entry = entry.strip()
- for type in pairindextypes:
- if entry.startswith(type+':'):
- value = entry[len(type)+1:].strip()
- value = pairindextypes[type] + '; ' + value
- ne.append(('pair', value, targetid, value))
- break
- else:
- for type in self.indextypes:
- if entry.startswith(type+':'):
- value = entry[len(type)+1:].strip()
- if type == 'double':
- type = 'pair'
- ne.append((type, value, targetid, value))
- break
- # shorthand notation for single entries
- else:
- for value in entry.split(','):
- value = value.strip()
- if not value:
- continue
- ne.append(('single', value, targetid, value))
+ ne.extend(process_index_entry(entry, targetid))
return [indexnode, targetnode]
@@ -195,7 +175,6 @@ class VersionChange(Directive):
"""
Directive to describe a change/addition/deprecation in a specific version.
"""
-
has_content = True
required_arguments = 1
optional_arguments = 1
@@ -225,7 +204,6 @@ class SeeAlso(Directive):
"""
An admonition mentioning things to look at as reference.
"""
-
has_content = True
required_arguments = 0
optional_arguments = 1
@@ -251,7 +229,6 @@ class TabularColumns(Directive):
"""
Directive to give an explicit tabulary column definition to LaTeX.
"""
-
has_content = False
required_arguments = 1
optional_arguments = 0
@@ -269,7 +246,6 @@ class Centered(Directive):
"""
Directive to create a centered line of bold text.
"""
-
has_content = False
required_arguments = 1
optional_arguments = 0
@@ -286,12 +262,10 @@ class Centered(Directive):
return [subnode] + messages
-
class Acks(Directive):
"""
Directive for a list of names.
"""
-
has_content = True
required_arguments = 0
optional_arguments = 0
@@ -313,7 +287,6 @@ class HList(Directive):
"""
Directive for a list that gets compacted horizontally.
"""
-
has_content = True
required_arguments = 0
optional_arguments = 0
@@ -350,7 +323,6 @@ class Only(Directive):
"""
Directive to only include text if the given tag(s) are enabled.
"""
-
has_content = True
required_arguments = 1
optional_arguments = 0
@@ -367,19 +339,20 @@ class Only(Directive):
return [node]
-from docutils.parsers.rst.directives.misc import Include as BaseInclude
-
class Include(BaseInclude):
"""
Like the standard "Include" directive, but interprets absolute paths
- correctly.
+ "correctly", i.e. relative to source directory.
"""
def run(self):
- if self.arguments[0].startswith('/') or \
- self.arguments[0].startswith(os.sep):
- env = self.state.document.settings.env
- self.arguments[0] = os.path.join(env.srcdir, self.arguments[0][1:])
+ env = self.state.document.settings.env
+ if self.arguments[0].startswith('<') and \
+ self.arguments[0].endswith('>'):
+ # docutils "standard" includes, do not do path processing
+ return BaseInclude.run(self)
+ rel_filename, filename = env.relfn2path(self.arguments[0])
+ self.arguments[0] = filename
return BaseInclude.run(self)
@@ -400,7 +373,6 @@ directives.register_directive('only', Only)
directives.register_directive('include', Include)
# register the standard rst class directive under a different name
-from docutils.parsers.rst.directives.misc import Class
# only for backwards compatibility now
directives.register_directive('cssclass', Class)
# new standard name when default-domain with "class" is in effect
diff --git a/sphinx/domains/__init__.py b/sphinx/domains/__init__.py
index 1d04a593..c48568eb 100644
--- a/sphinx/domains/__init__.py
+++ b/sphinx/domains/__init__.py
@@ -66,9 +66,8 @@ class Index(object):
self.domain = domain
def generate(self, docnames=None):
- """
- Return entries for the index given by *name*. If *docnames* is given,
- restrict to entries referring to these docnames.
+ """Return entries for the index given by *name*. If *docnames* is
+ given, restrict to entries referring to these docnames.
The return value is a tuple of ``(content, collapse)``, where *collapse*
is a boolean that determines if sub-entries should start collapsed (for
@@ -160,8 +159,7 @@ class Domain(object):
self.objtypes_for_role = self._role2type.get
def role(self, name):
- """
- Return a role adapter function that always gives the registered
+ """Return a role adapter function that always gives the registered
role its full name ('domain:name') as the first argument.
"""
if name in self._role_cache:
@@ -177,8 +175,7 @@ class Domain(object):
return role_adapter
def directive(self, name):
- """
- Return a directive adapter class that always gives the registered
+ """Return a directive adapter class that always gives the registered
directive its full name ('domain:name') as ``self.name``.
"""
if name in self._directive_cache:
@@ -197,21 +194,16 @@ class Domain(object):
# methods that should be overwritten
def clear_doc(self, docname):
- """
- Remove traces of a document in the domain-specific inventories.
- """
+ """Remove traces of a document in the domain-specific inventories."""
pass
def process_doc(self, env, docname, document):
- """
- Process a document after it is read by the environment.
- """
+ """Process a document after it is read by the environment."""
pass
def resolve_xref(self, env, fromdocname, builder,
typ, target, node, contnode):
- """
- Resolve the ``pending_xref`` *node* with the given *typ* and *target*.
+ """Resolve the pending_xref *node* with the given *typ* and *target*.
This method should return a new node, to replace the xref node,
containing the *contnode* which is the markup content of the
@@ -227,8 +219,7 @@ class Domain(object):
pass
def get_objects(self):
- """
- Return an iterable of "object descriptions", which are tuples with
+ """Return an iterable of "object descriptions", which are tuples with
five items:
* `name` -- fully qualified name
@@ -247,9 +238,7 @@ class Domain(object):
return []
def get_type_name(self, type, primary=False):
- """
- Return full name for given ObjType.
- """
+ """Return full name for given ObjType."""
if primary:
return type.lname
return _('%s %s') % (self.label, type.lname)
diff --git a/sphinx/domains/c.py b/sphinx/domains/c.py
index 48fbb36f..b0dd332b 100644
--- a/sphinx/domains/c.py
+++ b/sphinx/domains/c.py
@@ -168,7 +168,7 @@ class CObject(ObjectDescription):
indextext = self.get_index_text(name)
if indextext:
- self.indexnode['entries'].append(('single', indextext, name, name))
+ self.indexnode['entries'].append(('single', indextext, name, ''))
def before_content(self):
self.typename_set = False
diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py
index dac0106b..0d33f59d 100644
--- a/sphinx/domains/cpp.py
+++ b/sphinx/domains/cpp.py
@@ -21,6 +21,7 @@ from sphinx.domains import Domain, ObjType
from sphinx.directives import ObjectDescription
from sphinx.util.nodes import make_refnode
from sphinx.util.compat import Directive
+from sphinx.util.docfields import Field, GroupedField
_identifier_re = re.compile(r'(~?\b[a-zA-Z_][a-zA-Z0-9_]*)\b')
@@ -28,6 +29,8 @@ _whitespace_re = re.compile(r'\s+(?u)')
_string_re = re.compile(r"[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'"
r'|"([^"\\]*(?:\\.[^"\\]*)*)")', re.S)
_visibility_re = re.compile(r'\b(public|private|protected)\b')
+_array_def_re = re.compile(r'\[\s*(.+?)?\s*\]')
+_template_arg_re = re.compile(r'[^,>]+')
_operator_re = re.compile(r'''(?x)
\[\s*\]
| \(\s*\)
@@ -109,7 +112,7 @@ class DefinitionError(Exception):
return self.description
def __str__(self):
- return unicode(self.encode('utf-8'))
+ return unicode(self).encode('utf-8')
class DefExpr(object):
@@ -131,17 +134,21 @@ class DefExpr(object):
def __ne__(self, other):
return not self.__eq__(other)
+ __hash__ = None
+
def clone(self):
- """Close a definition expression node"""
+ """Clone a definition expression node."""
return deepcopy(self)
def get_id(self):
- """Returns the id for the node"""
+ """Return the id for the node."""
return u''
def get_name(self):
- """Returns the name. Returns either `None` or a node with
- a name you might call :meth:`split_owner` on.
+ """Return the name.
+
+ Returns either `None` or a node with a name you might call
+ :meth:`split_owner` on.
"""
return None
@@ -154,7 +161,7 @@ class DefExpr(object):
return None, self
def prefix(self, prefix):
- """Prefixes a name node (a node returned by :meth:`get_name`)."""
+ """Prefix a name node (a node returned by :meth:`get_name`)."""
raise NotImplementedError()
def __str__(self):
@@ -235,6 +242,18 @@ class TemplateDefExpr(PrimaryDefExpr):
return u'%s<%s>' % (self.typename, u', '.join(map(unicode, self.args)))
+class ConstantTemplateArgExpr(PrimaryDefExpr):
+
+ def __init__(self, arg):
+ self.arg = arg
+
+ def get_id(self):
+ return self.arg.replace(u' ', u'-')
+
+ def __unicode__(self):
+ return unicode(self.arg)
+
+
class WrappingDefExpr(DefExpr):
def __init__(self, typename):
@@ -269,6 +288,22 @@ class PtrDefExpr(WrappingDefExpr):
return u'%s*' % self.typename
+class ArrayDefExpr(WrappingDefExpr):
+
+ def __init__(self, typename, size_hint=None):
+ WrappingDefExpr.__init__(self, typename)
+ self.size_hint = size_hint
+
+ def get_id(self):
+ return self.typename.get_id() + u'A'
+
+ def __unicode__(self):
+ return u'%s[%s]' % (
+ self.typename,
+ self.size_hint is not None and unicode(self.size_hint) or u''
+ )
+
+
class RefDefExpr(WrappingDefExpr):
def get_id(self):
@@ -523,8 +558,15 @@ class DefinitionParser(object):
return CastOpDefExpr(type)
def _parse_name(self):
+ return self._parse_name_or_template_arg(False)
+
+ def _parse_name_or_template_arg(self, in_template):
if not self.match(_identifier_re):
- self.fail('expected name')
+ if not in_template:
+ self.fail('expected name')
+ if not self.match(_template_arg_re):
+ self.fail('expected name or constant template argument')
+ return ConstantTemplateArgExpr(self.matched_text.strip())
identifier = self.matched_text
# strictly speaking, operators are not regular identifiers
@@ -558,6 +600,8 @@ class DefinitionParser(object):
expr = ConstDefExpr(expr)
elif self.skip_string('*'):
expr = PtrDefExpr(expr)
+ elif self.match(_array_def_re):
+ expr = ArrayDefExpr(expr, self.last_match.group(1))
elif self.skip_string('&'):
expr = RefDefExpr(expr)
else:
@@ -591,8 +635,8 @@ class DefinitionParser(object):
rv = ModifierDefExpr(NameDefExpr(typename), modifiers)
return self._attach_crefptr(rv, is_const)
- def _parse_type_expr(self):
- typename = self._parse_name()
+ def _parse_type_expr(self, in_template=False):
+ typename = self._parse_name_or_template_arg(in_template)
self.skip_ws()
if not self.skip_string('<'):
return typename
@@ -641,7 +685,7 @@ class DefinitionParser(object):
(result and not self.skip_string('::')) or \
self.eof:
break
- result.append(self._parse_type_expr())
+ result.append(self._parse_type_expr(in_template))
if not result:
self.fail('expected type')
@@ -689,6 +733,13 @@ class DefinitionParser(object):
self.fail('expected comma between arguments')
self.skip_ws()
+ if self.skip_string('...'):
+ args.append(ArgumentDefExpr(None, '...', None))
+ if self.skip_string(')'):
+ break
+ else:
+ self.fail('expected closing parenthesis after ellipses')
+
argtype = self._parse_type()
argname = default = None
self.skip_ws()
@@ -788,6 +839,17 @@ class DefinitionParser(object):
class CPPObject(ObjectDescription):
"""Description of a C++ language object."""
+ doc_field_types = [
+ GroupedField('parameter', label=l_('Parameters'),
+ names=('param', 'parameter', 'arg', 'argument'),
+ can_collapse=True),
+ GroupedField('exceptions', label=l_('Throws'), rolename='cpp:class',
+ names=('throws', 'throw', 'exception'),
+ can_collapse=True),
+ Field('returnvalue', label=l_('Returns'), has_arg=False,
+ names=('returns', 'return')),
+ ]
+
def attach_name(self, node, name):
owner, name = name.split_owner()
varname = unicode(name)
@@ -829,7 +891,7 @@ class CPPObject(ObjectDescription):
indextext = self.get_index_text(name)
if indextext:
- self.indexnode['entries'].append(('single', indextext, theid, name))
+ self.indexnode['entries'].append(('single', indextext, theid, ''))
def before_content(self):
lastname = self.names and self.names[-1]
@@ -977,8 +1039,9 @@ class CPPFunctionObject(CPPObject):
class CPPCurrentNamespace(Directive):
- """This directive is just to tell Sphinx that we're documenting
- stuff in namespace foo.
+ """
+ This directive is just to tell Sphinx that we're documenting stuff in
+ namespace foo.
"""
has_content = False
@@ -1077,7 +1140,7 @@ class CPPDomain(Domain):
node.line)
return None
- parent = node['cpp:parent']
+ parent = node.get('cpp:parent', None)
rv = _create_refnode(expr)
if rv is not None or parent is None:
diff --git a/sphinx/domains/javascript.py b/sphinx/domains/javascript.py
index e53eb5fd..09d555ad 100644
--- a/sphinx/domains/javascript.py
+++ b/sphinx/domains/javascript.py
@@ -98,7 +98,7 @@ class JSObject(ObjectDescription):
if indextext:
self.indexnode['entries'].append(('single', indextext,
fullname.replace('$', '_S_'),
- fullname))
+ ''))
def get_index_text(self, objectname, name_obj):
name, obj = name_obj
@@ -128,11 +128,13 @@ class JSCallable(JSObject):
can_collapse=True),
Field('returnvalue', label=l_('Returns'), has_arg=False,
names=('returns', 'return')),
+ Field('returntype', label=l_('Return type'), has_arg=False,
+ names=('rtype',)),
]
class JSConstructor(JSCallable):
- """Like a callable but with a different prefix"""
+ """Like a callable but with a different prefix."""
display_prefix = 'class '
diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py
index 0220afd0..4004599c 100644
--- a/sphinx/domains/python.py
+++ b/sphinx/domains/python.py
@@ -88,6 +88,7 @@ class PyObject(ObjectDescription):
option_spec = {
'noindex': directives.flag,
'module': directives.unchanged,
+ 'annotation': directives.unchanged,
}
doc_field_types = [
@@ -110,22 +111,21 @@ class PyObject(ObjectDescription):
]
def get_signature_prefix(self, sig):
- """
- May return a prefix to put before the object name in the signature.
+ """May return a prefix to put before the object name in the
+ signature.
"""
return ''
def needs_arglist(self):
- """
- May return true if an empty argument list is to be generated even if
+ """May return true if an empty argument list is to be generated even if
the document contains none.
"""
return False
def handle_signature(self, sig, signode):
- """
- Transform a Python signature into RST nodes.
- Returns (fully qualified name of the thing, classname if any).
+ """Transform a Python signature into RST nodes.
+
+ Return (fully qualified name of the thing, classname if any).
If inside a class, the current class name is handled intelligently:
* it is stripped from the displayed name if present
@@ -181,6 +181,8 @@ class PyObject(ObjectDescription):
nodetext = modname + '.'
signode += addnodes.desc_addname(nodetext, nodetext)
+ anno = self.options.get('annotation')
+
signode += addnodes.desc_name(name, name)
if not arglist:
if self.needs_arglist():
@@ -188,16 +190,19 @@ class PyObject(ObjectDescription):
signode += addnodes.desc_parameterlist()
if retann:
signode += addnodes.desc_returns(retann, retann)
+ if anno:
+ signode += addnodes.desc_annotation(' ' + anno, ' ' + anno)
return fullname, name_prefix
+
_pseudo_parse_arglist(signode, arglist)
if retann:
signode += addnodes.desc_returns(retann, retann)
+ if anno:
+ signode += addnodes.desc_annotation(' ' + anno, ' ' + anno)
return fullname, name_prefix
def get_index_text(self, modname, name):
- """
- Return the text for the index entry of the object.
- """
+ """Return the text for the index entry of the object."""
raise NotImplementedError('must be implemented in subclasses')
def add_target_and_index(self, name_cls, sig, signode):
@@ -224,7 +229,7 @@ class PyObject(ObjectDescription):
indextext = self.get_index_text(modname, name_cls)
if indextext:
self.indexnode['entries'].append(('single', indextext,
- fullname, fullname))
+ fullname, ''))
def before_content(self):
# needed for automatic qualification of members (reset in subclasses)
@@ -360,6 +365,38 @@ class PyClassmember(PyObject):
self.clsname_set = True
+class PyDecoratorMixin(object):
+ """
+ Mixin for decorator directives.
+ """
+ def handle_signature(self, sig, signode):
+ ret = super(PyDecoratorMixin, self).handle_signature(sig, signode)
+ signode.insert(0, addnodes.desc_addname('@', '@'))
+ return ret
+
+ def needs_arglist(self):
+ return False
+
+
+class PyDecoratorFunction(PyDecoratorMixin, PyModulelevel):
+ """
+ Directive to mark functions meant to be used as decorators.
+ """
+ def run(self):
+ # a decorator function is a function after all
+ self.name = 'py:function'
+ return PyModulelevel.run(self)
+
+
+class PyDecoratorMethod(PyDecoratorMixin, PyClassmember):
+ """
+ Directive to mark methods meant to be used as decorators.
+ """
+ def run(self):
+ self.name = 'py:method'
+ return PyClassmember.run(self)
+
+
class PyModule(Directive):
"""
Directive to mark description of a new module.
@@ -386,26 +423,17 @@ class PyModule(Directive):
env.domaindata['py']['modules'][modname] = \
(env.docname, self.options.get('synopsis', ''),
self.options.get('platform', ''), 'deprecated' in self.options)
- # make a duplicate entry in 'objects' to facilitate searching for
- # the module in PythonDomain.find_obj()
+ # make a duplicate entry in 'objects' to facilitate searching for the
+ # module in PythonDomain.find_obj()
env.domaindata['py']['objects'][modname] = (env.docname, 'module')
- targetnode = nodes.target('', '', ids=['module-' + modname],
- ismod=True)
+ targetnode = nodes.target('', '', ids=['module-' + modname], ismod=True)
self.state.document.note_explicit_target(targetnode)
+ # the platform and synopsis aren't printed; in fact, they are only used
+ # in the modindex currently
ret.append(targetnode)
- # XXX this behavior of the module directive is a mess...
- if 'platform' in self.options:
- platform = self.options['platform']
- node = nodes.paragraph()
- node += nodes.emphasis('', _('Platforms: '))
- node += nodes.Text(platform, platform)
- ret.append(node)
- # the synopsis isn't printed; in fact, it is only used in the
- # modindex currently
- if not noindex:
indextext = _('%s (module)') % modname
inode = addnodes.index(entries=[('single', indextext,
- 'module-' + modname, modname)])
+ 'module-' + modname, '')])
ret.append(inode)
return ret
@@ -540,16 +568,18 @@ class PythonDomain(Domain):
}
directives = {
- 'function': PyModulelevel,
- 'data': PyModulelevel,
- 'class': PyClasslike,
- 'exception': PyClasslike,
- 'method': PyClassmember,
- 'classmethod': PyClassmember,
- 'staticmethod': PyClassmember,
- 'attribute': PyClassmember,
- 'module': PyModule,
- 'currentmodule': PyCurrentModule,
+ 'function': PyModulelevel,
+ 'data': PyModulelevel,
+ 'class': PyClasslike,
+ 'exception': PyClasslike,
+ 'method': PyClassmember,
+ 'classmethod': PyClassmember,
+ 'staticmethod': PyClassmember,
+ 'attribute': PyClassmember,
+ 'module': PyModule,
+ 'currentmodule': PyCurrentModule,
+ 'decorator': PyDecoratorFunction,
+ 'decoratormethod': PyDecoratorMethod,
}
roles = {
'data': PyXRefRole(),
@@ -579,9 +609,8 @@ class PythonDomain(Domain):
del self.data['modules'][modname]
def find_obj(self, env, modname, classname, name, type, searchmode=0):
- """
- Find a Python object for "name", perhaps using the given module and/or
- classname. Returns a list of (name, object entry) tuples.
+ """Find a Python object for "name", perhaps using the given module
+ and/or classname. Returns a list of (name, object entry) tuples.
"""
# skip parens
if name[-2:] == '()':
diff --git a/sphinx/domains/rst.py b/sphinx/domains/rst.py
index 6b3e05ee..e67f827e 100644
--- a/sphinx/domains/rst.py
+++ b/sphinx/domains/rst.py
@@ -48,7 +48,7 @@ class ReSTMarkup(ObjectDescription):
indextext = self.get_index_text(self.objtype, name)
if indextext:
self.indexnode['entries'].append(('single', indextext,
- targetname, targetname))
+ targetname, ''))
def get_index_text(self, objectname, name):
if self.objtype == 'directive':
@@ -59,9 +59,10 @@ class ReSTMarkup(ObjectDescription):
def parse_directive(d):
- """
- Parses a directive signature. Returns (directive, arguments) string tuple.
- if no arguments are given, returns (directive, '').
+ """Parse a directive signature.
+
+ Returns (directive, arguments) string tuple. If no arguments are given,
+ returns (directive, '').
"""
dir = d.strip()
if not dir.startswith('.'):
diff --git a/sphinx/domains/std.py b/sphinx/domains/std.py
index 1fd015ac..9d5b0b0f 100644
--- a/sphinx/domains/std.py
+++ b/sphinx/domains/std.py
@@ -14,6 +14,7 @@ import unicodedata
from docutils import nodes
from docutils.parsers.rst import directives
+from docutils.statemachine import ViewList
from sphinx import addnodes
from sphinx.roles import XRefRole
@@ -60,7 +61,7 @@ class GenericObject(ObjectDescription):
indextype = 'single'
indexentry = self.indextemplate % (name,)
self.indexnode['entries'].append((indextype, indexentry,
- targetname, targetname))
+ targetname, ''))
self.env.domaindata['std']['objects'][self.objtype, name] = \
self.env.docname, targetname
@@ -81,8 +82,8 @@ class EnvVarXRefRole(XRefRole):
tgtid = 'index-%s' % env.new_serialno('index')
indexnode = addnodes.index()
indexnode['entries'] = [
- ('single', varname, tgtid, varname),
- ('single', _('environment variable; %s') % varname, tgtid, varname)
+ ('single', varname, tgtid, ''),
+ ('single', _('environment variable; %s') % varname, tgtid, '')
]
targetnode = nodes.target('', '', ids=[tgtid])
document.note_explicit_target(targetnode)
@@ -117,7 +118,7 @@ class Target(Directive):
indextype = indexentry[:colon].strip()
indexentry = indexentry[colon+1:].strip()
inode = addnodes.index(entries=[(indextype, indexentry,
- targetname, targetname)])
+ targetname, '')])
ret.insert(0, inode)
name = self.name
if ':' in self.name:
@@ -160,7 +161,7 @@ class Cmdoption(ObjectDescription):
self.indexnode['entries'].append(
('pair', _('%scommand line option; %s') %
((currprogram and currprogram + ' ' or ''), sig),
- targetname, targetname))
+ targetname, ''))
self.env.domaindata['std']['progoptions'][currprogram, name] = \
self.env.docname, targetname
@@ -206,8 +207,8 @@ class OptionXRefRole(XRefRole):
class Glossary(Directive):
"""
- Directive to create a glossary with cross-reference targets
- for :term: roles.
+ Directive to create a glossary with cross-reference targets for :term:
+ roles.
"""
has_content = True
@@ -224,37 +225,100 @@ class Glossary(Directive):
gloss_entries = env.temp_data.setdefault('gloss_entries', set())
node = addnodes.glossary()
node.document = self.state.document
- self.state.nested_parse(self.content, self.content_offset, node)
-
- # the content should be definition lists
- dls = [child for child in node
- if isinstance(child, nodes.definition_list)]
- # now, extract definition terms to enable cross-reference creation
- new_dl = nodes.definition_list()
- new_dl['classes'].append('glossary')
+
+ # This directive implements a custom format of the reST definition list
+ # that allows multiple lines of terms before the definition. This is
+ # easy to parse since we know that the contents of the glossary *must
+ # be* a definition list.
+
+ # first, collect single entries
+ entries = []
+ in_definition = True
+ was_empty = True
+ messages = []
+ for line, (source, lineno) in zip(self.content, self.content.items):
+ # empty line -> add to last definition
+ if not line:
+ if in_definition and entries:
+ entries[-1][1].append('', source, lineno)
+ was_empty = True
+ continue
+ # unindented line -> a term
+ if line and not line[0].isspace():
+ # first term of definition
+ if in_definition:
+ if not was_empty:
+ messages.append(self.state.reporter.system_message(
+ 2, 'glossary term must be preceded by empty line',
+ source=source, line=lineno))
+ entries.append(([(line, source, lineno)], ViewList()))
+ in_definition = False
+ # second term and following
+ else:
+ if was_empty:
+ messages.append(self.state.reporter.system_message(
+ 2, 'glossary terms must not be separated by empty '
+ 'lines', source=source, line=lineno))
+ entries[-1][0].append((line, source, lineno))
+ else:
+ if not in_definition:
+ # first line of definition, determines indentation
+ in_definition = True
+ indent_len = len(line) - len(line.lstrip())
+ entries[-1][1].append(line[indent_len:], source, lineno)
+ was_empty = False
+
+ # now, parse all the entries into a big definition list
items = []
- for dl in dls:
- for li in dl.children:
- if not li.children or not isinstance(li[0], nodes.term):
- continue
- termtext = li.children[0].astext()
+ for terms, definition in entries:
+ termtexts = []
+ termnodes = []
+ system_messages = []
+ ids = []
+ for line, source, lineno in terms:
+ # parse the term with inline markup
+ res = self.state.inline_text(line, lineno)
+ system_messages.extend(res[1])
+
+ # get a text-only representation of the term and register it
+ # as a cross-reference target
+ tmp = nodes.paragraph('', '', *res[0])
+ termtext = tmp.astext()
new_id = 'term-' + nodes.make_id(termtext)
if new_id in gloss_entries:
new_id = 'term-' + str(len(gloss_entries))
gloss_entries.add(new_id)
- li[0]['names'].append(new_id)
- li[0]['ids'].append(new_id)
+ ids.append(new_id)
objects['term', termtext.lower()] = env.docname, new_id
+ termtexts.append(termtext)
# add an index entry too
indexnode = addnodes.index()
- indexnode['entries'] = [('single', termtext, new_id, termtext)]
- li.insert(0, indexnode)
- items.append((termtext, li))
+ indexnode['entries'] = [('single', termtext, new_id, 'main')]
+ termnodes.append(indexnode)
+ termnodes.extend(res[0])
+ termnodes.append(addnodes.termsep())
+ # make a single "term" node with all the terms, separated by termsep
+ # nodes (remove the dangling trailing separator)
+ term = nodes.term('', '', *termnodes[:-1])
+ term['ids'].extend(ids)
+ term['names'].extend(ids)
+ term += system_messages
+
+ defnode = nodes.definition()
+ self.state.nested_parse(definition, definition.items[0][1], defnode)
+
+ items.append((termtexts,
+ nodes.definition_list_item('', term, defnode)))
+
if 'sorted' in self.options:
- items.sort(key=lambda x: unicodedata.normalize('NFD', x[0].lower()))
- new_dl.extend(item[1] for item in items)
- node.children = [new_dl]
- return [node]
+ items.sort(key=lambda x:
+ unicodedata.normalize('NFD', x[0][0].lower()))
+
+ dlist = nodes.definition_list()
+ dlist['classes'].append('glossary')
+ dlist.extend(item[1] for item in items)
+ node += dlist
+ return messages + [node]
token_re = re.compile('`([a-z_][a-z0-9_]*)`')
diff --git a/sphinx/environment.py b/sphinx/environment.py
index b2fb529f..c28eae94 100644
--- a/sphinx/environment.py
+++ b/sphinx/environment.py
@@ -11,6 +11,7 @@
import re
import os
+import sys
import time
import types
import codecs
@@ -25,9 +26,9 @@ from itertools import izip, groupby
from docutils import nodes
from docutils.io import FileInput, NullOutput
from docutils.core import Publisher
-from docutils.utils import Reporter, relative_path
+from docutils.utils import Reporter, relative_path, new_document
from docutils.readers import standalone
-from docutils.parsers.rst import roles, directives
+from docutils.parsers.rst import roles, directives, Parser as RSTParser
from docutils.parsers.rst.languages import en as english
from docutils.parsers.rst.directives.html import MetaBody
from docutils.writers import UnfilteredWriter
@@ -35,15 +36,18 @@ from docutils.transforms import Transform
from docutils.transforms.parts import ContentsFilter
from sphinx import addnodes
-from sphinx.util import url_re, get_matching_docs, docname_join, \
+from sphinx.util import url_re, get_matching_docs, docname_join, split_into, \
FilenameUniqDict
-from sphinx.util.nodes import clean_astext, make_refnode
+from sphinx.util.nodes import clean_astext, make_refnode, extract_messages
from sphinx.util.osutil import movefile, SEP, ustrftime
from sphinx.util.matching import compile_matchers
-from sphinx.util.pycompat import all
+from sphinx.util.pycompat import all, class_types
+from sphinx.util.websupport import is_commentable
from sphinx.errors import SphinxError, ExtensionError
-from sphinx.locale import _
+from sphinx.locale import _, init as init_locale
+from sphinx.versioning import add_uids, merge_doctrees
+fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding()
orig_role_function = roles.role
orig_directive_function = directives.directive
@@ -64,7 +68,7 @@ default_settings = {
# This is increased every time an environment attribute is added
# or changed to properly invalidate pickle files.
-ENV_VERSION = 39
+ENV_VERSION = 41
default_substitutions = set([
@@ -75,13 +79,19 @@ default_substitutions = set([
dummy_reporter = Reporter('', 4, 4)
+versioning_conditions = {
+ 'none': False,
+ 'text': nodes.TextElement,
+ 'commentable': is_commentable,
+}
+
class WarningStream(object):
def __init__(self, warnfunc):
self.warnfunc = warnfunc
def write(self, text):
if text.strip():
- self.warnfunc(text, None, '')
+ self.warnfunc(text.strip(), None, '')
class NoUri(Exception):
@@ -178,17 +188,56 @@ class CitationReferences(Transform):
for citnode in self.document.traverse(nodes.citation_reference):
cittext = citnode.astext()
refnode = addnodes.pending_xref(cittext, reftype='citation',
- reftarget=cittext)
+ reftarget=cittext, refwarn=True)
+ refnode.line = citnode.line or citnode.parent.line
refnode += nodes.Text('[' + cittext + ']')
citnode.parent.replace(citnode, refnode)
+class Locale(Transform):
+ """
+ Replace translatable nodes with their translated doctree.
+ """
+ default_priority = 0
+ def apply(self):
+ env = self.document.settings.env
+ settings, source = self.document.settings, self.document['source']
+ # XXX check if this is reliable
+ assert source.startswith(env.srcdir)
+ docname = os.path.splitext(source[len(env.srcdir):].lstrip(os.sep))[0]
+ section = docname.split(os.sep, 1)[0]
+
+ # fetch translations
+ dirs = [path.join(env.srcdir, x)
+ for x in env.config.locale_dirs]
+ catalog, has_catalog = init_locale(dirs, env.config.language, section)
+ if not has_catalog:
+ return
+
+ parser = RSTParser()
+
+ for node, msg in extract_messages(self.document):
+ patch = new_document(source, settings)
+ msgstr = catalog.gettext(msg)
+ # XXX add marker to untranslated parts
+ if not msgstr or msgstr == msg: # as-of-yet untranslated
+ continue
+ parser.parse(msgstr, patch)
+ patch = patch[0]
+ # XXX doctest and other block markup
+ if not isinstance(patch, nodes.paragraph):
+ continue # skip for now
+ for child in patch.children: # update leaves
+ child.parent = node
+ node.children = patch.children
+
+
class SphinxStandaloneReader(standalone.Reader):
"""
Add our own transforms.
"""
- transforms = [CitationReferences, DefaultSubstitutions, MoveModuleTargets,
- HandleCodeBlocks, SortIds]
+ transforms = [Locale, CitationReferences, DefaultSubstitutions,
+ MoveModuleTargets, HandleCodeBlocks, SortIds]
def get_transforms(self):
return standalone.Reader.get_transforms(self) + self.transforms
@@ -252,7 +301,7 @@ class BuildEnvironment:
if key.startswith('_') or \
isinstance(val, types.ModuleType) or \
isinstance(val, types.FunctionType) or \
- isinstance(val, (type, types.ClassType)):
+ isinstance(val, class_types):
del self.config[key]
try:
pickle.dump(self, picklefile, pickle.HIGHEST_PROTOCOL)
@@ -271,6 +320,9 @@ class BuildEnvironment:
self.srcdir = srcdir
self.config = config
+ # the method of doctree versioning; see set_versioning_method
+ self.versioning_condition = None
+
# the application object; only set while update() runs
self.app = None
@@ -287,6 +339,9 @@ class BuildEnvironment:
# this is to invalidate old pickles
self.version = ENV_VERSION
+ # make this a set for faster testing
+ self._nitpick_ignore = set(self.config.nitpick_ignore)
+
# All "docnames" here are /-separated and relative and exclude
# the source suffix.
@@ -338,6 +393,23 @@ class BuildEnvironment:
self._warnfunc = func
self.settings['warning_stream'] = WarningStream(func)
+ def set_versioning_method(self, method):
+ """This sets the doctree versioning method for this environment.
+
+ Versioning methods are a builder property; only builders with the same
+ versioning method can share the same doctree directory. Therefore, we
+ raise an exception if the user tries to use an environment with an
+ incompatible versioning method.
+ """
+ if method not in versioning_conditions:
+ raise ValueError('invalid versioning method: %r' % method)
+ condition = versioning_conditions[method]
+ if self.versioning_condition not in (None, condition):
+ raise SphinxError('This environment is incompatible with the '
+ 'selected builder, please choose another '
+ 'doctree directory.')
+ self.versioning_condition = condition
+
def warn(self, docname, msg, lineno=None):
# strange argument order is due to backwards compatibility
self._warnfunc(msg, (docname, lineno))
@@ -376,25 +448,46 @@ class BuildEnvironment:
domain.clear_doc(docname)
def doc2path(self, docname, base=True, suffix=None):
+ """Return the filename for the document name.
+
+ If *base* is True, return absolute path under self.srcdir.
+ If *base* is None, return relative path to self.srcdir.
+ If *base* is a path string, return absolute path under that.
+ If *suffix* is not None, add it instead of config.source_suffix.
"""
- Return the filename for the document name.
- If base is True, return absolute path under self.srcdir.
- If base is None, return relative path to self.srcdir.
- If base is a path string, return absolute path under that.
- If suffix is not None, add it instead of config.source_suffix.
- """
+ docname = docname.replace(SEP, path.sep)
suffix = suffix or self.config.source_suffix
if base is True:
- return path.join(self.srcdir,
- docname.replace(SEP, path.sep)) + suffix
+ return path.join(self.srcdir, docname) + suffix
elif base is None:
- return docname.replace(SEP, path.sep) + suffix
+ return docname + suffix
else:
- return path.join(base, docname.replace(SEP, path.sep)) + suffix
+ return path.join(base, docname) + suffix
- def find_files(self, config):
+ def relfn2path(self, filename, docname=None):
+ """Return paths to a file referenced from a document, relative to
+ documentation root and absolute.
+
+ Absolute filenames are relative to the source dir, while relative
+ filenames are relative to the dir of the containing document.
"""
- Find all source files in the source dir and put them in self.found_docs.
+ if filename.startswith('/') or filename.startswith(os.sep):
+ rel_fn = filename[1:]
+ else:
+ docdir = path.dirname(self.doc2path(docname or self.docname,
+ base=None))
+ rel_fn = path.join(docdir, filename)
+ try:
+ return rel_fn, path.join(self.srcdir, rel_fn)
+ except UnicodeDecodeError:
+ # the source directory is a bytestring with non-ASCII characters;
+ # let's try to encode the rel_fn in the file system encoding
+ enc_rel_fn = rel_fn.encode(sys.getfilesystemencoding())
+ return rel_fn, path.join(self.srcdir, enc_rel_fn)
+
+ def find_files(self, config):
+ """Find all source files in the source dir and put them in
+ self.found_docs.
"""
matchers = compile_matchers(
config.exclude_patterns[:] +
@@ -407,9 +500,7 @@ class BuildEnvironment:
self.srcdir, config.source_suffix, exclude_matchers=matchers))
def get_outdated_files(self, config_changed):
- """
- Return (added, changed, removed) sets.
- """
+ """Return (added, changed, removed) sets."""
# clear all files no longer present
removed = set(self.all_docs) - self.found_docs
@@ -459,12 +550,12 @@ class BuildEnvironment:
return added, changed, removed
def update(self, config, srcdir, doctreedir, app=None):
- """
- (Re-)read all files new or changed since last update. Returns a
- summary, the total count of documents to reread and an iterator that
- yields docnames as it processes them. Store all environment docnames in
- the canonical format (ie using SEP as a separator in place of
- os.path.sep).
+ """(Re-)read all files new or changed since last update.
+
+ Returns a summary, the total count of documents to reread and an
+ iterator that yields docnames as it processes them. Store all
+ environment docnames in the canonical format (ie using SEP as a
+ separator in place of os.path.sep).
"""
config_changed = False
if self.config is None:
@@ -495,6 +586,10 @@ class BuildEnvironment:
added, changed, removed = self.get_outdated_files(config_changed)
+ # allow user intervention as well
+ for docs in app.emit('env-get-outdated', self, added, changed, removed):
+ changed.update(set(docs) & self.found_docs)
+
# if files were added or removed, all documents with globbed toctrees
# must be reread
if added or removed:
@@ -595,8 +690,8 @@ class BuildEnvironment:
roles.role = role
def read_doc(self, docname, src_path=None, save_parsed=True, app=None):
- """
- Parse a file and add/update inventory entries for the doctree.
+ """Parse a file and add/update inventory entries for the doctree.
+
If srcpath is given, read from a different source file.
"""
# remove all inventory entries for that file
@@ -637,6 +732,8 @@ class BuildEnvironment:
FileInput.__init__(self_, *args, **kwds)
def decode(self_, data):
+ if isinstance(data, unicode):
+ return data
return data.decode(self_.encoding, 'sphinx')
def read(self_):
@@ -658,7 +755,7 @@ class BuildEnvironment:
destination_class=NullOutput)
pub.set_components(None, 'restructuredtext', None)
pub.process_programmatic_settings(None, self.settings, None)
- pub.set_source(None, src_path)
+ pub.set_source(None, src_path.encode(fs_encoding))
pub.set_destination(None, None)
try:
pub.publish()
@@ -687,6 +784,25 @@ class BuildEnvironment:
# store time of build, for outdated files detection
self.all_docs[docname] = time.time()
+ if self.versioning_condition:
+ # get old doctree
+ try:
+ f = open(self.doc2path(docname,
+ self.doctreedir, '.doctree'), 'rb')
+ try:
+ old_doctree = pickle.load(f)
+ finally:
+ f.close()
+ except EnvironmentError:
+ old_doctree = None
+
+ # add uids for versioning
+ if old_doctree is None:
+ list(add_uids(doctree, self.versioning_condition))
+ else:
+ list(merge_doctrees(
+ old_doctree, doctree, self.versioning_condition))
+
# make it picklable
doctree.reporter = None
doctree.transformer = None
@@ -754,18 +870,15 @@ class BuildEnvironment:
# post-processing of read doctrees
def filter_messages(self, doctree):
- """
- Filter system messages from a doctree.
- """
+ """Filter system messages from a doctree."""
filterlevel = self.config.keep_warnings and 2 or 5
for node in doctree.traverse(nodes.system_message):
if node['level'] < filterlevel:
node.parent.remove(node)
+
def process_dependencies(self, docname, doctree):
- """
- Process docutils-generated dependency info.
- """
+ """Process docutils-generated dependency info."""
cwd = os.getcwd()
frompath = path.join(path.normpath(self.srcdir), 'dummy')
deps = doctree.settings.record_dependencies
@@ -779,30 +892,20 @@ class BuildEnvironment:
self.dependencies.setdefault(docname, set()).add(relpath)
def process_downloads(self, docname, doctree):
- """
- Process downloadable file paths.
- """
- docdir = path.dirname(self.doc2path(docname, base=None))
+ """Process downloadable file paths. """
for node in doctree.traverse(addnodes.download_reference):
targetname = node['reftarget']
- if targetname.startswith('/') or targetname.startswith(os.sep):
- # absolute
- filepath = targetname[1:]
- else:
- filepath = path.normpath(path.join(docdir, node['reftarget']))
- self.dependencies.setdefault(docname, set()).add(filepath)
- if not os.access(path.join(self.srcdir, filepath), os.R_OK):
- self.warn(docname, 'download file not readable: %s' % filepath,
+ rel_filename, filename = self.relfn2path(targetname, docname)
+ self.dependencies.setdefault(docname, set()).add(rel_filename)
+ if not os.access(filename, os.R_OK):
+ self.warn(docname, 'download file not readable: %s' % filename,
getattr(node, 'line', None))
continue
- uniquename = self.dlfiles.add_file(docname, filepath)
+ uniquename = self.dlfiles.add_file(docname, filename)
node['filename'] = uniquename
def process_images(self, docname, doctree):
- """
- Process and rewrite image URIs.
- """
- docdir = path.dirname(self.doc2path(docname, base=None))
+ """Process and rewrite image URIs."""
for node in doctree.traverse(nodes.image):
# Map the mimetype to the corresponding image. The writer may
# choose the best image from these candidates. The special key * is
@@ -815,16 +918,11 @@ class BuildEnvironment:
node.line)
candidates['?'] = imguri
continue
- # imgpath is the image path *from srcdir*
- if imguri.startswith('/') or imguri.startswith(os.sep):
- # absolute path (= relative to srcdir)
- imgpath = path.normpath(imguri[1:])
- else:
- imgpath = path.normpath(path.join(docdir, imguri))
+ rel_imgpath, full_imgpath = self.relfn2path(imguri, docname)
# set imgpath as default URI
- node['uri'] = imgpath
- if imgpath.endswith(os.extsep + '*'):
- for filename in glob(path.join(self.srcdir, imgpath)):
+ node['uri'] = rel_imgpath
+ if rel_imgpath.endswith(os.extsep + '*'):
+ for filename in glob(full_imgpath):
new_imgpath = relative_path(self.srcdir, filename)
if filename.lower().endswith('.pdf'):
candidates['application/pdf'] = new_imgpath
@@ -844,7 +942,7 @@ class BuildEnvironment:
if imgtype:
candidates['image/' + imgtype] = new_imgpath
else:
- candidates['*'] = imgpath
+ candidates['*'] = rel_imgpath
# map image paths to unique image names (so that they can be put
# into a single directory)
for imgpath in candidates.itervalues():
@@ -856,8 +954,8 @@ class BuildEnvironment:
self.images.add_file(docname, imgpath)
def process_metadata(self, docname, doctree):
- """
- Process the docinfo part of the doctree as metadata.
+ """Process the docinfo part of the doctree as metadata.
+
Keep processing minimal -- just return what docutils says.
"""
self.metadata[docname] = md = {}
@@ -942,8 +1040,7 @@ class BuildEnvironment:
item.replace(para, compact_para)
def create_title_from(self, docname, document):
- """
- Add a title node to the document (just copy the first section title),
+ """Add a title node to the document (just copy the first section title),
and store that title in the environment.
"""
titlenode = nodes.title()
@@ -981,7 +1078,8 @@ class BuildEnvironment:
def note_toctree(self, docname, toctreenode):
"""Note a TOC tree directive in a document and gather information about
- file relations from it."""
+ file relations from it.
+ """
if toctreenode['glob']:
self.glob_toctrees.add(docname)
if toctreenode.get('numbered'):
@@ -1019,6 +1117,12 @@ class BuildEnvironment:
# find all toctree nodes in this section and add them
# to the toc (just copying the toctree node which is then
# resolved in self.get_and_resolve_doctree)
+ if isinstance(sectionnode, addnodes.only):
+ onlynode = addnodes.only(expr=sectionnode['expr'])
+ blist = build_toc(sectionnode, depth)
+ if blist:
+ onlynode += blist.children
+ entries.append(onlynode)
if not isinstance(sectionnode, nodes.section):
for toctreenode in traverse_in_section(sectionnode,
addnodes.toctree):
@@ -1040,6 +1144,8 @@ class BuildEnvironment:
else:
anchorname = '#' + sectionnode['ids'][0]
numentries[0] += 1
+ # make these nodes:
+ # list_item -> compact_paragraph -> reference
reference = nodes.reference(
'', '', internal=True, refuri=docname,
anchorname=anchorname, *nodetext)
@@ -1058,9 +1164,10 @@ class BuildEnvironment:
self.tocs[docname] = nodes.bullet_list('')
self.toc_num_entries[docname] = numentries[0]
- def get_toc_for(self, docname):
+ def get_toc_for(self, docname, builder):
"""Return a TOC nodetree -- for use on the same page only!"""
toc = self.tocs[docname].deepcopy()
+ self.process_only_nodes(toc, builder, docname)
for node in toc.traverse(nodes.reference):
node['refuri'] = node['anchorname'] or '#'
return toc
@@ -1087,7 +1194,9 @@ class BuildEnvironment:
def get_domain(self, domainname):
"""Return the domain instance with the specified name.
- Raises an ExtensionError if the domain is not registered."""
+
+ Raises an ExtensionError if the domain is not registered.
+ """
try:
return self.domains[domainname]
except KeyError:
@@ -1112,7 +1221,8 @@ class BuildEnvironment:
def get_and_resolve_doctree(self, docname, builder, doctree=None,
prune_toctrees=True):
"""Read the doctree from the pickle, resolve cross-references and
- toctrees and return it."""
+ toctrees and return it.
+ """
if doctree is None:
doctree = self.get_doctree(docname)
@@ -1132,8 +1242,7 @@ class BuildEnvironment:
def resolve_toctree(self, docname, builder, toctree, prune=True, maxdepth=0,
titles_only=False, collapse=False, includehidden=False):
- """
- Resolve a *toctree* node into individual bullet lists with titles
+ """Resolve a *toctree* node into individual bullet lists with titles
as items, returning None (if no containing titles are found) or
a new node.
@@ -1235,6 +1344,7 @@ class BuildEnvironment:
toc = nodes.bullet_list('', item)
else:
toc = self.tocs[ref].deepcopy()
+ self.process_only_nodes(toc, builder, ref)
if title and toc.children and len(toc.children) == 1:
child = toc.children[0]
for refnode in child.traverse(nodes.reference):
@@ -1265,12 +1375,14 @@ class BuildEnvironment:
toplevel[1][:] = subtrees
# resolve all sub-toctrees
for toctreenode in toc.traverse(addnodes.toctree):
- i = toctreenode.parent.index(toctreenode) + 1
- for item in _entries_from_toctree(toctreenode,
- subtree=True):
- toctreenode.parent.insert(i, item)
- i += 1
- toctreenode.parent.remove(toctreenode)
+ if not (toctreenode.get('hidden', False)
+ and not includehidden):
+ i = toctreenode.parent.index(toctreenode) + 1
+ for item in _entries_from_toctree(toctreenode,
+ subtree=True):
+ toctreenode.parent.insert(i, item)
+ i += 1
+ toctreenode.parent.remove(toctreenode)
if separate:
entries.append(toc)
else:
@@ -1314,7 +1426,6 @@ class BuildEnvironment:
typ = node['reftype']
target = node['reftarget']
refdoc = node.get('refdoc', fromdocname)
- warned = False
domain = None
try:
@@ -1331,11 +1442,7 @@ class BuildEnvironment:
# directly reference to document by source name;
# can be absolute or relative
docname = docname_join(refdoc, target)
- if docname not in self.all_docs:
- self.warn(refdoc,
- 'unknown document: %s' % docname, node.line)
- warned = True
- else:
+ if docname in self.all_docs:
if node['refexplicit']:
# reference with explicit title
caption = node.astext()
@@ -1348,11 +1455,7 @@ class BuildEnvironment:
newnode.append(innernode)
elif typ == 'citation':
docname, labelid = self.citations.get(target, ('', ''))
- if not docname:
- self.warn(refdoc,
- 'citation not found: %s' % target, node.line)
- warned = True
- else:
+ if docname:
newnode = make_refnode(builder, fromdocname, docname,
labelid, contnode)
# no new node found? try the missing-reference event
@@ -1360,21 +1463,44 @@ class BuildEnvironment:
newnode = builder.app.emit_firstresult(
'missing-reference', self, node, contnode)
# still not found? warn if in nit-picky mode
- if newnode is None and not warned and \
- (self.config.nitpicky or node.get('refwarn')):
- if domain and typ in domain.dangling_warnings:
- msg = domain.dangling_warnings[typ]
- elif node.get('refdomain') != 'std':
- msg = '%s:%s reference target not found: ' \
- '%%(target)s' % (node['refdomain'], typ)
- else:
- msg = '%s reference target not found: ' \
- '%%(target)s' % typ
- self.warn(refdoc, msg % {'target': target}, node.line)
+ if newnode is None:
+ self._warn_missing_reference(
+ fromdocname, typ, target, node, domain)
except NoUri:
newnode = contnode
node.replace_self(newnode or contnode)
+ # remove only-nodes that do not belong to our builder
+ self.process_only_nodes(doctree, builder, fromdocname)
+
+ # allow custom references to be resolved
+ builder.app.emit('doctree-resolved', doctree, fromdocname)
+
+ def _warn_missing_reference(self, fromdoc, typ, target, node, domain):
+ warn = node.get('refwarn')
+ if self.config.nitpicky:
+ warn = True
+ if self._nitpick_ignore:
+ dtype = domain and '%s:%s' % (domain.name, typ) or typ
+ if (dtype, target) in self._nitpick_ignore:
+ warn = False
+ if not warn:
+ return
+ refdoc = node.get('refdoc', fromdoc)
+ if domain and typ in domain.dangling_warnings:
+ msg = domain.dangling_warnings[typ]
+ elif typ == 'doc':
+ msg = 'unknown document: %(target)s'
+ elif typ == 'citation':
+ msg = 'citation not found: %(target)s'
+ elif node.get('refdomain', 'std') != 'std':
+ msg = '%s:%s reference target not found: %%(target)s' % \
+ (node['refdomain'], typ)
+ else:
+ msg = '%s reference target not found: %%(target)s' % typ
+ self.warn(refdoc, msg % {'target': target}, node.line)
+
+ def process_only_nodes(self, doctree, builder, fromdocname=None):
for node in doctree.traverse(addnodes.only):
try:
ret = builder.tags.eval_condition(node['expr'])
@@ -1390,9 +1516,6 @@ class BuildEnvironment:
# if there is a target node before the only node
node.replace_self(nodes.comment())
- # allow custom references to be resolved
- builder.app.emit('doctree-resolved', doctree, fromdocname)
-
def assign_section_numbers(self):
"""Assign a section number to each heading under a numbered toctree."""
# a list of all docnames whose section numbers changed
@@ -1401,46 +1524,60 @@ class BuildEnvironment:
old_secnumbers = self.toc_secnumbers
self.toc_secnumbers = {}
- def _walk_toc(node, secnums, titlenode=None):
+ def _walk_toc(node, secnums, depth, titlenode=None):
# titlenode is the title of the document, it will get assigned a
# secnumber too, so that it shows up in next/prev/parent rellinks
for subnode in node.children:
if isinstance(subnode, nodes.bullet_list):
numstack.append(0)
- _walk_toc(subnode, secnums, titlenode)
+ _walk_toc(subnode, secnums, depth-1, titlenode)
numstack.pop()
titlenode = None
elif isinstance(subnode, nodes.list_item):
- _walk_toc(subnode, secnums, titlenode)
+ _walk_toc(subnode, secnums, depth, titlenode)
+ titlenode = None
+ elif isinstance(subnode, addnodes.only):
+ # at this stage we don't know yet which sections are going
+ # to be included; just include all of them, even if it leads
+ # to gaps in the numbering
+ _walk_toc(subnode, secnums, depth, titlenode)
titlenode = None
elif isinstance(subnode, addnodes.compact_paragraph):
numstack[-1] += 1
+ if depth > 0:
+ number = tuple(numstack)
+ else:
+ number = None
secnums[subnode[0]['anchorname']] = \
- subnode[0]['secnumber'] = tuple(numstack)
+ subnode[0]['secnumber'] = number
if titlenode:
- titlenode['secnumber'] = tuple(numstack)
+ titlenode['secnumber'] = number
titlenode = None
elif isinstance(subnode, addnodes.toctree):
- _walk_toctree(subnode)
+ _walk_toctree(subnode, depth)
- def _walk_toctree(toctreenode):
+ def _walk_toctree(toctreenode, depth):
+ if depth == 0:
+ return
for (title, ref) in toctreenode['entries']:
if url_re.match(ref) or ref == 'self':
# don't mess with those
continue
if ref in self.tocs:
secnums = self.toc_secnumbers[ref] = {}
- _walk_toc(self.tocs[ref], secnums, self.titles.get(ref))
+ _walk_toc(self.tocs[ref], secnums, depth,
+ self.titles.get(ref))
if secnums != old_secnumbers.get(ref):
rewrite_needed.append(ref)
for docname in self.numbered_toctrees:
doctree = self.get_doctree(docname)
for toctreenode in doctree.traverse(addnodes.toctree):
- if toctreenode.get('numbered'):
+ depth = toctreenode.get('numbered', 0)
+ if depth:
# every numbered toctree gets new numbering
numstack = [0]
- _walk_toctree(toctreenode)
+ _walk_toctree(toctreenode, depth)
return rewrite_needed
@@ -1449,56 +1586,50 @@ class BuildEnvironment:
"""Create the real index from the collected index entries."""
new = {}
- def add_entry(word, subword, dic=new):
+ def add_entry(word, subword, link=True, dic=new):
entry = dic.get(word)
if not entry:
dic[word] = entry = [[], {}]
if subword:
- add_entry(subword, '', dic=entry[1])
- else:
+ add_entry(subword, '', link=link, dic=entry[1])
+ elif link:
try:
- entry[0].append(builder.get_relative_uri('genindex', fn)
- + '#' + tid)
+ uri = builder.get_relative_uri('genindex', fn) + '#' + tid
except NoUri:
pass
+ else:
+ entry[0].append((main, uri))
for fn, entries in self.indexentries.iteritems():
# new entry types must be listed in directives/other.py!
- for type, value, tid, alias in entries:
- if type == 'single':
- try:
- entry, subentry = value.split(';', 1)
- except ValueError:
- entry, subentry = value, ''
- if not entry:
- self.warn(fn, 'invalid index entry %r' % value)
- continue
- add_entry(entry.strip(), subentry.strip())
- elif type == 'pair':
- try:
- first, second = map(lambda x: x.strip(),
- value.split(';', 1))
- if not first or not second:
- raise ValueError
- except ValueError:
- self.warn(fn, 'invalid pair index entry %r' % value)
- continue
- add_entry(first, second)
- add_entry(second, first)
- elif type == 'triple':
- try:
- first, second, third = map(lambda x: x.strip(),
- value.split(';', 2))
- if not first or not second or not third:
- raise ValueError
- except ValueError:
- self.warn(fn, 'invalid triple index entry %r' % value)
- continue
- add_entry(first, second+' '+third)
- add_entry(second, third+', '+first)
- add_entry(third, first+' '+second)
- else:
- self.warn(fn, 'unknown index entry type %r' % type)
+ for type, value, tid, main in entries:
+ try:
+ if type == 'single':
+ try:
+ entry, subentry = split_into(2, 'single', value)
+ except ValueError:
+ entry, = split_into(1, 'single', value)
+ subentry = ''
+ add_entry(entry, subentry)
+ elif type == 'pair':
+ first, second = split_into(2, 'pair', value)
+ add_entry(first, second)
+ add_entry(second, first)
+ elif type == 'triple':
+ first, second, third = split_into(3, 'triple', value)
+ add_entry(first, second+' '+third)
+ add_entry(second, third+', '+first)
+ add_entry(third, first+' '+second)
+ elif type == 'see':
+ first, second = split_into(2, 'see', value)
+ add_entry(first, _('see %s') % second, link=False)
+ elif type == 'seealso':
+ first, second = split_into(2, 'see', value)
+ add_entry(first, _('see also %s') % second, link=False)
+ else:
+ self.warn(fn, 'unknown index entry type %r' % type)
+ except ValueError, err:
+ self.warn(fn, str(err))
# sort the index entries; put all symbols at the front, even those
# following the letters in ASCII, this is where the chr(127) comes from
@@ -1541,8 +1672,9 @@ class BuildEnvironment:
i += 1
# group the entries by letter
- def keyfunc2((k, v), letters=string.ascii_uppercase + '_'):
+ def keyfunc2(item, letters=string.ascii_uppercase + '_'):
# hack: mutating the subitems dicts to a list in the keyfunc
+ k, v = item
v[1] = sorted((si, se) for (si, (se, void)) in v[1].iteritems())
# now calculate the key
letter = unicodedata.normalize('NFD', k[0])[0].upper()
@@ -1601,7 +1733,6 @@ class BuildEnvironment:
def check_consistency(self):
"""Do consistency checks."""
-
for docname in sorted(self.all_docs):
if docname not in self.files_to_rebuild:
if docname == self.config.master_doc:
@@ -1610,3 +1741,4 @@ class BuildEnvironment:
if 'orphan' in self.metadata[docname]:
continue
self.warn(docname, 'document isn\'t included in any toctree')
+
diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py
index f72e7dfa..f19334a0 100644
--- a/sphinx/ext/autodoc.py
+++ b/sphinx/ext/autodoc.py
@@ -15,7 +15,7 @@ import re
import sys
import inspect
import traceback
-from types import FunctionType, BuiltinFunctionType, MethodType, ClassType
+from types import FunctionType, BuiltinFunctionType, MethodType
from docutils import nodes
from docutils.utils import assemble_option_dict
@@ -27,16 +27,12 @@ from sphinx.pycode import ModuleAnalyzer, PycodeError
from sphinx.application import ExtensionError
from sphinx.util.nodes import nested_parse_with_titles
from sphinx.util.compat import Directive
-from sphinx.util.inspect import isdescriptor, safe_getmembers, safe_getattr
+from sphinx.util.inspect import getargspec, isdescriptor, safe_getmembers, \
+ safe_getattr, safe_repr
+from sphinx.util.pycompat import base_exception, class_types
from sphinx.util.docstrings import prepare_docstring
-try:
- base_exception = BaseException
-except NameError:
- base_exception = Exception
-
-
#: extended signature RE: with explicit module name separated by ::
py_ext_sig_re = re.compile(
r'''^ ([\w.]+::)? # explicit module name
@@ -91,7 +87,8 @@ def members_set_option(arg):
def bool_option(arg):
"""Used to convert flag options to auto directives. (Instead of
- directives.flag(), which returns None.)"""
+ directives.flag(), which returns None).
+ """
return True
@@ -139,8 +136,7 @@ class AutodocReporter(object):
# Some useful event listener factories for autodoc-process-docstring.
def cut_lines(pre, post=0, what=None):
- """
- Return a listener that removes the first *pre* and last *post*
+ """Return a listener that removes the first *pre* and last *post*
lines of every docstring. If *what* is a sequence of strings,
only docstrings of a type in *what* will be processed.
@@ -166,9 +162,8 @@ def cut_lines(pre, post=0, what=None):
return process
def between(marker, what=None, keepempty=False, exclude=False):
- """
- Return a listener that either keeps, or if *exclude* is True excludes, lines
- between lines that match the *marker* regular expression. If no line
+ """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.
@@ -270,8 +265,7 @@ class Documenter(object):
self.directive.result.append(self.indent + line, source, *lineno)
def resolve_name(self, modname, parents, path, base):
- """
- Resolve the module and name of the object to document given by the
+ """Resolve the module and name of the object to document given by the
arguments and the current module/class.
Must return a pair of the module name and a chain of attributes; for
@@ -281,8 +275,7 @@ class Documenter(object):
raise NotImplementedError('must be implemented in subclasses')
def parse_name(self):
- """
- Determine what module to import and what attribute to document.
+ """Determine what module to import and what attribute to document.
Returns True and sets *self.modname*, *self.objpath*, *self.fullname*,
*self.args* and *self.retann* if parsing and resolving was successful.
@@ -319,8 +312,7 @@ class Documenter(object):
return True
def import_object(self):
- """
- Import the object given by *self.modname* and *self.objpath* and sets
+ """Import the object given by *self.modname* and *self.objpath* and set
it as *self.object*.
Returns True if successful, False if an error occurred.
@@ -349,15 +341,15 @@ class Documenter(object):
return False
def get_real_modname(self):
- """
- Get the real module name of an object to document. (It can differ
- from the name of the module through which the object was imported.)
+ """Get the real module name of an object to document.
+
+ It can differ from the name of the module through which the object was
+ imported.
"""
return self.get_attr(self.object, '__module__', None) or self.modname
def check_module(self):
- """
- Check if *self.object* is really defined in the module given by
+ """Check if *self.object* is really defined in the module given by
*self.modname*.
"""
modname = self.get_attr(self.object, '__module__', None)
@@ -366,25 +358,26 @@ class Documenter(object):
return True
def format_args(self):
- """
- Format the argument signature of *self.object*. Should return None if
- the object does not have a signature.
+ """Format the argument signature of *self.object*.
+
+ Should return None if the object does not have a signature.
"""
return None
def format_name(self):
- """
- Format the name of *self.object*. This normally should be something
- that can be parsed by the generated directive, but doesn't need to be
- (Sphinx will display it unparsed then).
+ """Format the name of *self.object*.
+
+ This normally should be something that can be parsed by the generated
+ directive, but doesn't need to be (Sphinx will display it unparsed
+ then).
"""
# normally the name doesn't contain the module (except for module
# directives of course)
return '.'.join(self.objpath) or self.modname
def format_signature(self):
- """
- Format the signature (arguments and return annotation) of the object.
+ """Format the signature (arguments and return annotation) of the object.
+
Let the user process it via the ``autodoc-process-signature`` event.
"""
if self.args is not None:
@@ -426,13 +419,16 @@ class Documenter(object):
# etc. don't support a prepended module name
self.add_line(u' :module: %s' % self.modname, '<autodoc>')
- def get_doc(self, encoding=None):
+ def get_doc(self, encoding=None, ignore=1):
"""Decode and return lines of the docstring(s) for the object."""
docstring = self.get_attr(self.object, '__doc__', None)
- if docstring:
- # make sure we have Unicode docstrings, then sanitize and split
- # into lines
- return [prepare_docstring(force_decode(docstring, encoding))]
+ # make sure we have Unicode docstrings, then sanitize and split
+ # into lines
+ if isinstance(docstring, unicode):
+ return [prepare_docstring(docstring, ignore)]
+ elif docstring:
+ return [prepare_docstring(force_decode(docstring, encoding),
+ ignore)]
return []
def process_doc(self, docstrings):
@@ -451,8 +447,11 @@ class Documenter(object):
# set sourcename and add content from attribute documentation
if self.analyzer:
# prevent encoding errors when the file name is non-ASCII
- filename = unicode(self.analyzer.srcname,
- sys.getfilesystemencoding(), 'replace')
+ if not isinstance(self.analyzer.srcname, unicode):
+ filename = unicode(self.analyzer.srcname,
+ sys.getfilesystemencoding(), 'replace')
+ else:
+ filename = self.analyzer.srcname
sourcename = u'%s:docstring of %s' % (filename, self.fullname)
attr_docs = self.analyzer.find_attr_docs()
@@ -484,8 +483,7 @@ class Documenter(object):
self.add_line(line, src[0], src[1])
def get_object_members(self, want_all):
- """
- Return `(members_check_module, members)` where `members` is a
+ """Return `(members_check_module, members)` where `members` is a
list of `(membername, member)` pairs of the members of *self.object*.
If *want_all* is True, return all members. Else, only return those
@@ -529,11 +527,15 @@ class Documenter(object):
return False, sorted(members)
def filter_members(self, members, want_all):
- """
- Filter the given member list: members are skipped if
+ """Filter the given member list.
- - they are private (except if given explicitly)
- - they are undocumented (except if undoc-members is given)
+ Members are skipped if
+
+ - they are private (except if given explicitly or the private-members
+ option is set)
+ - they are special methods (except if given explicitly or the
+ special-members option is set)
+ - they are undocumented (except if the undoc-members option is set)
The user can override the skipping decision by connecting to the
``autodoc-skip-member`` event.
@@ -553,18 +555,33 @@ class Documenter(object):
# if isattr is True, the member is documented as an attribute
isattr = False
- if want_all and membername.startswith('_'):
+ doc = self.get_attr(member, '__doc__', None)
+ # if the member __doc__ is the same as self's __doc__, it's just
+ # inherited and therefore not the member's doc
+ cls = self.get_attr(member, '__class__', None)
+ if cls:
+ cls_doc = self.get_attr(cls, '__doc__', None)
+ if cls_doc == doc:
+ doc = None
+ has_doc = bool(doc)
+
+ keep = False
+ if want_all and membername.startswith('__') and \
+ membername.endswith('__') and len(membername) > 4:
+ # special __methods__
+ if self.options.special_members and membername != '__doc__':
+ keep = has_doc or self.options.undoc_members
+ elif want_all and membername.startswith('_'):
# ignore members whose name starts with _ by default
- skip = True
+ keep = self.options.private_members and \
+ (has_doc or self.options.undoc_members)
elif (namespace, membername) in attr_docs:
# keep documented attributes
- skip = False
+ keep = True
isattr = True
else:
- # ignore undocumented members if :undoc-members:
- # is not given
- doc = self.get_attr(member, '__doc__', None)
- skip = not self.options.undoc_members and not doc
+ # ignore undocumented members if :undoc-members: is not given
+ keep = has_doc or self.options.undoc_members
# give the user a chance to decide whether this member
# should be skipped
@@ -572,20 +589,20 @@ class Documenter(object):
# let extensions preprocess docstrings
skip_user = self.env.app.emit_firstresult(
'autodoc-skip-member', self.objtype, membername, member,
- skip, self.options)
+ not keep, self.options)
if skip_user is not None:
- skip = skip_user
- if skip:
- continue
+ keep = not skip_user
- ret.append((membername, member, isattr))
+ if keep:
+ ret.append((membername, member, isattr))
return ret
def document_members(self, all_members=False):
- """
- Generate reST for member documentation. If *all_members* is True,
- do all members, else those given by *self.options.members*.
+ """Generate reST for member documentation.
+
+ If *all_members* is True, do all members, else those given by
+ *self.options.members*.
"""
# set current namespace for finding members
self.env.temp_data['autodoc:module'] = self.modname
@@ -643,8 +660,8 @@ class Documenter(object):
def generate(self, more_content=None, real_modname=None,
check_module=False, all_members=False):
- """
- Generate reST for the object given by *self.name*, and possibly members.
+ """Generate reST for the object given by *self.name*, and possibly for
+ its members.
If *more_content* is given, include that content. If *real_modname* is
given, use that module name to find attribute docs. If *check_module* is
@@ -727,6 +744,7 @@ class ModuleDocumenter(Documenter):
'show-inheritance': bool_option, 'synopsis': identity,
'platform': identity, 'deprecated': bool_option,
'member-order': identity, 'exclude-members': members_set_option,
+ 'private-members': bool_option, 'special-members': bool_option,
}
@classmethod
@@ -833,7 +851,53 @@ class ClassLevelDocumenter(Documenter):
return modname, parents + [base]
-class FunctionDocumenter(ModuleLevelDocumenter):
+class DocstringSignatureMixin(object):
+ """
+ Mixin for FunctionDocumenter and MethodDocumenter to provide the
+ feature of reading the signature from the docstring.
+ """
+
+ def _find_signature(self, encoding=None):
+ docstrings = Documenter.get_doc(self, encoding, 2)
+ if len(docstrings) != 1:
+ return
+ doclines = docstrings[0]
+ setattr(self, '__new_doclines', doclines)
+ if not doclines:
+ return
+ # match first line of docstring against signature RE
+ match = py_ext_sig_re.match(doclines[0])
+ if not match:
+ return
+ exmod, path, base, args, retann = match.groups()
+ # the base name must match ours
+ if not self.objpath or base != self.objpath[-1]:
+ return
+ # ok, now jump over remaining empty lines and set the remaining
+ # lines as the new doclines
+ i = 1
+ while i < len(doclines) and not doclines[i].strip():
+ i += 1
+ setattr(self, '__new_doclines', doclines[i:])
+ return args, retann
+
+ def get_doc(self, encoding=None, ignore=1):
+ lines = getattr(self, '__new_doclines', None)
+ if lines is not None:
+ return [lines]
+ return Documenter.get_doc(self, encoding, ignore)
+
+ def format_signature(self):
+ if self.args is None and self.env.config.autodoc_docstring_signature:
+ # only act if a signature is not explicitly given already, and if
+ # the feature is enabled
+ result = self._find_signature()
+ if result is not None:
+ self.args, self.retann = result
+ return Documenter.format_signature(self)
+
+
+class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter):
"""
Specialized Documenter subclass for functions.
"""
@@ -847,18 +911,18 @@ class FunctionDocumenter(ModuleLevelDocumenter):
def format_args(self):
if inspect.isbuiltin(self.object) or \
inspect.ismethoddescriptor(self.object):
- # can never get arguments of a C function or method
+ # cannot introspect arguments of a C function or method
return None
try:
- argspec = inspect.getargspec(self.object)
+ argspec = getargspec(self.object)
except TypeError:
# if a class should be documented as function (yay duck
# typing) we try to use the constructor signature as function
# signature without the first argument.
try:
- argspec = inspect.getargspec(self.object.__new__)
+ argspec = getargspec(self.object.__new__)
except TypeError:
- argspec = inspect.getargspec(self.object.__init__)
+ argspec = getargspec(self.object.__init__)
if argspec[0]:
del argspec[0][0]
args = inspect.formatargspec(*argspec)
@@ -881,11 +945,12 @@ class ClassDocumenter(ModuleLevelDocumenter):
'noindex': bool_option, 'inherited-members': bool_option,
'show-inheritance': bool_option, 'member-order': identity,
'exclude-members': members_set_option,
+ 'private-members': bool_option, 'special-members': bool_option,
}
@classmethod
def can_document_member(cls, member, membername, isattr, parent):
- return isinstance(member, (type, ClassType))
+ return isinstance(member, class_types)
def import_object(self):
ret = ModuleLevelDocumenter.import_object(self)
@@ -907,7 +972,7 @@ class ClassDocumenter(ModuleLevelDocumenter):
(inspect.ismethod(initmeth) or inspect.isfunction(initmeth)):
return None
try:
- argspec = inspect.getargspec(initmeth)
+ argspec = getargspec(initmeth)
except TypeError:
# still not possible: happens e.g. for old-style classes
# with __init__ in C
@@ -937,7 +1002,7 @@ class ClassDocumenter(ModuleLevelDocumenter):
self.add_line(_(u' Bases: %s') % ', '.join(bases),
'<autodoc>')
- def get_doc(self, encoding=None):
+ def get_doc(self, encoding=None, ignore=1):
content = self.env.config.autoclass_content
docstrings = []
@@ -958,9 +1023,12 @@ class ClassDocumenter(ModuleLevelDocumenter):
docstrings = [initdocstring]
else:
docstrings.append(initdocstring)
-
- return [prepare_docstring(force_decode(docstring, encoding))
- for docstring in docstrings]
+ doc = []
+ for docstring in docstrings:
+ if not isinstance(docstring, unicode):
+ docstring = force_decode(docstring, encoding)
+ doc.append(prepare_docstring(docstring))
+ return doc
def add_content(self, more_content, no_docstring=False):
if self.doc_as_attr:
@@ -991,7 +1059,7 @@ class ExceptionDocumenter(ClassDocumenter):
@classmethod
def can_document_member(cls, member, membername, isattr, parent):
- return isinstance(member, (type, ClassType)) and \
+ return isinstance(member, class_types) and \
issubclass(member, base_exception)
@@ -1001,16 +1069,26 @@ class DataDocumenter(ModuleLevelDocumenter):
"""
objtype = 'data'
member_order = 40
+ priority = -10
@classmethod
def can_document_member(cls, member, membername, isattr, parent):
return isinstance(parent, ModuleDocumenter) and isattr
+ def add_directive_header(self, sig):
+ ModuleLevelDocumenter.add_directive_header(self, sig)
+ try:
+ objrepr = safe_repr(self.object)
+ except ValueError:
+ pass
+ else:
+ self.add_line(u' :annotation: = ' + objrepr, '<autodoc>')
+
def document_members(self, all_members=False):
pass
-class MethodDocumenter(ClassLevelDocumenter):
+class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter):
"""
Specialized Documenter subclass for methods (normal, static and class).
"""
@@ -1023,31 +1101,45 @@ class MethodDocumenter(ClassLevelDocumenter):
return inspect.isroutine(member) and \
not isinstance(parent, ModuleDocumenter)
- def import_object(self):
- ret = ClassLevelDocumenter.import_object(self)
- if isinstance(self.object, classmethod) or \
- (isinstance(self.object, MethodType) and
- self.object.im_self is not None):
- self.directivetype = 'classmethod'
- # document class and static members before ordinary ones
- self.member_order = self.member_order - 1
- elif isinstance(self.object, FunctionType) or \
- (isinstance(self.object, BuiltinFunctionType) and
- hasattr(self.object, '__self__') and
- self.object.__self__ is not None):
- self.directivetype = 'staticmethod'
- # document class and static members before ordinary ones
- self.member_order = self.member_order - 1
- else:
- self.directivetype = 'method'
- return ret
+ if sys.version_info >= (3, 0):
+ def import_object(self):
+ ret = ClassLevelDocumenter.import_object(self)
+ obj_from_parent = self.parent.__dict__.get(self.object_name)
+ if isinstance(obj_from_parent, classmethod):
+ self.directivetype = 'classmethod'
+ self.member_order = self.member_order - 1
+ elif isinstance(obj_from_parent, staticmethod):
+ self.directivetype = 'staticmethod'
+ self.member_order = self.member_order - 1
+ else:
+ self.directivetype = 'method'
+ return ret
+ else:
+ def import_object(self):
+ ret = ClassLevelDocumenter.import_object(self)
+ if isinstance(self.object, classmethod) or \
+ (isinstance(self.object, MethodType) and
+ self.object.im_self is not None):
+ self.directivetype = 'classmethod'
+ # document class and static members before ordinary ones
+ self.member_order = self.member_order - 1
+ elif isinstance(self.object, FunctionType) or \
+ (isinstance(self.object, BuiltinFunctionType) and
+ hasattr(self.object, '__self__') and
+ self.object.__self__ is not None):
+ self.directivetype = 'staticmethod'
+ # document class and static members before ordinary ones
+ self.member_order = self.member_order - 1
+ else:
+ self.directivetype = 'method'
+ return ret
def format_args(self):
if inspect.isbuiltin(self.object) or \
inspect.ismethoddescriptor(self.object):
# can never get arguments of a C function or method
return None
- argspec = inspect.getargspec(self.object)
+ argspec = getargspec(self.object)
if argspec[0] and argspec[0][0] in ('cls', 'self'):
del argspec[0][0]
return inspect.formatargspec(*argspec)
@@ -1074,16 +1166,44 @@ class AttributeDocumenter(ClassLevelDocumenter):
isdatadesc = isdescriptor(member) and not \
isinstance(member, cls.method_types) and not \
type(member).__name__ == "method_descriptor"
- return isdatadesc or \
- (isattr and not isinstance(parent, ModuleDocumenter))
+ return isdatadesc or (not isinstance(parent, ModuleDocumenter)
+ and not inspect.isroutine(member)
+ and not isinstance(member, class_types))
def document_members(self, all_members=False):
pass
+ def import_object(self):
+ ret = ClassLevelDocumenter.import_object(self)
+ if isdescriptor(self.object) and \
+ not isinstance(self.object, self.method_types):
+ self._datadescriptor = True
+ else:
+ # if it's not a data descriptor
+ self._datadescriptor = False
+ return ret
+
def get_real_modname(self):
return self.get_attr(self.parent or self.object, '__module__', None) \
or self.modname
+ def add_directive_header(self, sig):
+ ClassLevelDocumenter.add_directive_header(self, sig)
+ if not self._datadescriptor:
+ try:
+ objrepr = safe_repr(self.object)
+ except ValueError:
+ pass
+ else:
+ self.add_line(u' :annotation: = ' + objrepr, '<autodoc>')
+
+ def add_content(self, more_content, no_docstring=False):
+ if not self._datadescriptor:
+ # if it's not a data descriptor, its docstring is very probably the
+ # wrong thing to display
+ no_docstring = True
+ ClassLevelDocumenter.add_content(self, more_content, no_docstring)
+
class InstanceAttributeDocumenter(AttributeDocumenter):
"""
@@ -1106,6 +1226,7 @@ class InstanceAttributeDocumenter(AttributeDocumenter):
"""Never import anything."""
# disguise as an attribute
self.objtype = 'attribute'
+ self._datadescriptor = False
return True
def add_content(self, more_content, no_docstring=False):
@@ -1135,8 +1256,10 @@ class AutoDirective(Directive):
_special_attrgetters = {}
# flags that can be given in autodoc_default_flags
- _default_flags = set(['members', 'undoc-members', 'inherited-members',
- 'show-inheritance'])
+ _default_flags = set([
+ 'members', 'undoc-members', 'inherited-members', 'show-inheritance',
+ 'private-members', 'special-members',
+ ])
# standard docutils directive settings
has_content = True
@@ -1226,6 +1349,17 @@ def setup(app):
app.add_config_value('autoclass_content', 'class', True)
app.add_config_value('autodoc_member_order', 'alphabetic', True)
app.add_config_value('autodoc_default_flags', [], True)
+ app.add_config_value('autodoc_docstring_signature', True, True)
app.add_event('autodoc-process-docstring')
app.add_event('autodoc-process-signature')
app.add_event('autodoc-skip-member')
+
+
+class testcls:
+ """test doc string"""
+
+ def __getattr__(self, x):
+ return x
+
+ def __setattr__(self, x, y):
+ """Attr setter."""
diff --git a/sphinx/ext/autosummary/__init__.py b/sphinx/ext/autosummary/__init__.py
index a194fba8..0f5c2640 100644
--- a/sphinx/ext/autosummary/__init__.py
+++ b/sphinx/ext/autosummary/__init__.py
@@ -73,8 +73,7 @@ class autosummary_toc(nodes.comment):
pass
def process_autosummary_toc(app, doctree):
- """
- Insert items described in autosummary:: to the TOC tree, but do
+ """Insert items described in autosummary:: to the TOC tree, but do
not generate the toctree:: list.
"""
env = app.builder.env
@@ -126,22 +125,39 @@ def autosummary_table_visit_html(self, node):
# -- autodoc integration -------------------------------------------------------
-try:
- ismemberdescriptor = inspect.ismemberdescriptor
- isgetsetdescriptor = inspect.isgetsetdescriptor
-except AttributeError:
- def ismemberdescriptor(obj):
- return False
- isgetsetdescriptor = ismemberdescriptor
+class FakeDirective:
+ env = {}
+ genopt = {}
def get_documenter(obj, parent):
+ """Get an autodoc.Documenter class suitable for documenting the given
+ object.
+
+ *obj* is the Python object to be documented, and *parent* is an
+ another Python object (e.g. a module or a class) to which *obj*
+ belongs to.
"""
- Get an autodoc.Documenter class suitable for documenting the given object
- """
- from sphinx.ext.autodoc import AutoDirective, DataDocumenter
+ from sphinx.ext.autodoc import AutoDirective, DataDocumenter, \
+ ModuleDocumenter
+
+ if inspect.ismodule(obj):
+ # ModuleDocumenter.can_document_member always returns False
+ return ModuleDocumenter
+ # Construct a fake documenter for *parent*
+ if parent is not None:
+ parent_doc_cls = get_documenter(parent, None)
+ else:
+ parent_doc_cls = ModuleDocumenter
+
+ if hasattr(parent, '__name__'):
+ parent_doc = parent_doc_cls(FakeDirective(), parent.__name__)
+ else:
+ parent_doc = parent_doc_cls(FakeDirective(), "")
+
+ # Get the corrent documenter class for *obj*
classes = [cls for cls in AutoDirective._registry.values()
- if cls.can_document_member(obj, '', False, parent)]
+ if cls.can_document_member(obj, '', False, parent_doc)]
if classes:
classes.sort(key=lambda cls: cls.priority)
return classes[-1]
@@ -155,7 +171,7 @@ class Autosummary(Directive):
"""
Pretty table containing short signatures and summaries of functions etc.
- autosummary also generates a (hidden) toctree:: node.
+ autosummary can also optionally generate a hidden toctree:: node.
"""
required_arguments = 0
@@ -210,16 +226,12 @@ class Autosummary(Directive):
return self.warnings + nodes
def get_items(self, names):
- """
- Try to import the given names, and return a list of
+ """Try to import the given names, and return a list of
``[(name, signature, summary_string, real_name), ...]``.
"""
env = self.state.document.settings.env
- prefixes = ['']
- currmodule = env.temp_data.get('py:module')
- if currmodule:
- prefixes.insert(0, currmodule)
+ prefixes = get_import_prefixes_from_env(env)
items = []
@@ -279,8 +291,7 @@ class Autosummary(Directive):
return items
def get_table(self, items):
- """
- Generate a proper list of table nodes for autosummary:: directive.
+ """Generate a proper list of table nodes for autosummary:: directive.
*items* is a list produced by :meth:`get_items`.
"""
@@ -325,13 +336,29 @@ class Autosummary(Directive):
def mangle_signature(sig, max_chars=30):
"""Reformat a function signature to a more compact form."""
- sig = re.sub(r"^\((.*)\)$", r"\1", sig) + ", "
- r = re.compile(r"(?P<name>[a-zA-Z0-9_*]+)(?P<default>=.*?)?, ")
- items = r.findall(sig)
+ s = re.sub(r"^\((.*)\)$", r"\1", sig).strip()
+
+ # Strip strings (which can contain things that confuse the code below)
+ s = re.sub(r"\\\\", "", s)
+ s = re.sub(r"\\'", "", s)
+ s = re.sub(r"'[^']*'", "", s)
+
+ # Parse the signature to arguments + options
+ args = []
+ opts = []
+
+ opt_re = re.compile(r"^(.*, |)([a-zA-Z0-9_*]+)=")
+ while s:
+ m = opt_re.search(s)
+ if not m:
+ # The rest are arguments
+ args = s.split(', ')
+ break
- args = [name for name, default in items if not default]
- opts = [name for name, default in items if default]
+ opts.insert(0, m.group(2))
+ s = m.group(1)[:-2]
+ # Produce a more compact signature
sig = limited_join(", ", args, max_chars=max_chars-2)
if opts:
if not sig:
@@ -343,8 +370,7 @@ def mangle_signature(sig, max_chars=30):
return u"(%s)" % sig
def limited_join(sep, items, max_chars=30, overflow_marker="..."):
- """
- Join a number of strings to one, limiting the length to *max_chars*.
+ """Join a number of strings to one, limiting the length to *max_chars*.
If the string overflows this limit, replace the last fitting item by
*overflow_marker*.
@@ -368,9 +394,28 @@ def limited_join(sep, items, max_chars=30, overflow_marker="..."):
# -- Importing items -----------------------------------------------------------
-def import_by_name(name, prefixes=[None]):
+def get_import_prefixes_from_env(env):
+ """
+ Obtain current Python import prefixes (for `import_by_name`)
+ from ``document.env``
"""
- Import a Python object that has the given *name*, under one of the
+ prefixes = [None]
+
+ currmodule = env.temp_data.get('py:module')
+ if currmodule:
+ prefixes.insert(0, currmodule)
+
+ currclass = env.temp_data.get('py:class')
+ if currclass:
+ if currmodule:
+ prefixes.insert(0, currmodule + "." + currclass)
+ else:
+ prefixes.insert(0, currclass)
+
+ return prefixes
+
+def import_by_name(name, prefixes=[None]):
+ """Import a Python object that has the given *name*, under one of the
*prefixes*. The first name that succeeds is used.
"""
tried = []
@@ -431,8 +476,7 @@ def _import_by_name(name):
def autolink_role(typ, rawtext, etext, lineno, inliner,
options={}, content=[]):
- """
- Smart linking role.
+ """Smart linking role.
Expands to ':obj:`text`' if `text` is an object that can be imported;
otherwise expands to '*text*'.
@@ -442,8 +486,7 @@ def autolink_role(typ, rawtext, etext, lineno, inliner,
'obj', rawtext, etext, lineno, inliner, options, content)
pnode = r[0][0]
- prefixes = [None]
- #prefixes.insert(0, inliner.document.settings.env.currmodule)
+ prefixes = get_import_prefixes_from_env(env)
try:
name, obj, parent = import_by_name(pnode['reftarget'], prefixes)
except ImportError:
@@ -483,12 +526,14 @@ def setup(app):
html=(autosummary_toc_visit_html, autosummary_noop),
latex=(autosummary_noop, autosummary_noop),
text=(autosummary_noop, autosummary_noop),
- man=(autosummary_noop, autosummary_noop))
+ man=(autosummary_noop, autosummary_noop),
+ texinfo=(autosummary_noop, autosummary_noop))
app.add_node(autosummary_table,
html=(autosummary_table_visit_html, autosummary_noop),
latex=(autosummary_noop, autosummary_noop),
text=(autosummary_noop, autosummary_noop),
- man=(autosummary_noop, autosummary_noop))
+ man=(autosummary_noop, autosummary_noop),
+ texinfo=(autosummary_noop, autosummary_noop))
app.add_directive('autosummary', Autosummary)
app.add_role('autolink', autolink_role)
app.connect('doctree-read', process_autosummary_toc)
diff --git a/sphinx/ext/autosummary/generate.py b/sphinx/ext/autosummary/generate.py
index b5ff3f4c..089d181f 100644
--- a/sphinx/ext/autosummary/generate.py
+++ b/sphinx/ext/autosummary/generate.py
@@ -12,11 +12,12 @@
Example Makefile rule::
generate:
- sphinx-autogen source/*.rst source/generated
+ sphinx-autogen -o source/generated source/*.rst
:copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
+
import os
import re
import sys
@@ -193,8 +194,8 @@ def generate_autosummary_docs(sources, output_dir=None, suffix='.rst',
# -- Finding documented entries in files ---------------------------------------
def find_autosummary_in_files(filenames):
- """
- Find out what items are documented in source/*.rst.
+ """Find out what items are documented in source/*.rst.
+
See `find_autosummary_in_lines`.
"""
documented = []
@@ -206,8 +207,8 @@ def find_autosummary_in_files(filenames):
return documented
def find_autosummary_in_docstring(name, module=None, filename=None):
- """
- Find out what items are documented in the given object's docstring.
+ """Find out what items are documented in the given object's docstring.
+
See `find_autosummary_in_lines`.
"""
try:
@@ -221,8 +222,8 @@ def find_autosummary_in_docstring(name, module=None, filename=None):
return []
def find_autosummary_in_lines(lines, module=None, filename=None):
- """
- Find out what items appear in autosummary:: directives in the given lines.
+ """Find out what items appear in autosummary:: directives in the
+ given lines.
Returns a list of (name, toctree, template) where *name* is a name
of an object and *toctree* the :toctree: path of the corresponding
@@ -231,7 +232,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None):
*template* ``None`` if the directive does not have the
corresponding options set.
"""
- autosummary_re = re.compile(r'^\s*\.\.\s+autosummary::\s*')
+ autosummary_re = re.compile(r'^(\s*)\.\.\s+autosummary::\s*')
automodule_re = re.compile(
r'^\s*\.\.\s+automodule::\s*([A-Za-z0-9_.]+)\s*$')
module_re = re.compile(
@@ -246,6 +247,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None):
template = None
current_module = module
in_autosummary = False
+ base_indent = ""
for line in lines:
if in_autosummary:
@@ -276,7 +278,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None):
documented.append((name, toctree, template))
continue
- if not line.strip():
+ if not line.strip() or line.startswith(base_indent + " "):
continue
in_autosummary = False
@@ -284,6 +286,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None):
m = autosummary_re.match(line)
if m:
in_autosummary = True
+ base_indent = m.group(1)
toctree = None
template = None
continue
diff --git a/sphinx/ext/coverage.py b/sphinx/ext/coverage.py
index cfd4265e..af1b4026 100644
--- a/sphinx/ext/coverage.py
+++ b/sphinx/ext/coverage.py
@@ -105,7 +105,8 @@ class CoverageBuilder(Builder):
output_file = path.join(self.outdir, 'c.txt')
op = open(output_file, 'w')
try:
- write_header(op, 'Undocumented C API elements', '=')
+ if self.config.coverage_write_headline:
+ write_header(op, 'Undocumented C API elements', '=')
op.write('\n')
for filename, undoc in self.c_undoc.iteritems():
@@ -120,6 +121,8 @@ class CoverageBuilder(Builder):
objects = self.env.domaindata['py']['objects']
modules = self.env.domaindata['py']['modules']
+ skip_undoc = self.config.coverage_skip_undoc_in_source
+
for mod_name in modules:
ignore = False
for exp in self.mod_ignorexps:
@@ -160,6 +163,8 @@ class CoverageBuilder(Builder):
if exp.match(name):
break
else:
+ if skip_undoc and not obj.__doc__:
+ continue
funcs.append(name)
elif inspect.isclass(obj):
for exp in self.cls_ignorexps:
@@ -167,17 +172,27 @@ class CoverageBuilder(Builder):
break
else:
if full_name not in objects:
+ if skip_undoc and not obj.__doc__:
+ continue
# not documented at all
classes[name] = []
continue
attrs = []
- for attr_name, attr in inspect.getmembers(
- obj, inspect.ismethod):
+ for attr_name in dir(obj):
+ if attr_name not in obj.__dict__:
+ continue
+ attr = getattr(obj, attr_name)
+ if not (inspect.ismethod(attr) or
+ inspect.isfunction(attr)):
+ continue
if attr_name[0] == '_':
# starts with an underscore, ignore it
continue
+ if skip_undoc and not attr.__doc__:
+ # skip methods without docstring if wished
+ continue
full_attr_name = '%s.%s' % (full_name, attr_name)
if full_attr_name not in objects:
@@ -194,8 +209,8 @@ class CoverageBuilder(Builder):
op = open(output_file, 'w')
failed = []
try:
- write_header(op, 'Undocumented Python objects', '=')
-
+ if self.config.coverage_write_headline:
+ write_header(op, 'Undocumented Python objects', '=')
keys = self.py_undoc.keys()
keys.sort()
for name in keys:
@@ -217,7 +232,7 @@ class CoverageBuilder(Builder):
if not methods:
op.write(' * %s\n' % name)
else:
- op.write(' * %s -- missing methods:\n' % name)
+ op.write(' * %s -- missing methods:\n\n' % name)
op.writelines(' - %s\n' % x for x in methods)
op.write('\n')
@@ -245,3 +260,5 @@ def setup(app):
app.add_config_value('coverage_c_path', [], False)
app.add_config_value('coverage_c_regexes', {}, False)
app.add_config_value('coverage_ignore_c_items', {}, False)
+ app.add_config_value('coverage_write_headline', True, False)
+ app.add_config_value('coverage_skip_undoc_in_source', False, False)
diff --git a/sphinx/ext/doctest.py b/sphinx/ext/doctest.py
index dcee09f5..2952388f 100644
--- a/sphinx/ext/doctest.py
+++ b/sphinx/ext/doctest.py
@@ -56,7 +56,7 @@ class TestDirective(Directive):
test = code
code = doctestopt_re.sub('', code)
nodetype = nodes.literal_block
- if self.name == 'testsetup' or 'hide' in self.options:
+ if self.name in ('testsetup', 'testcleanup') or 'hide' in self.options:
nodetype = nodes.comment
if self.arguments:
groups = [x.strip() for x in self.arguments[0].split(',')]
@@ -86,6 +86,9 @@ class TestDirective(Directive):
class TestsetupDirective(TestDirective):
option_spec = {}
+class TestcleanupDirective(TestDirective):
+ option_spec = {}
+
class DoctestDirective(TestDirective):
option_spec = {
'hide': directives.flag,
@@ -113,6 +116,7 @@ class TestGroup(object):
self.name = name
self.setup = []
self.tests = []
+ self.cleanup = []
def add_code(self, code, prepend=False):
if code.type == 'testsetup':
@@ -120,6 +124,8 @@ class TestGroup(object):
self.setup.insert(0, code)
else:
self.setup.append(code)
+ elif code.type == 'testcleanup':
+ self.cleanup.append(code)
elif code.type == 'doctest':
self.tests.append([code])
elif code.type == 'testcode':
@@ -131,8 +137,8 @@ class TestGroup(object):
raise RuntimeError('invalid TestCode type')
def __repr__(self):
- return 'TestGroup(name=%r, setup=%r, tests=%r)' % (
- self.name, self.setup, self.tests)
+ return 'TestGroup(name=%r, setup=%r, cleanup=%r, tests=%r)' % (
+ self.name, self.setup, self.cleanup, self.tests)
class TestCode(object):
@@ -149,14 +155,14 @@ class TestCode(object):
class SphinxDocTestRunner(doctest.DocTestRunner):
def summarize(self, out, verbose=None):
- io = StringIO.StringIO()
+ string_io = StringIO.StringIO()
old_stdout = sys.stdout
- sys.stdout = io
+ sys.stdout = string_io
try:
res = doctest.DocTestRunner.summarize(self, verbose)
finally:
sys.stdout = old_stdout
- out(io.getvalue())
+ out(string_io.getvalue())
return res
def _DocTestRunner__patched_linecache_getlines(self, filename,
@@ -204,6 +210,8 @@ class DocTestBuilder(Builder):
self.total_tries = 0
self.setup_failures = 0
self.setup_tries = 0
+ self.cleanup_failures = 0
+ self.cleanup_tries = 0
date = time.strftime('%Y-%m-%d %H:%M:%S')
@@ -240,12 +248,14 @@ Doctest summary
%5d test%s
%5d failure%s in tests
%5d failure%s in setup code
+%5d failure%s in cleanup code
''' % (self.total_tries, s(self.total_tries),
self.total_failures, s(self.total_failures),
- self.setup_failures, s(self.setup_failures)))
+ self.setup_failures, s(self.setup_failures),
+ self.cleanup_failures, s(self.cleanup_failures)))
self.outfile.close()
- if self.total_failures or self.setup_failures:
+ if self.total_failures or self.setup_failures or self.cleanup_failures:
self.app.statuscode = 1
def write(self, build_docnames, updated_docnames, method='update'):
@@ -265,6 +275,12 @@ Doctest summary
optionflags=self.opt)
self.test_runner = SphinxDocTestRunner(verbose=False,
optionflags=self.opt)
+ self.cleanup_runner = SphinxDocTestRunner(verbose=False,
+ optionflags=self.opt)
+
+ self.test_runner._fakeout = self.setup_runner._fakeout
+ self.cleanup_runner._fakeout = self.setup_runner._fakeout
+
if self.config.doctest_test_doctest_blocks:
def condition(node):
return (isinstance(node, (nodes.literal_block, nodes.comment))
@@ -298,6 +314,11 @@ Doctest summary
'testsetup', lineno=0)
for group in groups.itervalues():
group.add_code(code, prepend=True)
+ if self.config.doctest_global_cleanup:
+ code = TestCode(self.config.doctest_global_cleanup,
+ 'testcleanup', lineno=0)
+ for group in groups.itervalues():
+ group.add_code(code)
if not groups:
return
@@ -313,29 +334,43 @@ Doctest summary
res_f, res_t = self.test_runner.summarize(self._out, verbose=True)
self.total_failures += res_f
self.total_tries += res_t
+ if self.cleanup_runner.tries:
+ res_f, res_t = self.cleanup_runner.summarize(self._out,
+ verbose=True)
+ self.cleanup_failures += res_f
+ self.cleanup_tries += res_t
def compile(self, code, name, type, flags, dont_inherit):
return compile(code, name, self.type, flags, dont_inherit)
def test_group(self, group, filename):
ns = {}
- setup_examples = []
- for setup in group.setup:
- setup_examples.append(doctest.Example(setup.code, '',
- lineno=setup.lineno))
- if setup_examples:
- # simulate a doctest with the setup code
- setup_doctest = doctest.DocTest(setup_examples, {},
- '%s (setup code)' % group.name,
- filename, 0, None)
- setup_doctest.globs = ns
- old_f = self.setup_runner.failures
+
+ def run_setup_cleanup(runner, testcodes, what):
+ examples = []
+ for testcode in testcodes:
+ examples.append(doctest.Example(testcode.code, '',
+ lineno=testcode.lineno))
+ if not examples:
+ return True
+ # simulate a doctest with the code
+ sim_doctest = doctest.DocTest(examples, {},
+ '%s (%s code)' % (group.name, what),
+ filename, 0, None)
+ sim_doctest.globs = ns
+ old_f = runner.failures
self.type = 'exec' # the snippet may contain multiple statements
- self.setup_runner.run(setup_doctest, out=self._warn_out,
- clear_globs=False)
- if self.setup_runner.failures > old_f:
- # don't run the group
- return
+ runner.run(sim_doctest, out=self._warn_out, clear_globs=False)
+ if runner.failures > old_f:
+ return False
+ return True
+
+ # run the setup code
+ if not run_setup_cleanup(self.setup_runner, group.setup, 'setup'):
+ # if setup failed, don't run the group
+ return
+
+ # run the tests
for code in group.tests:
if len(code) == 1:
# ordinary doctests (code/output interleaved)
@@ -373,9 +408,13 @@ Doctest summary
# also don't clear the globs namespace after running the doctest
self.test_runner.run(test, out=self._warn_out, clear_globs=False)
+ # run the cleanup
+ run_setup_cleanup(self.cleanup_runner, group.cleanup, 'cleanup')
+
def setup(app):
app.add_directive('testsetup', TestsetupDirective)
+ app.add_directive('testcleanup', TestcleanupDirective)
app.add_directive('doctest', DoctestDirective)
app.add_directive('testcode', TestcodeDirective)
app.add_directive('testoutput', TestoutputDirective)
@@ -384,3 +423,4 @@ def setup(app):
app.add_config_value('doctest_path', [], False)
app.add_config_value('doctest_test_doctest_blocks', 'default', False)
app.add_config_value('doctest_global_setup', '', False)
+ app.add_config_value('doctest_global_cleanup', '', False)
diff --git a/sphinx/ext/graphviz.py b/sphinx/ext/graphviz.py
index 1bb70d02..886af505 100644
--- a/sphinx/ext/graphviz.py
+++ b/sphinx/ext/graphviz.py
@@ -11,6 +11,7 @@
"""
import re
+import codecs
import posixpath
from os import path
from math import ceil
@@ -24,12 +25,11 @@ from docutils import nodes
from docutils.parsers.rst import directives
from sphinx.errors import SphinxError
-from sphinx.util.osutil import ensuredir, ENOENT, EPIPE
+from sphinx.util.osutil import ensuredir, ENOENT, EPIPE, EINVAL
from sphinx.util.compat import Directive
mapname_re = re.compile(r'<map id="(.*?)"')
-svg_dim_re = re.compile(r'<svg\swidth="(\d+)pt"\sheight="(\d+)pt"', re.M)
class GraphvizError(SphinxError):
@@ -46,23 +46,48 @@ class Graphviz(Directive):
"""
has_content = True
required_arguments = 0
- optional_arguments = 0
+ optional_arguments = 1
final_argument_whitespace = False
option_spec = {
'alt': directives.unchanged,
+ 'inline': directives.flag,
+ 'caption': directives.unchanged,
}
def run(self):
- dotcode = '\n'.join(self.content)
- if not dotcode.strip():
- return [self.state_machine.reporter.warning(
- 'Ignoring "graphviz" directive without content.',
- line=self.lineno)]
+ if self.arguments:
+ document = self.state.document
+ if self.content:
+ return [document.reporter.warning(
+ 'Graphviz directive cannot have both content and '
+ 'a filename argument', line=self.lineno)]
+ env = self.state.document.settings.env
+ rel_filename, filename = env.relfn2path(self.arguments[0])
+ env.note_dependency(rel_filename)
+ try:
+ fp = codecs.open(filename, 'r', 'utf-8')
+ try:
+ dotcode = fp.read()
+ finally:
+ fp.close()
+ except (IOError, OSError):
+ return [document.reporter.warning(
+ 'External Graphviz file %r not found or reading '
+ 'it failed' % filename, line=self.lineno)]
+ else:
+ dotcode = '\n'.join(self.content)
+ if not dotcode.strip():
+ return [self.state_machine.reporter.warning(
+ 'Ignoring "graphviz" directive without content.',
+ line=self.lineno)]
node = graphviz()
node['code'] = dotcode
node['options'] = []
if 'alt' in self.options:
node['alt'] = self.options['alt']
+ if 'caption' in self.options:
+ node['caption'] = self.options['caption']
+ node['inline'] = 'inline' in self.options
return [node]
@@ -76,6 +101,8 @@ class GraphvizSimple(Directive):
final_argument_whitespace = False
option_spec = {
'alt': directives.unchanged,
+ 'inline': directives.flag,
+ 'caption': directives.unchanged,
}
def run(self):
@@ -85,14 +112,16 @@ class GraphvizSimple(Directive):
node['options'] = []
if 'alt' in self.options:
node['alt'] = self.options['alt']
+ if 'caption' in self.options:
+ node['caption'] = self.options['caption']
+ node['inline'] = 'inline' in self.options
return [node]
def render_dot(self, code, options, format, prefix='graphviz'):
- """
- Render graphviz code into a PNG or PDF output file.
- """
+ """Render graphviz code into a PNG or PDF output file."""
hashkey = code.encode('utf-8') + str(options) + \
+ str(self.builder.config.graphviz_dot) + \
str(self.builder.config.graphviz_dot_args)
fname = '%s-%s.%s' % (prefix, sha(hashkey).hexdigest(), format)
if hasattr(self.builder, 'imgpath'):
@@ -133,6 +162,7 @@ def render_dot(self, code, options, format, prefix='graphviz'):
self.builder.config.graphviz_dot)
self.builder._graphviz_warned_dot = True
return None, None
+ wentWrong = False
try:
# Graphviz may close standard input when an error occurs,
# resulting in a broken pipe on communicate()
@@ -140,6 +170,12 @@ def render_dot(self, code, options, format, prefix='graphviz'):
except (OSError, IOError), err:
if err.errno != EPIPE:
raise
+ wentWrong = True
+ except IOError, err:
+ if err.errno != EINVAL:
+ raise
+ wentWrong = True
+ if wentWrong:
# in this case, read the standard output and standard error streams
# directly, to get the error message(s)
stdout, stderr = p.stdout.read(), p.stderr.read()
@@ -150,37 +186,6 @@ def render_dot(self, code, options, format, prefix='graphviz'):
return relfn, outfn
-def get_svg_tag(svgref, svgfile, imgcls=None):
- # Webkit can't figure out svg dimensions when using object tag
- # so we need to get it from the svg file
- fp = open(svgfile, 'r')
- try:
- for line in fp:
- match = svg_dim_re.match(line)
- if match:
- dimensions = match.groups()
- break
- else:
- dimensions = None
- finally:
- fp.close()
-
- # We need this hack to make WebKit show our object tag properly
- def pt2px(x):
- return int(ceil((96.0/72.0) * float(x)))
-
- if dimensions:
- style = ' width="%s" height="%s"' % tuple(map(pt2px, dimensions))
- else:
- style = ''
-
- # The object tag works fine on Firefox and WebKit
- # Besides it's a hack, this strategy does not mess with templates.
- imgcss = imgcls and ' class="%s"' % imgcls or ''
- return '<object type="image/svg+xml" data="%s"%s%s></object>\n' % \
- (svgref, imgcss, style)
-
-
def render_dot_html(self, node, code, options, prefix='graphviz',
imgcls=None, alt=None):
format = self.builder.config.graphviz_output_format
@@ -193,14 +198,21 @@ def render_dot_html(self, node, code, options, prefix='graphviz',
self.builder.warn('dot code %r: ' % code + str(exc))
raise nodes.SkipNode
- self.body.append(self.starttag(node, 'p', CLASS='graphviz'))
+ inline = node.get('inline', False)
+ if inline:
+ wrapper = 'span'
+ else:
+ wrapper = 'p'
+
+ self.body.append(self.starttag(node, wrapper, CLASS='graphviz'))
if fname is None:
self.body.append(self.encode(code))
else:
if alt is None:
alt = node.get('alt', self.encode(code).strip())
+ imgcss = imgcls and 'class="%s"' % imgcls or ''
if format == 'svg':
- svgtag = get_svg_tag(fname, outfn, imgcls)
+ svgtag = '<img src="%s" alt="%s" %s/>\n' % (fname, alt, imgcss)
self.body.append(svgtag)
else:
mapfile = open(outfn + '.map', 'rb')
@@ -208,7 +220,6 @@ def render_dot_html(self, node, code, options, prefix='graphviz',
imgmap = mapfile.readlines()
finally:
mapfile.close()
- imgcss = imgcls and 'class="%s"' % imgcls or ''
if len(imgmap) == 2:
# nothing in image map (the lines are <map> and </map>)
self.body.append('<img src="%s" alt="%s" %s/>\n' %
@@ -219,8 +230,11 @@ def render_dot_html(self, node, code, options, prefix='graphviz',
self.body.append('<img src="%s" alt="%s" usemap="#%s" %s/>\n' %
(fname, alt, mapname, imgcss))
self.body.extend(imgmap)
+ if node.get('caption') and not inline:
+ self.body.append('</p>\n<p class="caption">')
+ self.body.append(self.encode(node['caption']))
- self.body.append('</p>\n')
+ self.body.append('</%s>\n' % wrapper)
raise nodes.SkipNode
@@ -235,18 +249,56 @@ def render_dot_latex(self, node, code, options, prefix='graphviz'):
self.builder.warn('dot code %r: ' % code + str(exc))
raise nodes.SkipNode
+ inline = node.get('inline', False)
+ if inline:
+ para_separator = ''
+ else:
+ para_separator = '\n'
+
if fname is not None:
- self.body.append('\n\\includegraphics{%s}\n' % fname)
+ caption = node.get('caption')
+ # XXX add ids from previous target node
+ if caption and not inline:
+ self.body.append('\n\\begin{figure}[h!]')
+ self.body.append('\n\\begin{center}')
+ self.body.append('\n\\caption{%s}' % self.encode(caption))
+ self.body.append('\n\\includegraphics{%s}' % fname)
+ self.body.append('\n\\end{center}')
+ self.body.append('\n\\end{figure}\n')
+ else:
+ self.body.append('%s\\includegraphics{%s}%s' %
+ (para_separator, fname, para_separator))
raise nodes.SkipNode
def latex_visit_graphviz(self, node):
render_dot_latex(self, node, node['code'], node['options'])
+
+def render_dot_texinfo(self, node, code, options, prefix='graphviz'):
+ try:
+ fname, outfn = render_dot(self, code, options, 'png', prefix)
+ except GraphvizError, exc:
+ self.builder.warn('dot code %r: ' % code + str(exc))
+ raise nodes.SkipNode
+ if fname is not None:
+ self.body.append('\n\n@float\n')
+ caption = node.get('caption')
+ if caption:
+ self.body.append('@caption{%s}\n' % self.escape_arg(caption))
+ self.body.append('@image{%s,,,[graphviz],png}\n'
+ '@end float\n\n' % fname[:-4])
+ raise nodes.SkipNode
+
+def texinfo_visit_graphviz(self, node):
+ render_dot_texinfo(self, node, node['code'], node['options'])
+
+
def setup(app):
app.add_node(graphviz,
html=(html_visit_graphviz, None),
- latex=(latex_visit_graphviz, None))
+ latex=(latex_visit_graphviz, None),
+ texinfo=(texinfo_visit_graphviz, None))
app.add_directive('graphviz', Graphviz)
app.add_directive('graph', GraphvizSimple)
app.add_directive('digraph', GraphvizSimple)
diff --git a/sphinx/ext/inheritance_diagram.py b/sphinx/ext/inheritance_diagram.py
index 1b49720f..a2490486 100644
--- a/sphinx/ext/inheritance_diagram.py
+++ b/sphinx/ext/inheritance_diagram.py
@@ -47,7 +47,8 @@ except ImportError:
from docutils import nodes
from docutils.parsers.rst import directives
-from sphinx.ext.graphviz import render_dot_html, render_dot_latex
+from sphinx.ext.graphviz import render_dot_html, render_dot_latex, \
+ render_dot_texinfo
from sphinx.util.compat import Directive
@@ -66,24 +67,23 @@ class InheritanceGraph(object):
from all the way to the root "object", and then is able to generate a
graphviz dot graph from them.
"""
- def __init__(self, class_names, currmodule, show_builtins=False, parts=0):
- """
- *class_names* is a list of child classes to show bases from.
+ def __init__(self, class_names, currmodule, show_builtins=False,
+ private_bases=False, parts=0):
+ """*class_names* is a list of child classes to show bases from.
If *show_builtins* is True, then Python builtins will be shown
in the graph.
"""
self.class_names = class_names
classes = self._import_classes(class_names, currmodule)
- self.class_info = self._class_info(classes, show_builtins, parts)
+ self.class_info = self._class_info(classes, show_builtins,
+ private_bases, parts)
if not self.class_info:
raise InheritanceException('No classes found for '
'inheritance diagram')
def _import_class_or_module(self, name, currmodule):
- """
- Import a class using its fully-qualified *name*.
- """
+ """Import a class using its fully-qualified *name*."""
try:
path, base = class_sig_re.match(name).groups()
except (AttributeError, ValueError):
@@ -134,7 +134,7 @@ class InheritanceGraph(object):
classes.extend(self._import_class_or_module(name, currmodule))
return classes
- def _class_info(self, classes, show_builtins, parts):
+ def _class_info(self, classes, show_builtins, private_bases, parts):
"""Return name and bases for all classes that are ancestors of
*classes*.
@@ -147,6 +147,8 @@ class InheritanceGraph(object):
def recurse(cls):
if not show_builtins and cls in builtins:
return
+ if not private_bases and cls.__name__.startswith('_'):
+ return
nodename = self.class_name(cls, parts)
fullname = self.class_name(cls, 0)
@@ -156,6 +158,8 @@ class InheritanceGraph(object):
for base in cls.__bases__:
if not show_builtins and base in builtins:
continue
+ if not private_bases and base.__name__.startswith('_'):
+ continue
baselist.append(self.class_name(base, parts))
if base not in all_classes:
recurse(base)
@@ -182,9 +186,7 @@ class InheritanceGraph(object):
return '.'.join(name_parts[-parts:])
def get_all_class_names(self):
- """
- Get all of the class names involved in the graph.
- """
+ """Get all of the class names involved in the graph."""
return [fullname for (_, fullname, _) in self.class_info]
# These are the default attrs for graphviz
@@ -213,9 +215,8 @@ class InheritanceGraph(object):
def generate_dot(self, name, urls={}, env=None,
graph_attrs={}, node_attrs={}, edge_attrs={}):
- """
- Generate a graphviz dot graph from the classes that
- were passed in to __init__.
+ """Generate a graphviz dot graph from the classes that were passed in
+ to __init__.
*name* is the name of the graph.
@@ -274,6 +275,7 @@ class InheritanceDiagram(Directive):
final_argument_whitespace = True
option_spec = {
'parts': directives.nonnegative_int,
+ 'private-bases': directives.flag,
}
def run(self):
@@ -290,7 +292,8 @@ class InheritanceDiagram(Directive):
try:
graph = InheritanceGraph(
class_names, env.temp_data.get('py:module'),
- parts=node['parts'])
+ parts=node['parts'],
+ private_bases='private-bases' in self.options)
except InheritanceException, err:
return [node.document.reporter.warning(err.args[0],
line=self.lineno)]
@@ -352,6 +355,21 @@ def latex_visit_inheritance_diagram(self, node):
raise nodes.SkipNode
+def texinfo_visit_inheritance_diagram(self, node):
+ """
+ Output the graph for Texinfo. This will insert a PNG.
+ """
+ graph = node['graph']
+
+ graph_hash = get_graph_hash(node)
+ name = 'inheritance%s' % graph_hash
+
+ dotcode = graph.generate_dot(name, env=self.builder.env,
+ graph_attrs={'size': '"6.0,6.0"'})
+ render_dot_texinfo(self, node, dotcode, [], 'inheritance')
+ raise nodes.SkipNode
+
+
def skip(self, node):
raise nodes.SkipNode
@@ -363,7 +381,8 @@ def setup(app):
latex=(latex_visit_inheritance_diagram, None),
html=(html_visit_inheritance_diagram, None),
text=(skip, None),
- man=(skip, None))
+ man=(skip, None),
+ texinfo=(texinfo_visit_inheritance_diagram, None))
app.add_directive('inheritance-diagram', InheritanceDiagram)
app.add_config_value('inheritance_graph_attrs', {}, False),
app.add_config_value('inheritance_node_attrs', {}, False),
diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py
index 578dddee..9bfd53fd 100644
--- a/sphinx/ext/intersphinx.py
+++ b/sphinx/ext/intersphinx.py
@@ -26,6 +26,7 @@
import time
import zlib
+import codecs
import urllib2
import posixpath
from os import path
@@ -33,19 +34,26 @@ from os import path
from docutils import nodes
from sphinx.builders.html import INVENTORY_FILENAME
+from sphinx.util.pycompat import b
+
handlers = [urllib2.ProxyHandler(), urllib2.HTTPRedirectHandler(),
urllib2.HTTPHandler()]
-if hasattr(urllib2, 'HTTPSHandler'):
+try:
handlers.append(urllib2.HTTPSHandler)
+except NameError:
+ pass
urllib2.install_opener(urllib2.build_opener(*handlers))
+UTF8StreamReader = codecs.lookup('utf-8')[2]
+
def read_inventory_v1(f, uri, join):
+ f = UTF8StreamReader(f)
invdata = {}
line = f.next()
- projname = line.rstrip()[11:].decode('utf-8')
+ projname = line.rstrip()[11:]
line = f.next()
version = line.rstrip()[11:]
for line in f:
@@ -68,25 +76,25 @@ def read_inventory_v2(f, uri, join, bufsize=16*1024):
projname = line.rstrip()[11:].decode('utf-8')
line = f.readline()
version = line.rstrip()[11:].decode('utf-8')
- line = f.readline()
+ line = f.readline().decode('utf-8')
if 'zlib' not in line:
raise ValueError
def read_chunks():
decompressor = zlib.decompressobj()
- for chunk in iter(lambda: f.read(bufsize), ''):
+ for chunk in iter(lambda: f.read(bufsize), b('')):
yield decompressor.decompress(chunk)
yield decompressor.flush()
def split_lines(iter):
- buf = ''
+ buf = b('')
for chunk in iter:
buf += chunk
- lineend = buf.find('\n')
+ lineend = buf.find(b('\n'))
while lineend != -1:
yield buf[:lineend].decode('utf-8')
buf = buf[lineend+1:]
- lineend = buf.find('\n')
+ lineend = buf.find(b('\n'))
assert not buf
for line in split_lines(read_chunks()):
@@ -115,7 +123,7 @@ def fetch_inventory(app, uri, inv):
'%s: %s' % (inv, err.__class__, err))
return
try:
- line = f.readline().rstrip()
+ line = f.readline().rstrip().decode('utf-8')
try:
if line == '# Sphinx inventory version 1':
invdata = read_inventory_v1(f, uri, join)
@@ -150,7 +158,7 @@ def load_mappings(app):
# new format
name, (uri, inv) = key, value
if not name.isalnum():
- env.warn('intersphinx identifier %r is not alphanumeric' % name)
+ env.warn(docname=None, msg='intersphinx identifier %r is not alphanumeric' % name)
else:
# old format, no name
name, uri, inv = None, key, value
diff --git a/sphinx/ext/mathbase.py b/sphinx/ext/mathbase.py
index e7ea82d7..1a2ca6af 100644
--- a/sphinx/ext/mathbase.py
+++ b/sphinx/ext/mathbase.py
@@ -56,6 +56,7 @@ class MathDirective(Directive):
final_argument_whitespace = True
option_spec = {
'label': directives.unchanged,
+ 'name': directives.unchanged,
'nowrap': directives.flag,
}
@@ -65,7 +66,9 @@ class MathDirective(Directive):
latex = self.arguments[0] + '\n\n' + latex
node = displaymath()
node['latex'] = latex
- node['label'] = self.options.get('label', None)
+ node['label'] = self.options.get('name', None)
+ if node['label'] is None:
+ node['label'] = self.options.get('label', None)
node['nowrap'] = 'nowrap' in self.options
node['docname'] = self.state.document.settings.env.docname
ret = [node]
@@ -125,6 +128,24 @@ def man_visit_eqref(self, node):
raise nodes.SkipNode
+def texinfo_visit_math(self, node):
+ self.body.append('@math{' + self.escape_arg(node['latex']) + '}')
+ raise nodes.SkipNode
+
+def texinfo_visit_displaymath(self, node):
+ if node.get('label'):
+ self.add_anchor(node['label'], node)
+ self.body.append('\n\n@example\n%s\n@end example\n\n' %
+ self.escape_arg(node['latex']))
+def texinfo_depart_displaymath(self, node):
+ pass
+
+def texinfo_visit_eqref(self, node):
+ self.add_xref(node['docname'] + ':' + node['target'],
+ node['target'], node)
+ raise nodes.SkipNode
+
+
def html_visit_eqref(self, node):
self.body.append('<a href="#equation-%s">' % node['target'])
@@ -151,20 +172,23 @@ def number_equations(app, doctree, docname):
def setup_math(app, htmlinlinevisitors, htmldisplayvisitors):
app.add_node(math,
- latex=(latex_visit_math, None),
- text=(text_visit_math, None),
- man=(man_visit_math, None),
- html=htmlinlinevisitors)
+ latex=(latex_visit_math, None),
+ text=(text_visit_math, None),
+ man=(man_visit_math, None),
+ texinfo=(texinfo_visit_math, None),
+ html=htmlinlinevisitors)
app.add_node(displaymath,
- latex=(latex_visit_displaymath, None),
- text=(text_visit_displaymath, None),
- man=(man_visit_displaymath, man_depart_displaymath),
- html=htmldisplayvisitors)
+ latex=(latex_visit_displaymath, None),
+ text=(text_visit_displaymath, None),
+ man=(man_visit_displaymath, man_depart_displaymath),
+ texinfo=(texinfo_visit_displaymath, texinfo_depart_displaymath),
+ html=htmldisplayvisitors)
app.add_node(eqref,
- latex=(latex_visit_eqref, None),
- text=(text_visit_eqref, None),
- man=(man_visit_eqref, None),
- html=(html_visit_eqref, html_depart_eqref))
+ latex=(latex_visit_eqref, None),
+ text=(text_visit_eqref, None),
+ man=(man_visit_eqref, None),
+ texinfo=(texinfo_visit_eqref, None),
+ html=(html_visit_eqref, html_depart_eqref))
app.add_role('math', math_role)
app.add_role('eq', eq_role)
app.add_directive('math', MathDirective)
diff --git a/sphinx/ext/mathjax.py b/sphinx/ext/mathjax.py
new file mode 100644
index 00000000..7a552364
--- /dev/null
+++ b/sphinx/ext/mathjax.py
@@ -0,0 +1,68 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.ext.mathjax
+ ~~~~~~~~~~~~~~~~~~
+
+ Allow `MathJax <http://mathjax.org/>`_ to be used to display math in
+ Sphinx's HTML writer -- requires the MathJax JavaScript library on your
+ webserver/computer.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from docutils import nodes
+
+from sphinx.application import ExtensionError
+from sphinx.ext.mathbase import setup_math as mathbase_setup
+
+
+def html_visit_math(self, node):
+ self.body.append(self.starttag(node, 'span', '', CLASS='math'))
+ self.body.append(self.builder.config.mathjax_inline[0] +
+ self.encode(node['latex']) +
+ self.builder.config.mathjax_inline[1] + '</span>')
+ raise nodes.SkipNode
+
+def html_visit_displaymath(self, node):
+ self.body.append(self.starttag(node, 'div', CLASS='math'))
+ if node['nowrap']:
+ self.body.append(self.builder.config.mathjax_display[0] +
+ node['latex'] +
+ self.builder.config.mathjax_display[1])
+ self.body.append('</div>')
+ raise nodes.SkipNode
+
+ parts = [prt for prt in node['latex'].split('\n\n') if prt.strip()]
+ for i, part in enumerate(parts):
+ part = self.encode(part)
+ if i == 0:
+ # necessary to e.g. set the id property correctly
+ if node['number']:
+ self.body.append('<span class="eqno">(%s)</span>' %
+ node['number'])
+ if '&' in part or '\\\\' in part:
+ self.body.append(self.builder.config.mathjax_display[0] +
+ '\\begin{split}' + part + '\\end{split}' +
+ self.builder.config.mathjax_display[1])
+ else:
+ self.body.append(self.builder.config.mathjax_display[0] + part +
+ self.builder.config.mathjax_display[1])
+ self.body.append('</div>\n')
+ raise nodes.SkipNode
+
+def builder_inited(app):
+ if not app.config.mathjax_path:
+ raise ExtensionError('mathjax_path config value must be set for the '
+ 'mathjax extension to work')
+ app.add_javascript(app.config.mathjax_path)
+
+
+def setup(app):
+ mathbase_setup(app, (html_visit_math, None), (html_visit_displaymath, None))
+ app.add_config_value('mathjax_path',
+ 'http://cdn.mathjax.org/mathjax/latest/MathJax.js?'
+ 'config=TeX-AMS-MML_HTMLorMML', False)
+ app.add_config_value('mathjax_inline', [r'\(', r'\)'], 'html')
+ app.add_config_value('mathjax_display', [r'\[', r'\]'], 'html')
+ app.connect('builder-inited', builder_inited)
diff --git a/sphinx/ext/oldcmarkup.py b/sphinx/ext/oldcmarkup.py
index 2bf9b65d..41969c36 100644
--- a/sphinx/ext/oldcmarkup.py
+++ b/sphinx/ext/oldcmarkup.py
@@ -18,6 +18,7 @@ WARNING_MSG = 'using old C markup; please migrate to new-style markup ' \
'(e.g. c:function instead of cfunction), see ' \
'http://sphinx.pocoo.org/domains.html'
+
class OldCDirective(Directive):
has_content = True
required_arguments = 1
diff --git a/sphinx/ext/pngmath.py b/sphinx/ext/pngmath.py
index 6fdfbfe7..78c331a6 100644
--- a/sphinx/ext/pngmath.py
+++ b/sphinx/ext/pngmath.py
@@ -26,6 +26,7 @@ from docutils import nodes
from sphinx.errors import SphinxError
from sphinx.util.png import read_png_depth, write_png_depth
from sphinx.util.osutil import ensuredir, ENOENT
+from sphinx.util.pycompat import b
from sphinx.ext.mathbase import setup_math as mathbase_setup, wrap_displaymath
class MathExtError(SphinxError):
@@ -58,11 +59,10 @@ DOC_BODY_PREVIEW = r'''
\end{document}
'''
-depth_re = re.compile(r'\[\d+ depth=(-?\d+)\]')
+depth_re = re.compile(b(r'\[\d+ depth=(-?\d+)\]'))
def render_math(self, math):
- """
- Render the LaTeX math expression *math* using latex and dvipng.
+ """Render the LaTeX math expression *math* using latex and dvipng.
Return the filename relative to the built document and the "depth",
that is, the distance of image bottom and baseline in pixels, if the
@@ -178,6 +178,11 @@ def cleanup_tempdir(app, exc):
except Exception:
pass
+def get_tooltip(self, node):
+ if self.builder.config.pngmath_add_tooltips:
+ return ' alt="%s"' % self.encode(node['latex']).strip()
+ return ''
+
def html_visit_math(self, node):
try:
fname, depth = render_math(self, '$'+node['latex']+'$')
@@ -193,15 +198,10 @@ def html_visit_math(self, node):
self.body.append('<span class="math">%s</span>' %
self.encode(node['latex']).strip())
else:
- if depth is None:
- self.body.append(
- '<img class="math" src="%s" alt="%s"/>' %
- (fname, self.encode(node['latex']).strip()))
- else:
- self.body.append(
- '<img class="math" src="%s" alt="%s" '
- 'style="vertical-align: %dpx"/>' %
- (fname, self.encode(node['latex']).strip(), -depth))
+ c = ('<img class="math" src="%s"' % fname) + get_tooltip(self, node)
+ if depth is not None:
+ c += ' style="vertical-align: %dpx"' % (-depth)
+ self.body.append(c + '/>')
raise nodes.SkipNode
def html_visit_displaymath(self, node):
@@ -226,8 +226,8 @@ def html_visit_displaymath(self, node):
self.body.append('<span class="math">%s</span></p>\n</div>' %
self.encode(node['latex']).strip())
else:
- self.body.append('<img src="%s" alt="%s" /></p>\n</div>' %
- (fname, self.encode(node['latex']).strip()))
+ self.body.append(('<img src="%s"' % fname) + get_tooltip(self, node)
+ + '/></p>\n</div>')
raise nodes.SkipNode
@@ -240,4 +240,5 @@ def setup(app):
['-gamma 1.5', '-D 110'], 'html')
app.add_config_value('pngmath_latex_args', [], 'html')
app.add_config_value('pngmath_latex_preamble', '', 'html')
+ app.add_config_value('pngmath_add_tooltips', True, 'html')
app.connect('build-finished', cleanup_tempdir)
diff --git a/sphinx/ext/todo.py b/sphinx/ext/todo.py
index 2ba9d5e1..6a44a9b4 100644
--- a/sphinx/ext/todo.py
+++ b/sphinx/ext/todo.py
@@ -159,7 +159,8 @@ def setup(app):
html=(visit_todo_node, depart_todo_node),
latex=(visit_todo_node, depart_todo_node),
text=(visit_todo_node, depart_todo_node),
- man=(visit_todo_node, depart_todo_node))
+ man=(visit_todo_node, depart_todo_node),
+ texinfo=(visit_todo_node, depart_todo_node))
app.add_directive('todo', Todo)
app.add_directive('todolist', TodoList)
diff --git a/sphinx/ext/viewcode.py b/sphinx/ext/viewcode.py
index 4994f125..32840f30 100644
--- a/sphinx/ext/viewcode.py
+++ b/sphinx/ext/viewcode.py
@@ -31,7 +31,11 @@ def doctree_read(app, doctree):
env._viewcode_modules[modname] = False
return
analyzer.find_tags()
- entry = analyzer.code.decode(analyzer.encoding), analyzer.tags, {}
+ if not isinstance(analyzer.code, unicode):
+ code = analyzer.code.decode(analyzer.encoding)
+ else:
+ code = analyzer.code
+ entry = code, analyzer.tags, {}
env._viewcode_modules[modname] = entry
elif entry is False:
return
@@ -94,7 +98,7 @@ def collect_pages(app):
# construct a page name for the highlighted source
pagename = '_modules/' + modname.replace('.', '/')
# highlight the source using the builder's highlighter
- highlighted = highlighter.highlight_block(code, 'python', False)
+ highlighted = highlighter.highlight_block(code, 'python', linenos=False)
# split the code into lines
lines = highlighted.splitlines()
# split off wrap markup from the first line of the actual code
diff --git a/sphinx/highlighting.py b/sphinx/highlighting.py
index 8cbd647a..0912ee05 100644
--- a/sphinx/highlighting.py
+++ b/sphinx/highlighting.py
@@ -21,6 +21,7 @@ except ImportError:
parser = None
from sphinx.util.texescape import tex_hl_escape_map_old, tex_hl_escape_map_new
+from sphinx.ext import doctest
try:
import pygments
@@ -30,34 +31,14 @@ try:
from pygments.lexers import get_lexer_by_name, guess_lexer
from pygments.formatters import HtmlFormatter, LatexFormatter
from pygments.filters import ErrorToken
- from pygments.style import Style
from pygments.styles import get_style_by_name
- from pygments.styles.friendly import FriendlyStyle
- from pygments.token import Generic, Comment, Number
from pygments.util import ClassNotFound
+ from sphinx.pygments_styles import SphinxStyle, NoneStyle
except ImportError:
pygments = None
lexers = None
HtmlFormatter = LatexFormatter = None
else:
- class SphinxStyle(Style):
- """
- Like friendly, but a bit darker to enhance contrast on the green
- background.
- """
-
- background_color = '#eeffcc'
- default_style = ''
-
- styles = FriendlyStyle.styles
- styles.update({
- Generic.Output: '#333',
- Comment: 'italic #408090',
- Number: '#208050',
- })
-
- class NoneStyle(Style):
- """Style without any styling."""
lexers = dict(
none = TextLexer(),
@@ -84,8 +65,6 @@ _LATEX_STYLES = r'''
\newcommand\PYGZrb{]}
'''
-doctestopt_re = re.compile(r'#\s*doctest:.+$', re.MULTILINE)
-
parsing_exceptions = (SyntaxError, UnicodeEncodeError)
if sys.version_info < (2, 5):
# Python <= 2.4 raises MemoryError when parsing an
@@ -115,14 +94,16 @@ class PygmentsBridge(object):
else:
style = get_style_by_name(stylename)
self.trim_doctest_flags = trim_doctest_flags
+ self.formatter_args = {'style' : style}
if dest == 'html':
- self.fmter = {False: self.html_formatter(style=style),
- True: self.html_formatter(style=style, linenos=True)}
+ self.formatter = self.html_formatter
else:
- self.fmter = {False: self.latex_formatter(style=style,
- commandprefix='PYG'),
- True: self.latex_formatter(style=style, linenos=True,
- commandprefix='PYG')}
+ self.formatter = self.latex_formatter
+ self.formatter_args['commandprefix'] = 'PYG'
+
+ def get_formatter(self, **kwargs):
+ kwargs.update(self.formatter_args)
+ return self.formatter(**kwargs)
def unhighlighted(self, source):
if self.dest == 'html':
@@ -156,7 +137,7 @@ class PygmentsBridge(object):
if sys.version_info >= (2, 5):
src = 'from __future__ import with_statement\n' + src
- if isinstance(src, unicode):
+ if sys.version_info < (3, 0) and isinstance(src, unicode):
# Non-ASCII chars will only occur in string literals
# and comments. If we wanted to give them to the parser
# correctly, we'd have to find out the correct source
@@ -174,8 +155,8 @@ class PygmentsBridge(object):
else:
return True
- def highlight_block(self, source, lang, linenos=False, warn=None):
- if isinstance(source, str):
+ def highlight_block(self, source, lang, warn=None, **kwargs):
+ if not isinstance(source, unicode):
source = source.decode()
if not pygments:
return self.unhighlighted(source)
@@ -216,17 +197,19 @@ class PygmentsBridge(object):
# trim doctest options if wanted
if isinstance(lexer, PythonConsoleLexer) and self.trim_doctest_flags:
- source = doctestopt_re.sub('', source)
+ source = doctest.blankline_re.sub('', source)
+ source = doctest.doctestopt_re.sub('', source)
# highlight via Pygments
try:
+ formatter = self.get_formatter(**kwargs)
+ hlsource = highlight(source, lexer, formatter)
if self.dest == 'html':
- return highlight(source, lexer, self.fmter[bool(linenos)])
+ return hlsource
+ elif hlsource.startswith(r'\begin{Verbatim}[commandchars=\\\{\}'):
+ # Pygments >= 1.2
+ return hlsource.translate(tex_hl_escape_map_new)
else:
- hlsource = highlight(source, lexer, self.fmter[bool(linenos)])
- if hlsource.startswith(r'\begin{Verbatim}[commandchars=\\\{\}'):
- # Pygments >= 1.2
- return hlsource.translate(tex_hl_escape_map_new)
return hlsource.translate(tex_hl_escape_map_old)
except ErrorToken:
# this is most probably not the selected language,
@@ -239,10 +222,11 @@ class PygmentsBridge(object):
return _LATEX_STYLES
# no HTML styles needed
return ''
+ formatter = self.get_formatter()
if self.dest == 'html':
- return self.fmter[0].get_style_defs('.highlight')
+ return formatter.get_style_defs('.highlight')
else:
- styledefs = self.fmter[0].get_style_defs()
+ styledefs = formatter.get_style_defs()
# workaround for Pygments < 0.12
if styledefs.startswith('\\newcommand\\at{@}'):
styledefs += _LATEX_STYLES
diff --git a/sphinx/jinja2glue.py b/sphinx/jinja2glue.py
index c952a117..ffe3a0b3 100644
--- a/sphinx/jinja2glue.py
+++ b/sphinx/jinja2glue.py
@@ -26,6 +26,12 @@ def _tobool(val):
return val.lower() in ('true', '1', 'yes', 'on')
return bool(val)
+def _toint(val):
+ try:
+ return int(val)
+ except ValueError:
+ return 0
+
def accesskey(context, key):
"""Helper to output each access key only once."""
if '_accesskeys' not in context:
@@ -40,14 +46,17 @@ class idgen(object):
self.id = 0
def current(self):
return self.id
- def next(self):
+ def __next__(self):
self.id += 1
return self.id
+ next = __next__ # Python 2/Jinja compatibility
class SphinxFileSystemLoader(FileSystemLoader):
- """FileSystemLoader subclass that is not so strict about '..'
- entries in template names."""
+ """
+ FileSystemLoader subclass that is not so strict about '..' entries in
+ template names.
+ """
def get_source(self, environment, template):
for searchpath in self.searchpath:
@@ -107,6 +116,7 @@ class BuiltinTemplateLoader(TemplateBridge, BaseLoader):
self.environment = SandboxedEnvironment(loader=self,
extensions=extensions)
self.environment.filters['tobool'] = _tobool
+ self.environment.filters['toint'] = _toint
self.environment.globals['debug'] = contextfunction(pformat)
self.environment.globals['accesskey'] = contextfunction(accesskey)
self.environment.globals['idgen'] = idgen
diff --git a/sphinx/locale/__init__.py b/sphinx/locale/__init__.py
index e40a7eab..3aca780c 100644
--- a/sphinx/locale/__init__.py
+++ b/sphinx/locale/__init__.py
@@ -8,13 +8,16 @@
:copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
+
+import sys
import gettext
import UserString
class _TranslationProxy(UserString.UserString, object):
- """Class for proxy strings from gettext translations. This is a helper
- for the lazy_* functions from this module.
+ """
+ Class for proxy strings from gettext translations. This is a helper for the
+ lazy_* functions from this module.
The proxy implementation attempts to be as complete as possible, so that
the lazy objects should mostly work as expected, for example for sorting.
@@ -135,7 +138,8 @@ class _TranslationProxy(UserString.UserString, object):
def mygettext(string):
"""Used instead of _ when creating TranslationProxies, because _ is
- not bound yet at that time."""
+ not bound yet at that time.
+ """
return _(string)
def lazy_gettext(string):
@@ -166,6 +170,7 @@ versionlabels = {
'deprecated': l_('Deprecated since version %s'),
}
+# XXX Python specific
pairindextypes = {
'module': l_('module'),
'keyword': l_('keyword'),
@@ -176,18 +181,32 @@ pairindextypes = {
'builtin': l_('built-in function'),
}
-translator = None
+translators = {}
-def _(message):
- return translator.ugettext(message)
+if sys.version_info >= (3, 0):
+ def _(message):
+ return translators['sphinx'].gettext(message)
+else:
+ def _(message):
+ return translators['sphinx'].ugettext(message)
-def init(locale_dirs, language):
- global translator
+
+def init(locale_dirs, language, catalog='sphinx'):
+ """Look for message catalogs in `locale_dirs` and *ensure* that there is at
+ least a NullTranslations catalog set in `translators`. If called multiple
+ times or if several ``.mo`` files are found, their contents are merged
+ together (thus making ``init`` reentrable).
+ """
+ global translators
+ translator = translators.get(catalog)
+ # ignore previously failed attempts to find message catalogs
+ if isinstance(translator, gettext.NullTranslations):
+ translator = None
# the None entry is the system's default locale path
has_translation = True
for dir_ in locale_dirs:
try:
- trans = gettext.translation('sphinx', localedir=dir_,
+ trans = gettext.translation(catalog, localedir=dir_,
languages=[language])
if translator is None:
translator = trans
@@ -196,7 +215,11 @@ def init(locale_dirs, language):
except Exception:
# Language couldn't be found in the specified path
pass
+ # guarantee translations[catalog] exists
if translator is None:
translator = gettext.NullTranslations()
has_translation = False
+ translators[catalog] = translator
+ if hasattr(translator, 'ugettext'):
+ translator.gettext = translator.ugettext
return translator, has_translation
diff --git a/sphinx/locale/bn/LC_MESSAGES/sphinx.js b/sphinx/locale/bn/LC_MESSAGES/sphinx.js
index 277cd3d0..a69d00b5 100644
--- a/sphinx/locale/bn/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/bn/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "bn", "plural_expr": "(n != 1)", "messages": {"Search Results": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09ab\u09b2\u09be\u09ab\u09b2", "Preparing search...": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09aa\u09cd\u09b0\u09b8\u09cd\u09a4\u09c1\u09a4\u09bf \u099a\u09b2\u099b\u09c7...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u0986\u09aa\u09a8\u09be\u09b0 \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7 \u0995\u09c7\u09be\u09a8 \u09ab\u09b2\u09be\u09ab\u09b2 \u09aa\u09be\u0993\u09df\u09be \u09af\u09be\u09df\u09a8\u09bf\u0964 \u0986\u09aa\u09a8\u09be\u09b0 \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09b6\u09ac\u09cd\u09a6\u0997\u09c1\u09b2\u09c7\u09be\u09b0 \u09b8\u09a0\u09bf\u0995 \u09ac\u09be\u09a8\u09be\u09a8 \u0993 \u09ac\u09bf\u09ad\u09be\u0997 \u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8 \u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u0995\u09b0\u09c1\u09a8\u0964", "Search finished, found %s page(s) matching the search query.": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u09b6\u09c7\u09b7 \u09b9\u09df\u09c7\u099b\u09c7, \u09ab\u09b2\u09be\u09ab\u09b2\u09c7 %s-\u099f\u09bf \u09aa\u09be\u09a4\u09be \u09aa\u09be\u0993\u09df\u09be \u0997\u09c7\u099b\u09c7\u0964", ", in ": ", -", "Permalink to this headline": "\u098f\u0987 \u09b6\u09bf\u09b0\u09c7\u09be\u09a8\u09be\u09ae\u09c7\u09b0 \u09aa\u09be\u09b0\u09cd\u09ae\u09be\u09b2\u09bf\u0999\u09cd\u0995", "Searching": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u099a\u09b2\u099b\u09c7", "Permalink to this definition": "\u098f\u0987 \u09b8\u0982\u099c\u09cd\u099e\u09be\u09b0 \u09aa\u09be\u09b0\u09cd\u09ae\u09be\u09b2\u09bf\u0999\u09cd\u0995", "Hide Search Matches": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09ae\u09cd\u09af\u09be\u099a\u0997\u09c1\u09b2\u09c7\u09be \u09b2\u09c1\u0995\u09be\u09a8"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "bn", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09ae\u09cd\u09af\u09be\u099a\u0997\u09c1\u09b2\u09c7\u09be \u09b2\u09c1\u0995\u09be\u09a8", "Permalink to this definition": "\u098f\u0987 \u09b8\u0982\u099c\u09cd\u099e\u09be\u09b0 \u09aa\u09be\u09b0\u09cd\u09ae\u09be\u09b2\u09bf\u0999\u09cd\u0995", "Expand sidebar": "", "Permalink to this headline": "\u098f\u0987 \u09b6\u09bf\u09b0\u09c7\u09be\u09a8\u09be\u09ae\u09c7\u09b0 \u09aa\u09be\u09b0\u09cd\u09ae\u09be\u09b2\u09bf\u0999\u09cd\u0995", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/bn/LC_MESSAGES/sphinx.mo b/sphinx/locale/bn/LC_MESSAGES/sphinx.mo
index 9b60397e..cb06ba98 100644
--- a/sphinx/locale/bn/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/bn/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/bn/LC_MESSAGES/sphinx.po b/sphinx/locale/bn/LC_MESSAGES/sphinx.po
index d5141c79..49549939 100644
--- a/sphinx/locale/bn/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/bn/LC_MESSAGES/sphinx.po
@@ -1,4 +1,4 @@
-# Translations template for Sphinx.
+# Bengali translations for Sphinx.
# Copyright (C) 2009 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2009.
@@ -7,520 +7,607 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 1.0pre/[?1034h2e1ab15e035e\n"
"Report-Msgid-Bugs-To: nasim.haque@gmail.com\n"
-"POT-Creation-Date: 2009-11-08 16:28+0100\n"
-"PO-Revision-Date: 2009-11-10 13:42+0100\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-09-21 10:08+0200\n"
"Last-Translator: Nasimul Haque <nasim.haque@gmail.com>\n"
"Language-Team: Nasimul Haque <nasim.haque@gmail.com>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:130
-#: sphinx/writers/latex.py:184
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%B %d, %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 "ইনডেক্স"
-
-#: sphinx/environment.py:349
-#: sphinx/writers/latex.py:189
-msgid "Module Index"
-msgstr "মডিউল ইনডেক্স"
+#: sphinx/environment.py:1625
+#, fuzzy, python-format
+msgid "see %s"
+msgstr "আরও %s"
-#: sphinx/environment.py:350
-#: sphinx/themes/basic/defindex.html:16
-msgid "Search Page"
-msgstr "অনুসন্ধান পাতা"
+#: sphinx/environment.py:1628
+#, fuzzy, python-format
+msgid "see also %s"
+msgstr "আরও দেখুন %s"
-#: sphinx/roles.py:167
+#: sphinx/roles.py:175
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "পাইথন উন্নয়ন পরামর্শ!PEP %s"
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "পাইথন উন্নয়ন পরামর্শ; PEP %s"
-#: sphinx/builders/changes.py:70
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "বিল্টইন সমূহ"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "মডিউল লেভেল"
-#: sphinx/builders/html.py:224
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%b %d, %Y"
-#: sphinx/builders/html.py:243
-#: sphinx/themes/basic/defindex.html:21
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "সাধারণ ইনডেক্স"
-#: sphinx/builders/html.py:243
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "ইনডেক্স"
-#: 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 "গ্লোবাল মডিউল ইনডেক্স"
-
-#: sphinx/builders/html.py:248
-msgid "modules"
-msgstr "মডিউল সমূহ"
-
-#: sphinx/builders/html.py:304
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "পরবর্তী"
-#: sphinx/builders/html.py:313
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "পূর্ববর্তী"
-#: sphinx/builders/latex.py:162
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr "(-"
-#: sphinx/directives/__init__.py:78
-#: sphinx/directives/__init__.py:79
-#: sphinx/directives/__init__.py:80
-#: sphinx/directives/__init__.py:81
-msgid "Raises"
-msgstr "রেইজেস"
-
-#: sphinx/directives/__init__.py:82
-#: sphinx/directives/__init__.py:83
-#: sphinx/directives/__init__.py:84
-msgid "Variable"
-msgstr "ভ্যারিয়েবল"
-
-#: sphinx/directives/__init__.py:85
-#: sphinx/directives/__init__.py:86
-#: sphinx/directives/__init__.py:92
-#: sphinx/directives/__init__.py:93
-msgid "Returns"
-msgstr "রিটার্নস"
-
-#: sphinx/directives/__init__.py:94
-msgid "Return type"
-msgstr "রিটার্ন টাইপ"
-
-#: sphinx/directives/__init__.py:169
-msgid "Parameter"
-msgstr "প্যারামিটার"
-
-#: sphinx/directives/__init__.py:173
-msgid "Parameters"
-msgstr "প্যারামিটার"
-
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "অনুচ্ছেদ লেখক:"
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "মডিউল লেখক:"
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
+#, fuzzy
+msgid "Code author: "
+msgstr "মডিউল লেখক:"
+
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "লেখক:"
-#: sphinx/directives/other.py:233
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "আরও দেখুন"
-#: sphinx/domains/c.py:124
+#: sphinx/domains/__init__.py:244
+#, python-format
+msgid "%s %s"
+msgstr ""
+
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
+msgid "Parameters"
+msgstr "প্যারামিটার"
+
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
+msgid "Returns"
+msgstr "রিটার্নস"
+
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
+msgid "Return type"
+msgstr "রিটার্ন টাইপ"
+
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (C ফাংশন)"
-#: sphinx/domains/c.py:126
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (C মেম্বার)"
-#: sphinx/domains/c.py:128
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (C ম্যাক্রো)"
-#: sphinx/domains/c.py:130
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (C টাইপ)"
-#: sphinx/domains/c.py:132
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (C ভ্যারিয়েবল)"
-#: sphinx/domains/c.py:162
-msgid "C function"
-msgstr "C ফাংশন"
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
+msgid "function"
+msgstr "ফাংশন"
-#: sphinx/domains/c.py:163
-msgid "C member"
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
+#, fuzzy
+msgid "member"
msgstr "C মেম্বার"
-#: sphinx/domains/c.py:164
-msgid "C macro"
+#: sphinx/domains/c.py:206
+#, fuzzy
+msgid "macro"
msgstr "C ম্যাক্রো"
-#: sphinx/domains/c.py:165
-msgid "C type"
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
+#, fuzzy
+msgid "type"
msgstr "C টাইপ"
-#: sphinx/domains/c.py:166
-msgid "C variable"
+#: sphinx/domains/c.py:208
+#, fuzzy
+msgid "variable"
msgstr "C ভ্যারিয়েবল"
-#: sphinx/domains/python.py:186
+#: sphinx/domains/cpp.py:904
+#, python-format
+msgid "%s (C++ class)"
+msgstr "%s (C++ ক্লাসে)"
+
+#: sphinx/domains/cpp.py:919
+#, python-format
+msgid "%s (C++ type)"
+msgstr "%s (C++ টাইপ)"
+
+#: sphinx/domains/cpp.py:938
+#, python-format
+msgid "%s (C++ member)"
+msgstr "%s (C++ মেম্বার)"
+
+#: sphinx/domains/cpp.py:990
+#, python-format
+msgid "%s (C++ function)"
+msgstr "%s (C++ ফাংশন)"
+
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
+msgid "class"
+msgstr "ক্লাস"
+
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (বিল্ট-ইন ফাংশন)"
-#: sphinx/domains/python.py:187
-#: sphinx/domains/python.py:244
-#: sphinx/domains/python.py:256
-#: sphinx/domains/python.py:269
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
+#, python-format
+msgid "%s() (%s method)"
+msgstr "%s() (%s মেথড)"
+
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (ক্লাসে)"
+
+#: sphinx/domains/javascript.py:111
+#, python-format
+msgid "%s (global variable or constant)"
+msgstr ""
+
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
+#, python-format
+msgid "%s (%s attribute)"
+msgstr "%s (%s এ্যট্রিবিউট)"
+
+#: sphinx/domains/javascript.py:122
+#, fuzzy
+msgid "Arguments"
+msgstr "প্যারামিটার"
+
+#: sphinx/domains/javascript.py:125
+msgid "Throws"
+msgstr ""
+
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
+msgid "data"
+msgstr "ডাটা"
+
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
+msgid "attribute"
+msgstr "এ্যট্রিবিউট"
+
+#: sphinx/domains/python.py:100
+#, fuzzy
+msgid "Variables"
+msgstr "ভ্যারিয়েবল"
+
+#: sphinx/domains/python.py:104
+msgid "Raises"
+msgstr "রেইজেস"
+
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (%s মডিউলে)"
-#: sphinx/domains/python.py:190
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (বিল্ট-ইন ভ্যারিয়েবল)"
-#: sphinx/domains/python.py:191
-#: sphinx/domains/python.py:282
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (%s মডিউলে)"
-#: sphinx/domains/python.py:207
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (বিল্ট-ইন ক্লাস)"
-#: sphinx/domains/python.py:208
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (%s ক্লাসে)"
-#: sphinx/domains/python.py:248
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s (%s.%s মেথড)"
-#: sphinx/domains/python.py:250
-#, python-format
-msgid "%s() (%s method)"
-msgstr "%s() (%s মেথড)"
-
-#: sphinx/domains/python.py:260
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s (%s.%s স্ট্যাটিক মেথড)"
-#: sphinx/domains/python.py:263
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s স্ট্যাটিক মেথড)"
-#: sphinx/domains/python.py:273
+#: sphinx/domains/python.py:341
#, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s ক্লাস মেথড)"
-#: sphinx/domains/python.py:276
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s ক্লাস মেথড)"
-#: sphinx/domains/python.py:286
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s এ্যট্রিবিউট)"
-#: sphinx/domains/python.py:288
-#, python-format
-msgid "%s (%s attribute)"
-msgstr "%s (%s এ্যট্রিবিউট)"
-
-#: sphinx/domains/python.py:334
-msgid "Platforms: "
-msgstr "প্লাটফরম:"
-
-#: sphinx/domains/python.py:340
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (মডিউল)"
-#: sphinx/domains/python.py:396
-msgid "function"
-msgstr "ফাংশন"
+#: sphinx/domains/python.py:491
+#, fuzzy
+msgid "Python Module Index"
+msgstr "মডিউল ইনডেক্স"
-#: sphinx/domains/python.py:397
-msgid "data"
-msgstr "ডাটা"
+#: sphinx/domains/python.py:492
+msgid "modules"
+msgstr "মডিউল সমূহ"
-#: sphinx/domains/python.py:398
-msgid "class"
-msgstr "ক্লাস"
+#: sphinx/domains/python.py:537
+msgid "Deprecated"
+msgstr "ডেপ্রিকেটেড"
-#: sphinx/domains/python.py:399
-#: sphinx/locale/__init__.py:161
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "এক্সেপশন"
-#: sphinx/domains/python.py:400
+#: sphinx/domains/python.py:563
msgid "method"
msgstr "মেথড"
-#: sphinx/domains/python.py:401
-msgid "attribute"
-msgstr "এ্যট্রিবিউট"
+#: sphinx/domains/python.py:564
+msgid "class method"
+msgstr "ক্লাস মেথড"
-#: sphinx/domains/python.py:402
-#: sphinx/locale/__init__.py:157
+#: sphinx/domains/python.py:565
+msgid "static method"
+msgstr "স্ট্যাটিক মেথড"
+
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "মডিউল"
-#: sphinx/domains/std.py:67
-#: sphinx/domains/std.py:83
+#: sphinx/domains/python.py:695
+#, fuzzy
+msgid " (deprecated)"
+msgstr "ডেপ্রিকেটেড"
+
+#: sphinx/domains/rst.py:55
+#, python-format
+msgid "%s (directive)"
+msgstr ""
+
+#: sphinx/domains/rst.py:57
+#, fuzzy, python-format
+msgid "%s (role)"
+msgstr "%s (মডিউল)"
+
+#: sphinx/domains/rst.py:106
+msgid "directive"
+msgstr ""
+
+#: sphinx/domains/rst.py:107
+#, fuzzy
+msgid "role"
+msgstr "মডিউল"
+
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "এনভায়রনমেন্ট ভ্যারিয়েবল; %s"
-#: sphinx/domains/std.py:156
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%sকমান্ড লাইন অপশন; %s"
-#: sphinx/domains/std.py:324
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr "শব্দকোষ"
-#: sphinx/domains/std.py:325
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr "ব্যকরণ টোকেন"
-#: sphinx/domains/std.py:326
+#: sphinx/domains/std.py:395
+msgid "reference label"
+msgstr ""
+
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "এনভায়রনমেন্ট ভ্যারিয়েবল"
-#: sphinx/domains/std.py:327
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr "প্রোগ্রাম অপশন"
-#: sphinx/ext/autodoc.py:892
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
+#: sphinx/themes/basic/genindex-split.html:11
+#: sphinx/themes/basic/genindex-split.html:14
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
+msgid "Index"
+msgstr "ইনডেক্স"
+
+#: sphinx/domains/std.py:428
+msgid "Module Index"
+msgstr "মডিউল ইনডেক্স"
+
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
+msgid "Search Page"
+msgstr "অনুসন্ধান পাতা"
+
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr "বেস: %s"
-#: sphinx/ext/autodoc.py:925
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr ":class:`%s` এর উপনাম"
-#: sphinx/ext/todo.py:40
+#: sphinx/ext/todo.py:41
msgid "Todo"
msgstr "অসমাপ্ত কাজ"
-#: sphinx/ext/todo.py:98
+#: sphinx/ext/todo.py:109
+#, fuzzy, python-format
+msgid "(The <<original entry>> is located in %s, line %d.)"
+msgstr "(%s, %d লাইনে মূল অন্তর্ভুক্তিটি রয়েছে.)"
+
+#: sphinx/ext/todo.py:117
+msgid "original entry"
+msgstr ""
+
+#: sphinx/ext/viewcode.py:70
+msgid "[source]"
+msgstr ""
+
+#: sphinx/ext/viewcode.py:117
+msgid "[docs]"
+msgstr ""
+
+#: sphinx/ext/viewcode.py:131
+#, fuzzy
+msgid "Module code"
+msgstr "মডিউল"
+
+#: sphinx/ext/viewcode.py:137
#, python-format
-msgid "(The original entry is located in %s, line %d and can be found "
-msgstr "(%s, %d লাইনে মূল অন্তর্ভুক্তিটি রয়েছে, যা পাওয়া যাবে"
+msgid "<h1>Source code for %s</h1>"
+msgstr ""
+
+#: sphinx/ext/viewcode.py:164
+msgid "Overview: module code"
+msgstr ""
-#: sphinx/ext/todo.py:104
-msgid "here"
-msgstr "এখানে"
+#: sphinx/ext/viewcode.py:165
+msgid "<h1>All modules for which code is available</h1>"
+msgstr ""
-#: sphinx/locale/__init__.py:138
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "দৃষ্টি আকর্ষণ"
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "সতর্কীকরণ"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "বিপজ্জনক"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "ভুল (এরর)"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "আভাস"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "গুরুত্বপূর্ণ"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "নোট"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "আরও দেখুন"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "পরামর্শ"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "সতর্কতা"
-#: sphinx/locale/__init__.py:151
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "%s ভার্সনে নতুন"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "%s ভার্সনে পরিবর্তিত"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "%s ভার্সন থেকে ডেপ্রিকেটেড"
-#: sphinx/locale/__init__.py:158
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "কিওয়ার্ড"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "অপারেটর"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "অবজেক্ট"
-#: sphinx/locale/__init__.py:162
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "স্ট্যাটমেন্ট"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "বিল্ট-ইন ফাংশন"
-#: sphinx/themes/basic/defindex.html:2
+#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10
+#: sphinx/themes/basic/localtoc.html:11
+msgid "Table Of Contents"
+msgstr "সূচীপত্র"
+
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
+msgid "Search"
+msgstr "অনুসন্ধান"
+
+#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15
+msgid "Go"
+msgstr "যান"
+
+#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20
+msgid "Enter search terms or a module, class or function name."
+msgstr "অনুসন্ধানের জন্য টার্ম, মডিউল, ক্লাস অথবা ফাংশনের নাম দিন।"
+
+#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14
+msgid "Show Source"
+msgstr "সোর্স দেখুন"
+
+#: sphinx/themes/basic/defindex.html:11
msgid "Overview"
msgstr "ভুমিকা"
-#: sphinx/themes/basic/defindex.html:11
+#: sphinx/themes/basic/defindex.html:20
msgid "Indices and tables:"
msgstr "ইনডেক্স ও টেবিল সমূহ:"
-#: sphinx/themes/basic/defindex.html:14
+#: sphinx/themes/basic/defindex.html:23
msgid "Complete Table of Contents"
msgstr "পূর্ণাঙ্গ সূচীপত্র"
-#: sphinx/themes/basic/defindex.html:15
+#: sphinx/themes/basic/defindex.html:24
msgid "lists all sections and subsections"
msgstr "সকল অনুচ্ছেদ সমূহের তালিকা"
-#: sphinx/themes/basic/defindex.html:17
+#: sphinx/themes/basic/defindex.html:26
msgid "search this documentation"
msgstr "এই সহায়িকাতে অনুসন্ধা করুন"
-#: sphinx/themes/basic/defindex.html:20
+#: sphinx/themes/basic/defindex.html:28
+msgid "Global Module Index"
+msgstr "গ্লোবাল মডিউল ইনডেক্স"
+
+#: sphinx/themes/basic/defindex.html:29
msgid "quick access to all modules"
msgstr "সকল মডিউলে দ্রুত প্রবেশ"
-#: sphinx/themes/basic/defindex.html:22
+#: sphinx/themes/basic/defindex.html:31
msgid "all functions, classes, terms"
msgstr "সকল ফাংশন, ক্লাস, টার্ম"
-#: sphinx/themes/basic/genindex-single.html:5
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "ইনডেক্স &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
+#: sphinx/themes/basic/genindex-single.html:63
+#: sphinx/themes/basic/genindex-split.html:24
+#: sphinx/themes/basic/genindex-split.html:38
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "এক পাতায় সম্পূর্ণ ইনডেক্স"
-#: sphinx/themes/basic/genindex-split.html:7
+#: sphinx/themes/basic/genindex-split.html:16
msgid "Index pages by letter"
msgstr "বর্ণানুসারে ইনডেক্স পাতা"
-#: sphinx/themes/basic/genindex-split.html:15
+#: sphinx/themes/basic/genindex-split.html:25
msgid "can be huge"
msgstr "খুব বড় হতে পারে"
-#: sphinx/themes/basic/layout.html:10
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "নেভিগেশন"
-#: sphinx/themes/basic/layout.html:42
-msgid "Table Of Contents"
-msgstr "সূচীপত্র"
-
-#: sphinx/themes/basic/layout.html:48
-msgid "Previous topic"
-msgstr "পূর্ববর্তী টপিক"
-
-#: sphinx/themes/basic/layout.html:50
-msgid "previous chapter"
-msgstr "পূর্ববর্তী অধ্যায়"
-
-#: sphinx/themes/basic/layout.html:53
-msgid "Next topic"
-msgstr "পরবর্তী টপিক"
-
-#: sphinx/themes/basic/layout.html:55
-msgid "next chapter"
-msgstr "পরবর্তী অধ্যায়"
-
-#: sphinx/themes/basic/layout.html:60
-msgid "This Page"
-msgstr "এই পাতা"
-
-#: sphinx/themes/basic/layout.html:63
-msgid "Show Source"
-msgstr "সোর্স দেখুন"
-
-#: sphinx/themes/basic/layout.html:73
-msgid "Quick search"
-msgstr "দ্রুত অনুসন্ধান"
-
-#: sphinx/themes/basic/layout.html:76
-msgid "Go"
-msgstr "যান"
-
-#: sphinx/themes/basic/layout.html:81
-msgid "Enter search terms or a module, class or function name."
-msgstr "অনুসন্ধানের জন্য টার্ম, মডিউল, ক্লাস অথবা ফাংশনের নাম দিন।"
-
#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
@@ -530,51 +617,56 @@ msgstr "%(docstitle)s এর মধ্যে খুঁজুন"
msgid "About these documents"
msgstr "এই ডকুমেন্ট সম্পর্কে"
-#: sphinx/themes/basic/layout.html:137
-#: sphinx/themes/basic/search.html:2
-#: sphinx/themes/basic/search.html:5
-msgid "Search"
-msgstr "অনুসন্ধান"
-
#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "কপিরাইট"
-#: sphinx/themes/basic/layout.html:187
-#: sphinx/themes/scrolls/layout.html:83
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">কপিরাইট</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:189
-#: sphinx/themes/scrolls/layout.html:85
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; কপিরাইট %(copyright)s."
-#: sphinx/themes/basic/layout.html:193
-#: sphinx/themes/scrolls/layout.html:89
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "%(last_updated)s সর্বশেষ পরিবর্তন করা হয়েছে।"
-#: sphinx/themes/basic/layout.html:196
-#: sphinx/themes/scrolls/layout.html:92
+#: sphinx/themes/basic/layout.html:198
#, python-format
-msgid "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s."
-msgstr "<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 "ডেপ্রিকেটেড"
+msgid ""
+"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
+msgstr ""
+"<a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s দিয়ে "
+"তৈরী।"
#: sphinx/themes/basic/opensearch.xml:4
#, python-format
msgid "Search %(docstitle)s"
msgstr "%(docstitle)s-এ খুঁজুন"
-#: sphinx/themes/basic/search.html:9
+#: sphinx/themes/basic/relations.html:11
+msgid "Previous topic"
+msgstr "পূর্ববর্তী টপিক"
+
+#: sphinx/themes/basic/relations.html:13
+msgid "previous chapter"
+msgstr "পূর্ববর্তী অধ্যায়"
+
+#: sphinx/themes/basic/relations.html:16
+msgid "Next topic"
+msgstr "পরবর্তী টপিক"
+
+#: sphinx/themes/basic/relations.html:18
+msgid "next chapter"
+msgstr "পরবর্তী অধ্যায়"
+
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
@@ -582,7 +674,7 @@ msgstr ""
"অনুসন্ধান করার জন্য অনুগ্রহপূর্বক জাভাস্ক্রিপ্ট \n"
" সক্রিয় করুন।"
-#: sphinx/themes/basic/search.html:14
+#: sphinx/themes/basic/search.html:29
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"
@@ -590,23 +682,32 @@ msgid ""
" containing fewer words won't appear in the result list."
msgstr ""
"এখান থেকে এই নথিগুলোতে আপনি অনুসন্ধান করতে পারবেন। \n"
-" আপনার কাঙ্ক্ষিত শব্দসমূহ নিচের বাক্সে লিখুন এবং \"অনুসন্ধান\" বাটনে ক্লিক করুন।\n"
-" উল্লেখ্য, সকল শব্দসমূহের উপস্থিতি নিয়ে অনুসন্ধান করা হবে। যেসব পাতায় সকল\n"
+" আপনার কাঙ্ক্ষিত শব্দসমূহ নিচের বাক্সে লিখুন এবং \"অনুসন্ধান\" বাটনে "
+"ক্লিক করুন।\n"
+" উল্লেখ্য, সকল শব্দসমূহের উপস্থিতি নিয়ে অনুসন্ধান করা হবে। যেসব পাতায় "
+"সকল\n"
" শব্দ নেই সেগুলো বাদ দেয়া হবে।"
-#: sphinx/themes/basic/search.html:21
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "খুঁজুন"
-#: sphinx/themes/basic/search.html:25
-#: sphinx/themes/basic/static/searchtools.js:473
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "অনুসন্ধানের ফলাফল"
-#: sphinx/themes/basic/search.html:27
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "আপনার অনুসন্ধানে কোন ফলাফল পাওয়া যায়নি।"
+#: sphinx/themes/basic/searchbox.html:12
+msgid "Quick search"
+msgstr "দ্রুত অনুসন্ধান"
+
+#: sphinx/themes/basic/sourcelink.html:11
+msgid "This Page"
+msgstr "এই পাতা"
+
#: sphinx/themes/basic/changes/frameset.html:5
#: sphinx/themes/basic/changes/versionchanges.html:12
#, python-format
@@ -635,64 +736,50 @@ msgstr "C API পরিবর্তন"
msgid "Other changes"
msgstr "অন্যান্য পরিবর্তন"
-#: sphinx/themes/basic/static/doctools.js:138
-#: sphinx/writers/html.py:462
-#: sphinx/writers/html.py:467
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "এই শিরোনামের পার্মালিঙ্ক"
-#: sphinx/themes/basic/static/doctools.js:144
-#: sphinx/writers/html.py:80
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "এই সংজ্ঞার পার্মালিঙ্ক"
-#: sphinx/themes/basic/static/doctools.js:173
+#: sphinx/themes/basic/static/doctools.js:189
msgid "Hide Search Matches"
msgstr "অনুসন্ধানের ম্যাচগুলো লুকান"
-#: sphinx/themes/basic/static/searchtools.js:274
-msgid "Searching"
-msgstr "অনুসন্ধান চলছে"
-
-#: sphinx/themes/basic/static/searchtools.js:279
-msgid "Preparing search..."
-msgstr "অনুসন্ধানের প্রস্তুতি চলছে..."
-
-#: sphinx/themes/basic/static/searchtools.js:352
-msgid ", in "
-msgstr ", -"
+#: sphinx/themes/default/static/sidebar.js:69
+msgid "Expand sidebar"
+msgstr ""
-#: 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 "আপনার অনুসন্ধানে কোন ফলাফল পাওয়া যায়নি। আপনার অনুসন্ধানের শব্দগুলোর সঠিক বানান ও বিভাগ নির্বাচন নিশ্চিত করুন।"
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
+msgid "Collapse sidebar"
+msgstr ""
-#: sphinx/themes/basic/static/searchtools.js:477
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "অনুসন্ধান শেষ হয়েছে, ফলাফলে %s-টি পাতা পাওয়া গেছে।"
+#: sphinx/themes/haiku/layout.html:26
+msgid "Contents"
+msgstr ""
-#: sphinx/writers/latex.py:187
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "রিলিজ"
-#: sphinx/writers/latex.py:579
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr "পাদটীকা"
-#: sphinx/writers/latex.py:647
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr "পূর্ববর্তী পাতা হতে চলমান"
-#: sphinx/writers/latex.py:652
+#: sphinx/writers/latex.py:681
msgid "Continued on next page"
msgstr "পরবর্তী পাতাতে চলমান"
-#: sphinx/writers/text.py:166
-#, python-format
-msgid "Platform: %s"
-msgstr "প্লাটফরম: %s"
-
-#: sphinx/writers/text.py:428
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[ছবি]"
diff --git a/sphinx/locale/ca/LC_MESSAGES/sphinx.js b/sphinx/locale/ca/LC_MESSAGES/sphinx.js
index 71a50776..736d9b76 100644
--- a/sphinx/locale/ca/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/ca/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "ca", "plural_expr": "(n != 1)", "messages": {"Search Results": "Resultats de la Cerca", "Preparing search...": "Preparant la cerca...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "La teva cerca no ha donat resultats. Assegura't que totes les paraules estan ben escrites i que has seleccionat prou categories.", "Search finished, found %s page(s) matching the search query.": "Cerca finalitzada, s'han trobat %s p\u00e0gin(a/es) de resultats.", ", in ": ", a ", "Expand sidebar": "", "Permalink to this headline": "Link permanent a aquest t\u00edtol", "Searching": "Cercant", "Collapse sidebar": "", "Permalink to this definition": "Link permanent a aquesta definici\u00f3", "Hide Search Matches": "Oculta Resultats de Cerca"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "ca", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Oculta Resultats de Cerca", "Permalink to this definition": "Link permanent a aquesta definici\u00f3", "Expand sidebar": "", "Permalink to this headline": "Link permanent a aquest t\u00edtol", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/ca/LC_MESSAGES/sphinx.mo b/sphinx/locale/ca/LC_MESSAGES/sphinx.mo
index 339c787f..fc373e47 100644
--- a/sphinx/locale/ca/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/ca/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/ca/LC_MESSAGES/sphinx.po b/sphinx/locale/ca/LC_MESSAGES/sphinx.po
index 7bfb6642..c876228e 100644
--- a/sphinx/locale/ca/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ca/LC_MESSAGES/sphinx.po
@@ -7,387 +7,405 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 1.0\n"
"Report-Msgid-Bugs-To: pau.fernandez@upc.edu\n"
-"POT-Creation-Date: 2009-05-22 18:51+0200\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
"Last-Translator: Pau Fernández <pau.fernandez@upc.edu>\n"
"Language-Team: ca <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, fuzzy, python-format
+msgid "%s %s documentation"
+msgstr "%s %s documentació"
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%d de %B de %Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr "vegeu %s"
+
+#: sphinx/environment.py:1628
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "see also %s"
+msgstr "vegeu també %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/roles.py:175
+#, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
+
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Mòduls Interns"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Nivell de mòdul"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d %b, %Y"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Índex General"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "índex"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "següent"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "anterior"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr " (a "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Autor de la secció:"
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Autor del mòdul: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
#, fuzzy
msgid "Code author: "
msgstr "Autor del mòdul: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Autor: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Vegeu també"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Paràmetres"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Retorna"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Tipus de retorn"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (funció de C)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (membre de C)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (macro de C)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (tipus de C)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (variable de C)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "funció"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "membre"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr "macro"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "tipus"
-#: sphinx/domains/c.py:175
-#, fuzzy
+#: sphinx/domains/c.py:208
msgid "variable"
-msgstr "Variable"
+msgstr "variable"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr "%s (class de C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (tipus de C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (membre de C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (funció de C++)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr "class"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (funció interna)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (mètode %s)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (class)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (atribut %s)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
#, fuzzy
msgid "Arguments"
msgstr "Paràmetres"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "atribut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
#, fuzzy
msgid "Variables"
msgstr "Variable"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Llença"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (al mòdul %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (variable interna)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (al mòdul %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (classe interna)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (class a %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (mètode %s.%s)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (mètode estàtic %s.%s)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (mètode estàtic %s)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (mètode %s.%s)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (mètode %s)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (atribut %s.%s)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Plataformes: "
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (mòdul)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
#, fuzzy
msgid "Python Module Index"
msgstr "Índex de Mòduls"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "mòduls"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Obsolet"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "excepció"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
-msgstr "%s() (mètode %s)"
+msgstr ""
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "mètode estàtic"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "mòdul"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (obsolet)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
-#, fuzzy, python-format
+#: sphinx/domains/rst.py:57
+#, python-format
msgid "%s (role)"
-msgstr "%s (mòdul)"
+msgstr ""
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
-#, fuzzy
+#: sphinx/domains/rst.py:107
msgid "role"
-msgstr "mòdul"
+msgstr ""
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "variable d'entorn; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "opció de línia de comandes %s; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr ""
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr ""
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr ""
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "variable d'entorn"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Índex"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Índex de Mòduls"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Pàgina de Cerca"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr " Bases: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr "àlies de :class:`%s`"
@@ -405,104 +423,104 @@ msgstr "(La <<entrada original>> està a %s, línia %d i.)"
msgid "original entry"
msgstr ""
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
#, fuzzy
msgid "Module code"
msgstr "mòdul"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr ""
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr ""
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr ""
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Atenció"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Compte"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Perill"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Error"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Suggerència"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Important"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Nota"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Vegeu També"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Truc"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Avís"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Novetat de la versió %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Canviat a la versió %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Obsolet desde la versió %s"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "paraula clau"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "operador"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "objecte"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "sentència"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "funció interna"
@@ -511,8 +529,8 @@ msgstr "funció interna"
msgid "Table Of Contents"
msgstr "Taula de Contingut"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Cerca"
@@ -560,15 +578,15 @@ msgstr "accés ràpid a tots els mòduls"
msgid "all functions, classes, terms"
msgstr "totes les funcions, classes, termes"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Índes &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Índex complet en una pàgina"
@@ -580,39 +598,39 @@ msgstr "Pàgines d'índex per lletra"
msgid "can be huge"
msgstr "pot ser gegant"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Navegació"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Cerca dins de %(docstitle)s"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "Quant a aquests documents"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Copyright"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\\\"%(path)s\\\">Copyright</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Copyright %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Última actualització el %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -642,7 +660,7 @@ msgstr "Tema següent"
msgid "next chapter"
msgstr "capítol següent"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
@@ -650,7 +668,7 @@ msgstr ""
"Activa JavaScript per utilitzar la funcionalitat\n"
"de cerca."
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -662,16 +680,15 @@ msgstr ""
"que la cerca inclourà totes les paraules que posis. Les pàgines que no\n"
"tenen totes les paraules no sortiràn."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "cerca"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Resultats de la Cerca"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "La teva cerca no té resultats."
@@ -711,12 +728,12 @@ msgstr "Canvis a la API de C"
msgid "Other changes"
msgstr "Altres canvis"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Link permanent a aquest títol"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Link permanent a aquesta definició"
@@ -724,37 +741,12 @@ msgstr "Link permanent a aquesta definició"
msgid "Hide Search Matches"
msgstr "Oculta Resultats de Cerca"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Cercant"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Preparant la cerca..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", a "
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 ""
-"La teva cerca no ha donat resultats. Assegura't que totes les paraules "
-"estan ben escrites i que has seleccionat prou categories."
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "Cerca finalitzada, s'han trobat %s pàgin(a/es) de resultats."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr ""
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr ""
@@ -762,22 +754,24 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Versió"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr "ve de la pàgina anterior"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
msgid "Continued on next page"
msgstr "Continua a la pàgina següent"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[imatge]"
+
diff --git a/sphinx/locale/cs/LC_MESSAGES/sphinx.js b/sphinx/locale/cs/LC_MESSAGES/sphinx.js
index 8fdd489a..011ef542 100644
--- a/sphinx/locale/cs/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/cs/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "cs", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Search Results": "V\u00fdsledky hled\u00e1n\u00ed", "Preparing search...": "P\u0159ipravuji vyhled\u00e1v\u00e1n\u00ed....", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Nenalezli jsme \u017e\u00e1dn\u00fd dokument. Ujist\u011bte se pros\u00edm, \u017ee v\u0161echna slova jsou spr\u00e1vn\u011b a \u017ee jste vybral dostatek kategori\u00ed.", "Search finished, found %s page(s) matching the search query.": "Vyhled\u00e1v\u00e1n\u00ed skon\u010dilo, nalezeno %s stran.", ", in ": ", v", "Expand sidebar": "", "Permalink to this headline": "Trval\u00fd odkaz na tento nadpis", "Searching": "Hled\u00e1m", "Collapse sidebar": "", "Permalink to this definition": "Trval\u00fd odkaz na tuto definici", "Hide Search Matches": "Skr\u00fdt v\u00fdsledky vyhled\u00e1v\u00e1n\u00ed"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "cs", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Hide Search Matches": "Skr\u00fdt v\u00fdsledky vyhled\u00e1v\u00e1n\u00ed", "Permalink to this definition": "Trval\u00fd odkaz na tuto definici", "Expand sidebar": "", "Permalink to this headline": "Trval\u00fd odkaz na tento nadpis", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/cs/LC_MESSAGES/sphinx.mo b/sphinx/locale/cs/LC_MESSAGES/sphinx.mo
index 8092a992..ba0798db 100644
--- a/sphinx/locale/cs/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/cs/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/cs/LC_MESSAGES/sphinx.po b/sphinx/locale/cs/LC_MESSAGES/sphinx.po
index 535d4b9f..9ed728ed 100644
--- a/sphinx/locale/cs/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/cs/LC_MESSAGES/sphinx.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 0.5\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2008-11-27 18:39+0100\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
"Last-Translator: Pavel Kosina <pavel.kosina@gmail.com>\n"
"Language-Team: Pavel Kosina <pavel.kosina@gmail.com>\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
@@ -16,379 +16,398 @@ msgstr ""
"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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, fuzzy, python-format
+msgid "%s %s documentation"
+msgstr "%s %s dokumentaci"
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%d.%m.%Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, fuzzy, python-format
+msgid "see %s"
+msgstr "viz %s"
+
+#: sphinx/environment.py:1628
+#, fuzzy, python-format
+msgid "see also %s"
+msgstr "viz také %s"
+
+#: sphinx/roles.py:175
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:73
msgid "Builtins"
-msgstr "Vestavěné funkce "
+msgstr "Vestavěné funkce"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Úroveň modulů"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d.%m.%Y"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Rejstřík indexů"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "index"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "další"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "předchozí"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr "(v"
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Autor sekce: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Autor modulu: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
#, fuzzy
msgid "Code author: "
msgstr "Autor modulu: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Autor: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Viz také"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Parametry"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Vrací"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Typ navrácené hodnoty"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (C funkce)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (člen C)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (C makro)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (C typ)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (C proměnná)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "funkce"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "člen"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "typ"
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
#, fuzzy
msgid "variable"
msgstr "Proměnná"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++ třída)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ typ)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (člen C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ funkce)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr "třída"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (vestavěná funkce)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (metoda %s)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (třída)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s() (atribut %s)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
#, fuzzy
msgid "Arguments"
msgstr "Parametry"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "atribut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
#, fuzzy
msgid "Variables"
msgstr "Proměnná"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Vyvolá"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (v modulu %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s() (vestavěná proměnná)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s() (v modulu %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s () (vestavěná proměnná)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s() (třída v %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (metoda %s.%s)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (statická metoda %s.%s)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (statická metoda %s)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (metoda %s.%s)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (metoda %s)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s() (atribut %s.%s)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Platformy: "
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (module)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
#, fuzzy
msgid "Python Module Index"
-msgstr "Rejstřík modulů "
+msgstr "Rejstřík modulů"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "moduly"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Zastaralé"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "výjimka"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
-msgstr "%s() (metoda %s)"
+msgstr ""
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "statická metoda"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "modul"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (zastaralé)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
-#, fuzzy, python-format
+#: sphinx/domains/rst.py:57
+#, python-format
msgid "%s (role)"
-msgstr "%s (module)"
+msgstr ""
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
-#, fuzzy
+#: sphinx/domains/rst.py:107
msgid "role"
-msgstr "modul"
+msgstr ""
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "promměná prostředí, %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%s parametry příkazového řádku; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr ""
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr ""
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr ""
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "promměná prostředí"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Index"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Rejstřík modulů "
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Vyhledávací stránka"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -400,110 +419,110 @@ msgstr "Todo"
#: sphinx/ext/todo.py:109
#, fuzzy, python-format
msgid "(The <<original entry>> is located in %s, line %d.)"
-msgstr "(Původní záznam je v %s, řádka %d a lze jej nalézt"
+msgstr "(Původní záznam je v %s, řádka %d.)"
#: sphinx/ext/todo.py:117
msgid "original entry"
msgstr ""
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
#, fuzzy
msgid "Module code"
msgstr "modul"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr ""
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr ""
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr ""
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Výstraha"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Upozornění"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Nebezpečí"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Chyba"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Rada"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Důležité"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Poznámka"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Viz také"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Tip"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Varování"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Nové ve verzi %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Změněno ve verzi %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Zastaralé od verze %s"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "klíčové slovo"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "operátor"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "objekt"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "příkaz"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "vestavěná funkce"
@@ -512,8 +531,8 @@ msgstr "vestavěná funkce"
msgid "Table Of Contents"
msgstr "Obsah"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Hledání"
@@ -562,15 +581,15 @@ msgstr "rychlý přístup ke všem modulům"
msgid "all functions, classes, terms"
msgstr "všechny funkce, třídy, termíny"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Index &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Plný index na jedné stránce"
@@ -582,39 +601,39 @@ msgstr "Index podle písmene"
msgid "can be huge"
msgstr "může být obrovský"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Navigace"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Hledání uvnitř %(docstitle)s"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "O těchto dokumentech"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Veškerá práva vyhrazena"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Copyright %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Aktualizováno dne %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -644,13 +663,13 @@ msgstr "Další téma"
msgid "next chapter"
msgstr "další kapitola"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr ""
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -662,16 +681,15 @@ msgstr ""
"Vyhledávání hledá automaticky všechna slova. Nebudou tedy nalezeny "
"stránky, obsahující méně slov."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "hledej"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Výsledky hledání"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Nic jsme nenašli."
@@ -711,12 +729,12 @@ msgstr "Změny API"
msgid "Other changes"
msgstr "Ostatní změny"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Trvalý odkaz na tento nadpis"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Trvalý odkaz na tuto definici"
@@ -724,37 +742,12 @@ msgstr "Trvalý odkaz na tuto definici"
msgid "Hide Search Matches"
msgstr "Skrýt výsledky vyhledávání"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Hledám"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Připravuji vyhledávání...."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", v"
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 ""
-"Nenalezli jsme žádný dokument. Ujistěte se prosím, že všechna slova jsou "
-"správně a že jste vybral dostatek kategorií."
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "Vyhledávání skončilo, nalezeno %s stran."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr ""
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr ""
@@ -762,23 +755,25 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Vydání"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
#, fuzzy
msgid "Continued on next page"
msgstr "Plný index na jedné stránce"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[obrázek]"
+
diff --git a/sphinx/locale/da/LC_MESSAGES/sphinx.js b/sphinx/locale/da/LC_MESSAGES/sphinx.js
index d17efc47..c28fab30 100644
--- a/sphinx/locale/da/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/da/LC_MESSAGES/sphinx.js
@@ -1 +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"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "da", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Skjul s\u00f8geresultater", "Permalink to this definition": "Permalink til denne definition", "Expand sidebar": "Udfold sidebj\u00e6lke", "Permalink to this headline": "Permalink til denne overskrift", "Collapse sidebar": "Sammenfold sidebj\u00e6lke"}}); \ No newline at end of file
diff --git a/sphinx/locale/da/LC_MESSAGES/sphinx.mo b/sphinx/locale/da/LC_MESSAGES/sphinx.mo
index a47f10de..d0006ee2 100644
--- a/sphinx/locale/da/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/da/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/da/LC_MESSAGES/sphinx.po b/sphinx/locale/da/LC_MESSAGES/sphinx.po
index c975e747..df991aec 100644
--- a/sphinx/locale/da/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/da/LC_MESSAGES/sphinx.po
@@ -1,509 +1,602 @@
-# Translations template for Sphinx.
-# Copyright (C) 2009 The Sphinx Team
+# Danish translations for Sphinx.
+# Copyright (C) 2009, 2011 The Sphinx Team
# This file is distributed under the same license as the Sphinx project.
#
-# Ask Hjorth Larsen <asklarsen@gmail.com>, 2010.
+# Ask Hjorth Larsen <asklarsen@gmail.com>, 2010, 2011.
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"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
-"Language-Team: Danish <dansk@dansk-gruppen.dk\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\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"
+"Generated-By: Babel 0.9.6\n"
-# 21. april, 2010
-#: sphinx/environment.py:130 sphinx/writers/latex.py:184
+#: sphinx/config.py:81
+#, fuzzy, python-format
+msgid "%s %s documentation"
+msgstr "%s %s dokumentation"
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, 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"
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr "se %s"
-# Ikke 'Søg på side'
-#: sphinx/environment.py:350 sphinx/themes/basic/defindex.html:16
-msgid "Search Page"
-msgstr "Søgeside"
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr "se også %s"
-#: sphinx/roles.py:167
+#: sphinx/roles.py:175
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
-#: sphinx/builders/changes.py:70
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Indbyggede"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Modulniveau"
-# Apr 21, 2010
-#: sphinx/builders/html.py:224
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d. %b, %Y"
-#: sphinx/builders/html.py:243 sphinx/themes/basic/defindex.html:21
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Generelt indeks"
-#: sphinx/builders/html.py:243
+#: sphinx/builders/html.py:293
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
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "næste"
-#: sphinx/builders/html.py:313
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "forrige"
-#: sphinx/builders/latex.py:162
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
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
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Afsnitsforfatter: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Modulforfatter: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
+msgid "Code author: "
+msgstr "Kodeforfatter: "
+
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Forfatter: "
-#: sphinx/directives/other.py:233
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Se også"
-#: sphinx/domains/c.py:124
+#: sphinx/domains/__init__.py:244
+#, python-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
+msgid "Parameters"
+msgstr "Parametre"
+
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
+msgid "Returns"
+msgstr "Returnerer"
+
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
+msgid "Return type"
+msgstr "Returtype"
+
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (C-funktion)"
-#: sphinx/domains/c.py:126
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (C-medlem)"
-#: sphinx/domains/c.py:128
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (C-makro)"
-#: sphinx/domains/c.py:130
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (C-type)"
-#: sphinx/domains/c.py:132
+#: sphinx/domains/c.py:149
#, 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:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
+msgid "function"
+msgstr "funktion"
+
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
+msgid "member"
+msgstr "medlem"
+
+#: sphinx/domains/c.py:206
+msgid "macro"
+msgstr "makro"
+
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
+msgid "type"
+msgstr "type"
+
+#: sphinx/domains/c.py:208
+msgid "variable"
+msgstr "variabel"
+
+#: sphinx/domains/cpp.py:904
+#, python-format
+msgid "%s (C++ class)"
+msgstr "%s (C++-klasse)"
-#: sphinx/domains/c.py:163
-msgid "C member"
-msgstr "C-medlem"
+#: sphinx/domains/cpp.py:919
+#, python-format
+msgid "%s (C++ type)"
+msgstr "%s (C++-type)"
-#: sphinx/domains/c.py:164
-msgid "C macro"
-msgstr "C-makro"
+#: sphinx/domains/cpp.py:938
+#, python-format
+msgid "%s (C++ member)"
+msgstr "%s (C++-medlem)"
-#: sphinx/domains/c.py:165
-msgid "C type"
-msgstr "C-type"
+#: sphinx/domains/cpp.py:990
+#, python-format
+msgid "%s (C++ function)"
+msgstr "%s (C++-funktion)"
-#: sphinx/domains/c.py:166
-msgid "C variable"
-msgstr "C-variabel"
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
+msgid "class"
+msgstr "klasse"
-#: sphinx/domains/python.py:186
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, 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
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
+#, python-format
+msgid "%s() (%s method)"
+msgstr "%s() (metode i %s)"
+
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (klasse)"
+
+#: sphinx/domains/javascript.py:111
+#, python-format
+msgid "%s (global variable or constant)"
+msgstr "%s (global variabel eller konstant)"
+
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
+#, python-format
+msgid "%s (%s attribute)"
+msgstr "%s (attribut i %s)"
+
+#: sphinx/domains/javascript.py:122
+msgid "Arguments"
+msgstr "Parametre"
+
+#: sphinx/domains/javascript.py:125
+msgid "Throws"
+msgstr "Kaster"
+
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
+msgid "data"
+msgstr "data"
+
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
+msgid "attribute"
+msgstr "attribut"
+
+#: sphinx/domains/python.py:100
+msgid "Variables"
+msgstr "Variable"
+
+#: sphinx/domains/python.py:104
+msgid "Raises"
+msgstr "Rejser"
+
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (i modulet %s)"
-#: sphinx/domains/python.py:190
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (indbygget variabel)"
-#: sphinx/domains/python.py:191 sphinx/domains/python.py:282
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (i modulet %s)"
-#: sphinx/domains/python.py:207
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (indbygget klasse)"
-#: sphinx/domains/python.py:208
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (klasse i %s)"
-#: sphinx/domains/python.py:248
+#: sphinx/domains/python.py:316
#, 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
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (statisk metode i %s.%s)"
-#: sphinx/domains/python.py:263
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (statisk metode i %s)"
-#: sphinx/domains/python.py:273
+#: sphinx/domains/python.py:341
#, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (klassemetode i %s.%s)"
-#: sphinx/domains/python.py:276
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s() (%s class method)"
msgstr "%s() (klassemetode i %s)"
-#: sphinx/domains/python.py:286
+#: sphinx/domains/python.py:354
#, 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
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (modul)"
-#: sphinx/domains/python.py:396
-msgid "function"
-msgstr "funktion"
+#: sphinx/domains/python.py:491
+msgid "Python Module Index"
+msgstr "Python-modulindeks"
-#: sphinx/domains/python.py:397
-msgid "data"
-msgstr "data"
+#: sphinx/domains/python.py:492
+msgid "modules"
+msgstr "moduler"
-#: sphinx/domains/python.py:398
-msgid "class"
-msgstr "klasse"
+#: sphinx/domains/python.py:537
+msgid "Deprecated"
+msgstr "Forældet"
-#: sphinx/domains/python.py:399 sphinx/locale/__init__.py:161
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "undtagelse"
-#: sphinx/domains/python.py:400
+#: sphinx/domains/python.py:563
msgid "method"
msgstr "metode"
-#: sphinx/domains/python.py:401
-msgid "attribute"
-msgstr "attribut"
+#: sphinx/domains/python.py:564
+msgid "class method"
+msgstr "klassemetode"
-#: sphinx/domains/python.py:402 sphinx/locale/__init__.py:157
+#: sphinx/domains/python.py:565
+msgid "static method"
+msgstr "statisk metode"
+
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "modul"
-#: sphinx/domains/std.py:67 sphinx/domains/std.py:83
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (forældet)"
+
+#: sphinx/domains/rst.py:55
+#, python-format
+msgid "%s (directive)"
+msgstr "%s (direktiv)"
+
+#: sphinx/domains/rst.py:57
+#, python-format
+msgid "%s (role)"
+msgstr "%s (rolle)"
+
+#: sphinx/domains/rst.py:106
+msgid "directive"
+msgstr "direktiv"
+
+#: sphinx/domains/rst.py:107
+msgid "role"
+msgstr "rolle"
+
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "miljøvariabel; %s"
-#: sphinx/domains/std.py:156
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%skommandolinjetilvalg; %s"
-#: sphinx/domains/std.py:324
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr "begreb i ordliste"
-#: sphinx/domains/std.py:325
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr "grammatisk element"
-#: sphinx/domains/std.py:326
+#: sphinx/domains/std.py:395
+msgid "reference label"
+msgstr "referenceetiket"
+
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "miljøvariabel"
-#: sphinx/domains/std.py:327
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr "programtilvalg"
-#: sphinx/ext/autodoc.py:892
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
+#: sphinx/themes/basic/genindex-split.html:11
+#: sphinx/themes/basic/genindex-split.html:14
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
+msgid "Index"
+msgstr "Indeks"
+
+#: sphinx/domains/std.py:428
+msgid "Module Index"
+msgstr "Modulindeks"
+
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
+msgid "Search Page"
+msgstr "Søgeside"
+
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr " Baser: %s"
-#: sphinx/ext/autodoc.py:925
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr "alias for :class:`%s`"
-#: sphinx/ext/todo.py:40
+#: sphinx/ext/todo.py:41
msgid "Todo"
msgstr "Todo"
-#: sphinx/ext/todo.py:98
+#: sphinx/ext/todo.py:109
+#, python-format
+msgid "(The <<original entry>> is located in %s, line %d.)"
+msgstr "(Det <<oprindelige punkt>> befinder sig i %s, linje %d.)"
+
+#: sphinx/ext/todo.py:117
+msgid "original entry"
+msgstr "oprindeligt punkt"
+
+#: sphinx/ext/viewcode.py:70
+msgid "[source]"
+msgstr "[kilde]"
+
+#: sphinx/ext/viewcode.py:117
+msgid "[docs]"
+msgstr "[dok]"
+
+#: sphinx/ext/viewcode.py:131
+msgid "Module code"
+msgstr "Modulkode"
+
+#: sphinx/ext/viewcode.py:137
#, 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 "
+msgid "<h1>Source code for %s</h1>"
+msgstr "<h1>Kildekode for %s</h1>"
-#: sphinx/ext/todo.py:104
-msgid "here"
-msgstr "her"
+#: sphinx/ext/viewcode.py:164
+msgid "Overview: module code"
+msgstr "Oversigt: modulkode"
-#: sphinx/locale/__init__.py:138
+#: sphinx/ext/viewcode.py:165
+msgid "<h1>All modules for which code is available</h1>"
+msgstr "<h1>Alle moduler, der er kode tilgængelig for</h1>"
+
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Vær opmærksom"
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Forsigtig"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Fare"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Fejl"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Fif"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Vigtigt"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Bemærk"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Se også"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Tip"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Advarsel"
-#: sphinx/locale/__init__.py:151
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Ny i version %s"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Ændret i version %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
-msgstr "Deprecieret siden version %s"
+msgstr "Forældet siden version %s"
-#: sphinx/locale/__init__.py:158
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "nøgleord"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "operator"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "objekt"
-#: sphinx/locale/__init__.py:162
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "erklæring"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "indbygget funktion"
-#: sphinx/themes/basic/defindex.html:2
+#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10
+#: sphinx/themes/basic/localtoc.html:11
+msgid "Table Of Contents"
+msgstr "Indholdsfortegnelse"
+
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
+msgid "Search"
+msgstr "Søg"
+
+#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15
+msgid "Go"
+msgstr "Søg"
+
+#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20
+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/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14
+msgid "Show Source"
+msgstr "Vis kilde"
+
+#: sphinx/themes/basic/defindex.html:11
msgid "Overview"
msgstr "Oversigt"
-#: sphinx/themes/basic/defindex.html:11
+#: sphinx/themes/basic/defindex.html:20
msgid "Indices and tables:"
msgstr "Indeks og tabeller:"
-#: sphinx/themes/basic/defindex.html:14
+#: sphinx/themes/basic/defindex.html:23
msgid "Complete Table of Contents"
msgstr "Fuldstændig indholdsfortegnelse"
-#: sphinx/themes/basic/defindex.html:15
+#: sphinx/themes/basic/defindex.html:24
msgid "lists all sections and subsections"
msgstr "viser alle afsnit og underafsnit"
-#: sphinx/themes/basic/defindex.html:17
+#: sphinx/themes/basic/defindex.html:26
msgid "search this documentation"
msgstr "søg i denne dokumentation"
-#: sphinx/themes/basic/defindex.html:20
+#: sphinx/themes/basic/defindex.html:28
+msgid "Global Module Index"
+msgstr "Globalt modulindeks"
+
+#: sphinx/themes/basic/defindex.html:29
msgid "quick access to all modules"
msgstr "hurtig adgang til alle moduler"
-#: sphinx/themes/basic/defindex.html:22
+#: sphinx/themes/basic/defindex.html:31
msgid "all functions, classes, terms"
msgstr "alle funktioner, klasser, begreber"
-#: sphinx/themes/basic/genindex-single.html:5
+#: sphinx/themes/basic/genindex-single.html:35
#, 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
+#: sphinx/themes/basic/genindex-single.html:63
+#: sphinx/themes/basic/genindex-split.html:24
+#: sphinx/themes/basic/genindex-split.html:38
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Fuldt indeks på én side"
-#: sphinx/themes/basic/genindex-split.html:7
+#: sphinx/themes/basic/genindex-split.html:16
msgid "Index pages by letter"
msgstr "Indeksér sider efter bogstav"
-# refererer til indeks
-#: sphinx/themes/basic/genindex-split.html:15
+#: sphinx/themes/basic/genindex-split.html:25
msgid "can be huge"
msgstr "kan være enormt"
-#: sphinx/themes/basic/layout.html:10
+#: sphinx/themes/basic/layout.html:29
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"
@@ -513,48 +606,56 @@ msgstr "Søg i %(docstitle)s"
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
+#: sphinx/themes/basic/layout.html:189
#, 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
+#: sphinx/themes/basic/layout.html:191
#, 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
+#: sphinx/themes/basic/layout.html:195
#, 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
+#: sphinx/themes/basic/layout.html:198
#, 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"
+msgstr ""
+"Bygget med <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
#: sphinx/themes/basic/opensearch.xml:4
#, python-format
msgid "Search %(docstitle)s"
msgstr "Søg i %(docstitle)s"
-#: sphinx/themes/basic/search.html:9
+#: sphinx/themes/basic/relations.html:11
+msgid "Previous topic"
+msgstr "Forrige emne"
+
+#: sphinx/themes/basic/relations.html:13
+msgid "previous chapter"
+msgstr "forrige kapitel"
+
+#: sphinx/themes/basic/relations.html:16
+msgid "Next topic"
+msgstr "Næste emne"
+
+#: sphinx/themes/basic/relations.html:18
+msgid "next chapter"
+msgstr "næste kapitel"
+
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
@@ -562,7 +663,7 @@ msgstr ""
"Aktivér venligst JavaScript for at aktivere\n"
" søgefunktionalitet."
-#: sphinx/themes/basic/search.html:14
+#: sphinx/themes/basic/search.html:29
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"
@@ -574,19 +675,26 @@ msgstr ""
" 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
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "søg"
-#: sphinx/themes/basic/search.html:25
-#: sphinx/themes/basic/static/searchtools.js:473
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Søgeresultater"
-#: sphinx/themes/basic/search.html:27
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Din søgning gav ingen resultater."
+#: sphinx/themes/basic/searchbox.html:12
+msgid "Quick search"
+msgstr "Hurtig søgning"
+
+#: sphinx/themes/basic/sourcelink.html:11
+msgid "This Page"
+msgstr "Denne side"
+
#: sphinx/themes/basic/changes/frameset.html:5
#: sphinx/themes/basic/changes/versionchanges.html:12
#, python-format
@@ -615,64 +723,50 @@ msgstr "Ændringer i C-API"
msgid "Other changes"
msgstr "Andre ændringer"
-#: sphinx/themes/basic/static/doctools.js:138 sphinx/writers/html.py:462
-#: sphinx/writers/html.py:467
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Permalink til denne overskrift"
-#: sphinx/themes/basic/static/doctools.js:144 sphinx/writers/html.py:80
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Permalink til denne definition"
-#: sphinx/themes/basic/static/doctools.js:173
+#: sphinx/themes/basic/static/doctools.js:189
msgid "Hide Search Matches"
msgstr "Skjul søgeresultater"
-#: sphinx/themes/basic/static/searchtools.js:274
-msgid "Searching"
-msgstr "Søger"
+#: sphinx/themes/default/static/sidebar.js:69
+msgid "Expand sidebar"
+msgstr "Udfold sidebjælke"
-#: sphinx/themes/basic/static/searchtools.js:279
-msgid "Preparing search..."
-msgstr "Forbereder søgning..."
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
+msgid "Collapse sidebar"
+msgstr "Sammenfold sidebjælke"
-#: sphinx/themes/basic/static/searchtools.js:352
-msgid ", in "
-msgstr ", i "
+#: sphinx/themes/haiku/layout.html:26
+msgid "Contents"
+msgstr "Indhold"
-#: 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
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Udgave"
-#: sphinx/writers/latex.py:579
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr "Fodnoter"
-#: sphinx/writers/latex.py:647
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr "fortsat fra forrige side"
-#: sphinx/writers/latex.py:652
+#: sphinx/writers/latex.py:681
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
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[billede]"
diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.js b/sphinx/locale/de/LC_MESSAGES/sphinx.js
index 5409d6d9..665492b1 100644
--- a/sphinx/locale/de/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/de/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "de", "plural_expr": "(n != 1)", "messages": {"Search Results": "Suchergebnisse", "Preparing search...": "Suche wird vorbereitet...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Es wurden keine zutreffenden Dokumente gefunden. Haben Sie alle Suchbegriffe richtig geschrieben und gen\u00fcgend Kategorien ausgew\u00e4hlt?", "Search finished, found %s page(s) matching the search query.": "Suche beendet, %s zutreffende Seite(n) gefunden.", ", in ": ", in ", "Expand sidebar": "Sidebar ausklappen", "Permalink to this headline": "Permalink zu dieser \u00dcberschrift", "Searching": "Suche...", "Collapse sidebar": "Sidebar einklappen", "Permalink to this definition": "Permalink zu dieser Definition", "Hide Search Matches": "Suchergebnisse ausblenden"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "de", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Suchergebnisse ausblenden", "Permalink to this definition": "Permalink zu dieser Definition", "Expand sidebar": "Sidebar ausklappen", "Permalink to this headline": "Permalink zu dieser \u00dcberschrift", "Collapse sidebar": "Sidebar einklappen"}}); \ No newline at end of file
diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.mo b/sphinx/locale/de/LC_MESSAGES/sphinx.mo
index abecb480..ce12882d 100644
--- a/sphinx/locale/de/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/de/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.po b/sphinx/locale/de/LC_MESSAGES/sphinx.po
index 83e6fabe..50ba7490 100644
--- a/sphinx/locale/de/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/de/LC_MESSAGES/sphinx.po
@@ -6,383 +6,401 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2008-08-07 21:40+0200\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
"Last-Translator: Georg Brandl <georg@python.org>\n"
"Language-Team: de <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr "%s %s Dokumentation"
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%d. %m. %Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr "siehe %s"
+
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr "siehe auch %s"
+
+#: sphinx/roles.py:175
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Builtins"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Modulebene"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d. %m. %Y"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Allgemeiner Index"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "Index"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "weiter"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "zurück"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr " (in "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Autor des Abschnitts: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Autor des Moduls: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
msgid "Code author: "
msgstr "Autor des Quellcode: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Autor: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Siehe auch"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr "%s-%s"
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Parameter"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Rückgabe"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Rückgabetyp"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (C-Funktion)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (C-Member)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (C-Makro)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (C-Typ)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (C-Variable)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "Funktion"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "Member"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr "Makro"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "Typ"
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
msgid "variable"
msgstr "Variable"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++-Klasse)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++-Typ)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++-Member)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++-Funktion)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr "Klasse"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (Standard-Funktion)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (Methode von %s)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (Klasse)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr "%s (globale Variable oder Konstante)"
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (Attribut von %s)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
msgid "Arguments"
msgstr "Parameter"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr "Wirft"
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr "Daten"
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
-#, python-format
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "Attribut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
msgid "Variables"
msgstr "Variablen"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Verursacht"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (in Modul %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (Standard-Variable)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (in Modul %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (Standard-Klasse)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (Klasse in %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (Methode von %s.%s)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (statische Methode von %s.%s)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (statische Methode von %s)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (Klassenmethode von %s.%s)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s() (%s class method)"
msgstr "%s() (Klassenmethode von %s)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (Attribut von %s.%s)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Plattformen: "
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (Modul)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
msgid "Python Module Index"
msgstr "Python-Modulindex"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "Module"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Veraltet"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "Exception"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr "Methode"
-#: sphinx/domains/python.py:502
-#, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
msgstr "Klassenmethode"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "statische Methode"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "Module"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (veraltet)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr "%s (Direktive)"
-#: sphinx/domains/rst.py:55
+#: sphinx/domains/rst.py:57
#, python-format
msgid "%s (role)"
msgstr "%s (Rolle)"
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr "Direktive"
-#: sphinx/domains/rst.py:104
+#: sphinx/domains/rst.py:107
msgid "role"
msgstr "Rolle"
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "Umgebungsvariable; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%sKommandozeilenoption; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr "Glossareintrag"
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr "Grammatik-Token"
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr "Referenz-Label"
-#: sphinx/domains/std.py:331
-#, python-format
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "Umgebungsvariable"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr "Programmoption"
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Stichwortverzeichnis"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Modulindex"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Suche"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr " Basisklassen: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr "Alias von :class:`%s`"
@@ -400,103 +418,103 @@ msgstr "(Der <<ursprüngliche Eintrag>> steht in %s, Zeile %d.)"
msgid "original entry"
msgstr "ursprüngliche Eintrag"
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr "[Quelle]"
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr "[Doku]"
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
msgid "Module code"
msgstr "Modul-Quellcode"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr "<h1>Quellcode für %s</h1>"
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr "Überblick: Modul-Quellcode"
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr "<h1>Alle Module, für die Quellcode verfügbar ist</h1>"
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Achtung"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Vorsicht"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Gefahr"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Fehler"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Hinweis"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Wichtig"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Bemerkung"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Siehe auch"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Tipp"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Warnung"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Neu in Version %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Geändert in Version %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Veraltet ab Version %s"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "Schlüsselwort"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "Operator"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "Objekt"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "Anweisung"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "Standard-Funktion"
@@ -505,8 +523,8 @@ msgstr "Standard-Funktion"
msgid "Table Of Contents"
msgstr "Inhalt"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Suche"
@@ -556,15 +574,15 @@ msgstr "Schneller Zugriff auf alle Module"
msgid "all functions, classes, terms"
msgstr "Alle Funktionen, Klassen, Begriffe"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Stichwortverzeichnis &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Gesamtes Stichwortverzeichnis auf einer Seite"
@@ -576,39 +594,39 @@ msgstr "Stichwortverzeichnis nach Anfangsbuchstabe"
msgid "can be huge"
msgstr "kann groß sein"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Navigation"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Suche in %(docstitle)s"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "Über diese Dokumentation"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Copyright"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Copyright %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Zuletzt aktualisiert am %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -638,13 +656,13 @@ msgstr "Nächstes Thema"
msgid "next chapter"
msgstr "nächstes Kapitel"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr "Bitte aktivieren Sie JavaScript, wenn Sie die Suchfunktion nutzen wollen."
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -657,16 +675,15 @@ msgstr ""
"all diesen Worten suchen wird. Seiten, die nicht alle Worte enthalten, "
"werden nicht in der Ergebnisliste erscheinen."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "suchen"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Suchergebnisse"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Deine Suche ergab leider keine Treffer."
@@ -706,12 +723,12 @@ msgstr "C API-Änderungen"
msgid "Other changes"
msgstr "Andere Änderungen"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Permalink zu dieser Überschrift"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Permalink zu dieser Definition"
@@ -719,37 +736,12 @@ msgstr "Permalink zu dieser Definition"
msgid "Hide Search Matches"
msgstr "Suchergebnisse ausblenden"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Suche..."
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Suche wird vorbereitet..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", in "
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 ""
-"Es wurden keine zutreffenden Dokumente gefunden. Haben Sie alle "
-"Suchbegriffe richtig geschrieben und genügend Kategorien ausgewählt?"
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "Suche beendet, %s zutreffende Seite(n) gefunden."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr "Sidebar ausklappen"
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr "Sidebar einklappen"
@@ -757,23 +749,24 @@ msgstr "Sidebar einklappen"
msgid "Contents"
msgstr "Inhalt"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Release"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr "Fußnoten"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr "Fortsetzung der vorherigen Seite"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
msgid "Continued on next page"
msgstr "Fortsetzung auf der nächsten Seite"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[Bild]"
diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.js b/sphinx/locale/es/LC_MESSAGES/sphinx.js
index 098e8b5d..8ccbc0ca 100644
--- a/sphinx/locale/es/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/es/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "es", "plural_expr": "(n != 1)", "messages": {"Search Results": "Resultados de la b\u00fasqueda", "Preparing search...": "Preparando la b\u00fasqueda", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "La b\u00fasqueda no dio ning\u00fan resultado. Por favor aseg\u00farese que escribi\u00f3 todas las palabras correctamente y que ha seleccionado suficientes categor\u00edas", "Search finished, found %s page(s) matching the search query.": "B\u00fasqueda finalizada, se han encontrado %s p\u00e1gina(s) que concuerdan con su consulta", ", in ": "", "Expand sidebar": "", "Permalink to this headline": "Enlazar permanentemente con este t\u00edtulo", "Searching": "Buscando", "Collapse sidebar": "", "Permalink to this definition": "Enlazar permanentemente con esta definici\u00f3n", "Hide Search Matches": "Coincidencias de la b\u00fasqueda"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "es", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Coincidencias de la b\u00fasqueda", "Permalink to this definition": "Enlazar permanentemente con esta definici\u00f3n", "Expand sidebar": "", "Permalink to this headline": "Enlazar permanentemente con este t\u00edtulo", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.mo b/sphinx/locale/es/LC_MESSAGES/sphinx.mo
index c1ee0bfe..87b44fe6 100644
--- a/sphinx/locale/es/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/es/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.po b/sphinx/locale/es/LC_MESSAGES/sphinx.po
index a380a416..fbcba7d9 100644
--- a/sphinx/locale/es/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/es/LC_MESSAGES/sphinx.po
@@ -7,390 +7,412 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 0.5\n"
"Report-Msgid-Bugs-To: guillem@torroja.dmt.upm.es\n"
-"POT-Creation-Date: 2008-09-11 23:58+0200\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
"Last-Translator: Guillem Borrell <guillem@torroja.dmt.upm.es>\n"
"Language-Team: es <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
#, fuzzy, python-format
+msgid "%s %s documentation"
+msgstr "%s %s documentación"
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
+#, python-format
msgid "%B %d, %Y"
msgstr "%d de %B de %Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr "ver %s"
+
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr "ver también %s"
+
+#: sphinx/roles.py:175
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:73
#, fuzzy
msgid "Builtins"
msgstr "Funciones de base"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
#, fuzzy
msgid "Module level"
msgstr "Módulos"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d %b, %Y"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Índice General"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "índice"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "siguiente"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "anterior"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Autor de la sección: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Autor del módulo: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
#, fuzzy
msgid "Code author: "
msgstr "Autor del módulo: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Autor:"
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Ver también"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Parámetros"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Devuelve"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
#, fuzzy
msgid "Return type"
msgstr "Tipo del argumento devuelto"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (función C)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (miembro C)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (macro C)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (tipo C)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (variable C)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "función"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "miembro"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "tipo"
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
#, fuzzy
msgid "variable"
msgstr "Variable"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr "%s (clase C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (tipo C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, fuzzy, python-format
msgid "%s (C++ member)"
msgstr "%s (miembro C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, fuzzy, python-format
msgid "%s (C++ function)"
msgstr "%s (función C++)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr "clase"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, fuzzy, python-format
msgid "%s() (built-in function)"
msgstr "%s() (función de base)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s método)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (clase C++)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s atributo)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
#, fuzzy
msgid "Arguments"
msgstr "Parámetros"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "atributo"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
#, fuzzy
msgid "Variables"
msgstr "Variable"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Muestra"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (en el módulo %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, fuzzy, python-format
msgid "%s (built-in variable)"
msgstr "%s (variable de base)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (en el módulo %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, fuzzy, python-format
msgid "%s (built-in class)"
msgstr "%s (variable de base)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (clase en %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s método)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s método estático)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s método estático)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s método)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s método)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s atributo)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Plataformas:"
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (módulo)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
#, fuzzy
msgid "Python Module Index"
msgstr "Índice de Módulos"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "módulos"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Obsoleto"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "excepción"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
+#, fuzzy
msgid "class method"
msgstr "%s() (%s método)"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "método estático"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "módulo"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+#, fuzzy
+msgid " (deprecated)"
+msgstr "Obsoleto"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
+#: sphinx/domains/rst.py:57
#, fuzzy, python-format
msgid "%s (role)"
msgstr "%s (módulo)"
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
+#: sphinx/domains/rst.py:107
#, fuzzy
msgid "role"
msgstr "módulo"
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "variables de entorno; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, fuzzy, python-format
msgid "%scommand line option; %s"
msgstr "%sOpciones en línea de comandos; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr ""
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr ""
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr ""
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "variables de entorno"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Índice"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Índice de Módulos"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Página de Búsqueda"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -408,104 +430,104 @@ msgstr ""
msgid "original entry"
msgstr ""
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
#, fuzzy
msgid "Module code"
msgstr "módulo"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr ""
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr ""
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr ""
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Atención"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Prudencia"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Peligro"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Error"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Consejo"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Importante"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Nota"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Ver También"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Truco"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Advertencia"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Nuevo en la versión %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Distinto en la versión %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Obsoleto desde la versión %s"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "palabra clave"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "operador"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "objeto"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "sentencia"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
#, fuzzy
msgid "built-in function"
msgstr "función de base"
@@ -515,8 +537,8 @@ msgstr "función de base"
msgid "Table Of Contents"
msgstr "Contenidos"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Búsqueda"
@@ -565,15 +587,15 @@ msgstr "acceso rápido a todos los módulos"
msgid "all functions, classes, terms"
msgstr "todas las funciones, clases, términos"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Índice &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Índice completo en una página"
@@ -585,39 +607,39 @@ msgstr "Índice alfabético"
msgid "can be huge"
msgstr "puede ser muy grande"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Navegación"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Buscar en %(docstitle)s"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "Sobre este documento"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Copyright"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\\\"%(path)s\\\">Copyright</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Copyright %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Actualizado por última vez en %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -647,13 +669,13 @@ msgstr "Próximo tema"
msgid "next chapter"
msgstr "Próximo capítulo"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr ""
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
#, fuzzy
msgid ""
"From here you can search these documents. Enter your search\n"
@@ -666,16 +688,15 @@ msgstr ""
" las palabras. Las páginas que contengan menos palabras no aparecerán en"
" la lista de resultados."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "buscar"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Resultados de la búsqueda"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Tu consulta no obtuvo ningún resultado"
@@ -715,12 +736,12 @@ msgstr "Cambios en la API C"
msgid "Other changes"
msgstr "Otros cambios"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Enlazar permanentemente con este título"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Enlazar permanentemente con esta definición"
@@ -729,40 +750,12 @@ msgstr "Enlazar permanentemente con esta definición"
msgid "Hide Search Matches"
msgstr "Coincidencias de la búsqueda"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Buscando"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Preparando la búsqueda"
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ""
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 ""
-"La búsqueda no dio ningún resultado. Por favor asegúrese que escribió "
-"todas las palabras correctamente y que ha seleccionado suficientes "
-"categorías"
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr ""
-"Búsqueda finalizada, se han encontrado %s página(s) que concuerdan con su"
-" consulta"
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr ""
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr ""
@@ -770,24 +763,26 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
#, fuzzy
msgid "Release"
msgstr "Versión"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
#, fuzzy
msgid "Continued on next page"
msgstr "Índice completo en una página"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[imagen]"
+
diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.js b/sphinx/locale/et/LC_MESSAGES/sphinx.js
new file mode 100644
index 00000000..5f51a53a
--- /dev/null
+++ b/sphinx/locale/et/LC_MESSAGES/sphinx.js
@@ -0,0 +1 @@
+Documentation.addTranslations({"locale": "et", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Varja otsingutulemused", "Permalink to this definition": "P\u00fcsilink sellele definitsioonile", "Expand sidebar": "N\u00e4ita k\u00fclgriba", "Permalink to this headline": "P\u00fcsilink sellele pealkirjale", "Collapse sidebar": "Varja k\u00fclgriba"}}); \ No newline at end of file
diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.mo b/sphinx/locale/et/LC_MESSAGES/sphinx.mo
new file mode 100644
index 00000000..14b911c0
--- /dev/null
+++ b/sphinx/locale/et/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.po b/sphinx/locale/et/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..a687f297
--- /dev/null
+++ b/sphinx/locale/et/LC_MESSAGES/sphinx.po
@@ -0,0 +1,770 @@
+# Estonian translations for Sphinx.
+# Copyright (C) 2010 ORGANIZATION
+# This file is distributed under the same license as the Sphinx project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx 1.0pre/8b971dbc7d36\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-09-18 11:40+0200\n"
+"Last-Translator: Aivar Annamaa <aivar.annamaa@gmail.com>\n"
+"Language-Team: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: sphinx/config.py:81
+#, fuzzy, python-format
+msgid "%s %s documentation"
+msgstr "%s %s dokumentatsioon"
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
+#, python-format
+msgid "%B %d, %Y"
+msgstr "%B %d, %Y"
+
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr ""
+
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr ""
+
+#: sphinx/roles.py:175
+#, fuzzy, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals!PEP %s"
+
+#: sphinx/builders/changes.py:73
+msgid "Builtins"
+msgstr "Sisseehitatud"
+
+#: sphinx/builders/changes.py:75
+msgid "Module level"
+msgstr "Mooduli tase"
+
+#: sphinx/builders/html.py:274
+#, python-format
+msgid "%b %d, %Y"
+msgstr "%b %d, %Y"
+
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
+msgid "General Index"
+msgstr "Üldindeks"
+
+#: sphinx/builders/html.py:293
+msgid "index"
+msgstr "indeks"
+
+#: sphinx/builders/html.py:353
+msgid "next"
+msgstr "järgmine"
+
+#: sphinx/builders/html.py:362
+msgid "previous"
+msgstr "eelmine"
+
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
+msgid " (in "
+msgstr " (in "
+
+#: sphinx/directives/other.py:136
+msgid "Section author: "
+msgstr "Sektsiooni autor:"
+
+#: sphinx/directives/other.py:138
+msgid "Module author: "
+msgstr "Mooduli autor:"
+
+#: sphinx/directives/other.py:140
+msgid "Code author: "
+msgstr "Koodi autor:"
+
+#: sphinx/directives/other.py:142
+msgid "Author: "
+msgstr "Autor: "
+
+#: sphinx/directives/other.py:215
+msgid "See also"
+msgstr "Vaata ka"
+
+#: sphinx/domains/__init__.py:244
+#, python-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
+msgid "Parameters"
+msgstr "Parameetrid"
+
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
+msgid "Returns"
+msgstr "Tagastab"
+
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
+msgid "Return type"
+msgstr "Tagastustüüp"
+
+#: sphinx/domains/c.py:141
+#, python-format
+msgid "%s (C function)"
+msgstr "%s (C funktsioon)"
+
+#: sphinx/domains/c.py:143
+#, python-format
+msgid "%s (C member)"
+msgstr "%s (C liige)"
+
+#: sphinx/domains/c.py:145
+#, python-format
+msgid "%s (C macro)"
+msgstr "%s (C makro)"
+
+#: sphinx/domains/c.py:147
+#, python-format
+msgid "%s (C type)"
+msgstr "%s (C tüüp)"
+
+#: sphinx/domains/c.py:149
+#, python-format
+msgid "%s (C variable)"
+msgstr "%s (C muutuja)"
+
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
+msgid "function"
+msgstr "funktsioon"
+
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
+msgid "member"
+msgstr "liige"
+
+#: sphinx/domains/c.py:206
+msgid "macro"
+msgstr "makro"
+
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
+msgid "type"
+msgstr "tüüp"
+
+#: sphinx/domains/c.py:208
+msgid "variable"
+msgstr "muutuja"
+
+#: sphinx/domains/cpp.py:904
+#, python-format
+msgid "%s (C++ class)"
+msgstr "%s (C++ klass)"
+
+#: sphinx/domains/cpp.py:919
+#, python-format
+msgid "%s (C++ type)"
+msgstr "%s (C++ tüüp)"
+
+#: sphinx/domains/cpp.py:938
+#, python-format
+msgid "%s (C++ member)"
+msgstr "%s (C++ liige)"
+
+#: sphinx/domains/cpp.py:990
+#, python-format
+msgid "%s (C++ function)"
+msgstr "%s (C++ funktsioon)"
+
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
+msgid "class"
+msgstr "klass"
+
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
+#, python-format
+msgid "%s() (built-in function)"
+msgstr "%s() (sisseehitatud funktsioon)"
+
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
+#, python-format
+msgid "%s() (%s method)"
+msgstr "%s() (%s meetod)"
+
+#: sphinx/domains/javascript.py:109
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (C++ klass)"
+
+#: sphinx/domains/javascript.py:111
+#, python-format
+msgid "%s (global variable or constant)"
+msgstr "%s (globaalmuutuja või konstant)"
+
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
+#, python-format
+msgid "%s (%s attribute)"
+msgstr "%s (%s atribuut)"
+
+#: sphinx/domains/javascript.py:122
+msgid "Arguments"
+msgstr "Argumendid"
+
+#: sphinx/domains/javascript.py:125
+msgid "Throws"
+msgstr "Throws"
+
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
+msgid "data"
+msgstr "andmed"
+
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
+msgid "attribute"
+msgstr "atribuut"
+
+#: sphinx/domains/python.py:100
+msgid "Variables"
+msgstr "Muutujad"
+
+#: sphinx/domains/python.py:104
+msgid "Raises"
+msgstr "Raises"
+
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
+#, python-format
+msgid "%s() (in module %s)"
+msgstr "%s() (moodulis %s)"
+
+#: sphinx/domains/python.py:258
+#, python-format
+msgid "%s (built-in variable)"
+msgstr "%s (sisseehitatud muutuja)"
+
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
+#, python-format
+msgid "%s (in module %s)"
+msgstr "%s (moodulis %s)"
+
+#: sphinx/domains/python.py:275
+#, python-format
+msgid "%s (built-in class)"
+msgstr "%s (sisseehitatud klass)"
+
+#: sphinx/domains/python.py:276
+#, python-format
+msgid "%s (class in %s)"
+msgstr "%s (klass moodulis %s)"
+
+#: sphinx/domains/python.py:316
+#, python-format
+msgid "%s() (%s.%s method)"
+msgstr "%s() (%s.%s meetod)"
+
+#: sphinx/domains/python.py:328
+#, python-format
+msgid "%s() (%s.%s static method)"
+msgstr "%s() (%s.%s staatiline meetod)"
+
+#: sphinx/domains/python.py:331
+#, python-format
+msgid "%s() (%s static method)"
+msgstr "%s() (%s staatiline meetod)"
+
+#: sphinx/domains/python.py:341
+#, python-format
+msgid "%s() (%s.%s class method)"
+msgstr "%s() (%s.%s klassi meetod)"
+
+#: sphinx/domains/python.py:344
+#, python-format
+msgid "%s() (%s class method)"
+msgstr "%s() (%s klassi meetod)"
+
+#: sphinx/domains/python.py:354
+#, python-format
+msgid "%s (%s.%s attribute)"
+msgstr "%s (%s.%s atribuut)"
+
+#: sphinx/domains/python.py:434
+#, python-format
+msgid "%s (module)"
+msgstr "%s (moodul)"
+
+#: sphinx/domains/python.py:491
+msgid "Python Module Index"
+msgstr "Pythoni moodulite indeks"
+
+#: sphinx/domains/python.py:492
+msgid "modules"
+msgstr "moodulid"
+
+#: sphinx/domains/python.py:537
+msgid "Deprecated"
+msgstr "Ebaasoovitav"
+
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
+msgid "exception"
+msgstr "erind"
+
+#: sphinx/domains/python.py:563
+msgid "method"
+msgstr "meetod"
+
+#: sphinx/domains/python.py:564
+msgid "class method"
+msgstr "klassi meetod"
+
+#: sphinx/domains/python.py:565
+msgid "static method"
+msgstr "staatiline meetod"
+
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
+msgid "module"
+msgstr "moodul"
+
+#: sphinx/domains/python.py:695
+#, fuzzy
+msgid " (deprecated)"
+msgstr "Ebaasoovitav"
+
+#: sphinx/domains/rst.py:55
+#, python-format
+msgid "%s (directive)"
+msgstr "%s (direktiiv)"
+
+#: sphinx/domains/rst.py:57
+#, python-format
+msgid "%s (role)"
+msgstr "%s (roll)"
+
+#: sphinx/domains/rst.py:106
+msgid "directive"
+msgstr "direktiiv"
+
+#: sphinx/domains/rst.py:107
+msgid "role"
+msgstr "roll"
+
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
+#, python-format
+msgid "environment variable; %s"
+msgstr "keskkonnamuutuja; %s"
+
+#: sphinx/domains/std.py:162
+#, python-format
+msgid "%scommand line option; %s"
+msgstr "%s käsurea valik; %s"
+
+#: sphinx/domains/std.py:393
+msgid "glossary term"
+msgstr "termin"
+
+#: sphinx/domains/std.py:394
+msgid "grammar token"
+msgstr "grammatika märgend"
+
+#: sphinx/domains/std.py:395
+msgid "reference label"
+msgstr "viite pealkiri"
+
+#: sphinx/domains/std.py:396
+msgid "environment variable"
+msgstr "keskkonnamuutuja"
+
+#: sphinx/domains/std.py:397
+msgid "program option"
+msgstr "programmi seade"
+
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
+#: sphinx/themes/basic/genindex-split.html:11
+#: sphinx/themes/basic/genindex-split.html:14
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
+msgid "Index"
+msgstr "Indeks"
+
+#: sphinx/domains/std.py:428
+msgid "Module Index"
+msgstr "Mooduli indeks"
+
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
+msgid "Search Page"
+msgstr "Otsingu lehekülg"
+
+#: sphinx/ext/autodoc.py:1002
+#, python-format
+msgid " Bases: %s"
+msgstr " Baasid: %s"
+
+#: sphinx/ext/autodoc.py:1038
+#, python-format
+msgid "alias of :class:`%s`"
+msgstr "sünonüüm :class:`%s`"
+
+#: sphinx/ext/todo.py:41
+msgid "Todo"
+msgstr "Tegemata"
+
+#: sphinx/ext/todo.py:109
+#, python-format
+msgid "(The <<original entry>> is located in %s, line %d.)"
+msgstr "(Algne kirje asub failis %s, real %d.)"
+
+#: sphinx/ext/todo.py:117
+msgid "original entry"
+msgstr "algne kirje"
+
+#: sphinx/ext/viewcode.py:70
+msgid "[source]"
+msgstr "[lähtekood]"
+
+#: sphinx/ext/viewcode.py:117
+msgid "[docs]"
+msgstr "[dokumentatsioon]"
+
+#: sphinx/ext/viewcode.py:131
+msgid "Module code"
+msgstr "Mooduli kood"
+
+#: sphinx/ext/viewcode.py:137
+#, python-format
+msgid "<h1>Source code for %s</h1>"
+msgstr "<h1>%s lähtekood</h1>"
+
+#: sphinx/ext/viewcode.py:164
+msgid "Overview: module code"
+msgstr "Ülevaade: mooduli kood"
+
+#: sphinx/ext/viewcode.py:165
+msgid "<h1>All modules for which code is available</h1>"
+msgstr "<h1>Kõik lähtekoodiga moodulid</h1>"
+
+#: sphinx/locale/__init__.py:155
+msgid "Attention"
+msgstr "Tähelepanu"
+
+#: sphinx/locale/__init__.py:156
+msgid "Caution"
+msgstr "Ettevaatust"
+
+#: sphinx/locale/__init__.py:157
+msgid "Danger"
+msgstr "Oht"
+
+#: sphinx/locale/__init__.py:158
+msgid "Error"
+msgstr "Viga"
+
+#: sphinx/locale/__init__.py:159
+msgid "Hint"
+msgstr "Vihje"
+
+#: sphinx/locale/__init__.py:160
+msgid "Important"
+msgstr "Tähtis"
+
+#: sphinx/locale/__init__.py:161
+msgid "Note"
+msgstr "Märkus"
+
+#: sphinx/locale/__init__.py:162
+msgid "See Also"
+msgstr "Vaata ka"
+
+#: sphinx/locale/__init__.py:163
+msgid "Tip"
+msgstr "Nõuanne"
+
+#: sphinx/locale/__init__.py:164
+msgid "Warning"
+msgstr "Hoiatus"
+
+#: sphinx/locale/__init__.py:168
+#, python-format
+msgid "New in version %s"
+msgstr "Uus versioonis %s"
+
+#: sphinx/locale/__init__.py:169
+#, python-format
+msgid "Changed in version %s"
+msgstr "Muudetud versioonis %s"
+
+#: sphinx/locale/__init__.py:170
+#, python-format
+msgid "Deprecated since version %s"
+msgstr "Ebasoovitav alates versioonist %s"
+
+#: sphinx/locale/__init__.py:176
+msgid "keyword"
+msgstr "võtmesõna"
+
+#: sphinx/locale/__init__.py:177
+msgid "operator"
+msgstr "operaator"
+
+#: sphinx/locale/__init__.py:178
+msgid "object"
+msgstr "objekt"
+
+#: sphinx/locale/__init__.py:180
+msgid "statement"
+msgstr "lause"
+
+#: sphinx/locale/__init__.py:181
+msgid "built-in function"
+msgstr "sisseehitatud funktsioon"
+
+#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10
+#: sphinx/themes/basic/localtoc.html:11
+msgid "Table Of Contents"
+msgstr "Sisukord"
+
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
+msgid "Search"
+msgstr "Otsing"
+
+#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15
+msgid "Go"
+msgstr "Otsi"
+
+#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20
+msgid "Enter search terms or a module, class or function name."
+msgstr "Sisesta otsingusõna"
+
+#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14
+msgid "Show Source"
+msgstr "Näita lähtekoodi"
+
+#: sphinx/themes/basic/defindex.html:11
+msgid "Overview"
+msgstr "Ülevaade"
+
+#: sphinx/themes/basic/defindex.html:20
+msgid "Indices and tables:"
+msgstr "Indeksid ja tabelid"
+
+#: sphinx/themes/basic/defindex.html:23
+msgid "Complete Table of Contents"
+msgstr "Täielik sisukord"
+
+#: sphinx/themes/basic/defindex.html:24
+msgid "lists all sections and subsections"
+msgstr "toob välja kõiks sektsioonid ja alamsektsioonid"
+
+#: sphinx/themes/basic/defindex.html:26
+msgid "search this documentation"
+msgstr "otsi sellest dokumentatsioonist"
+
+#: sphinx/themes/basic/defindex.html:28
+msgid "Global Module Index"
+msgstr "Globaalne moodulite indeks"
+
+#: sphinx/themes/basic/defindex.html:29
+msgid "quick access to all modules"
+msgstr "kiire ligipääs kõigile moodulitele"
+
+#: sphinx/themes/basic/defindex.html:31
+msgid "all functions, classes, terms"
+msgstr "kõik funktsioonid, klassid ja terminid"
+
+#: sphinx/themes/basic/genindex-single.html:35
+#, python-format
+msgid "Index &ndash; %(key)s"
+msgstr "Indeks &ndash; %(key)s"
+
+#: sphinx/themes/basic/genindex-single.html:63
+#: sphinx/themes/basic/genindex-split.html:24
+#: sphinx/themes/basic/genindex-split.html:38
+#: sphinx/themes/basic/genindex.html:74
+msgid "Full index on one page"
+msgstr "Täisindeks ühel lehel"
+
+#: sphinx/themes/basic/genindex-split.html:16
+msgid "Index pages by letter"
+msgstr "Indeksi leheküljed algustähe kaupa"
+
+#: sphinx/themes/basic/genindex-split.html:25
+msgid "can be huge"
+msgstr "võib olla väga suur"
+
+#: sphinx/themes/basic/layout.html:29
+msgid "Navigation"
+msgstr "Navigatsioon"
+
+#: sphinx/themes/basic/layout.html:122
+#, python-format
+msgid "Search within %(docstitle)s"
+msgstr "Otsi %(docstitle)s piires"
+
+#: sphinx/themes/basic/layout.html:131
+msgid "About these documents"
+msgstr "Info selle dokumentatsiooni kohta"
+
+#: sphinx/themes/basic/layout.html:140
+msgid "Copyright"
+msgstr "Copyright"
+
+#: sphinx/themes/basic/layout.html:189
+#, python-format
+msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
+msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
+
+#: sphinx/themes/basic/layout.html:191
+#, python-format
+msgid "&copy; Copyright %(copyright)s."
+msgstr "&copy; Copyright %(copyright)s."
+
+#: sphinx/themes/basic/layout.html:195
+#, python-format
+msgid "Last updated on %(last_updated)s."
+msgstr "Viimati uuendatud %(last_updated)s."
+
+#: sphinx/themes/basic/layout.html:198
+#, python-format
+msgid ""
+"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
+msgstr ""
+"Loodud <a href=\"http://sphinx.pocoo.org/\">Sphinx-iga</a> (versioon: "
+"%(sphinx_version)s)."
+
+#: sphinx/themes/basic/opensearch.xml:4
+#, python-format
+msgid "Search %(docstitle)s"
+msgstr "Otsi %(docstitle)s"
+
+#: sphinx/themes/basic/relations.html:11
+msgid "Previous topic"
+msgstr "Eelmine teema"
+
+#: sphinx/themes/basic/relations.html:13
+msgid "previous chapter"
+msgstr "eelmine peatükk"
+
+#: sphinx/themes/basic/relations.html:16
+msgid "Next topic"
+msgstr "Järgmine teema"
+
+#: sphinx/themes/basic/relations.html:18
+msgid "next chapter"
+msgstr "järgmine peatükk"
+
+#: sphinx/themes/basic/search.html:24
+msgid ""
+"Please activate JavaScript to enable the search\n"
+" functionality."
+msgstr "Otsingu võimaldamiseks tuleb aktiveerida JavaScript."
+
+#: sphinx/themes/basic/search.html:29
+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 ""
+"Siin saad otsida käesolevast dokumentatsioonist. Sisesta otsisõned "
+"allolevasse lahtrisse ning klõpsa \"Otsi\". Tulemuseks antakse "
+"leheküljed, mis sisaldavad kõiki otsisõnesid."
+
+#: sphinx/themes/basic/search.html:36
+msgid "search"
+msgstr "otsi"
+
+#: sphinx/themes/basic/search.html:40
+msgid "Search Results"
+msgstr "Otsingutulemused"
+
+#: sphinx/themes/basic/search.html:42
+msgid "Your search did not match any results."
+msgstr "Otsing ei andnud tulemusi"
+
+#: sphinx/themes/basic/searchbox.html:12
+msgid "Quick search"
+msgstr "Kiirotsing"
+
+#: sphinx/themes/basic/sourcelink.html:11
+msgid "This Page"
+msgstr "Käesolev lehekülg"
+
+#: 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 "Muudatused versioonis %(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 "Automaatselt genereeritud nimekiri versiooni %(version)s muudatustest"
+
+#: sphinx/themes/basic/changes/versionchanges.html:18
+msgid "Library changes"
+msgstr "Teegi muudatused"
+
+#: sphinx/themes/basic/changes/versionchanges.html:23
+msgid "C API changes"
+msgstr "C API muudatused"
+
+#: sphinx/themes/basic/changes/versionchanges.html:25
+msgid "Other changes"
+msgstr "Ülejäänud muudatused"
+
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
+msgid "Permalink to this headline"
+msgstr "Püsilink sellele pealkirjale"
+
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
+msgid "Permalink to this definition"
+msgstr "Püsilink sellele definitsioonile"
+
+#: sphinx/themes/basic/static/doctools.js:189
+msgid "Hide Search Matches"
+msgstr "Varja otsingutulemused"
+
+#: sphinx/themes/default/static/sidebar.js:69
+msgid "Expand sidebar"
+msgstr "Näita külgriba"
+
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
+msgid "Collapse sidebar"
+msgstr "Varja külgriba"
+
+#: sphinx/themes/haiku/layout.html:26
+msgid "Contents"
+msgstr "Sisukord"
+
+#: sphinx/writers/latex.py:177
+msgid "Release"
+msgstr "Väljalase"
+
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
+msgid "Footnotes"
+msgstr "Joonealused märkused"
+
+#: sphinx/writers/latex.py:676
+msgid "continued from previous page"
+msgstr "jätk eelmisele leheküljele"
+
+#: sphinx/writers/latex.py:681
+msgid "Continued on next page"
+msgstr "Jätkub järgmisel lehel"
+
+#: sphinx/writers/text.py:437
+msgid "[image]"
+msgstr "[pilt]"
+
diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.js b/sphinx/locale/fa/LC_MESSAGES/sphinx.js
new file mode 100644
index 00000000..72b0ee94
--- /dev/null
+++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.js
@@ -0,0 +1 @@
+Documentation.addTranslations({"locale": "fa", "plural_expr": "(n > 1)", "messages": {"Hide Search Matches": "\u0639\u062f\u0645 \u0646\u0645\u0627\u06cc\u0634 \u0646\u062a\u0627\u06cc\u062c \u06cc\u0627\u0641\u062a \u0634\u062f\u0647", "Permalink to this definition": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0639\u0631\u06cc\u0641", "Expand sidebar": "", "Permalink to this headline": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u0633\u0631 \u0645\u0642\u0627\u0644\u0647", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.mo b/sphinx/locale/fa/LC_MESSAGES/sphinx.mo
new file mode 100644
index 00000000..fe705e76
--- /dev/null
+++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.po b/sphinx/locale/fa/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..92caf31a
--- /dev/null
+++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.po
@@ -0,0 +1,779 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx 1.0.3\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
+"Last-Translator: Omid Raha <omidraha.com@gmail.com>\n"
+"Language-Team: Omid Raha <omidraha.com@gmail.com>\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
+#, python-format
+msgid "%B %d, %Y"
+msgstr ""
+
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr ""
+
+#: sphinx/environment.py:1628
+#, fuzzy, python-format
+msgid "see also %s"
+msgstr "همچنین ملاحظه نمائید %s"
+
+#: sphinx/roles.py:175
+#, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
+
+#: sphinx/builders/changes.py:73
+msgid "Builtins"
+msgstr "درونی سازی"
+
+#: sphinx/builders/changes.py:75
+msgid "Module level"
+msgstr "در سطح ماژول"
+
+#: sphinx/builders/html.py:274
+#, python-format
+msgid "%b %d, %Y"
+msgstr ""
+
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
+msgid "General Index"
+msgstr "فهرست کلی"
+
+#: sphinx/builders/html.py:293
+msgid "index"
+msgstr "فهرست"
+
+#: sphinx/builders/html.py:353
+msgid "next"
+msgstr "بعدی"
+
+#: sphinx/builders/html.py:362
+msgid "previous"
+msgstr "قبلی"
+
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
+msgid " (in "
+msgstr ""
+
+#: sphinx/directives/other.py:136
+msgid "Section author: "
+msgstr ":نویسنده این بخش"
+
+#: sphinx/directives/other.py:138
+msgid "Module author: "
+msgstr "نویسنده این ماژول:"
+
+#: sphinx/directives/other.py:140
+#, fuzzy
+msgid "Code author: "
+msgstr "نویسنده این ماژول:"
+
+#: sphinx/directives/other.py:142
+msgid "Author: "
+msgstr ":نویسنده"
+
+#: sphinx/directives/other.py:215
+msgid "See also"
+msgstr "همچنین ملاحظه نمائید"
+
+#: sphinx/domains/__init__.py:244
+#, python-format
+msgid "%s %s"
+msgstr ""
+
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
+msgid "Parameters"
+msgstr "پارامترها"
+
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
+msgid "Returns"
+msgstr ""
+
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
+msgid "Return type"
+msgstr "نوع برگشتی"
+
+#: sphinx/domains/c.py:141
+#, python-format
+msgid "%s (C function)"
+msgstr "%s (C تابع)"
+
+#: sphinx/domains/c.py:143
+#, python-format
+msgid "%s (C member)"
+msgstr "%s (C عضو)"
+
+#: sphinx/domains/c.py:145
+#, python-format
+msgid "%s (C macro)"
+msgstr "%s (C ماکرو)"
+
+#: sphinx/domains/c.py:147
+#, python-format
+msgid "%s (C type)"
+msgstr "%s (C نوع)"
+
+#: sphinx/domains/c.py:149
+#, python-format
+msgid "%s (C variable)"
+msgstr "%s (C متغیر)"
+
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
+#, fuzzy
+msgid "function"
+msgstr "تابع"
+
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
+#, fuzzy
+msgid "member"
+msgstr "عضو"
+
+#: sphinx/domains/c.py:206
+msgid "macro"
+msgstr ""
+
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
+msgid "type"
+msgstr ""
+
+#: sphinx/domains/c.py:208
+#, fuzzy
+msgid "variable"
+msgstr "متغیر"
+
+#: sphinx/domains/cpp.py:904
+#, fuzzy, python-format
+msgid "%s (C++ class)"
+msgstr "%s (C++ کلاس در)"
+
+#: sphinx/domains/cpp.py:919
+#, fuzzy, python-format
+msgid "%s (C++ type)"
+msgstr "%s (C++ نوع)"
+
+#: sphinx/domains/cpp.py:938
+#, fuzzy, python-format
+msgid "%s (C++ member)"
+msgstr "%s (C++ عضو)"
+
+#: sphinx/domains/cpp.py:990
+#, fuzzy, python-format
+msgid "%s (C++ function)"
+msgstr "%s (C++ تابع)"
+
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
+msgid "class"
+msgstr ""
+
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
+#, python-format
+msgid "%s() (built-in function)"
+msgstr "%s() (توابع درونی)"
+
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
+#, python-format
+msgid "%s() (%s method)"
+msgstr "%s() (%s متد)"
+
+#: sphinx/domains/javascript.py:109
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s() (کلاس در)"
+
+#: sphinx/domains/javascript.py:111
+#, python-format
+msgid "%s (global variable or constant)"
+msgstr ""
+
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
+#, python-format
+msgid "%s (%s attribute)"
+msgstr "%s (%s مشخصه)"
+
+#: sphinx/domains/javascript.py:122
+#, fuzzy
+msgid "Arguments"
+msgstr "پارامترها"
+
+#: sphinx/domains/javascript.py:125
+msgid "Throws"
+msgstr ""
+
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
+msgid "data"
+msgstr ""
+
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
+msgid "attribute"
+msgstr ""
+
+#: sphinx/domains/python.py:100
+#, fuzzy
+msgid "Variables"
+msgstr "متغیر"
+
+#: sphinx/domains/python.py:104
+msgid "Raises"
+msgstr "برانگیختن"
+
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
+#, python-format
+msgid "%s() (in module %s)"
+msgstr "%s() (در ماژول %s)"
+
+#: sphinx/domains/python.py:258
+#, python-format
+msgid "%s (built-in variable)"
+msgstr "%s (متغیر درونی)"
+
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
+#, python-format
+msgid "%s (in module %s)"
+msgstr "%s (در ماژول %s)"
+
+#: sphinx/domains/python.py:275
+#, python-format
+msgid "%s (built-in class)"
+msgstr "%s (کلاس درونی)"
+
+#: sphinx/domains/python.py:276
+#, python-format
+msgid "%s (class in %s)"
+msgstr "%s (کلاس در %s)"
+
+#: sphinx/domains/python.py:316
+#, python-format
+msgid "%s() (%s.%s method)"
+msgstr "%s() (%s.%s متد)"
+
+#: sphinx/domains/python.py:328
+#, python-format
+msgid "%s() (%s.%s static method)"
+msgstr "%s() (%s.%s متد استاتیک)"
+
+#: sphinx/domains/python.py:331
+#, python-format
+msgid "%s() (%s static method)"
+msgstr "%s() (%s متد استاتیک)"
+
+#: sphinx/domains/python.py:341
+#, fuzzy, python-format
+msgid "%s() (%s.%s class method)"
+msgstr "%s() (%s.%s متد)"
+
+#: sphinx/domains/python.py:344
+#, fuzzy, python-format
+msgid "%s() (%s class method)"
+msgstr "%s() (%s متد)"
+
+#: sphinx/domains/python.py:354
+#, python-format
+msgid "%s (%s.%s attribute)"
+msgstr "%s (%s.%s مشخصه)"
+
+#: sphinx/domains/python.py:434
+#, python-format
+msgid "%s (module)"
+msgstr "%s (ماژول)"
+
+#: sphinx/domains/python.py:491
+#, fuzzy
+msgid "Python Module Index"
+msgstr "فهرست ماژول ها"
+
+#: sphinx/domains/python.py:492
+msgid "modules"
+msgstr "ماژول ها"
+
+#: sphinx/domains/python.py:537
+msgid "Deprecated"
+msgstr "منسوخ شده"
+
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
+msgid "exception"
+msgstr "استثناء"
+
+#: sphinx/domains/python.py:563
+msgid "method"
+msgstr ""
+
+#: sphinx/domains/python.py:564
+msgid "class method"
+msgstr ""
+
+#: sphinx/domains/python.py:565
+msgid "static method"
+msgstr ""
+
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
+msgid "module"
+msgstr "ماژول"
+
+#: sphinx/domains/python.py:695
+#, fuzzy
+msgid " (deprecated)"
+msgstr " (منسوخ شده)"
+
+#: sphinx/domains/rst.py:55
+#, python-format
+msgid "%s (directive)"
+msgstr ""
+
+#: sphinx/domains/rst.py:57
+#, python-format
+msgid "%s (role)"
+msgstr ""
+
+#: sphinx/domains/rst.py:106
+msgid "directive"
+msgstr ""
+
+#: sphinx/domains/rst.py:107
+msgid "role"
+msgstr ""
+
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
+#, python-format
+msgid "environment variable; %s"
+msgstr "%s متغیرهای عمومی؛"
+
+#: sphinx/domains/std.py:162
+#, python-format
+msgid "%scommand line option; %s"
+msgstr "%sگزینه خط فرمان; %s"
+
+#: sphinx/domains/std.py:393
+msgid "glossary term"
+msgstr ""
+
+#: sphinx/domains/std.py:394
+msgid "grammar token"
+msgstr ""
+
+#: sphinx/domains/std.py:395
+msgid "reference label"
+msgstr ""
+
+#: sphinx/domains/std.py:396
+#, fuzzy
+msgid "environment variable"
+msgstr "متغیرهای عمومی؛"
+
+#: sphinx/domains/std.py:397
+msgid "program option"
+msgstr ""
+
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
+#: sphinx/themes/basic/genindex-split.html:11
+#: sphinx/themes/basic/genindex-split.html:14
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
+msgid "Index"
+msgstr "فهرست"
+
+#: sphinx/domains/std.py:428
+msgid "Module Index"
+msgstr "فهرست ماژول ها"
+
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
+msgid "Search Page"
+msgstr "صفحه جستجو"
+
+#: sphinx/ext/autodoc.py:1002
+#, python-format
+msgid " Bases: %s"
+msgstr ""
+
+#: sphinx/ext/autodoc.py:1038
+#, python-format
+msgid "alias of :class:`%s`"
+msgstr ""
+
+#: sphinx/ext/todo.py:41
+msgid "Todo"
+msgstr "در دست انجام"
+
+#: sphinx/ext/todo.py:109
+#, python-format
+msgid "(The <<original entry>> is located in %s, line %d.)"
+msgstr ""
+
+#: sphinx/ext/todo.py:117
+msgid "original entry"
+msgstr ""
+
+#: sphinx/ext/viewcode.py:70
+msgid "[source]"
+msgstr ""
+
+#: sphinx/ext/viewcode.py:117
+msgid "[docs]"
+msgstr ""
+
+#: sphinx/ext/viewcode.py:131
+#, fuzzy
+msgid "Module code"
+msgstr "ماژول"
+
+#: sphinx/ext/viewcode.py:137
+#, python-format
+msgid "<h1>Source code for %s</h1>"
+msgstr ""
+
+#: sphinx/ext/viewcode.py:164
+msgid "Overview: module code"
+msgstr ""
+
+#: sphinx/ext/viewcode.py:165
+msgid "<h1>All modules for which code is available</h1>"
+msgstr ""
+
+#: sphinx/locale/__init__.py:155
+msgid "Attention"
+msgstr "دقت"
+
+#: sphinx/locale/__init__.py:156
+msgid "Caution"
+msgstr "ملاحظه"
+
+#: sphinx/locale/__init__.py:157
+msgid "Danger"
+msgstr "خطر"
+
+#: sphinx/locale/__init__.py:158
+msgid "Error"
+msgstr "خطا"
+
+#: sphinx/locale/__init__.py:159
+msgid "Hint"
+msgstr "تذکر"
+
+#: sphinx/locale/__init__.py:160
+msgid "Important"
+msgstr "مهم"
+
+#: sphinx/locale/__init__.py:161
+msgid "Note"
+msgstr "توجه"
+
+#: sphinx/locale/__init__.py:162
+msgid "See Also"
+msgstr "همچنین ملاحظه نمائید"
+
+#: sphinx/locale/__init__.py:163
+msgid "Tip"
+msgstr "نکته"
+
+#: sphinx/locale/__init__.py:164
+msgid "Warning"
+msgstr "هشدار"
+
+#: sphinx/locale/__init__.py:168
+#, python-format
+msgid "New in version %s"
+msgstr "جدید در نسخه %s"
+
+#: sphinx/locale/__init__.py:169
+#, python-format
+msgid "Changed in version %s"
+msgstr "تغییر داده شده در نسخه %s"
+
+#: sphinx/locale/__init__.py:170
+#, python-format
+msgid "Deprecated since version %s"
+msgstr "منسوخ شده از نسخه %s"
+
+#: sphinx/locale/__init__.py:176
+msgid "keyword"
+msgstr "کلمه کلیدی"
+
+#: sphinx/locale/__init__.py:177
+msgid "operator"
+msgstr "عملگر"
+
+#: sphinx/locale/__init__.py:178
+msgid "object"
+msgstr "شیء"
+
+#: sphinx/locale/__init__.py:180
+msgid "statement"
+msgstr "گذاره"
+
+#: sphinx/locale/__init__.py:181
+msgid "built-in function"
+msgstr "توابع درونی"
+
+#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10
+#: sphinx/themes/basic/localtoc.html:11
+msgid "Table Of Contents"
+msgstr "فهرست عناوین"
+
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
+msgid "Search"
+msgstr "جستجو"
+
+#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15
+msgid "Go"
+msgstr "برو"
+
+#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20
+#, fuzzy
+msgid "Enter search terms or a module, class or function name."
+msgstr "نام یک ماژول ، کلاس و یا تابع را وارد نمائید"
+
+#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14
+msgid "Show Source"
+msgstr "نمایش سورس"
+
+#: sphinx/themes/basic/defindex.html:11
+msgid "Overview"
+msgstr "بررسی اجمالی"
+
+#: sphinx/themes/basic/defindex.html:20
+msgid "Indices and tables:"
+msgstr "ایندکس ها و جداول:"
+
+#: sphinx/themes/basic/defindex.html:23
+msgid "Complete Table of Contents"
+msgstr "فهرست کامل مطالب"
+
+#: sphinx/themes/basic/defindex.html:24
+msgid "lists all sections and subsections"
+msgstr "فهرست تمامی بخش ها و زیر مجموعه ها"
+
+#: sphinx/themes/basic/defindex.html:26
+msgid "search this documentation"
+msgstr "جستجو در این اسناد"
+
+#: sphinx/themes/basic/defindex.html:28
+msgid "Global Module Index"
+msgstr "فهرست کلی ماژول ها"
+
+#: sphinx/themes/basic/defindex.html:29
+msgid "quick access to all modules"
+msgstr "دسترسی سریع به تمامی متدها"
+
+#: sphinx/themes/basic/defindex.html:31
+msgid "all functions, classes, terms"
+msgstr "تمامی توابع ، کلاس ها ، اصطلاحات"
+
+#: sphinx/themes/basic/genindex-single.html:35
+#, python-format
+msgid "Index &ndash; %(key)s"
+msgstr "فهرست &ndash; %(key)s"
+
+#: sphinx/themes/basic/genindex-single.html:63
+#: sphinx/themes/basic/genindex-split.html:24
+#: sphinx/themes/basic/genindex-split.html:38
+#: sphinx/themes/basic/genindex.html:74
+msgid "Full index on one page"
+msgstr "فهرست کامل در یک صفحه"
+
+#: sphinx/themes/basic/genindex-split.html:16
+msgid "Index pages by letter"
+msgstr "فهرست صفحات بر اساس حروف"
+
+#: sphinx/themes/basic/genindex-split.html:25
+msgid "can be huge"
+msgstr ""
+
+#: sphinx/themes/basic/layout.html:29
+msgid "Navigation"
+msgstr "ناوبری"
+
+#: sphinx/themes/basic/layout.html:122
+#, python-format
+msgid "Search within %(docstitle)s"
+msgstr "جستجو در %(docstitle)s"
+
+#: sphinx/themes/basic/layout.html:131
+msgid "About these documents"
+msgstr "درباره این مستندات"
+
+#: sphinx/themes/basic/layout.html:140
+msgid "Copyright"
+msgstr "کپی رایت"
+
+#: sphinx/themes/basic/layout.html:189
+#, python-format
+msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
+msgstr ""
+
+#: sphinx/themes/basic/layout.html:191
+#, python-format
+msgid "&copy; Copyright %(copyright)s."
+msgstr ""
+
+#: sphinx/themes/basic/layout.html:195
+#, python-format
+msgid "Last updated on %(last_updated)s."
+msgstr ". %(last_updated)s آخرین بروز رسانی در"
+
+#: sphinx/themes/basic/layout.html:198
+#, python-format
+msgid ""
+"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
+msgstr ""
+". <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s "
+"ایجاد شده با"
+
+#: sphinx/themes/basic/opensearch.xml:4
+#, python-format
+msgid "Search %(docstitle)s"
+msgstr "جستجو %(docstitle)s"
+
+#: sphinx/themes/basic/relations.html:11
+msgid "Previous topic"
+msgstr "موضوع قبلی"
+
+#: sphinx/themes/basic/relations.html:13
+msgid "previous chapter"
+msgstr "فصل قبلی"
+
+#: sphinx/themes/basic/relations.html:16
+msgid "Next topic"
+msgstr "موضوع بعدی"
+
+#: sphinx/themes/basic/relations.html:18
+msgid "next chapter"
+msgstr "فصل بعدی"
+
+#: sphinx/themes/basic/search.html:24
+msgid ""
+"Please activate JavaScript to enable the search\n"
+" functionality."
+msgstr ""
+
+#: sphinx/themes/basic/search.html:29
+#, fuzzy
+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 ""
+"در اینجا شما می توانید مستندات را جستجو نمائید ، کلماتی را در کادر جستجو "
+"وارد کنید و سپس بر روی دکمه جستجو کلیک نمائید ، توجه کنید که تابع جستجو "
+"گر امر جستجو را بطور خودکار برای تمامی کلمات دنبال خواهد کرد .صفحاتی که "
+"شامل کلمات کمتری هستند ، در لیست جستجو نمایش داده نخواهند شد."
+
+#: sphinx/themes/basic/search.html:36
+msgid "search"
+msgstr "جستجو"
+
+#: sphinx/themes/basic/search.html:40
+msgid "Search Results"
+msgstr "نتایج جستجو"
+
+#: sphinx/themes/basic/search.html:42
+msgid "Your search did not match any results."
+msgstr ".جستجوی شما نتیجه ایی در بر نداشت"
+
+#: sphinx/themes/basic/searchbox.html:12
+msgid "Quick search"
+msgstr "جستجو سریع"
+
+#: sphinx/themes/basic/sourcelink.html:11
+msgid "This Page"
+msgstr "صفحه فعلی"
+
+#: 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 "تغییرات در نسخه %(version)s &mdash; %(docstitle)s"
+
+#: sphinx/themes/basic/changes/rstsource.html:5
+#, python-format
+msgid "%(filename)s &mdash; %(docstitle)s"
+msgstr ""
+
+#: sphinx/themes/basic/changes/versionchanges.html:17
+#, python-format
+msgid "Automatically generated list of changes in version %(version)s"
+msgstr "لیست تولید شده خودکار از تغییرات در نسخه %(version)s"
+
+#: sphinx/themes/basic/changes/versionchanges.html:18
+msgid "Library changes"
+msgstr "تغییرات کتابخانه ایی"
+
+#: sphinx/themes/basic/changes/versionchanges.html:23
+msgid "C API changes"
+msgstr "C API تغییرات"
+
+#: sphinx/themes/basic/changes/versionchanges.html:25
+msgid "Other changes"
+msgstr "دگر تغییرات"
+
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
+msgid "Permalink to this headline"
+msgstr "لینک ثابت به این سر مقاله"
+
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
+msgid "Permalink to this definition"
+msgstr "لینک ثابت به این تعریف"
+
+#: sphinx/themes/basic/static/doctools.js:189
+msgid "Hide Search Matches"
+msgstr "عدم نمایش نتایج یافت شده"
+
+#: sphinx/themes/default/static/sidebar.js:69
+msgid "Expand sidebar"
+msgstr ""
+
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
+msgid "Collapse sidebar"
+msgstr ""
+
+#: sphinx/themes/haiku/layout.html:26
+msgid "Contents"
+msgstr ""
+
+#: sphinx/writers/latex.py:177
+msgid "Release"
+msgstr "انتشار"
+
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
+msgid "Footnotes"
+msgstr ""
+
+#: sphinx/writers/latex.py:676
+msgid "continued from previous page"
+msgstr ""
+
+#: sphinx/writers/latex.py:681
+#, fuzzy
+msgid "Continued on next page"
+msgstr "فهرست کامل در یک صفحه"
+
+#: sphinx/writers/text.py:437
+msgid "[image]"
+msgstr ""
+
diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.js b/sphinx/locale/fi/LC_MESSAGES/sphinx.js
index 9d2cc6f4..1f160037 100644
--- a/sphinx/locale/fi/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/fi/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "fi", "plural_expr": "(n != 1)", "messages": {"Search Results": "Etsinn\u00e4n tulos", "Preparing search...": "Valmistellaan etsint\u00e4\u00e4...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Ei l\u00f6ytynyt yht\u00e4\u00e4n. Tarkista hakuehdot, sanahaku, ei sen osia", "Search finished, found %s page(s) matching the search query.": "Etsint\u00e4 tehty, l\u00f6ydetty %s sivu(a).", ", in ": "", "Expand sidebar": "", "Permalink to this headline": "", "Searching": "Etsit\u00e4\u00e4n", "Collapse sidebar": "", "Permalink to this definition": "", "Hide Search Matches": "Piilota l\u00f6ydetyt"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "fi", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Piilota l\u00f6ydetyt", "Permalink to this definition": "", "Expand sidebar": "", "Permalink to this headline": "", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.mo b/sphinx/locale/fi/LC_MESSAGES/sphinx.mo
index 7c300006..497088c8 100644
--- a/sphinx/locale/fi/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/fi/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.po b/sphinx/locale/fi/LC_MESSAGES/sphinx.po
index 77076231..4a329546 100644
--- a/sphinx/locale/fi/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/fi/LC_MESSAGES/sphinx.po
@@ -7,384 +7,404 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 0.6\n"
"Report-Msgid-Bugs-To: sphinx@awot.fi\n"
-"POT-Creation-Date: 2009-01-24 18:39+0000\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
"Last-Translator: Jukka Inkeri <sphinx@awot.fi>\n"
"Language-Team: fi <sphinx@awot.fi>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%d.%m.%Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
+msgid "see %s"
msgstr ""
-#: sphinx/builders/changes.py:72
+#: sphinx/environment.py:1628
+#, fuzzy, python-format
+msgid "see also %s"
+msgstr "katso myös %s"
+
+#: sphinx/roles.py:175
+#, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
+
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr ""
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Moduulitaso"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d.%m.%Y"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Yleinen sisällysluettelo"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "hakemisto"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr ">"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "<"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Luvun kirjoittaja: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Moduulin kirjoittaja: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
#, fuzzy
msgid "Code author: "
msgstr "Moduulin kirjoittaja: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Tekijä: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Katso myös"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr ""
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr ""
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr ""
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr ""
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr ""
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr ""
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr ""
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr ""
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
#, fuzzy
msgid "function"
msgstr "Varoitus"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr ""
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr ""
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
msgid "variable"
msgstr ""
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr ""
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr ""
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr ""
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr ""
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr ""
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr ""
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr ""
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr ""
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr ""
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
msgid "Arguments"
msgstr ""
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr ""
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
msgid "Variables"
msgstr ""
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr ""
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr ""
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr ""
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr ""
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr ""
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr ""
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr ""
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr ""
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr ""
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, python-format
msgid "%s() (%s.%s class method)"
msgstr ""
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s() (%s class method)"
msgstr ""
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr ""
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Ympäristö"
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (moduuli)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
#, fuzzy
msgid "Python Module Index"
msgstr "Moduuli sisällysluettelo"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "moduulit"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Poistettu"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr ""
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
+#: sphinx/domains/python.py:564
msgid "class method"
msgstr ""
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr ""
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "moduuli"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (poistettu)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
-#, fuzzy, python-format
+#: sphinx/domains/rst.py:57
+#, python-format
msgid "%s (role)"
-msgstr "%s (moduuli)"
+msgstr ""
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
-#, fuzzy
+#: sphinx/domains/rst.py:107
msgid "role"
-msgstr "moduuli"
+msgstr ""
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr ""
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr ""
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr ""
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr ""
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr ""
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr ""
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Sisällysluettelo"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Moduuli sisällysluettelo"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Etsi sivu"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -402,104 +422,104 @@ msgstr ""
msgid "original entry"
msgstr ""
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
#, fuzzy
msgid "Module code"
msgstr "moduuli"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr ""
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr ""
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr ""
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Huom"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Varoitus"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Vaara"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Virhe"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Vihje"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Tärkeä"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Muista"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Katso myös"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Vihje"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Varoitus"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Uusi versiossa %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Muutettu versiossa %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Poistettu versiosta %s alkaen"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr ""
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr ""
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr ""
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr ""
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr ""
@@ -508,8 +528,8 @@ msgstr ""
msgid "Table Of Contents"
msgstr "Sisällysluettelo"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Etsi"
@@ -557,15 +577,15 @@ msgstr ""
msgid "all functions, classes, terms"
msgstr ""
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr ""
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Hakemisto yhtenä luettelona"
@@ -577,39 +597,39 @@ msgstr "Hakemisto aakkostus sivuttain"
msgid "can be huge"
msgstr "voi olla iso"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Navikointi"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr ""
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "Tietoja tästä documentistä"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr ""
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr ""
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr ""
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr ""
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -637,13 +657,13 @@ msgstr ">>"
msgid "next chapter"
msgstr ">>"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr "Javascript pitää olla sallittu, jotta etsintä toimii."
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -651,16 +671,15 @@ msgid ""
" containing fewer words won't appear in the result list."
msgstr "Anna hakusanat kokonaan, osasanoilla ei haeta."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "etsi"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Etsinnän tulos"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Ei löytynyt ko. ehdoilla yhtään."
@@ -700,12 +719,12 @@ msgstr ""
msgid "Other changes"
msgstr ""
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr ""
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr ""
@@ -713,35 +732,12 @@ msgstr ""
msgid "Hide Search Matches"
msgstr "Piilota löydetyt"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Etsitään"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Valmistellaan etsintää..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ""
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 "Ei löytynyt yhtään. Tarkista hakuehdot, sanahaku, ei sen osia"
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "Etsintä tehty, löydetty %s sivu(a)."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr ""
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr ""
@@ -749,24 +745,25 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr ""
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
#, fuzzy
msgid "Continued on next page"
msgstr ""
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr ""
diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.js b/sphinx/locale/fr/LC_MESSAGES/sphinx.js
index e482673f..5d6fafbd 100644
--- a/sphinx/locale/fr/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/fr/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "fr", "plural_expr": "(n > 1)", "messages": {"Search Results": "R\u00e9sultats de la recherche", "Preparing search...": "Pr\u00e9paration de la recherche...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Votre recherche ne correspond \u00e0 aucun document. V\u00e9rifiez l'orthographe des termes de recherche et que vous avez s\u00e9lectionn\u00e9 suffisamment de cat\u00e9gories.", "Search finished, found %s page(s) matching the search query.": "La recherche est termin\u00e9e, %s page(s) correspond(ent) \u00e0 la requ\u00eate.", ", in ": ", dans", "Expand sidebar": "Agrandir le menu", "Permalink to this headline": "Lien permanent vers ce titre", "Searching": "En cours de recherche", "Collapse sidebar": "R\u00e9duire le menu", "Permalink to this definition": "Lien permanent vers cette d\u00e9finition", "Hide Search Matches": "Cacher les r\u00e9sultats de la recherche"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "fr", "plural_expr": "(n > 1)", "messages": {"Hide Search Matches": "Cacher les r\u00e9sultats de la recherche", "Permalink to this definition": "Lien permanent vers cette d\u00e9finition", "Expand sidebar": "Agrandir le menu", "Permalink to this headline": "Lien permanent vers ce titre", "Collapse sidebar": "R\u00e9duire le menu"}}); \ No newline at end of file
diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.mo b/sphinx/locale/fr/LC_MESSAGES/sphinx.mo
index bfa97b19..f123c004 100644
--- a/sphinx/locale/fr/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/fr/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.po b/sphinx/locale/fr/LC_MESSAGES/sphinx.po
index bdb13396..ab989cf9 100644
--- a/sphinx/locale/fr/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/fr/LC_MESSAGES/sphinx.po
@@ -10,387 +10,407 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 0.5\n"
"Report-Msgid-Bugs-To: larlet@gmail.com\n"
-"POT-Creation-Date: 2008-08-08 12:39+0000\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
"Last-Translator: Sébastien Douche <sdouche@gmail.com>\n"
"Language-Team: French Translation Team <sphinx-dev@googlegroups.com>\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, fuzzy, python-format
+msgid "%s %s documentation"
+msgstr "%s %s documentation"
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%d %B %Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr "voir %s"
+
+#: sphinx/environment.py:1628
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "see also %s"
+msgstr "voir aussi %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/roles.py:175
+#, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
+
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Fonctions de base"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Module"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d %b %Y"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Index général"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "index"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "suivant"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "précédent"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr "(dans"
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Auteur de la section : "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Auteur du module : "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
#, fuzzy
msgid "Code author: "
msgstr "Auteur du module : "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Auteur : "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Voir aussi"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Paramètres"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Retourne"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Type retourné"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (fonction C)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (membre C)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (macro C)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (type C)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (variable C)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "fonction"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "membre"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "type"
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
#, fuzzy
msgid "variable"
msgstr "Variable"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr "%s (classe C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (type C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (membre C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (fonction C++)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr "classe"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (fonction de base)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (méthode %s)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (classe)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr "%s (variable globale ou constante)"
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (attribut %s)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
#, fuzzy
msgid "Arguments"
msgstr "Paramètres"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr "Lance"
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr "données"
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "attribut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
#, fuzzy
msgid "Variables"
msgstr "Variable"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Lève"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (dans le module %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (variable de base)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (dans le module %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (classe de base)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (classe dans %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (méthode %s.%s)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (méthode statique %s.%s)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (méthode statique %s)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
-msgstr "%s() (méthode %s.%s)"
+msgstr "%s() (méthode de classe %s.%s)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, fuzzy, python-format
msgid "%s() (%s class method)"
-msgstr "%s() (méthode %s)"
+msgstr "%s() (méthode de classe %s)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (attribut %s.%s)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Plateformes : "
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (module)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
#, fuzzy
msgid "Python Module Index"
msgstr "Index du module"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "modules"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Obsolète"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "exception"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr "méthode"
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
+#, fuzzy
msgid "class method"
-msgstr "%s() (méthode %s)"
+msgstr "méthode de classe"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "méthode statique"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "module"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (obsolète)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
-#, fuzzy, python-format
+#: sphinx/domains/rst.py:57
+#, python-format
msgid "%s (role)"
-msgstr "%s (module)"
+msgstr ""
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
-#, fuzzy
+#: sphinx/domains/rst.py:107
msgid "role"
-msgstr "module"
+msgstr ""
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "variable d'environnement; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%soption de ligne de commande; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr "terme du glossaire"
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr "élément de grammaire"
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr "étiquette de référence"
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "variable d'environnement"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr "option du programme"
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Index"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Index du module"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Page de recherche"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr "alias de :class:`%s`"
@@ -408,104 +428,104 @@ msgstr "(L'<<entrée orginale>> se trouve dans %s, à la ligne %d.)"
msgid "original entry"
msgstr "entrée orginale"
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
#, fuzzy
msgid "Module code"
msgstr "module"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr "<h1>Code source de %s</h1>"
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr "Vue d'ensemble : code du module"
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr "<h1>Modules pour lesquels le code est disponible</h1>"
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Attention"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Prudence"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Danger"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Erreur"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Indice"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Important"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Note"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Voir aussi"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Astuce"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Warning"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Introduit dans la version %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Modifié dans la version %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Obsolète depuis la version %s"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "mot-clé"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "opérateur"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "objet"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "état"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "fonction de base"
@@ -514,8 +534,8 @@ msgstr "fonction de base"
msgid "Table Of Contents"
msgstr "Table des matières"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Recherche"
@@ -564,15 +584,15 @@ msgstr "accès rapide à l'ensemble des modules"
msgid "all functions, classes, terms"
msgstr "toutes les fonctions, classes, termes"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Index &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Index complet sur une seule page"
@@ -584,39 +604,39 @@ msgstr "Indexer les pages par lettre"
msgid "can be huge"
msgstr "peut être énorme"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Navigation"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Recherchez dans %(docstitle)s"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "À propos de ces documents"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Copyright"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Copyright %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Mis à jour le %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -646,13 +666,13 @@ msgstr "Sujet suivant"
msgid "next chapter"
msgstr "Chapitre suivant"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr "Activez le JavaScript pour que la recherche fonctionne."
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
#, fuzzy
msgid ""
"From here you can search these documents. Enter your search\n"
@@ -668,16 +688,15 @@ msgstr ""
" contenant moins de mots n'apparaîtront pas dans la liste des "
"résultats."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "rechercher"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Résultats de la recherche"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Votre recherche n'a retourné aucun résultat"
@@ -717,12 +736,12 @@ msgstr "Modifications de l'API C"
msgid "Other changes"
msgstr "Autres modifications"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Lien permanent vers ce titre"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Lien permanent vers cette définition"
@@ -730,38 +749,12 @@ msgstr "Lien permanent vers cette définition"
msgid "Hide Search Matches"
msgstr "Cacher les résultats de la recherche"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "En cours de recherche"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Préparation de la recherche..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", dans"
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 ""
-"Votre recherche ne correspond à aucun document. Vérifiez l'orthographe "
-"des termes de recherche et que vous avez sélectionné suffisamment de "
-"catégories."
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "La recherche est terminée, %s page(s) correspond(ent) à la requête."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr "Agrandir le menu"
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr "Réduire le menu"
@@ -769,36 +762,25 @@ msgstr "Réduire le menu"
msgid "Contents"
msgstr "Contenu"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Version"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr "Notes de bas de page"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr "Suite de la page précédente"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
#, fuzzy
msgid "Continued on next page"
msgstr "Suite sur la page suivante"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[image]"
-#~ msgid "Parameter"
-#~ msgstr "Paramètres"
-
-#~ msgid "here"
-#~ msgstr "ici"
-
-#~ msgid "module, in "
-#~ msgstr "module, dans"
-
-#~ msgid "Platform: %s"
-#~ msgstr "Plateforme : %s"
-
diff --git a/sphinx/locale/hr/LC_MESSAGES/sphinx.js b/sphinx/locale/hr/LC_MESSAGES/sphinx.js
index b9d1f7af..d4284716 100644
--- a/sphinx/locale/hr/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/hr/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "hr", "plural_expr": "0", "messages": {"Search Results": "Rezultati pretrage", "Preparing search...": "Pripremam pretra\u017eivanje...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Za va\u0161u pretragu nema rezultata. Molimo pregledajte da li so sve rije\u010di ispravno napisane i da li ste izbrali dovoljno kategorija.", "Search finished, found %s page(s) matching the search query.": "Pretra\u017eivanje je zaklju\u010deno, prona\u0111eno %s stranica, koje odgovaraju tra\u017eenom nizu.", ", in ": ", u ", "Expand sidebar": "", "Permalink to this headline": "Link na taj naslov", "Searching": "Tra\u017eim", "Collapse sidebar": "", "Permalink to this definition": "Link na tu definiciju", "Hide Search Matches": "Sakrij rezultate pretrage"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "hr", "plural_expr": "0", "messages": {"Hide Search Matches": "Sakrij rezultate pretrage", "Permalink to this definition": "Link na tu definiciju", "Expand sidebar": "", "Permalink to this headline": "Link na taj naslov", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/hr/LC_MESSAGES/sphinx.mo b/sphinx/locale/hr/LC_MESSAGES/sphinx.mo
index e032adeb..a9bdb145 100644
--- a/sphinx/locale/hr/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/hr/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/hr/LC_MESSAGES/sphinx.po b/sphinx/locale/hr/LC_MESSAGES/sphinx.po
index ddcf2299..15e70346 100644
--- a/sphinx/locale/hr/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/hr/LC_MESSAGES/sphinx.po
@@ -3,388 +3,406 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2010-09-11 23:58+0200\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
"Last-Translator: Bojan Mihelač <bmihelac@mihelac.org>\n"
"Language-Team: Bojan Mihelač <bmihelac@mihelac.org>\n"
"Plural-Forms: nplurals=1; plural=0\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%d %B, %Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, fuzzy, python-format
+msgid "see %s"
+msgstr "pogledaj %s"
+
+#: sphinx/environment.py:1628
+#, fuzzy, python-format
+msgid "see also %s"
+msgstr "pogledaj i %s"
+
+#: sphinx/roles.py:175
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Ugrađeni dijelovi"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Nivo modula"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d %b, %Y"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Opceniti abecedni indeks"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "abecedni indeks"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "naprijed"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "nazad"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr " (u "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
-msgstr "Autor sekcije:"
+msgstr "Autor sekcije: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
-msgstr "Autor modula:"
+msgstr "Autor modula: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
#, fuzzy
msgid "Code author: "
-msgstr "Autor modula:"
+msgstr "Autor modula: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Autor:"
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Pogledaj i"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Parametri"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Vraća"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Vraća tip"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (C funkcija)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (C član)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (C makro)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (C tip)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (C varijabla)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "funkcija"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "član"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "tip"
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
#, fuzzy
msgid "variable"
msgstr "Varijabla"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++ razred)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ tip)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ član)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ funkcija)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
-#, fuzzy
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr "razred"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (ugrađene funkcije)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s metoda)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (razred)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s atribut)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
#, fuzzy
msgid "Arguments"
msgstr "Parametri"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "atribut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
#, fuzzy
msgid "Variables"
msgstr "Varijabla"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Podiže"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (u modulu %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (ugrađene variable)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (u modulu %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (ugrađen razred)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (razred u %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s metoda)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s statična metoda)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s statična metoda)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s metoda)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s metoda)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s atribut)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Platforme:"
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (modul)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
#, fuzzy
msgid "Python Module Index"
msgstr "Popis modula"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "Moduli"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Zastarjelo"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "izuzetak"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
-msgstr "%s() (%s metoda)"
+msgstr ""
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "statična metoda"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "modul"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (zastarjelo)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
-#, fuzzy, python-format
+#: sphinx/domains/rst.py:57
+#, python-format
msgid "%s (role)"
-msgstr "%s (modul)"
+msgstr ""
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
-#, fuzzy
+#: sphinx/domains/rst.py:107
msgid "role"
-msgstr "modul"
+msgstr ""
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "varijabla okruženja; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%scommand line parameter; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr ""
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr ""
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr ""
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "varijabla okruženja"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Abecedni popis"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Popis modula"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Tražilica"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr " Osnove: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr "nadimak za :class:`%s`"
@@ -396,110 +414,110 @@ msgstr "Todo"
#: sphinx/ext/todo.py:109
#, fuzzy, python-format
msgid "(The <<original entry>> is located in %s, line %d.)"
-msgstr "(Originalan unos se nalazi u %s, u retku %d, i može biti pronađen "
+msgstr "(Originalan unos se nalazi u %s, u retku %d.)"
#: sphinx/ext/todo.py:117
msgid "original entry"
msgstr ""
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
#, fuzzy
msgid "Module code"
msgstr "modul"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr ""
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr ""
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr ""
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Pozor"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Pažnja"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Opasnost"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Greška"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Savjet"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Važno"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Napomena"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Pogledaj i"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Savjet"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Upozorenje"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Novo u verziji %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Promijenjeno u verziji %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Zastarijelo od verzije %s"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "ključna riječ"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "operator"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "objekt"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "izjava"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "ugrađen funkcije"
@@ -508,8 +526,8 @@ msgstr "ugrađen funkcije"
msgid "Table Of Contents"
msgstr "Pregled sadržaja"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Traži"
@@ -557,15 +575,15 @@ msgstr "brz dostup do svih modulov"
msgid "all functions, classes, terms"
msgstr "sve funkcije, razredi, izrazi"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Index &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Potpun indeks na jednoj strani"
@@ -577,39 +595,39 @@ msgstr "Indeksiraj stranice po slovu"
msgid "can be huge"
msgstr "može biti veliko"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Navigacija"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Traži između %(docstitle)s"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "O ovim dokumentima"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Sva prava zadržana"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Sva prava zadržana</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Sva prava zadržana %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Zadnji put ažurirano %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -639,7 +657,7 @@ msgstr "Slijedeća tema"
msgid "next chapter"
msgstr "slijedeće poglavje"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
@@ -647,7 +665,7 @@ msgstr ""
"Molimo omogućite JavaScript\n"
" za djelovanje tražilice."
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -659,16 +677,15 @@ msgstr ""
" function will automatically search for all of the words. Pages\n"
" containing fewer words won't appear in the result list."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "traži"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Rezultati pretrage"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Your search did not match any results."
@@ -708,12 +725,12 @@ msgstr "C API changes"
msgid "Other changes"
msgstr "Ostale promjene"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Link na taj naslov"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Link na tu definiciju"
@@ -721,39 +738,12 @@ msgstr "Link na tu definiciju"
msgid "Hide Search Matches"
msgstr "Sakrij rezultate pretrage"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Tražim"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Pripremam pretraživanje..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", u "
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 ""
-"Za vašu pretragu nema rezultata. Molimo pregledajte da li so sve riječi "
-"ispravno napisane i da li ste izbrali dovoljno kategorija."
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr ""
-"Pretraživanje je zaključeno, pronađeno %s stranica, koje odgovaraju "
-"traženom nizu."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr ""
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr ""
@@ -761,35 +751,24 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Distribucija"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr "nastavak sa prethodne stranice"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
msgid "Continued on next page"
msgstr "nastavak na slijedećoj stranici"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[slika]"
-#~ msgid "Parameter"
-#~ msgstr "Parametar"
-
-#~ msgid "here"
-#~ msgstr "ovdje"
-
-#~ msgid "module, in "
-#~ msgstr "modul, u "
-
-#~ msgid "Platform: %s"
-#~ msgstr "Platforma: %s"
-
diff --git a/sphinx/locale/it/LC_MESSAGES/sphinx.js b/sphinx/locale/it/LC_MESSAGES/sphinx.js
index f9b193fe..590de16e 100644
--- a/sphinx/locale/it/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/it/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "it", "plural_expr": "(n != 1)", "messages": {"Search Results": "Risultati della ricerca", "Preparing search...": "Preparazione della ricerca", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "La tua ricerca non ha trovato alcun risultato. Controlla la correttezza dei termini di ricerca e di avere selezionato un numero sufficiente di categorie", "Search finished, found %s page(s) matching the search query.": "Ricerca terminata, trovate %s pagine corrispondenti alla ricerca.", ", in ": ", in ", "Expand sidebar": "", "Permalink to this headline": "link permanente per questa intestazione", "Searching": "Ricerca in corso", "Collapse sidebar": "", "Permalink to this definition": "link permanente per questa definizione", "Hide Search Matches": "Nascondi i risultati della ricerca"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "it", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Nascondi i risultati della ricerca", "Permalink to this definition": "link permanente per questa definizione", "Expand sidebar": "", "Permalink to this headline": "link permanente per questa intestazione", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/it/LC_MESSAGES/sphinx.mo b/sphinx/locale/it/LC_MESSAGES/sphinx.mo
index 10ca29a5..a4213c8e 100644
--- a/sphinx/locale/it/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/it/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/it/LC_MESSAGES/sphinx.po b/sphinx/locale/it/LC_MESSAGES/sphinx.po
index 40a2ca2a..ccfab24e 100644
--- a/sphinx/locale/it/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/it/LC_MESSAGES/sphinx.po
@@ -6,387 +6,406 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 0.5\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2008-11-27 18:39+0100\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
"Last-Translator: Sandro Dentella <sandro@e-den.it>\n"
"Language-Team: <sphinx-dev@googlegroups.com>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, fuzzy, python-format
+msgid "%s %s documentation"
+msgstr "%s %s documentazione"
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%d %B %Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr "vedi %s"
+
+#: sphinx/environment.py:1628
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "see also %s"
+msgstr "vedi anche %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/roles.py:175
+#, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
+
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Builtin"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Modulo"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d/%b/%Y"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Indice generale"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "indice"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "successivo"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "precedente"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr " (in "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Autore della sezione: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Autore del modulo: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
#, fuzzy
msgid "Code author: "
msgstr "Autore del modulo: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Autore: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Vedi anche"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Parametri"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Ritorna"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Tipo di ritorno"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (funzione C)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (membro C )"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (macro C)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (tipo C)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (variabile C)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "funzione"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "membro"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "tipo"
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
#, fuzzy
msgid "variable"
msgstr "Variabile"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr "%s (classe C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (tipo C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (membro C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (funzione C++)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr ""
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (funzione built-in)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s metodo)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (classe)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s attributo)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
#, fuzzy
msgid "Arguments"
msgstr "Parametri"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "attributo"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
#, fuzzy
msgid "Variables"
msgstr "Variabile"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Solleva"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (nel modulo %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (variabile built-in)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (nel modulo %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (classe built-in)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (classe in %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s metodo)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s metodo statico)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s metodo statico)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s metodo)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s metodo)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s attributo)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Piattaforme:"
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (modulo)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
#, fuzzy
msgid "Python Module Index"
msgstr "Indice dei Moduli"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "moduli"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Deprecato"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "eccezione"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
-msgstr "%s() (%s metodo)"
+msgstr ""
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "metodo statico"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "modulo"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (deprecato)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
-#, fuzzy, python-format
+#: sphinx/domains/rst.py:57
+#, python-format
msgid "%s (role)"
-msgstr "%s (modulo)"
+msgstr ""
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
-#, fuzzy
+#: sphinx/domains/rst.py:107
msgid "role"
-msgstr "modulo"
+msgstr ""
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "variabile d'ambiente, %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%sopzione di linea di comando; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr ""
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr ""
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr ""
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "variabile d'ambiente"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Indice"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Indice dei Moduli"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Cerca"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr "alias per :class:`%s`"
@@ -404,104 +423,104 @@ msgstr "(La <<riga originale>> si trova in %s, linea %d.)"
msgid "original entry"
msgstr "riga originale"
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
#, fuzzy
msgid "Module code"
msgstr "modulo"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr ""
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr ""
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr ""
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Attenzione"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Attenzione"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Pericolo"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Errore"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Consiglio"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Importante"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Nota"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Vedi anche"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Suggerimento"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Avvertimento"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Nuovo nella versione %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Cambiato nella versione %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Deprecato dalla versione %s"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "keyword"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "operatore"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "oggetto"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "statement"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "funzione built-in"
@@ -510,8 +529,8 @@ msgstr "funzione built-in"
msgid "Table Of Contents"
msgstr "Tabella dei contenuti"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Cerca"
@@ -559,15 +578,15 @@ msgstr "accesso veloce ai moduli"
msgid "all functions, classes, terms"
msgstr "tutte le funzioni, classi e moduli"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Indice &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Indice completo in una pagina"
@@ -579,39 +598,39 @@ msgstr "Indice delle pagine per lettera"
msgid "can be huge"
msgstr "può essere enorme"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Navigazione"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Cerca in %(docstitle)s"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "A proposito di questi documenti"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Copyright"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Copyright %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Ultimo aggiornamento %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -641,13 +660,13 @@ msgstr "Argomento successivo"
msgid "next chapter"
msgstr "capitolo successivo"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr ""
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -661,16 +680,15 @@ msgstr ""
" di ricerca cerca automaticamente per tutte le parole. Le pagine\n"
" che contendono meno parole non compariranno nei risultati di ricerca."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "cerca"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Risultati della ricerca"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "La tua ricerca non ha ottenuto risultati"
@@ -710,12 +728,12 @@ msgstr "Modifiche nelle API C"
msgid "Other changes"
msgstr "Altre modifiche"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "link permanente per questa intestazione"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "link permanente per questa definizione"
@@ -723,38 +741,12 @@ msgstr "link permanente per questa definizione"
msgid "Hide Search Matches"
msgstr "Nascondi i risultati della ricerca"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Ricerca in corso"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Preparazione della ricerca"
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", in "
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 ""
-"La tua ricerca non ha trovato alcun risultato. Controlla la correttezza "
-"dei termini di ricerca e di avere selezionato un numero sufficiente di "
-"categorie"
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "Ricerca terminata, trovate %s pagine corrispondenti alla ricerca."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr ""
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr ""
@@ -762,23 +754,25 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Release"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
#, fuzzy
msgid "Continued on next page"
msgstr "Indice completo in una pagina"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[immagine]"
+
diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.js b/sphinx/locale/ja/LC_MESSAGES/sphinx.js
index 6b63245e..feb32159 100644
--- a/sphinx/locale/ja/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/ja/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "ja", "plural_expr": "0", "messages": {"Search Results": "\u691c\u7d22\u7d50\u679c", "Preparing search...": "\u691c\u7d22\u306e\u6e96\u5099\u4e2d...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u691c\u7d22\u6761\u4ef6\u306b\u4e00\u81f4\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u691c\u7d22\u3057\u305f\u3044\u8a00\u8449\u3092\u6b63\u3057\u3044\u3064\u3065\u308a\u3067\u5165\u529b\u3057\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u307e\u305f\u3001\u6b63\u3057\u3044\u30ab\u30c6\u30b4\u30ea\u306e\u691c\u7d22\u3092\u884c\u3063\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002", "Search finished, found %s page(s) matching the search query.": "\u691c\u7d22\u304c\u7d42\u4e86\u3057\u3001\u6761\u4ef6\u306b\u4e00\u81f4\u3059\u308b\u30da\u30fc\u30b8\u304c %s \u500b\u307f\u3064\u304b\u308a\u307e\u3057\u305f\u3002", ", in ": "", "Expand sidebar": "", "Permalink to this headline": "\u3053\u306e\u30d8\u30c3\u30c9\u30e9\u30a4\u30f3\u3078\u306e\u30d1\u30fc\u30de\u30ea\u30f3\u30af", "Searching": "\u691c\u7d22\u4e2d", "Collapse sidebar": "", "Permalink to this definition": "\u3053\u306e\u5b9a\u7fa9\u3078\u306e\u30d1\u30fc\u30de\u30ea\u30f3\u30af", "Hide Search Matches": "\u691c\u7d22\u7d50\u679c\u3092\u96a0\u3059"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "ja", "plural_expr": "0", "messages": {"Hide Search Matches": "\u691c\u7d22\u7d50\u679c\u3092\u96a0\u3059", "Permalink to this definition": "\u3053\u306e\u5b9a\u7fa9\u3078\u306e\u30d1\u30fc\u30de\u30ea\u30f3\u30af", "Expand sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u5c55\u958b", "Permalink to this headline": "\u3053\u306e\u30d8\u30c3\u30c9\u30e9\u30a4\u30f3\u3078\u306e\u30d1\u30fc\u30de\u30ea\u30f3\u30af", "Collapse sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u305f\u305f\u3080"}}); \ No newline at end of file
diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.mo b/sphinx/locale/ja/LC_MESSAGES/sphinx.mo
index b0284f91..2bbd3b24 100644
--- a/sphinx/locale/ja/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/ja/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.po b/sphinx/locale/ja/LC_MESSAGES/sphinx.po
index 5f65a6c3..17d26d93 100644
--- a/sphinx/locale/ja/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ja/LC_MESSAGES/sphinx.po
@@ -2,392 +2,408 @@
# Copyright (C) 2008 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
# Yasushi Masuda <whosaysni@gmail.com>, 2008.
+# Kouhei Sutou <kou@clear-code.com>, 2011.
+# Akitoshi Ohta <fire.kuma8@gmail.com>, 2011.
#
msgid ""
msgstr ""
-"Project-Id-Version: Sphinx 0.5\n"
+"Project-Id-Version: Sphinx 1.1pre\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2008-09-11 23:58+0200\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
-"Last-Translator: Yasushi MASUDA <whosaysni@gmail.com>\n"
-"Language-Team: ja <LL@li.org>\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-08-27 17:50+0900\n"
+"Last-Translator: Akitoshi Ohta <fire.kuma8@gmail.com>\n"
+"Language-Team: Japanese\n"
"Plural-Forms: nplurals=1; plural=0\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%Y 年 %m 月 %d 日"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr "%sを参照"
+
+#: sphinx/environment.py:1628
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "see also %s"
+msgstr "%sも参照"
-#: sphinx/builders/changes.py:72
+#: sphinx/roles.py:175
+#, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
+
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "組み込み"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "モジュールレベル"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%Y 年 %m 月 %d 日"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "総合索引"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "索引"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "次へ"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "前へ"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "この節の作者: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "モジュールの作者: "
-#: sphinx/directives/other.py:131
-#, fuzzy
+#: sphinx/directives/other.py:140
msgid "Code author: "
-msgstr "モジュールの作者: "
+msgstr "コードの作者: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "作者: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "参考"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "パラメタ"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "戻り値"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "戻り値の型"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (C の関数)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (C のメンバ変数)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (C のマクロ)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (C のデータ型)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (C の変数)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "の関数"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "のメンバ変数"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr "のマクロ"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "のデータ型"
-#: sphinx/domains/c.py:175
-#, fuzzy
+#: sphinx/domains/c.py:208
msgid "variable"
msgstr "変数"
-#: sphinx/domains/cpp.py:876
-#, fuzzy, python-format
+#: sphinx/domains/cpp.py:904
+#, python-format
msgid "%s (C++ class)"
-msgstr "%s (のクラス)"
+msgstr "%s (C++ のクラス)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ のデータ型)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ のメンバ変数)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ の関数)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
-msgstr ""
+msgstr "クラス"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (組み込み関数)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s のメソッド)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (クラス)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
-msgstr ""
+msgstr "%s (グローバル変数または定数)"
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s の属性)"
-#: sphinx/domains/javascript.py:131
-#, fuzzy
+#: sphinx/domains/javascript.py:122
msgid "Arguments"
-msgstr "パラメタ"
+msgstr "引数"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
-msgstr ""
+msgstr "例外"
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
-msgstr ""
+msgstr "データ"
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "の属性"
-#: sphinx/domains/python.py:53
-#, fuzzy
+#: sphinx/domains/python.py:100
msgid "Variables"
msgstr "変数"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "例外"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (%s モジュール)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (組み込み変数)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (%s モジュール)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (組み込み変数)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (%s のクラス)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s のメソッド)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s の静的メソッド)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s の静的メソッド)"
-#: sphinx/domains/python.py:308
-#, fuzzy, python-format
+#: sphinx/domains/python.py:341
+#, python-format
msgid "%s() (%s.%s class method)"
-msgstr "%s() (%s.%s のメソッド)"
+msgstr "%s() (%s.%s のクラスメソッド)"
-#: sphinx/domains/python.py:311
-#, fuzzy, python-format
+#: sphinx/domains/python.py:344
+#, python-format
msgid "%s() (%s class method)"
-msgstr "%s() (%s のメソッド)"
+msgstr "%s() (%s のクラスメソッド)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s の属性)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "プラットフォーム: "
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (モジュール)"
-#: sphinx/domains/python.py:429
-#, fuzzy
+#: sphinx/domains/python.py:491
msgid "Python Module Index"
-msgstr "モジュール索引"
+msgstr "Pythonモジュール索引"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "モジュール"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "撤廃"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "例外"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
-msgstr ""
+msgstr "メソッド"
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
-msgstr "%s() (%s のメソッド)"
+msgstr "クラスメソッド"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "の静的メソッド"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "モジュール"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (撤廃)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
-msgstr ""
+msgstr "%s (ディレクティブ)"
-#: sphinx/domains/rst.py:55
-#, fuzzy, python-format
+#: sphinx/domains/rst.py:57
+#, python-format
msgid "%s (role)"
-msgstr "%s (モジュール)"
+msgstr "%s (ロール)"
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
-msgstr ""
+msgstr "ディレクティブ"
-#: sphinx/domains/rst.py:104
-#, fuzzy
+#: sphinx/domains/rst.py:107
msgid "role"
-msgstr "モジュール"
+msgstr "ロール"
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "環境変数; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%sコマンドラインオプション; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
-msgstr ""
+msgstr "用語集の項目"
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
-msgstr ""
+msgstr "文法トークン"
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
-msgstr ""
+msgstr "参照ラベル"
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "環境変数"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
-msgstr ""
+msgstr "プログラムオプション"
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "索引"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "モジュール索引"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "検索ページ"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr " ベースクラス: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr ":class:`%s` のエイリアス"
@@ -399,110 +415,109 @@ msgstr "課題"
#: sphinx/ext/todo.py:109
#, python-format
msgid "(The <<original entry>> is located in %s, line %d.)"
-msgstr ""
+msgstr "(<<元のエントリ>> は、 %s の %d 行目です)"
#: sphinx/ext/todo.py:117
msgid "original entry"
-msgstr ""
+msgstr "元のエントリ"
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
-msgstr ""
+msgstr "[ソース]"
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
-msgstr ""
+msgstr "[ドキュメント]"
-#: sphinx/ext/viewcode.py:123
-#, fuzzy
+#: sphinx/ext/viewcode.py:131
msgid "Module code"
-msgstr "モジュール"
+msgstr "モジュールコード"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
-msgstr ""
+msgstr "<h1>%s のソースコード</h1>"
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
-msgstr ""
+msgstr "概要: モジュールコード"
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
-msgstr ""
+msgstr "<h1>全モジュールのうち、コードを読めるもの</h1>"
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "注意"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "ご用心"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "危険"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "エラー"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "ヒント"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "重要"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "ノート"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "参考"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "ちなみに"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "警告"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "バージョン %s で追加"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "バージョン %s で変更"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "バージョン %s で撤廃"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "キーワード"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "演算子"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "オブジェクト"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "文"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "組み込み関数"
@@ -511,8 +526,8 @@ msgstr "組み込み関数"
msgid "Table Of Contents"
msgstr "目次"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "検索"
@@ -560,15 +575,15 @@ msgstr "全モジュール早見表"
msgid "all functions, classes, terms"
msgstr "関数、クラスおよび用語総覧"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "索引 &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "総索引"
@@ -580,39 +595,39 @@ msgstr "頭文字別索引"
msgid "can be huge"
msgstr "大きい場合があるので注意"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "ナビゲーション"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "%(docstitle)s 内を検索"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "このドキュメントについて"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "著作権"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Copyright %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "最終更新: %(last_updated)s"
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -642,13 +657,13 @@ msgstr "次のトピックへ"
msgid "next chapter"
msgstr "次の章へ"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr "検索機能を使うには JavaScript を有効にしてください。"
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -656,16 +671,15 @@ msgid ""
" containing fewer words won't appear in the result list."
msgstr "このページからドキュメントを検索できます。キーワードを下のボックスに入力して、「検索」をクリックしてください。入力された全てのキーワードを含むページが検索されます。一部のキーワードしか含まないページは検索結果に表示されないので注意してください。"
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "検索"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "検索結果"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "検索条件に一致する項目がありませんでした。"
@@ -705,12 +719,12 @@ msgstr "C API に関する変更"
msgid "Other changes"
msgstr "その多の変更"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "このヘッドラインへのパーマリンク"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "この定義へのパーマリンク"
@@ -718,58 +732,37 @@ msgstr "この定義へのパーマリンク"
msgid "Hide Search Matches"
msgstr "検索結果を隠す"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "検索中"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "検索の準備中..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ""
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 "検索条件に一致するドキュメントはありませんでした。検索したい言葉を正しいつづりで入力しているか確認してください。また、正しいカテゴリの検索を行っているか確認してください。"
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "検索が終了し、条件に一致するページが %s 個みつかりました。"
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
-msgstr ""
+msgstr "サイドバーを展開"
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
-msgstr ""
+msgstr "サイドバーをたたむ"
#: sphinx/themes/haiku/layout.html:26
msgid "Contents"
-msgstr ""
+msgstr "コンテンツ"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "リリース"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr "注記"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr "前のページからの続き"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
msgid "Continued on next page"
-msgstr "総索引"
+msgstr "次のページに続く"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[画像]"
+
diff --git a/sphinx/locale/ko/LC_MESSAGES/sphinx.js b/sphinx/locale/ko/LC_MESSAGES/sphinx.js
new file mode 100644
index 00000000..0beffaa2
--- /dev/null
+++ b/sphinx/locale/ko/LC_MESSAGES/sphinx.js
@@ -0,0 +1 @@
+Documentation.addTranslations({"locale": "ko", "plural_expr": "0", "messages": {"Hide Search Matches": "\uac80\uc0c9 \uacb0\uacfc \uc228\uae30\uae30", "Permalink to this definition": "\uc815\uc758 \uc8fc\uc18c", "Expand sidebar": "\uc0ac\uc774\ub4dc\ubc14 \uc5f4\uae30", "Permalink to this headline": "\uc81c\ubaa9 \uc8fc\uc18c", "Collapse sidebar": "\uc0ac\uc774\ub4dc\ubc14 \ub2eb\uae30"}}); \ No newline at end of file
diff --git a/sphinx/locale/ko/LC_MESSAGES/sphinx.mo b/sphinx/locale/ko/LC_MESSAGES/sphinx.mo
new file mode 100644
index 00000000..d671331a
--- /dev/null
+++ b/sphinx/locale/ko/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/ko/LC_MESSAGES/sphinx.po b/sphinx/locale/ko/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..8c0dd3d8
--- /dev/null
+++ b/sphinx/locale/ko/LC_MESSAGES/sphinx.po
@@ -0,0 +1,777 @@
+# Koreantranslations for Sphinx.
+# Copyright (C) 2008 ORGANIZATION
+# This file is distributed under the same license as the Sphinx project.
+# Channy Yun <channy@mozilla.or.kr>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx 1.1pre\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-06-09 21:25+0900\n"
+"Last-Translator: Channy Yun <channy@mozilla.or.kr>\n"
+"Language-Team: Korean\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
+#, python-format
+msgid "%B %d, %Y"
+msgstr "%Y년 %m월 %d일"
+
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr "%s 문서"
+
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr "%s 참조"
+
+#: sphinx/roles.py:175
+#, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
+
+#: sphinx/builders/changes.py:73
+msgid "Builtins"
+msgstr "기본"
+
+#: sphinx/builders/changes.py:75
+msgid "Module level"
+msgstr "모듈 수준"
+
+#: sphinx/builders/html.py:274
+#, python-format
+msgid "%b %d, %Y"
+msgstr "%Y년 %m월 %d일"
+
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
+msgid "General Index"
+msgstr "전체 색인"
+
+#: sphinx/builders/html.py:293
+msgid "index"
+msgstr "색인"
+
+#: sphinx/builders/html.py:353
+msgid "next"
+msgstr "다음"
+
+#: sphinx/builders/html.py:362
+msgid "previous"
+msgstr "이전"
+
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
+#, fuzzy
+msgid " (in "
+msgstr "("
+
+#: sphinx/directives/other.py:136
+#, fuzzy
+msgid "Section author: "
+msgstr "항목 저자:"
+
+#: sphinx/directives/other.py:138
+#, fuzzy
+msgid "Module author: "
+msgstr "모듈 개발자:"
+
+#: sphinx/directives/other.py:140
+#, fuzzy
+msgid "Code author: "
+msgstr "코드 개발자:"
+
+#: sphinx/directives/other.py:142
+#, fuzzy
+msgid "Author: "
+msgstr "저자:"
+
+#: sphinx/directives/other.py:215
+msgid "See also"
+msgstr "더 보기"
+
+#: sphinx/domains/__init__.py:244
+#, python-format
+msgid "%s %s"
+msgstr ""
+
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
+msgid "Parameters"
+msgstr "매개 변수"
+
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
+msgid "Returns"
+msgstr "반환"
+
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
+msgid "Return type"
+msgstr "반환 형식"
+
+#: sphinx/domains/c.py:141
+#, python-format
+msgid "%s (C function)"
+msgstr "%s (C 함수)"
+
+#: sphinx/domains/c.py:143
+#, python-format
+msgid "%s (C member)"
+msgstr "%s (C 멤버 변수)"
+
+#: sphinx/domains/c.py:145
+#, python-format
+msgid "%s (C macro)"
+msgstr "%s (C 매크로)"
+
+#: sphinx/domains/c.py:147
+#, python-format
+msgid "%s (C type)"
+msgstr "%s (C 데이터 형식)"
+
+#: sphinx/domains/c.py:149
+#, python-format
+msgid "%s (C variable)"
+msgstr "%s (C 변수)"
+
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
+msgid "function"
+msgstr "함수"
+
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
+msgid "member"
+msgstr "멤버 변수"
+
+#: sphinx/domains/c.py:206
+msgid "macro"
+msgstr "매크로"
+
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
+msgid "type"
+msgstr "데이터 형식"
+
+#: sphinx/domains/c.py:208
+msgid "variable"
+msgstr "변수"
+
+#: sphinx/domains/cpp.py:904
+#, python-format
+msgid "%s (C++ class)"
+msgstr "%s (C++ 클래스)"
+
+#: sphinx/domains/cpp.py:919
+#, python-format
+msgid "%s (C++ type)"
+msgstr "%s (C++ 데이터 형식)"
+
+#: sphinx/domains/cpp.py:938
+#, python-format
+msgid "%s (C++ member)"
+msgstr "%s (C++의 멤버 변수)"
+
+#: sphinx/domains/cpp.py:990
+#, python-format
+msgid "%s (C++ function)"
+msgstr "%s (C++ 함수)"
+
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
+msgid "class"
+msgstr "클래스"
+
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
+#, python-format
+msgid "%s() (built-in function)"
+msgstr "%s() 내장 함수)"
+
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
+#, python-format
+msgid "%s() (%s method)"
+msgstr "%s() (%s 메서드)"
+
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (클래스)"
+
+#: sphinx/domains/javascript.py:111
+#, python-format
+msgid "%s (global variable or constant)"
+msgstr "%s (전역 변수 또는 상수)"
+
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
+#, python-format
+msgid "%s (%s attribute)"
+msgstr "%s (%s의 속성)"
+
+#: sphinx/domains/javascript.py:122
+msgid "Arguments"
+msgstr "인수"
+
+#: sphinx/domains/javascript.py:125
+msgid "Throws"
+msgstr "예외"
+
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
+msgid "data"
+msgstr "데이터"
+
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
+msgid "attribute"
+msgstr "속성"
+
+#: sphinx/domains/python.py:100
+msgid "Variables"
+msgstr "변수"
+
+#: sphinx/domains/python.py:104
+msgid "Raises"
+msgstr "예외"
+
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
+#, python-format
+msgid "%s() (in module %s)"
+msgstr "%s() (%s 모듈)"
+
+#: sphinx/domains/python.py:258
+#, python-format
+msgid "%s (built-in variable)"
+msgstr "%s (내장 변수)"
+
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
+#, python-format
+msgid "%s (in module %s)"
+msgstr "%s (%s 모듈)"
+
+#: sphinx/domains/python.py:275
+#, python-format
+msgid "%s (built-in class)"
+msgstr "%s (내장 변수)"
+
+#: sphinx/domains/python.py:276
+#, python-format
+msgid "%s (class in %s)"
+msgstr "%s (%s 종류)"
+
+#: sphinx/domains/python.py:316
+#, fuzzy, python-format
+msgid "%s() (%s.%s method)"
+msgstr "%s() (%s. %s 메서드)"
+
+#: sphinx/domains/python.py:328
+#, fuzzy, python-format
+msgid "%s() (%s.%s static method)"
+msgstr "%s() (%s. %s의 정적 메서드)"
+
+#: sphinx/domains/python.py:331
+#, python-format
+msgid "%s() (%s static method)"
+msgstr "%s() (%s의 정적 메서드)"
+
+#: sphinx/domains/python.py:341
+#, fuzzy, python-format
+msgid "%s() (%s.%s class method)"
+msgstr "%s() (%s. %s 클래스 메서드)"
+
+#: sphinx/domains/python.py:344
+#, python-format
+msgid "%s() (%s class method)"
+msgstr "%s() (%s 클래스 메서드)"
+
+#: sphinx/domains/python.py:354
+#, fuzzy, python-format
+msgid "%s (%s.%s attribute)"
+msgstr "%s (%s. %s의 속성)"
+
+#: sphinx/domains/python.py:434
+#, python-format
+msgid "%s (module)"
+msgstr "%s (모듈)"
+
+#: sphinx/domains/python.py:491
+msgid "Python Module Index"
+msgstr "Python 모듈 목록"
+
+#: sphinx/domains/python.py:492
+msgid "modules"
+msgstr "모듈"
+
+#: sphinx/domains/python.py:537
+msgid "Deprecated"
+msgstr "폐지"
+
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
+msgid "exception"
+msgstr "예외"
+
+#: sphinx/domains/python.py:563
+msgid "method"
+msgstr "메소드"
+
+#: sphinx/domains/python.py:564
+msgid "class method"
+msgstr "클래스 메소드"
+
+#: sphinx/domains/python.py:565
+msgid "static method"
+msgstr "정적 메서드"
+
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
+msgid "module"
+msgstr "모듈"
+
+#: sphinx/domains/python.py:695
+#, fuzzy
+msgid " (deprecated)"
+msgstr "(폐지)"
+
+#: sphinx/domains/rst.py:55
+#, python-format
+msgid "%s (directive)"
+msgstr "%s (지시문)"
+
+#: sphinx/domains/rst.py:57
+#, python-format
+msgid "%s (role)"
+msgstr "%s (역할)"
+
+#: sphinx/domains/rst.py:106
+msgid "directive"
+msgstr "지시자"
+
+#: sphinx/domains/rst.py:107
+msgid "role"
+msgstr "역할"
+
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
+#, python-format
+msgid "environment variable; %s"
+msgstr "환경 변수; %s"
+
+#: sphinx/domains/std.py:162
+#, python-format
+msgid "%scommand line option; %s"
+msgstr "%s 명령; %s"
+
+#: sphinx/domains/std.py:393
+msgid "glossary term"
+msgstr "용어의 항목"
+
+#: sphinx/domains/std.py:394
+msgid "grammar token"
+msgstr "문법 토큰"
+
+#: sphinx/domains/std.py:395
+msgid "reference label"
+msgstr "참조 레이블"
+
+#: sphinx/domains/std.py:396
+msgid "environment variable"
+msgstr "환경 변수"
+
+#: sphinx/domains/std.py:397
+msgid "program option"
+msgstr "프로그램 옵션"
+
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
+#: sphinx/themes/basic/genindex-split.html:11
+#: sphinx/themes/basic/genindex-split.html:14
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
+msgid "Index"
+msgstr "색인"
+
+#: sphinx/domains/std.py:428
+msgid "Module Index"
+msgstr "모듈 목록"
+
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
+msgid "Search Page"
+msgstr "검색 페이지"
+
+#: sphinx/ext/autodoc.py:1002
+#, fuzzy, python-format
+msgid " Bases: %s"
+msgstr "기본 클래스: %s"
+
+#: sphinx/ext/autodoc.py:1038
+#, fuzzy, python-format
+msgid "alias of :class:`%s`"
+msgstr ": class:`%s`의 별칭"
+
+#: sphinx/ext/todo.py:41
+msgid "Todo"
+msgstr "과제"
+
+#: sphinx/ext/todo.py:109
+#, fuzzy, python-format
+msgid "(The <<original entry>> is located in %s, line %d.)"
+msgstr "(<<원래 항목\" \"는 %s %d 번째)"
+
+#: sphinx/ext/todo.py:117
+msgid "original entry"
+msgstr "원래 항목"
+
+#: sphinx/ext/viewcode.py:70
+msgid "[source]"
+msgstr "[소스]"
+
+#: sphinx/ext/viewcode.py:117
+msgid "[docs]"
+msgstr "[문서]"
+
+#: sphinx/ext/viewcode.py:131
+msgid "Module code"
+msgstr "모듈 코드"
+
+#: sphinx/ext/viewcode.py:137
+#, fuzzy, python-format
+msgid "<h1>Source code for %s</h1>"
+msgstr "<h1>%s의 소스 코드</ h1>"
+
+#: sphinx/ext/viewcode.py:164
+msgid "Overview: module code"
+msgstr "설명: 모듈 코드"
+
+#: sphinx/ext/viewcode.py:165
+#, fuzzy
+msgid "<h1>All modules for which code is available</h1>"
+msgstr "<h1>코드가 제공되는 모든 모듈 </ h1>"
+
+#: sphinx/locale/__init__.py:155
+msgid "Attention"
+msgstr "주의"
+
+#: sphinx/locale/__init__.py:156
+msgid "Caution"
+msgstr "조심"
+
+#: sphinx/locale/__init__.py:157
+msgid "Danger"
+msgstr "위험"
+
+#: sphinx/locale/__init__.py:158
+msgid "Error"
+msgstr "오류"
+
+#: sphinx/locale/__init__.py:159
+msgid "Hint"
+msgstr "힌트"
+
+#: sphinx/locale/__init__.py:160
+msgid "Important"
+msgstr "중요"
+
+#: sphinx/locale/__init__.py:161
+msgid "Note"
+msgstr "주석"
+
+#: sphinx/locale/__init__.py:162
+msgid "See Also"
+msgstr "더 보기"
+
+#: sphinx/locale/__init__.py:163
+msgid "Tip"
+msgstr "참고"
+
+#: sphinx/locale/__init__.py:164
+msgid "Warning"
+msgstr "경고"
+
+#: sphinx/locale/__init__.py:168
+#, python-format
+msgid "New in version %s"
+msgstr "버전 %s에 추가"
+
+#: sphinx/locale/__init__.py:169
+#, python-format
+msgid "Changed in version %s"
+msgstr "버전 %s으로 변경"
+
+#: sphinx/locale/__init__.py:170
+#, python-format
+msgid "Deprecated since version %s"
+msgstr "버전 %s 폐지"
+
+#: sphinx/locale/__init__.py:176
+msgid "keyword"
+msgstr "키워드"
+
+#: sphinx/locale/__init__.py:177
+msgid "operator"
+msgstr "연산자"
+
+#: sphinx/locale/__init__.py:178
+msgid "object"
+msgstr "객체"
+
+#: sphinx/locale/__init__.py:180
+msgid "statement"
+msgstr "글"
+
+#: sphinx/locale/__init__.py:181
+msgid "built-in function"
+msgstr "내장 함수"
+
+#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10
+#: sphinx/themes/basic/localtoc.html:11
+msgid "Table Of Contents"
+msgstr "목차"
+
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
+msgid "Search"
+msgstr "검색"
+
+#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15
+msgid "Go"
+msgstr "바로 가기"
+
+#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20
+msgid "Enter search terms or a module, class or function name."
+msgstr "모듈, 클래스 또는 함수 이름을 입력하십시오."
+
+#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14
+msgid "Show Source"
+msgstr "소스 코드를 보려면"
+
+#: sphinx/themes/basic/defindex.html:11
+msgid "Overview"
+msgstr "개요"
+
+#: sphinx/themes/basic/defindex.html:20
+msgid "Indices and tables:"
+msgstr "색인 및 표 목록:"
+
+#: sphinx/themes/basic/defindex.html:23
+msgid "Complete Table of Contents"
+msgstr "종합 목차"
+
+#: sphinx/themes/basic/defindex.html:24
+msgid "lists all sections and subsections"
+msgstr "영역별 목차"
+
+#: sphinx/themes/basic/defindex.html:26
+msgid "search this documentation"
+msgstr "문서 검색"
+
+#: sphinx/themes/basic/defindex.html:28
+msgid "Global Module Index"
+msgstr "모듈 총 색인"
+
+#: sphinx/themes/basic/defindex.html:29
+msgid "quick access to all modules"
+msgstr "모든 모듈 조견표"
+
+#: sphinx/themes/basic/defindex.html:31
+msgid "all functions, classes, terms"
+msgstr "함수, 클래스 및 용어 개관"
+
+#: sphinx/themes/basic/genindex-single.html:35
+#, fuzzy, python-format
+msgid "Index &ndash; %(key)s"
+msgstr "색인-%(key)s"
+
+#: sphinx/themes/basic/genindex-single.html:63
+#: sphinx/themes/basic/genindex-split.html:24
+#: sphinx/themes/basic/genindex-split.html:38
+#: sphinx/themes/basic/genindex.html:74
+msgid "Full index on one page"
+msgstr "일반 색인"
+
+#: sphinx/themes/basic/genindex-split.html:16
+msgid "Index pages by letter"
+msgstr "알파벳별 색인"
+
+#: sphinx/themes/basic/genindex-split.html:25
+msgid "can be huge"
+msgstr "큰 경우가 있으므로 주의"
+
+#: sphinx/themes/basic/layout.html:29
+msgid "Navigation"
+msgstr "탐색"
+
+#: sphinx/themes/basic/layout.html:122
+#, python-format
+msgid "Search within %(docstitle)s"
+msgstr "%(docstitle)s에서 찾기"
+
+#: sphinx/themes/basic/layout.html:131
+msgid "About these documents"
+msgstr "이 문서 정보"
+
+#: sphinx/themes/basic/layout.html:140
+msgid "Copyright"
+msgstr "저작권"
+
+#: sphinx/themes/basic/layout.html:189
+#, fuzzy, python-format
+msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
+msgstr "©<a href=\"%(path)s\">Copyright</a> %(copyright)s."
+
+#: sphinx/themes/basic/layout.html:191
+#, fuzzy, python-format
+msgid "&copy; Copyright %(copyright)s."
+msgstr "©Copyright %(copyright)s."
+
+#: sphinx/themes/basic/layout.html:195
+#, python-format
+msgid "Last updated on %(last_updated)s."
+msgstr "최종 업데이트: %(last_updated)s"
+
+#: sphinx/themes/basic/layout.html:198
+#, fuzzy, python-format
+msgid ""
+"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
+msgstr ""
+"이 문서는 <a href=\"http://sphinx.pocoo.org/\">Sphinx</a>%(sphinx_version)s로 "
+"제공됩니다."
+
+#: sphinx/themes/basic/opensearch.xml:4
+#, python-format
+msgid "Search %(docstitle)s"
+msgstr "%(docstitle)s에서 찾기"
+
+#: sphinx/themes/basic/relations.html:11
+msgid "Previous topic"
+msgstr "이전 항목"
+
+#: sphinx/themes/basic/relations.html:13
+msgid "previous chapter"
+msgstr "이전 장"
+
+#: sphinx/themes/basic/relations.html:16
+msgid "Next topic"
+msgstr "다음 항목"
+
+#: sphinx/themes/basic/relations.html:18
+msgid "next chapter"
+msgstr "다음 장"
+
+#: sphinx/themes/basic/search.html:24
+#, fuzzy
+msgid ""
+"Please activate JavaScript to enable the search\n"
+" functionality."
+msgstr "검색 기능을 사용하려면 JavaScript를 활성화하십시오."
+
+#: sphinx/themes/basic/search.html:29
+#, fuzzy
+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 ""
+"이 문서에서 문서를 검색할 수 있습니다. 키워드를 아래 입력란에 입력하고 '검색'을 클릭하세요. 입력된 모든 키워드를 포함하는 "
+"페이지가 검색됩니다. 일부 키워드 밖에 없는 페이지는 검색 결과에 표시되지 않으므로 주의하십시오. "
+
+#: sphinx/themes/basic/search.html:36
+msgid "search"
+msgstr "검색"
+
+#: sphinx/themes/basic/search.html:40
+msgid "Search Results"
+msgstr "검색 결과"
+
+#: sphinx/themes/basic/search.html:42
+msgid "Your search did not match any results."
+msgstr "검색 조건에 일치하는 항목이 없습니다."
+
+#: sphinx/themes/basic/searchbox.html:12
+msgid "Quick search"
+msgstr "빠른 검색"
+
+#: sphinx/themes/basic/sourcelink.html:11
+msgid "This Page"
+msgstr "현재 문서"
+
+#: sphinx/themes/basic/changes/frameset.html:5
+#: sphinx/themes/basic/changes/versionchanges.html:12
+#, fuzzy, python-format
+msgid "Changes in Version %(version)s &mdash; %(docstitle)s"
+msgstr "버전 %(version)s의 변경 사항-%(docstitle)s"
+
+#: sphinx/themes/basic/changes/rstsource.html:5
+#, fuzzy, python-format
+msgid "%(filename)s &mdash; %(docstitle)s"
+msgstr "%(filename)s-%(docstitle)s"
+
+#: sphinx/themes/basic/changes/versionchanges.html:17
+#, python-format
+msgid "Automatically generated list of changes in version %(version)s"
+msgstr "버전 %(version)s의 변경 사항 (이 목록은 자동으로 생성합니다)"
+
+#: sphinx/themes/basic/changes/versionchanges.html:18
+msgid "Library changes"
+msgstr "라이브러리에 대한 변경"
+
+#: sphinx/themes/basic/changes/versionchanges.html:23
+msgid "C API changes"
+msgstr "C API에 대한 변경"
+
+#: sphinx/themes/basic/changes/versionchanges.html:25
+msgid "Other changes"
+msgstr "다른 변경 사항"
+
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
+msgid "Permalink to this headline"
+msgstr "제목 주소"
+
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
+msgid "Permalink to this definition"
+msgstr "정의 주소"
+
+#: sphinx/themes/basic/static/doctools.js:189
+msgid "Hide Search Matches"
+msgstr "검색 결과 숨기기"
+
+#: sphinx/themes/default/static/sidebar.js:69
+msgid "Expand sidebar"
+msgstr "사이드바 열기"
+
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
+msgid "Collapse sidebar"
+msgstr "사이드바 닫기"
+
+#: sphinx/themes/haiku/layout.html:26
+msgid "Contents"
+msgstr "내용"
+
+#: sphinx/writers/latex.py:177
+msgid "Release"
+msgstr "출시"
+
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
+msgid "Footnotes"
+msgstr "참고"
+
+#: sphinx/writers/latex.py:676
+msgid "continued from previous page"
+msgstr "이전 페이지에서 계속"
+
+#: sphinx/writers/latex.py:681
+msgid "Continued on next page"
+msgstr "일반 색인"
+
+#: sphinx/writers/text.py:437
+msgid "[image]"
+msgstr "[그림]"
+
diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.js b/sphinx/locale/lt/LC_MESSAGES/sphinx.js
index daf4f89b..2ab4266b 100644
--- a/sphinx/locale/lt/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/lt/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "lt", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Search Results": "Paie\u0161kos rezultatai", "Preparing search...": "Ruo\u0161iama paie\u0161ka...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "J\u016bs\u0173 paie\u0161ka neatitiko joki\u0173 dokument\u0173. Pra\u0161om patikrinti ar visi \u017eod\u017eiai teisingai \u012fvesti ir ar pasirinkote pakankamai kategorij\u0173.", "Search finished, found %s page(s) matching the search query.": "Paie\u0161ka baigta, paie\u0161kos rezultatus atitiko %s puslapis(-iai,-i\u0173)", ", in ": ", kuris yra ", "Expand sidebar": "I\u0161pl\u0117sti \u0161onin\u0119 juost\u0105", "Permalink to this headline": "Nuoroda \u012f \u0161i\u0105 antra\u0161t\u0119", "Searching": "Ie\u0161koma", "Collapse sidebar": "Pasl\u0117pti \u0161onin\u0119 juost\u0105", "Permalink to this definition": "Nuoroda \u012f \u0161\u012f apibr\u0117\u017eim\u0105", "Hide Search Matches": "Pasl\u0117pti paie\u0161kos rezultatus"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "lt", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Hide Search Matches": "Pasl\u0117pti paie\u0161kos rezultatus", "Permalink to this definition": "Nuoroda \u012f \u0161\u012f apibr\u0117\u017eim\u0105", "Expand sidebar": "I\u0161pl\u0117sti \u0161onin\u0119 juost\u0105", "Permalink to this headline": "Nuoroda \u012f \u0161i\u0105 antra\u0161t\u0119", "Collapse sidebar": "Pasl\u0117pti \u0161onin\u0119 juost\u0105"}}); \ No newline at end of file
diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.mo b/sphinx/locale/lt/LC_MESSAGES/sphinx.mo
index 794ae655..9efc6d77 100644
--- a/sphinx/locale/lt/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/lt/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.po b/sphinx/locale/lt/LC_MESSAGES/sphinx.po
index 48618e30..b331d52a 100644
--- a/sphinx/locale/lt/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/lt/LC_MESSAGES/sphinx.po
@@ -6,380 +6,402 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 1.0pre/8b971dbc7d36\n"
"Report-Msgid-Bugs-To: dalius@sandbox.lt\n"
-"POT-Creation-Date: 2010-05-24 23:53+0200\n"
-"PO-Revision-Date: 2010-06-19 12:02+0300\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
"Last-Translator: Dalius Dobravolskas <dalius@sandbox.lt>\n"
+"Language-Team: lt <LL@li.org>\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"(n%100<10 || n%100>=20) ? 1 : 2)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.5\n"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%Y-%m-%d"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr ""
+
+#: sphinx/environment.py:1628
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
+msgid "see also %s"
msgstr ""
-#: sphinx/builders/changes.py:72
+#: sphinx/roles.py:175
+#, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
+
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Įtaisytieji"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Modulio lygis"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%Y-%m-%d"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Bendras indeksas"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "indeksas"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "kitas"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "praeitas"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr " (kuris yra "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Skyriaus autorius: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Modulio autorius: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
msgid "Code author: "
msgstr "Kodo autorius: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Autorius: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Taip pat žiūrėkite"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr "%s %s"
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Parametrai"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Grąžinamos reikšmės"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Grąžinamos reikšmės tipas"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (C funkcija)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (C narys)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (C makrokomanda)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (C tipas)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (C kintamasis)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "funkcija"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "narys"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr "makrokomanda"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "tipas"
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
msgid "variable"
msgstr "kintamasis"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr ""
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ tipas)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ narys)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ funkcija)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr "klasė"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (itaisytoji funkcija)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s metodas)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (klasė)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr "%s (globalus kintamasis arba konstanta)"
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s atributas)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
msgid "Arguments"
msgstr "Argumentais"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr "Išmeta"
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr "duomenys"
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "atribudas"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
msgid "Variables"
msgstr "Kintamieji"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Sukelia"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (modulyje %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (įtaisytasis kintamasis)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (modulje %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (įtaisytoji klasė)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (klasė iš %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s metodas)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s statinis metodas)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s statinis metodas)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s klasės metodas)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s klasės metodas)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s atributas)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Platformos: "
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (modulis)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
msgid "Python Module Index"
msgstr ""
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "moduliai"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Atmestas"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "išimtis"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr "metodas"
-#: sphinx/domains/python.py:502
+#: sphinx/domains/python.py:564
msgid "class method"
msgstr "klasės metodas"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "statinis metodas"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "modulis"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (atmestas)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr "%s (direktyva)"
-#: sphinx/domains/rst.py:55
+#: sphinx/domains/rst.py:57
#, python-format
msgid "%s (role)"
msgstr "%s (rolė)"
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr "direktyva"
-#: sphinx/domains/rst.py:104
+#: sphinx/domains/rst.py:107
msgid "role"
msgstr "rolė"
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "aplinkos kintamasis; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%skomandinės eilutės parinktis; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr "aiškinamasis terminas"
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr "gramatinė leksema"
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr "nuorodos požymis"
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "aplinkos kintamasis"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr "programos parinktis"
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Indeksas"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Modulio indeksas"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Paieškos puslapis"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr " Bazės: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr ":class:`%s` alternatyvus vardas"
@@ -397,103 +419,103 @@ msgstr "(<<original entry>> galima rasti %s, eilutėje %d.)"
msgid "original entry"
msgstr "originalus įrašas"
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr "[šaltinis]"
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr "[dokumentai]"
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
msgid "Module code"
msgstr "Modulio kodas"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr "<h1>Kodas %s</h1>"
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr "Apžvalga: modulio kodas"
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr "<h1>Visi moduliai turintys kodą</h1>"
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Dėmesio"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Atsargiai"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Pavojinga"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Klaida"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Patarimas"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Svarbu"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Pastaba"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Taip pat žiūrėkite"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Patarimas"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Įspėjimas"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Nauja %s versijoje"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Pakeista %s versijoje"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Nebepalaikoma nuo %s versijos"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "bazinis žodis"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "operatorius"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "objektas"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "sakinis"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "įtaisytoji funkcija"
@@ -502,8 +524,8 @@ msgstr "įtaisytoji funkcija"
msgid "Table Of Contents"
msgstr "Turinys"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Paieška"
@@ -551,15 +573,15 @@ msgstr "greitas visų modulių pasiekimas"
msgid "all functions, classes, terms"
msgstr "visos funkcijos, klasės ir terminai"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Indeksas &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Pilnas indeksas viename puslapyje"
@@ -571,39 +593,39 @@ msgstr "Indekso puslapiai pagal raidę"
msgid "can be huge"
msgstr "gali būti didelis"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Navigacija"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Ieškoti tarp %(docstitle)s"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "Apie šiuos dokumentus"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Autoriaus teisės"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Autoriaus teisės</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Autoriaus teisės %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Paskutinis atnaujinimas %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -633,7 +655,7 @@ msgstr "Kita tema"
msgid "next chapter"
msgstr "kita dalis"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
@@ -641,25 +663,28 @@ msgstr ""
"Prašome aktyvuoti JavaScript, kad veiktų paieškos\n"
" funkcionalumas."
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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 ""
-"Čia jūs galite ieškoti šiuose dokumentuose. Įveskite savo paieškos\n žodžius į lauką apačioje ir paspauskite \"ieškoti\". Pastebėsime, kad paieškos\n funkcija automatiškai ieškos visų žodžių. Puslapiai,\n kuriuose yra mažiau žodžių nepasirodys tarp paieškos rezultatų."
+"Čia jūs galite ieškoti šiuose dokumentuose. Įveskite savo paieškos\n"
+" žodžius į lauką apačioje ir paspauskite \"ieškoti\". Pastebėsime, kad"
+" paieškos\n"
+" funkcija automatiškai ieškos visų žodžių. Puslapiai,\n"
+" kuriuose yra mažiau žodžių nepasirodys tarp paieškos rezultatų."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "ieškoti"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Paieškos rezultatai"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Jūsų paieška neatitiko jokių rezultatų"
@@ -699,12 +724,12 @@ msgstr "C API pakeitimai"
msgid "Other changes"
msgstr "Kiti pakeitimai"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Nuoroda į šią antraštę"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Nuoroda į šį apibrėžimą"
@@ -712,35 +737,12 @@ msgstr "Nuoroda į šį apibrėžimą"
msgid "Hide Search Matches"
msgstr "Paslėpti paieškos rezultatus"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Ieškoma"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Ruošiama paieška..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", kuris yra "
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 "Jūsų paieška neatitiko jokių dokumentų. Prašom patikrinti ar visi žodžiai teisingai įvesti ir ar pasirinkote pakankamai kategorijų."
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "Paieška baigta, paieškos rezultatus atitiko %s puslapis(-iai,-ių)"
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr "Išplėsti šoninę juostą"
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr "Paslėpti šoninę juostą"
@@ -748,23 +750,24 @@ msgstr "Paslėpti šoninę juostą"
msgid "Contents"
msgstr "Turinys"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Leidimas"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr "Išnašos"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr "tęsinys iš praeito puslapio"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
msgid "Continued on next page"
msgstr "Tęsinys kitame puslapyje"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[paveiksliukas]"
diff --git a/sphinx/locale/lv/LC_MESSAGES/sphinx.js b/sphinx/locale/lv/LC_MESSAGES/sphinx.js
new file mode 100644
index 00000000..7809a810
--- /dev/null
+++ b/sphinx/locale/lv/LC_MESSAGES/sphinx.js
@@ -0,0 +1 @@
+Documentation.addTranslations({"locale": "lv", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Hide Search Matches": "Pasl\u0113pt atlases v\u0101rdus", "Permalink to this definition": "Past\u0101v\u012bga nor\u0101de uz \u0161o defin\u012bciju", "Expand sidebar": "Izplest s\u0101njoslu", "Permalink to this headline": "Past\u0101v\u012bga nor\u0101de \u0161o virsrakstu", "Collapse sidebar": "Sav\u0113rst s\u0101njoslu"}}); \ No newline at end of file
diff --git a/sphinx/locale/lv/LC_MESSAGES/sphinx.mo b/sphinx/locale/lv/LC_MESSAGES/sphinx.mo
new file mode 100644
index 00000000..e6e713a5
--- /dev/null
+++ b/sphinx/locale/lv/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/lv/LC_MESSAGES/sphinx.po b/sphinx/locale/lv/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..ec19bbee
--- /dev/null
+++ b/sphinx/locale/lv/LC_MESSAGES/sphinx.po
@@ -0,0 +1,771 @@
+# Latvian translations for Sphinx.
+# This file is distributed under the same license as the Sphinx project.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx 1.0.7\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-05-10 16:40+0200\n"
+"Last-Translator: alexander smishlajev <alex@gorka.lv>\n"
+"Language-Team: lv <LL@li.org>\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"(n%100<10 || n%100>=20) ? 1 : 2)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
+#, python-format
+msgid "%B %d, %Y"
+msgstr "%d.%m.%Y"
+
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr ""
+
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr ""
+
+#: sphinx/roles.py:175
+#, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr ""
+
+#: sphinx/builders/changes.py:73
+msgid "Builtins"
+msgstr "Iebūvētie"
+
+#: sphinx/builders/changes.py:75
+msgid "Module level"
+msgstr "Moduļu līmenis"
+
+#: sphinx/builders/html.py:274
+#, python-format
+msgid "%b %d, %Y"
+msgstr "%d.%m.%Y"
+
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
+msgid "General Index"
+msgstr "Vispārējs indekss"
+
+#: sphinx/builders/html.py:293
+msgid "index"
+msgstr "indekss"
+
+#: sphinx/builders/html.py:353
+msgid "next"
+msgstr "nākošais"
+
+#: sphinx/builders/html.py:362
+msgid "previous"
+msgstr "iepriekšējs"
+
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
+msgid " (in "
+msgstr " (iekš "
+
+#: sphinx/directives/other.py:136
+msgid "Section author: "
+msgstr "Sekcijas autors: "
+
+#: sphinx/directives/other.py:138
+msgid "Module author: "
+msgstr "Moduļa autors: "
+
+#: sphinx/directives/other.py:140
+msgid "Code author: "
+msgstr "Koda autors: "
+
+#: sphinx/directives/other.py:142
+msgid "Author: "
+msgstr "Autors: "
+
+#: sphinx/directives/other.py:215
+msgid "See also"
+msgstr "Skat.arī"
+
+#: sphinx/domains/__init__.py:244
+#, python-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
+msgid "Parameters"
+msgstr "Parametri"
+
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
+msgid "Returns"
+msgstr "Atgriež"
+
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
+msgid "Return type"
+msgstr "Atgriežamais tips"
+
+#: sphinx/domains/c.py:141
+#, python-format
+msgid "%s (C function)"
+msgstr "%s (C funkcija)"
+
+#: sphinx/domains/c.py:143
+#, python-format
+msgid "%s (C member)"
+msgstr "%s (C loceklis)"
+
+#: sphinx/domains/c.py:145
+#, python-format
+msgid "%s (C macro)"
+msgstr "%s (C makross)"
+
+#: sphinx/domains/c.py:147
+#, python-format
+msgid "%s (C type)"
+msgstr "%s (C tips)"
+
+#: sphinx/domains/c.py:149
+#, python-format
+msgid "%s (C variable)"
+msgstr "%s (C mainīgais)"
+
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
+msgid "function"
+msgstr "funkcija"
+
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
+msgid "member"
+msgstr "loceklis"
+
+#: sphinx/domains/c.py:206
+msgid "macro"
+msgstr "makross"
+
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
+msgid "type"
+msgstr "tips"
+
+#: sphinx/domains/c.py:208
+msgid "variable"
+msgstr "mainīgais"
+
+#: sphinx/domains/cpp.py:904
+#, python-format
+msgid "%s (C++ class)"
+msgstr "%s (C++ klase)"
+
+#: sphinx/domains/cpp.py:919
+#, python-format
+msgid "%s (C++ type)"
+msgstr "%s (C++ tips)"
+
+#: sphinx/domains/cpp.py:938
+#, python-format
+msgid "%s (C++ member)"
+msgstr "%s (C++ loceklis)"
+
+#: sphinx/domains/cpp.py:990
+#, python-format
+msgid "%s (C++ function)"
+msgstr "%s (C++ funkcija)"
+
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
+msgid "class"
+msgstr "klase"
+
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
+#, python-format
+msgid "%s() (built-in function)"
+msgstr "%s() (iebūvēta funkcija)"
+
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
+#, python-format
+msgid "%s() (%s method)"
+msgstr "%s() (%s metods)"
+
+#: sphinx/domains/javascript.py:109
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (C++ klase)"
+
+#: sphinx/domains/javascript.py:111
+#, python-format
+msgid "%s (global variable or constant)"
+msgstr "%s (globālais mainīgais vai konstanta)"
+
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
+#, python-format
+msgid "%s (%s attribute)"
+msgstr "%s (%s atributs)"
+
+#: sphinx/domains/javascript.py:122
+msgid "Arguments"
+msgstr "Argumenti"
+
+#: sphinx/domains/javascript.py:125
+msgid "Throws"
+msgstr "Izmet"
+
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
+msgid "data"
+msgstr "dati"
+
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
+msgid "attribute"
+msgstr "atributs"
+
+#: sphinx/domains/python.py:100
+msgid "Variables"
+msgstr "Mainīgie"
+
+#: sphinx/domains/python.py:104
+msgid "Raises"
+msgstr "Ceļ"
+
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
+#, python-format
+msgid "%s() (in module %s)"
+msgstr "%s() (moduļī %s)"
+
+#: sphinx/domains/python.py:258
+#, python-format
+msgid "%s (built-in variable)"
+msgstr "%s (iebūvētais mainīgais)"
+
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
+#, python-format
+msgid "%s (in module %s)"
+msgstr "%s (moduļī %s)"
+
+#: sphinx/domains/python.py:275
+#, python-format
+msgid "%s (built-in class)"
+msgstr "%s (iebūvēta klase)"
+
+#: sphinx/domains/python.py:276
+#, python-format
+msgid "%s (class in %s)"
+msgstr "%s (klase iekš %s)"
+
+#: sphinx/domains/python.py:316
+#, python-format
+msgid "%s() (%s.%s method)"
+msgstr "%s() (%s.%s metods)"
+
+#: sphinx/domains/python.py:328
+#, python-format
+msgid "%s() (%s.%s static method)"
+msgstr "%s() (%s.%s statiskais metods)"
+
+#: sphinx/domains/python.py:331
+#, python-format
+msgid "%s() (%s static method)"
+msgstr "%s() (%s statiskais metods)"
+
+#: sphinx/domains/python.py:341
+#, python-format
+msgid "%s() (%s.%s class method)"
+msgstr "%s() (%s.%s klases metods)"
+
+#: sphinx/domains/python.py:344
+#, python-format
+msgid "%s() (%s class method)"
+msgstr "%s() (%s klases metods)"
+
+#: sphinx/domains/python.py:354
+#, python-format
+msgid "%s (%s.%s attribute)"
+msgstr "%s (%s.%s atributs)"
+
+#: sphinx/domains/python.py:434
+#, python-format
+msgid "%s (module)"
+msgstr "%s (modulis)"
+
+#: sphinx/domains/python.py:491
+msgid "Python Module Index"
+msgstr ""
+
+#: sphinx/domains/python.py:492
+msgid "modules"
+msgstr "moduļi"
+
+#: sphinx/domains/python.py:537
+msgid "Deprecated"
+msgstr "Nav ieteicams"
+
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
+msgid "exception"
+msgstr "izņēmums"
+
+#: sphinx/domains/python.py:563
+msgid "method"
+msgstr "metods"
+
+#: sphinx/domains/python.py:564
+msgid "class method"
+msgstr "klases metods"
+
+#: sphinx/domains/python.py:565
+msgid "static method"
+msgstr "statiskais metods"
+
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
+msgid "module"
+msgstr "modulis"
+
+#: sphinx/domains/python.py:695
+#, fuzzy
+msgid " (deprecated)"
+msgstr "Nav ieteicams"
+
+#: sphinx/domains/rst.py:55
+#, python-format
+msgid "%s (directive)"
+msgstr "%s (direktīva)"
+
+#: sphinx/domains/rst.py:57
+#, python-format
+msgid "%s (role)"
+msgstr "%s (role)"
+
+#: sphinx/domains/rst.py:106
+msgid "directive"
+msgstr "direktīva"
+
+#: sphinx/domains/rst.py:107
+msgid "role"
+msgstr "role"
+
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
+#, python-format
+msgid "environment variable; %s"
+msgstr "apkārtnes mainīgais; %s"
+
+#: sphinx/domains/std.py:162
+#, python-format
+msgid "%scommand line option; %s"
+msgstr "%skomandrindas opcija; %s"
+
+#: sphinx/domains/std.py:393
+msgid "glossary term"
+msgstr "glosārija termins"
+
+#: sphinx/domains/std.py:394
+msgid "grammar token"
+msgstr "gramatiskais marķieris"
+
+#: sphinx/domains/std.py:395
+msgid "reference label"
+msgstr "atsauces virsraksts"
+
+#: sphinx/domains/std.py:396
+msgid "environment variable"
+msgstr "apkārtnes mainīgais"
+
+#: sphinx/domains/std.py:397
+msgid "program option"
+msgstr "programmas opcija"
+
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
+#: sphinx/themes/basic/genindex-split.html:11
+#: sphinx/themes/basic/genindex-split.html:14
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
+msgid "Index"
+msgstr "Indekss"
+
+#: sphinx/domains/std.py:428
+msgid "Module Index"
+msgstr "Moduļu indekss"
+
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
+msgid "Search Page"
+msgstr "Atlases lapa"
+
+#: sphinx/ext/autodoc.py:1002
+#, python-format
+msgid " Bases: %s"
+msgstr " Bāzes: %s"
+
+#: sphinx/ext/autodoc.py:1038
+#, python-format
+msgid "alias of :class:`%s`"
+msgstr "aizstājvārds klasei :class:`%s`"
+
+#: sphinx/ext/todo.py:41
+msgid "Todo"
+msgstr "Jāizdara"
+
+#: sphinx/ext/todo.py:109
+#, python-format
+msgid "(The <<original entry>> is located in %s, line %d.)"
+msgstr "(<<original entry>> atrodas iekš %s, rinda %d.)"
+
+#: sphinx/ext/todo.py:117
+msgid "original entry"
+msgstr "sākotnējs ieraksts"
+
+#: sphinx/ext/viewcode.py:70
+msgid "[source]"
+msgstr "[kods]"
+
+#: sphinx/ext/viewcode.py:117
+msgid "[docs]"
+msgstr "[dokumenti]"
+
+#: sphinx/ext/viewcode.py:131
+msgid "Module code"
+msgstr "Moduļa teksts"
+
+#: sphinx/ext/viewcode.py:137
+#, python-format
+msgid "<h1>Source code for %s</h1>"
+msgstr "<h1>%s izejas teksts</h1>"
+
+#: sphinx/ext/viewcode.py:164
+msgid "Overview: module code"
+msgstr "Apskats: moduļa teksts"
+
+#: sphinx/ext/viewcode.py:165
+msgid "<h1>All modules for which code is available</h1>"
+msgstr "<h1>Visi moduļi, kuriem ir izejas teksti</h1>"
+
+#: sphinx/locale/__init__.py:155
+msgid "Attention"
+msgstr "Uzmanību"
+
+#: sphinx/locale/__init__.py:156
+msgid "Caution"
+msgstr "Uzmanies"
+
+#: sphinx/locale/__init__.py:157
+msgid "Danger"
+msgstr "Bīstami"
+
+#: sphinx/locale/__init__.py:158
+msgid "Error"
+msgstr "Kļūda"
+
+#: sphinx/locale/__init__.py:159
+msgid "Hint"
+msgstr "Mājiens"
+
+#: sphinx/locale/__init__.py:160
+msgid "Important"
+msgstr "Svarīgi"
+
+#: sphinx/locale/__init__.py:161
+msgid "Note"
+msgstr "Piezīme"
+
+#: sphinx/locale/__init__.py:162
+msgid "See Also"
+msgstr "Skat.arī"
+
+#: sphinx/locale/__init__.py:163
+msgid "Tip"
+msgstr "Padoms"
+
+#: sphinx/locale/__init__.py:164
+msgid "Warning"
+msgstr "Brīdinājums"
+
+#: sphinx/locale/__init__.py:168
+#, python-format
+msgid "New in version %s"
+msgstr "Jauns versijā %s"
+
+#: sphinx/locale/__init__.py:169
+#, python-format
+msgid "Changed in version %s"
+msgstr "Mainīts versijā %s"
+
+#: sphinx/locale/__init__.py:170
+#, python-format
+msgid "Deprecated since version %s"
+msgstr "Neieteicams no versijas %s"
+
+#: sphinx/locale/__init__.py:176
+msgid "keyword"
+msgstr "atslēgas vārds"
+
+#: sphinx/locale/__init__.py:177
+msgid "operator"
+msgstr "operators"
+
+#: sphinx/locale/__init__.py:178
+msgid "object"
+msgstr "objekts"
+
+#: sphinx/locale/__init__.py:180
+msgid "statement"
+msgstr "priekšraksts"
+
+#: sphinx/locale/__init__.py:181
+msgid "built-in function"
+msgstr "iebūvēta funkcija"
+
+#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10
+#: sphinx/themes/basic/localtoc.html:11
+msgid "Table Of Contents"
+msgstr "Saturs"
+
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
+msgid "Search"
+msgstr "Meklēt"
+
+#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15
+msgid "Go"
+msgstr "Izpildīt"
+
+#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20
+msgid "Enter search terms or a module, class or function name."
+msgstr "Ievadiet meklējamus terminus vai moduļa, klases vai funkcijas vārdu."
+
+#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14
+msgid "Show Source"
+msgstr "Rādīt izejas tekstu"
+
+#: sphinx/themes/basic/defindex.html:11
+msgid "Overview"
+msgstr "Apskats"
+
+#: sphinx/themes/basic/defindex.html:20
+msgid "Indices and tables:"
+msgstr "Indeksi un tabulas:"
+
+#: sphinx/themes/basic/defindex.html:23
+msgid "Complete Table of Contents"
+msgstr "Pilns saturs"
+
+#: sphinx/themes/basic/defindex.html:24
+msgid "lists all sections and subsections"
+msgstr "rāda visas sekcijas un apakšsekcijas"
+
+#: sphinx/themes/basic/defindex.html:26
+msgid "search this documentation"
+msgstr "meklēt šajā dokumentācijā"
+
+#: sphinx/themes/basic/defindex.html:28
+msgid "Global Module Index"
+msgstr "Vispārējs moduļu indekss"
+
+#: sphinx/themes/basic/defindex.html:29
+msgid "quick access to all modules"
+msgstr "ātra piekļuve visiem moduliem"
+
+#: sphinx/themes/basic/defindex.html:31
+msgid "all functions, classes, terms"
+msgstr "visas funkcijas, klases un termini"
+
+#: sphinx/themes/basic/genindex-single.html:35
+#, python-format
+msgid "Index &ndash; %(key)s"
+msgstr "Indekss &ndash; %(key)s"
+
+#: sphinx/themes/basic/genindex-single.html:63
+#: sphinx/themes/basic/genindex-split.html:24
+#: sphinx/themes/basic/genindex-split.html:38
+#: sphinx/themes/basic/genindex.html:74
+msgid "Full index on one page"
+msgstr "Pilns indekss vienā lappusē"
+
+#: sphinx/themes/basic/genindex-split.html:16
+msgid "Index pages by letter"
+msgstr "Lappušu indekss pēc burtiem"
+
+#: sphinx/themes/basic/genindex-split.html:25
+msgid "can be huge"
+msgstr "var būt milzīgs"
+
+#: sphinx/themes/basic/layout.html:29
+msgid "Navigation"
+msgstr "Navigācija"
+
+#: sphinx/themes/basic/layout.html:122
+#, python-format
+msgid "Search within %(docstitle)s"
+msgstr "Meklēt iekš %(docstitle)s"
+
+#: sphinx/themes/basic/layout.html:131
+msgid "About these documents"
+msgstr "Par šiem dokumentiem"
+
+#: sphinx/themes/basic/layout.html:140
+msgid "Copyright"
+msgstr "Copyright"
+
+#: sphinx/themes/basic/layout.html:189
+#, python-format
+msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
+msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
+
+#: sphinx/themes/basic/layout.html:191
+#, python-format
+msgid "&copy; Copyright %(copyright)s."
+msgstr "&copy; Copyright %(copyright)s."
+
+#: sphinx/themes/basic/layout.html:195
+#, python-format
+msgid "Last updated on %(last_updated)s."
+msgstr "Pēdējas izmaiņas %(last_updated)s."
+
+#: sphinx/themes/basic/layout.html:198
+#, python-format
+msgid ""
+"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
+msgstr ""
+"Sagatavots izmantojot <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
+
+#: sphinx/themes/basic/opensearch.xml:4
+#, python-format
+msgid "Search %(docstitle)s"
+msgstr "%(docstitle)s meklēšana"
+
+#: sphinx/themes/basic/relations.html:11
+msgid "Previous topic"
+msgstr "iepriekšēja tēma"
+
+#: sphinx/themes/basic/relations.html:13
+msgid "previous chapter"
+msgstr "iepriekšēja sadaļa"
+
+#: sphinx/themes/basic/relations.html:16
+msgid "Next topic"
+msgstr "nākoša tēma"
+
+#: sphinx/themes/basic/relations.html:18
+msgid "next chapter"
+msgstr "nākoša sadaļa"
+
+#: sphinx/themes/basic/search.html:24
+msgid ""
+"Please activate JavaScript to enable the search\n"
+" functionality."
+msgstr "Lai iespējotu meklēšanu, lūdzu aktivizēt JavaScript."
+
+#: sphinx/themes/basic/search.html:29
+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 ""
+"Šeit Jūs varat meklēt šajos dokumentos. Norādiet meklējamus vārdus\n"
+" ievada lauka un uzklikšķiniet pogu \"meklēt\". Lūdzu ievērojiet,\n"
+" ka meklēšanas programma atradīs tikai tos dokumentus, kuros ir\n"
+" visi ievadītie vārdi. Dokumenti, kuros ir tikai daļa no ievadītiem\n"
+" vārdiem, netiks atlasīti."
+
+#: sphinx/themes/basic/search.html:36
+msgid "search"
+msgstr "meklēt"
+
+#: sphinx/themes/basic/search.html:40
+msgid "Search Results"
+msgstr "Atlases rezultāti"
+
+#: sphinx/themes/basic/search.html:42
+msgid "Your search did not match any results."
+msgstr "Nav rezultātu, atbilstošu Jūsu atlasei."
+
+#: sphinx/themes/basic/searchbox.html:12
+msgid "Quick search"
+msgstr "Ātra meklēšana"
+
+#: sphinx/themes/basic/sourcelink.html:11
+msgid "This Page"
+msgstr "Šī lappuse"
+
+#: 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 "Izmaiņas versijā %(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 "Automātiski sagatavots izmaiņu saraksts versijai %(version)s"
+
+#: sphinx/themes/basic/changes/versionchanges.html:18
+msgid "Library changes"
+msgstr "Bibliotēkas izmaiņas"
+
+#: sphinx/themes/basic/changes/versionchanges.html:23
+msgid "C API changes"
+msgstr "Izmaiņas iekš C API"
+
+#: sphinx/themes/basic/changes/versionchanges.html:25
+msgid "Other changes"
+msgstr "Citas izmaiņas"
+
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
+msgid "Permalink to this headline"
+msgstr "Pastāvīga norāde šo virsrakstu"
+
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
+msgid "Permalink to this definition"
+msgstr "Pastāvīga norāde uz šo definīciju"
+
+#: sphinx/themes/basic/static/doctools.js:189
+msgid "Hide Search Matches"
+msgstr "Paslēpt atlases vārdus"
+
+#: sphinx/themes/default/static/sidebar.js:69
+msgid "Expand sidebar"
+msgstr "Izplest sānjoslu"
+
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
+msgid "Collapse sidebar"
+msgstr "Savērst sānjoslu"
+
+#: sphinx/themes/haiku/layout.html:26
+msgid "Contents"
+msgstr "Saturs"
+
+#: sphinx/writers/latex.py:177
+msgid "Release"
+msgstr "Izlaidums"
+
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
+msgid "Footnotes"
+msgstr "Vēres"
+
+#: sphinx/writers/latex.py:676
+msgid "continued from previous page"
+msgstr "turpinājums no iepriekšējās lappuses"
+
+#: sphinx/writers/latex.py:681
+msgid "Continued on next page"
+msgstr "Turpnājums nākošā lappusē"
+
+#: sphinx/writers/text.py:437
+msgid "[image]"
+msgstr "[attēls]"
+
diff --git a/sphinx/locale/ne/LC_MESSAGES/sphinx.js b/sphinx/locale/ne/LC_MESSAGES/sphinx.js
new file mode 100644
index 00000000..d45d217e
--- /dev/null
+++ b/sphinx/locale/ne/LC_MESSAGES/sphinx.js
@@ -0,0 +1 @@
+Documentation.addTranslations({"locale": "ne", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "\u0916\u094b\u091c\u0947\u0915\u094b \u0928\u0924\u093f\u091c\u093e\u0939\u0930\u0941 \u0932\u0941\u0915\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d", "Permalink to this definition": "\u092f\u094b \u0905\u0930\u094d\u0925\u0915\u094b \u0932\u093e\u0917\u093f \u092a\u0930\u094d\u092e\u093e\u0932\u093f\u0928\u094d\u0915", "Expand sidebar": "\u0938\u093e\u0907\u0921\u092c\u0930 \u0920\u0941\u0932\u094b \u092c\u0928\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d", "Permalink to this headline": "\u092f\u094b \u0936\u093f\u0930\u094d\u0937\u0915\u0915\u094b \u0932\u093e\u0917\u093f \u092a\u0930\u094d\u092e\u093e\u0932\u093f\u0928\u094d\u0915 \u0964 ", "Collapse sidebar": "\u0938\u093e\u0907\u0921\u092c\u0930 \u0938\u093e\u0928\u094b \u092c\u0928\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d"}}); \ No newline at end of file
diff --git a/sphinx/locale/ne/LC_MESSAGES/sphinx.mo b/sphinx/locale/ne/LC_MESSAGES/sphinx.mo
new file mode 100644
index 00000000..05be753d
--- /dev/null
+++ b/sphinx/locale/ne/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/ne/LC_MESSAGES/sphinx.po b/sphinx/locale/ne/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..5cb11e20
--- /dev/null
+++ b/sphinx/locale/ne/LC_MESSAGES/sphinx.po
@@ -0,0 +1,768 @@
+# Nepali (Nepal) translations for Sphinx.
+# Copyright (C) 2011 ORGANIZATION
+# This file is distributed under the same license as the Sphinx project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx 1.1pre/47a94f723e80+\n"
+"Report-Msgid-Bugs-To: sharma.arati11@gmail.com\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-09-21 10:13+0200\n"
+"Last-Translator: Tika Karki <tikaraj.karki@olenepal.org>\n"
+"Language-Team: ne_NP <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
+#, python-format
+msgid "%B %d, %Y"
+msgstr "%B %d, %Y"
+
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr "%s हेर्नुहोस्"
+
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr "%s पनि हेर्नुहोस् "
+
+#: sphinx/roles.py:175
+#, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
+
+#: sphinx/builders/changes.py:73
+msgid "Builtins"
+msgstr "बिइल्टिन्स"
+
+#: sphinx/builders/changes.py:75
+msgid "Module level"
+msgstr "मडुलको तह"
+
+#: sphinx/builders/html.py:274
+#, python-format
+msgid "%b %d, %Y"
+msgstr "%b %d, %Y"
+
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
+msgid "General Index"
+msgstr "सामान्य अनुसुची"
+
+#: sphinx/builders/html.py:293
+msgid "index"
+msgstr "अनुसुची"
+
+#: sphinx/builders/html.py:353
+msgid "next"
+msgstr "पछिल्लो"
+
+#: sphinx/builders/html.py:362
+msgid "previous"
+msgstr "अघिल्लो"
+
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
+msgid " (in "
+msgstr "(in"
+
+#: sphinx/directives/other.py:136
+msgid "Section author: "
+msgstr "सेक्सनको लेखक"
+
+#: sphinx/directives/other.py:138
+msgid "Module author: "
+msgstr "मडुलको लेखक"
+
+#: sphinx/directives/other.py:140
+msgid "Code author: "
+msgstr "Codeको लेखक "
+
+#: sphinx/directives/other.py:142
+msgid "Author: "
+msgstr "लेखक"
+
+#: sphinx/directives/other.py:215
+msgid "See also"
+msgstr "पनि हेर्नुहोस"
+
+#: sphinx/domains/__init__.py:244
+#, python-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
+msgid "Parameters"
+msgstr "Parameters"
+
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
+msgid "Returns"
+msgstr "Returns"
+
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
+msgid "Return type"
+msgstr "Return type"
+
+#: sphinx/domains/c.py:141
+#, python-format
+msgid "%s (C function)"
+msgstr "%s (C कार्य)"
+
+#: sphinx/domains/c.py:143
+#, python-format
+msgid "%s (C member)"
+msgstr "%s (C सदस्य)"
+
+#: sphinx/domains/c.py:145
+#, python-format
+msgid "%s (C macro)"
+msgstr "%s (C बृहत)"
+
+#: sphinx/domains/c.py:147
+#, python-format
+msgid "%s (C type)"
+msgstr "%s (C किसिम)"
+
+#: sphinx/domains/c.py:149
+#, python-format
+msgid "%s (C variable)"
+msgstr "%s (C चल)"
+
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
+msgid "function"
+msgstr "फन्क्सन"
+
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
+msgid "member"
+msgstr "सदस्य"
+
+#: sphinx/domains/c.py:206
+msgid "macro"
+msgstr "बृहत"
+
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
+msgid "type"
+msgstr "किसिम"
+
+#: sphinx/domains/c.py:208
+msgid "variable"
+msgstr "चल"
+
+#: sphinx/domains/cpp.py:904
+#, python-format
+msgid "%s (C++ class)"
+msgstr "%s (C++ कक्षा)"
+
+#: sphinx/domains/cpp.py:919
+#, python-format
+msgid "%s (C++ type)"
+msgstr "%s (C++ किसिम)"
+
+#: sphinx/domains/cpp.py:938
+#, python-format
+msgid "%s (C++ member)"
+msgstr "%s (C++ सदस्य)"
+
+#: sphinx/domains/cpp.py:990
+#, python-format
+msgid "%s (C++ function)"
+msgstr "%s (C++कार्य)"
+
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
+msgid "class"
+msgstr "कक्षा"
+
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
+#, python-format
+msgid "%s() (built-in function)"
+msgstr "%s() (built-in function)"
+
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
+#, python-format
+msgid "%s() (%s method)"
+msgstr "%s() (%s विधी)"
+
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (कक्षा)"
+
+#: sphinx/domains/javascript.py:111
+#, python-format
+msgid "%s (global variable or constant)"
+msgstr "%s (global variable or constant)"
+
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
+#, python-format
+msgid "%s (%s attribute)"
+msgstr "%s (%s attribute)"
+
+#: sphinx/domains/javascript.py:122
+msgid "Arguments"
+msgstr "Arguments"
+
+#: sphinx/domains/javascript.py:125
+msgid "Throws"
+msgstr "Throws"
+
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
+msgid "data"
+msgstr "data"
+
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
+msgid "attribute"
+msgstr "attribute"
+
+#: sphinx/domains/python.py:100
+msgid "Variables"
+msgstr "चलहरू"
+
+#: sphinx/domains/python.py:104
+msgid "Raises"
+msgstr "Raises"
+
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
+#, python-format
+msgid "%s() (in module %s)"
+msgstr "%s() (in मडुल %s)"
+
+#: sphinx/domains/python.py:258
+#, python-format
+msgid "%s (built-in variable)"
+msgstr "%s (built-in चल)"
+
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
+#, python-format
+msgid "%s (in module %s)"
+msgstr "%s (in मडुल %s)"
+
+#: sphinx/domains/python.py:275
+#, python-format
+msgid "%s (built-in class)"
+msgstr "%s (built-in कक्षा)"
+
+#: sphinx/domains/python.py:276
+#, python-format
+msgid "%s (class in %s)"
+msgstr "%s (कक्षा in %s)"
+
+#: sphinx/domains/python.py:316
+#, python-format
+msgid "%s() (%s.%s method)"
+msgstr "%s() (%s.%s विधी)"
+
+#: sphinx/domains/python.py:328
+#, python-format
+msgid "%s() (%s.%s static method)"
+msgstr "%s() (%s.%s static विधी)"
+
+#: sphinx/domains/python.py:331
+#, python-format
+msgid "%s() (%s static method)"
+msgstr "%s() (%s static विधी)"
+
+#: sphinx/domains/python.py:341
+#, python-format
+msgid "%s() (%s.%s class method)"
+msgstr "%s() (%s.%s कक्षा विधी)"
+
+#: sphinx/domains/python.py:344
+#, python-format
+msgid "%s() (%s class method)"
+msgstr "%s() (%s कक्षा विधी)"
+
+#: sphinx/domains/python.py:354
+#, python-format
+msgid "%s (%s.%s attribute)"
+msgstr "%s (%s.%s attribute)"
+
+#: sphinx/domains/python.py:434
+#, python-format
+msgid "%s (module)"
+msgstr "%s (मडुल)"
+
+#: sphinx/domains/python.py:491
+msgid "Python Module Index"
+msgstr "Python Module Index"
+
+#: sphinx/domains/python.py:492
+msgid "modules"
+msgstr "modules"
+
+#: sphinx/domains/python.py:537
+msgid "Deprecated"
+msgstr "Deprecated"
+
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
+msgid "exception"
+msgstr "अपबाद"
+
+#: sphinx/domains/python.py:563
+msgid "method"
+msgstr "विधी"
+
+#: sphinx/domains/python.py:564
+msgid "class method"
+msgstr "कक्षा विधी"
+
+#: sphinx/domains/python.py:565
+msgid "static method"
+msgstr "static विधी"
+
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
+msgid "module"
+msgstr "मडुल"
+
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr "(deprecated)"
+
+#: sphinx/domains/rst.py:55
+#, python-format
+msgid "%s (directive)"
+msgstr "%s (निर्देशिक)"
+
+#: sphinx/domains/rst.py:57
+#, python-format
+msgid "%s (role)"
+msgstr "%s (भूमिका)"
+
+#: sphinx/domains/rst.py:106
+msgid "directive"
+msgstr "निर्देशिक"
+
+#: sphinx/domains/rst.py:107
+msgid "role"
+msgstr "भूमिका"
+
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
+#, python-format
+msgid "environment variable; %s"
+msgstr "environment variable; %s"
+
+#: sphinx/domains/std.py:162
+#, python-format
+msgid "%scommand line option; %s"
+msgstr "%scommand line option; %s"
+
+#: sphinx/domains/std.py:393
+msgid "glossary term"
+msgstr "शब्द-अर्थमा भएको"
+
+#: sphinx/domains/std.py:394
+msgid "grammar token"
+msgstr "grammar token"
+
+#: sphinx/domains/std.py:395
+msgid "reference label"
+msgstr "सन्दर्व सामग्री"
+
+#: sphinx/domains/std.py:396
+msgid "environment variable"
+msgstr "environment variable"
+
+#: sphinx/domains/std.py:397
+msgid "program option"
+msgstr "कार्यक्रमका बिकल्प"
+
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
+#: sphinx/themes/basic/genindex-split.html:11
+#: sphinx/themes/basic/genindex-split.html:14
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
+msgid "Index"
+msgstr "अनुसुची"
+
+#: sphinx/domains/std.py:428
+msgid "Module Index"
+msgstr "मडुल अनुसुची"
+
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
+msgid "Search Page"
+msgstr "पानामा खोज्नुहोस्"
+
+#: sphinx/ext/autodoc.py:1002
+#, python-format
+msgid " Bases: %s"
+msgstr "Bases: %s"
+
+#: sphinx/ext/autodoc.py:1038
+#, python-format
+msgid "alias of :class:`%s`"
+msgstr "alias of :class:`%s`"
+
+#: sphinx/ext/todo.py:41
+msgid "Todo"
+msgstr "Todo"
+
+#: sphinx/ext/todo.py:109
+#, python-format
+msgid "(The <<original entry>> is located in %s, line %d.)"
+msgstr "(<<original entry>> यहाँ %s, line %d रहेको छ । "
+
+#: sphinx/ext/todo.py:117
+msgid "original entry"
+msgstr "मौलिक इन्ट्री"
+
+#: sphinx/ext/viewcode.py:70
+msgid "[source]"
+msgstr "[स्रोत]"
+
+#: sphinx/ext/viewcode.py:117
+msgid "[docs]"
+msgstr "[docs]"
+
+#: sphinx/ext/viewcode.py:131
+msgid "Module code"
+msgstr "Module code"
+
+#: sphinx/ext/viewcode.py:137
+#, python-format
+msgid "<h1>Source code for %s</h1>"
+msgstr "<h1>Source code for %s</h1>"
+
+#: sphinx/ext/viewcode.py:164
+msgid "Overview: module code"
+msgstr "पुनरावलोकन: module code"
+
+#: sphinx/ext/viewcode.py:165
+msgid "<h1>All modules for which code is available</h1>"
+msgstr "<h1>All modules for which code is available</h1>"
+
+#: sphinx/locale/__init__.py:155
+msgid "Attention"
+msgstr "ध्यानाकर्षण"
+
+#: sphinx/locale/__init__.py:156
+msgid "Caution"
+msgstr "होसियार "
+
+#: sphinx/locale/__init__.py:157
+msgid "Danger"
+msgstr "खतरा"
+
+#: sphinx/locale/__init__.py:158
+msgid "Error"
+msgstr "गलत"
+
+#: sphinx/locale/__init__.py:159
+msgid "Hint"
+msgstr "सङ्केत"
+
+#: sphinx/locale/__init__.py:160
+msgid "Important"
+msgstr "जरुरी"
+
+#: sphinx/locale/__init__.py:161
+msgid "Note"
+msgstr "टिप्पणी"
+
+#: sphinx/locale/__init__.py:162
+msgid "See Also"
+msgstr "पनि हेर्नुहोस्"
+
+#: sphinx/locale/__init__.py:163
+msgid "Tip"
+msgstr "Tip"
+
+#: sphinx/locale/__init__.py:164
+msgid "Warning"
+msgstr "साबधान"
+
+#: sphinx/locale/__init__.py:168
+#, python-format
+msgid "New in version %s"
+msgstr "भर्सन %s मा नयाँ"
+
+#: sphinx/locale/__init__.py:169
+#, python-format
+msgid "Changed in version %s"
+msgstr "भर्सन %s मा बदलिएको"
+
+#: sphinx/locale/__init__.py:170
+#, python-format
+msgid "Deprecated since version %s"
+msgstr "Deprecated since version %s"
+
+#: sphinx/locale/__init__.py:176
+msgid "keyword"
+msgstr "मुख्य शब्द"
+
+#: sphinx/locale/__init__.py:177
+msgid "operator"
+msgstr "सन्चालक"
+
+#: sphinx/locale/__init__.py:178
+msgid "object"
+msgstr "object"
+
+#: sphinx/locale/__init__.py:180
+msgid "statement"
+msgstr "भनाई"
+
+#: sphinx/locale/__init__.py:181
+msgid "built-in function"
+msgstr "built-in फन्क्सन"
+
+#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10
+#: sphinx/themes/basic/localtoc.html:11
+msgid "Table Of Contents"
+msgstr "विषयसूची"
+
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
+msgid "Search"
+msgstr "खोज्नुहोस् "
+
+#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15
+msgid "Go"
+msgstr "जानुहोस्"
+
+#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20
+msgid "Enter search terms or a module, class or function name."
+msgstr "खोज्ने टर्मस् अथवा एक मडुल्, कक्षा अथवा फन्क्सनको नाम लेख्नुहोस "
+
+#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14
+msgid "Show Source"
+msgstr "स्रोत देखाउनुहोस् "
+
+#: sphinx/themes/basic/defindex.html:11
+msgid "Overview"
+msgstr "पुनरावलोकन "
+
+#: sphinx/themes/basic/defindex.html:20
+msgid "Indices and tables:"
+msgstr "इन्डीसीस्स र तलिका"
+
+#: sphinx/themes/basic/defindex.html:23
+msgid "Complete Table of Contents"
+msgstr "पुरा विषयसूची"
+
+#: sphinx/themes/basic/defindex.html:24
+msgid "lists all sections and subsections"
+msgstr "सबै सेक्सन र सवसेक्सन देखाउनुहोस्"
+
+#: sphinx/themes/basic/defindex.html:26
+msgid "search this documentation"
+msgstr "यो डकुमेन्ट खोज्नुहोस्"
+
+#: sphinx/themes/basic/defindex.html:28
+msgid "Global Module Index"
+msgstr "ग्लोबल मडुल अनुसुची"
+
+#: sphinx/themes/basic/defindex.html:29
+msgid "quick access to all modules"
+msgstr "सबै मोदुलेसमा छिटै जानुहोस्"
+
+#: sphinx/themes/basic/defindex.html:31
+msgid "all functions, classes, terms"
+msgstr "सबै फन्क्सनस्, कक्षाहरू र टर्मस्"
+
+#: sphinx/themes/basic/genindex-single.html:35
+#, python-format
+msgid "Index &ndash; %(key)s"
+msgstr "Index &ndash; %(key)s"
+
+#: sphinx/themes/basic/genindex-single.html:63
+#: sphinx/themes/basic/genindex-split.html:24
+#: sphinx/themes/basic/genindex-split.html:38
+#: sphinx/themes/basic/genindex.html:74
+msgid "Full index on one page"
+msgstr "पुरा अनुसुची एकै पानामा"
+
+#: sphinx/themes/basic/genindex-split.html:16
+msgid "Index pages by letter"
+msgstr "अक्षर अनुसार अनुसुचीका पाना"
+
+#: sphinx/themes/basic/genindex-split.html:25
+msgid "can be huge"
+msgstr "धेरै ठुलो हुन सक्छ"
+
+#: sphinx/themes/basic/layout.html:29
+msgid "Navigation"
+msgstr "नेभिगेसन "
+
+#: sphinx/themes/basic/layout.html:122
+#, python-format
+msgid "Search within %(docstitle)s"
+msgstr "भित्र-भित्रै खोज्नुहोस्"
+
+#: sphinx/themes/basic/layout.html:131
+msgid "About these documents"
+msgstr "यी डकुमेन्टहरुको बारेमा"
+
+#: sphinx/themes/basic/layout.html:140
+msgid "Copyright"
+msgstr "कपिराइट "
+
+#: sphinx/themes/basic/layout.html:189
+#, python-format
+msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
+msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
+
+#: sphinx/themes/basic/layout.html:191
+#, python-format
+msgid "&copy; Copyright %(copyright)s."
+msgstr "&copy; Copyright %(copyright)s."
+
+#: sphinx/themes/basic/layout.html:195
+#, python-format
+msgid "Last updated on %(last_updated)s."
+msgstr "यो भन्दा अगाडी %(last_updated)s मा अपडेट भएको"
+
+#: sphinx/themes/basic/layout.html:198
+#, python-format
+msgid ""
+"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
+msgstr "<a href=\"http://sphinx.pocoo.org/\">Sphinx</a> प्रयोग गरेर बनाइएको"
+
+#: sphinx/themes/basic/opensearch.xml:4
+#, python-format
+msgid "Search %(docstitle)s"
+msgstr "खोज्नुहोस्"
+
+#: sphinx/themes/basic/relations.html:11
+msgid "Previous topic"
+msgstr "अघिल्लो विषय "
+
+#: sphinx/themes/basic/relations.html:13
+msgid "previous chapter"
+msgstr "अघिल्लो खन्ड"
+
+#: sphinx/themes/basic/relations.html:16
+msgid "Next topic"
+msgstr "पछिल्लो विषय"
+
+#: sphinx/themes/basic/relations.html:18
+msgid "next chapter"
+msgstr "पछिल्लो खन्ड"
+
+#: sphinx/themes/basic/search.html:24
+msgid ""
+"Please activate JavaScript to enable the search\n"
+" functionality."
+msgstr "खोज्ने कार्य आगाडी बढाउनको लागि जाभास्कृप्ट चलाईदिनुहोस "
+
+#: sphinx/themes/basic/search.html:29
+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 ""
+"यहाँबाट तपाईंले यी ड्कुमेन्टहरु खोज्नसक्नु हुन्छ । खोज्न शब्दहरु\n"
+"तलको बक्समा लेख्‍नुहोस र \"खोज्नुहोस्\"थिच्नुहोस । खोज्नुहोस्\n"
+"फन्क्सनले आफै सबै शब्दहरु खोज्छ । \n"
+"थोरै शब्दहरु भएको पानाहरु नतिजामा देखिन्न । "
+
+#: sphinx/themes/basic/search.html:36
+msgid "search"
+msgstr "खोज्नुहोस्"
+
+#: sphinx/themes/basic/search.html:40
+msgid "Search Results"
+msgstr "खोजेको नतिजा"
+
+#: sphinx/themes/basic/search.html:42
+msgid "Your search did not match any results."
+msgstr "तपाईंले खोजेको कुरा कुनै नतिजासँग मिलेन "
+
+#: sphinx/themes/basic/searchbox.html:12
+msgid "Quick search"
+msgstr "छिट्टो खोज्नुहोस्"
+
+#: sphinx/themes/basic/sourcelink.html:11
+msgid "This Page"
+msgstr "यो पाना"
+
+#: 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 "%(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 "भर्सन %(version)s मा भएका फरक हरु आफै जेनेरेट भए "
+
+#: sphinx/themes/basic/changes/versionchanges.html:18
+msgid "Library changes"
+msgstr "लाईब्रेरीका परिवर्तनहरु"
+
+#: sphinx/themes/basic/changes/versionchanges.html:23
+msgid "C API changes"
+msgstr "C API का परिवर्तनहरु "
+
+#: sphinx/themes/basic/changes/versionchanges.html:25
+msgid "Other changes"
+msgstr "अरु परिवर्तनहरु "
+
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
+msgid "Permalink to this headline"
+msgstr "यो शिर्षकको लागि पर्मालिन्क । "
+
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
+msgid "Permalink to this definition"
+msgstr "यो अर्थको लागि पर्मालिन्क"
+
+#: sphinx/themes/basic/static/doctools.js:189
+msgid "Hide Search Matches"
+msgstr "खोजेको नतिजाहरु लुकाउनुहोस्"
+
+#: sphinx/themes/default/static/sidebar.js:69
+msgid "Expand sidebar"
+msgstr "साइडबर ठुलो बनाउनुहोस्"
+
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
+msgid "Collapse sidebar"
+msgstr "साइडबर सानो बनाउनुहोस्"
+
+#: sphinx/themes/haiku/layout.html:26
+msgid "Contents"
+msgstr "विषयसूची"
+
+#: sphinx/writers/latex.py:177
+msgid "Release"
+msgstr "रीलीज"
+
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
+msgid "Footnotes"
+msgstr "फूट्नोट्स"
+
+#: sphinx/writers/latex.py:676
+msgid "continued from previous page"
+msgstr "अघिल्लो पानासँग जोडीएको"
+
+#: sphinx/writers/latex.py:681
+msgid "Continued on next page"
+msgstr "अर्को पानासँग जोडीएको"
+
+#: sphinx/writers/text.py:437
+msgid "[image]"
+msgstr "[चित्र]"
+
diff --git a/sphinx/locale/nl/LC_MESSAGES/sphinx.js b/sphinx/locale/nl/LC_MESSAGES/sphinx.js
index e21ff948..e33900af 100644
--- a/sphinx/locale/nl/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/nl/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "nl", "plural_expr": "(n != 1)", "messages": {"Search Results": "Zoekresultaten", "Preparing search...": "Het zoeken wordt voorbereid...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Uw zoekopdracht leverde geen resultaten op. Controleer of alle woorden correct gespeld zijn en dat u genoeg categori\u00ebn hebt geselecteerd.", "Search finished, found %s page(s) matching the search query.": "Zoeken voltooid, %s pagina(s) gevonden.", ", in ": ", in ", "Expand sidebar": "", "Permalink to this headline": "Permalink naar deze titel", "Searching": "Zoeken", "Collapse sidebar": "", "Permalink to this definition": "Permalink naar deze definitie", "Hide Search Matches": "Zoekresultaten verbergen"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "nl", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Zoekresultaten verbergen", "Permalink to this definition": "Permalink naar deze definitie", "Expand sidebar": "", "Permalink to this headline": "Permalink naar deze titel", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/nl/LC_MESSAGES/sphinx.mo b/sphinx/locale/nl/LC_MESSAGES/sphinx.mo
index 2002607f..05ee5662 100644
--- a/sphinx/locale/nl/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/nl/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/nl/LC_MESSAGES/sphinx.po b/sphinx/locale/nl/LC_MESSAGES/sphinx.po
index 8683db4f..473baadc 100644
--- a/sphinx/locale/nl/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/nl/LC_MESSAGES/sphinx.po
@@ -6,412 +6,406 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 0.5\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2009-08-06 23:04+0200\n"
-"PO-Revision-Date: 2010-05-29 16:22+0100\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
"Last-Translator: Marijn van der Zee <marijn.vanderzee@gmail.com>\n"
"Language-Team: nl <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106
-#: sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr "%s %s documentatie"
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%d. %B %Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr "zie %s"
+
+#: sphinx/environment.py:1628
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "see also %s"
+msgstr "zie %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/roles.py:175
+#, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
+
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Builtins"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Moduleniveau"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d.%b.%Y"
-#: sphinx/builders/html.py:285
-#: sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Algemene index"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "Index"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "volgende"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "vorige"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Auteur van deze sectie: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Auteur van deze module: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
#, fuzzy
msgid "Code author: "
msgstr "Auteur van deze module: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Auteur: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Zie ook"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51
-#: sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Parameters"
-#: sphinx/domains/c.py:54
-#: sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Returns"
-#: sphinx/domains/c.py:56
-#: sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Return type"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (C-functie)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (C member)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (C-macro)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (C type)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (C-variabele)"
-#: sphinx/domains/c.py:171
-#: sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166
-#: sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "functie"
-#: sphinx/domains/c.py:172
-#: sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "member"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr "macro"
-#: sphinx/domains/c.py:174
-#: sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "type"
-#: sphinx/domains/c.py:175
-#, fuzzy
+#: sphinx/domains/c.py:208
msgid "variable"
msgstr "variabele"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++ klasse)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ type)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ member)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ functie)"
-#: sphinx/domains/cpp.py:1030
-#: sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr "klasse"
-#: sphinx/domains/javascript.py:117
-#: sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (geïntegreerde functie)"
-#: sphinx/domains/javascript.py:118
-#: sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s methode)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (klasse)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr "%s (globale variabele of constante)"
-#: sphinx/domains/javascript.py:122
-#: sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s attribuut)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
#, fuzzy
msgid "Arguments"
msgstr "Parameters"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167
-#: sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168
-#: sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "attribuut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
#, fuzzy
msgid "Variables"
msgstr "Variabele"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Veroorzaakt"
-#: sphinx/domains/python.py:222
-#: sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291
-#: sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (in module %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (geïntegreerde variabele)"
-#: sphinx/domains/python.py:226
-#: sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (in module %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (geïntegreerde klasse)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (klasse in %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s methode)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s statische methode)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s statische methode)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s methode)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s methode)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s attribuut)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Platformen: "
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (module)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
#, fuzzy
msgid "Python Module Index"
msgstr "Module-index"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "modules"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Verouderd"
-#: sphinx/domains/python.py:500
-#: sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "exceptie"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
-msgstr "%s() (%s methode)"
+msgstr ""
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "statische methode"
-#: sphinx/domains/python.py:505
-#: sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "module"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (verouderd)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
+#: sphinx/domains/rst.py:57
#, fuzzy, python-format
msgid "%s (role)"
-msgstr "%s (module)"
+msgstr "%s (rolle)"
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
+#: sphinx/domains/rst.py:107
#, fuzzy
msgid "role"
-msgstr "module"
+msgstr "rolle"
-#: sphinx/domains/std.py:68
-#: sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "omgevingsvariabele; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%sopdrachtregel optie; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr ""
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr ""
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr ""
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "omgevingsvariabele"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360
-#: sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11
-#: sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50
-#: sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Index"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Module-index"
-#: sphinx/domains/std.py:362
-#: sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Zoekpagina"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -429,132 +423,125 @@ msgstr "(Het <<originele item>> is te vinden in %s, regel %d.)"
msgid "original entry"
msgstr "originele item"
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
-#, fuzzy
+#: sphinx/ext/viewcode.py:131
msgid "Module code"
-msgstr "module"
+msgstr ""
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr ""
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr ""
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr ""
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Let op"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Pas op"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Gevaar"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Fout"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Hint"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Belangrijk"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Notitie"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Zie ook"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Tip"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Waarschuwing"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Nieuw in versie %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Veranderd in versie %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Verouderd sinds versie %s"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "trefwoord"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "operator"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "object"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "statement"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "ingebouwde functie"
-#: sphinx/themes/agogo/layout.html:45
-#: sphinx/themes/basic/globaltoc.html:10
+#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10
#: sphinx/themes/basic/localtoc.html:11
msgid "Table Of Contents"
msgstr "Inhoudsopgave"
-#: sphinx/themes/agogo/layout.html:49
-#: sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11
-#: sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Zoeken"
-#: sphinx/themes/agogo/layout.html:52
-#: sphinx/themes/basic/searchbox.html:15
+#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15
msgid "Go"
msgstr "Ga"
-#: sphinx/themes/agogo/layout.html:57
-#: sphinx/themes/basic/searchbox.html:20
+#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20
msgid "Enter search terms or a module, class or function name."
msgstr "Geef zoekterm of de naam van een module, klasse of functie."
-#: sphinx/themes/agogo/layout.html:78
-#: sphinx/themes/basic/sourcelink.html:14
+#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14
msgid "Show Source"
msgstr "Broncode weergeven"
@@ -590,15 +577,15 @@ msgstr "sneltoegang naar alle modules"
msgid "all functions, classes, terms"
msgstr "alle functies, klasses en begrippen"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Index &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Volledige index op een pagina"
@@ -610,42 +597,46 @@ msgstr "Index pagineerd per letter"
msgid "can be huge"
msgstr "kan heel groot zijn"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Navigatie"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Zoeken in %(docstitle)s"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "Over deze documenten"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Copyright"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Copyright %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Laatste aanpassing op %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
-msgid "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s."
-msgstr "Aangemaakt met <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s."
+msgid ""
+"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
+msgstr ""
+"Aangemaakt met <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
#: sphinx/themes/basic/opensearch.xml:4
#, python-format
@@ -668,13 +659,13 @@ msgstr "Volgend onderwerp"
msgid "next chapter"
msgstr "volgend hoofdstuk"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr "Activeer JavaSscript om de zoekfunctionaliteit in te schakelen."
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -682,20 +673,21 @@ msgid ""
" containing fewer words won't appear in the result list."
msgstr ""
"Hier kan u de documenten doorzoeken. Geef enkele trefwoorden\n"
-" in het veld hieronder en klik \"zoeken\". Merk op dat de zoekfunctie\n"
-" steeds naar alle woorden zoekt. Pagina's die minder woorden bevatten\n"
+" in het veld hieronder en klik \"zoeken\". Merk op dat de zoekfunctie"
+"\n"
+" steeds naar alle woorden zoekt. Pagina's die minder woorden bevatten"
+"\n"
" zullen niet tussen de resultaten verschijnen."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "zoeken"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Zoekresultaten"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Uw zoekopdracht leverde geen resultaten op."
@@ -735,14 +727,12 @@ msgstr "Veranderingen in de C-API"
msgid "Other changes"
msgstr "Andere veranderingen"
-#: sphinx/themes/basic/static/doctools.js:154
-#: sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Permalink naar deze titel"
-#: sphinx/themes/basic/static/doctools.js:160
-#: sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Permalink naar deze definitie"
@@ -750,33 +740,12 @@ msgstr "Permalink naar deze definitie"
msgid "Hide Search Matches"
msgstr "Zoekresultaten verbergen"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Zoeken"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Het zoeken wordt voorbereid..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", in "
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 "Uw zoekopdracht leverde geen resultaten op. Controleer of alle woorden correct gespeld zijn en dat u genoeg categoriën hebt geselecteerd."
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "Zoeken voltooid, %s pagina(s) gevonden."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr ""
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr ""
@@ -784,33 +753,24 @@ msgstr ""
msgid "Contents"
msgstr "Inhoud"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Release"
-#: sphinx/writers/latex.py:572
-#: sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr "Voetnoten"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr "Vervolgd van vorige pagina"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
msgid "Continued on next page"
msgstr "Vervolgd op volgende pagina"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[afbeelding]"
-#~ msgid "Parameter"
-#~ msgstr "Parameter"
-#~ msgid "here"
-#~ msgstr "hier"
-#~ msgid "module, in "
-#~ msgstr "module, in"
-#~ msgid "Platform: %s"
-#~ msgstr "Platform: %s"
-
diff --git a/sphinx/locale/pl/LC_MESSAGES/sphinx.js b/sphinx/locale/pl/LC_MESSAGES/sphinx.js
index 5823053f..6a3f5f31 100644
--- a/sphinx/locale/pl/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/pl/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "pl", "plural_expr": "(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Search Results": "Wyniki wyszukiwania", "Preparing search...": "Przygotowanie wyszukiwania...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Nie znaleziono \u017cadnych pasuj\u0105cych dokument\u00f3w. Upewnij si\u0119, \u017ce wszystkie s\u0142owa s\u0105 poprawnie wpisane i \u017ce wybra\u0142e\u015b wystarczaj\u0105c\u0105liczb\u0119 kategorii.", "Search finished, found %s page(s) matching the search query.": "Przeszukiwanie zako\u0144czone, znaleziono %s pasuj\u0105cych stron.", ", in ": ", w ", "Expand sidebar": "", "Permalink to this headline": "Sta\u0142y odno\u015bnik do tego nag\u0142\u00f3wka", "Searching": "Wyszukiwanie", "Collapse sidebar": "", "Permalink to this definition": "Sta\u0142y odno\u015bnik do tej definicji", "Hide Search Matches": "Ukryj wyniki wyszukiwania"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "pl", "plural_expr": "(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Hide Search Matches": "Ukryj wyniki wyszukiwania", "Permalink to this definition": "Sta\u0142y odno\u015bnik do tej definicji", "Expand sidebar": "Rozwi\u0144 pasek boczny", "Permalink to this headline": "Sta\u0142y odno\u015bnik do tego nag\u0142\u00f3wka", "Collapse sidebar": "Zwi\u0144 pasek boczny"}}); \ No newline at end of file
diff --git a/sphinx/locale/pl/LC_MESSAGES/sphinx.mo b/sphinx/locale/pl/LC_MESSAGES/sphinx.mo
index 3c6105cd..bdceda43 100644
--- a/sphinx/locale/pl/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/pl/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/pl/LC_MESSAGES/sphinx.po b/sphinx/locale/pl/LC_MESSAGES/sphinx.po
index 6044e8ee..957d23e9 100644
--- a/sphinx/locale/pl/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/pl/LC_MESSAGES/sphinx.po
@@ -3,505 +3,516 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 0.5\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2008-08-10 11:43+0000\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
-"Last-Translator: Michał Kandulski <Michal.Kandulski@poczta.onet.pl>\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-09-21 10:14+0200\n"
+"Last-Translator: Michał Kandulski <michal.kandulski@gmail.com>\n"
"Language-Team: \n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && "
"(n%100<10 || n%100>=20) ? 1 : 2)\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%B %d %Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, fuzzy, python-format
+msgid "see %s"
+msgstr "zobacz %s"
+
+#: sphinx/environment.py:1628
+#, fuzzy, python-format
+msgid "see also %s"
+msgstr "zobacz także %s"
+
+#: sphinx/roles.py:175
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Wbudowane"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Poziom modułu"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%b %d %Y"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Indeks ogólny"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "indeks"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "dalej"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "wstecz"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr " (w "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Autor rozdziału: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Autor modułu: "
-#: sphinx/directives/other.py:131
-#, fuzzy
+#: sphinx/directives/other.py:140
msgid "Code author: "
-msgstr "Autor modułu: "
+msgstr "Autor kodu: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Autor: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Zobacz także"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
-msgstr ""
+msgstr "%s %s"
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Parametry"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Zwraca"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Typ zwracany"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (funkcja C)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (pole C)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (makro C)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (typ C)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (zmienna C)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "funkcja"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "pole"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
-msgstr ""
+msgstr "makro"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "typ"
-#: sphinx/domains/c.py:175
-#, fuzzy
+#: sphinx/domains/c.py:208
msgid "variable"
-msgstr "Zmienna"
+msgstr "zmienna"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
-msgstr "%s (klasie C++)"
+msgstr "%s (klasa C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (typ C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (pole C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (funkcja C++)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
-msgstr "klasie"
+msgstr "klasa"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (funkcja wbudowana)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s metoda)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (klasa)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
-msgstr ""
+msgstr "%s (zmienna lub stała globalna)"
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s atrybut)"
-#: sphinx/domains/javascript.py:131
-#, fuzzy
+#: sphinx/domains/javascript.py:122
msgid "Arguments"
-msgstr "Parametry"
+msgstr "Argumenty"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
-msgstr ""
+msgstr "Wyrzuca"
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
-msgstr ""
+msgstr "dane"
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "atrybut"
-#: sphinx/domains/python.py:53
-#, fuzzy
+#: sphinx/domains/python.py:100
msgid "Variables"
-msgstr "Zmienna"
+msgstr "Zmienne"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Wyrzuca"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (w module %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (zmienna wbudowana)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (w module %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (klasa wbudowana)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
-msgstr "%s (w klasie %s)"
+msgstr "%s (klasa w module %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s metoda)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
-msgstr "%s() (%s.%s statyczna metoda)"
+msgstr "%s() (%s.%s metoda statyczna)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
-msgstr "%s() (%s statyczna metoda)"
+msgstr "%s() (%s metoda statyczna)"
-#: sphinx/domains/python.py:308
-#, fuzzy, python-format
+#: sphinx/domains/python.py:341
+#, python-format
msgid "%s() (%s.%s class method)"
-msgstr "%s() (%s.%s metoda)"
+msgstr "%s() (%s.%s metoda klasy)"
-#: sphinx/domains/python.py:311
-#, fuzzy, python-format
+#: sphinx/domains/python.py:344
+#, python-format
msgid "%s() (%s class method)"
-msgstr "%s() (%s metoda)"
+msgstr "%s() (%s metoda klasy)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
-msgstr "%s (%s.%s atrybut)"
-
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Platformy: "
+msgstr "%s (atrybut %s.%s)"
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (moduł)"
-#: sphinx/domains/python.py:429
-#, fuzzy
+#: sphinx/domains/python.py:491
msgid "Python Module Index"
-msgstr "Indeks modułów"
+msgstr "Indeks modułów pythona"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "moduły"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Niezalecane"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "wyjątek"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
-msgstr ""
+msgstr "metoda"
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
-msgstr "%s() (%s metoda)"
+msgstr "metoda klasy"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "statyczna metoda"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "moduł"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (niezalecane)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
-msgstr ""
+msgstr "%s (dyrektywa)"
-#: sphinx/domains/rst.py:55
-#, fuzzy, python-format
+#: sphinx/domains/rst.py:57
+#, python-format
msgid "%s (role)"
-msgstr "%s (moduł)"
+msgstr "%s (rola)"
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
-msgstr ""
+msgstr "dyrektywa"
-#: sphinx/domains/rst.py:104
-#, fuzzy
+#: sphinx/domains/rst.py:107
msgid "role"
-msgstr "moduł"
+msgstr "rola"
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "zmienna środowiskowa; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%sopcja linii komend; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
-msgstr ""
+msgstr "termin glosariusza"
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
-msgstr ""
+msgstr "symbol gramatyki"
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
-msgstr ""
+msgstr "etykieta odsyłacza"
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "zmienna środowiskowa"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
-msgstr ""
+msgstr "opcja programu"
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Indeks"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Indeks modułów"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Wyszukiwanie"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr " Klasy bazowe: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr "alias klasy :class:`%s`"
#: sphinx/ext/todo.py:41
msgid "Todo"
-msgstr "Do zrobienia"
+msgstr "Todo"
#: sphinx/ext/todo.py:109
-#, fuzzy, python-format
+#, python-format
msgid "(The <<original entry>> is located in %s, line %d.)"
-msgstr ""
-"(Oryginalny wpis znajduje się w pliku %s, w linii %d i może być "
-"odnaleziony "
+msgstr "(<<Oryginalny wpis>> znajduje się w pliku %s, w linii %d.)"
#: sphinx/ext/todo.py:117
msgid "original entry"
-msgstr ""
+msgstr "oryginalny wpis"
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
-msgstr ""
+msgstr "[źródło]"
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
-msgstr ""
+msgstr "[dokumenty]"
-#: sphinx/ext/viewcode.py:123
-#, fuzzy
+#: sphinx/ext/viewcode.py:131
msgid "Module code"
-msgstr "moduł"
+msgstr "Kod modułu"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
-msgstr ""
+msgstr "<h1>Kod źródłowy modułu %s</h1>"
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
-msgstr ""
+msgstr "Przeglądanie: kod modułu"
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
-msgstr ""
+msgstr "<h1>Wszystkie moduły, dla których jest dostępny kod</h1>"
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Uwaga"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Ostrożnie"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Niebezpieczeństwo"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Błąd"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Podpowiedź"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Ważne"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Uwaga"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Zobacz także"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Wskazówka"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Ostrzeżenie"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Nowe w wersji %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Zmienione w wersji %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Niezalecane od wersji %s"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "słowo kluczowe"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "operator"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "obiekt"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "instrukcja"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "funkcja wbudowana"
@@ -510,8 +521,8 @@ msgstr "funkcja wbudowana"
msgid "Table Of Contents"
msgstr "Spis treści"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Szukaj"
@@ -541,15 +552,15 @@ msgstr "Kompletny spis treści"
#: sphinx/themes/basic/defindex.html:24
msgid "lists all sections and subsections"
-msgstr "wymień wszystkie rozdziały i podrozdziały"
+msgstr "wszystkie rozdziały i podrozdziały"
#: sphinx/themes/basic/defindex.html:26
msgid "search this documentation"
-msgstr "wyszukaj w dokumentacji"
+msgstr "przyszukaj tę dokumentację"
#: sphinx/themes/basic/defindex.html:28
msgid "Global Module Index"
-msgstr "Indeks modułów"
+msgstr "Globalny indeks modułów"
#: sphinx/themes/basic/defindex.html:29
msgid "quick access to all modules"
@@ -559,15 +570,15 @@ msgstr "szybki dostęp do wszystkich modułów"
msgid "all functions, classes, terms"
msgstr "wszystkie funkcje, klasy, terminy"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Indeks &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Cały indeks na jednej stronie"
@@ -579,39 +590,39 @@ msgstr "Strony indeksu alfabetycznie"
msgid "can be huge"
msgstr "może być ogromny"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Nawigacja"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Szukaj pośród %(docstitle)s"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "O tych dokumentach"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Copyright"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Copyright %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Ostatnia modyfikacja %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -641,13 +652,13 @@ msgstr "Następny temat"
msgid "next chapter"
msgstr "następny rozdział"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr "Aby umożliwić wuszukiwanie, proszę włączyć JavaScript."
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -661,16 +672,15 @@ msgstr ""
" nie zawierające wszystkich wpisanych słów nie znajdą się na wynikowej"
" liście."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
-msgstr "Szukaj"
+msgstr "szukaj"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Wyniki wyszukiwania"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Nie znaleziono żadnych pasujących stron."
@@ -710,12 +720,12 @@ msgstr "Zmiany w C API"
msgid "Other changes"
msgstr "Inne zmiany"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Stały odnośnik do tego nagłówka"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Stały odnośnik do tej definicji"
@@ -723,73 +733,37 @@ msgstr "Stały odnośnik do tej definicji"
msgid "Hide Search Matches"
msgstr "Ukryj wyniki wyszukiwania"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Wyszukiwanie"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Przygotowanie wyszukiwania..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", w "
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 ""
-"Nie znaleziono żadnych pasujących dokumentów. Upewnij się, że wszystkie "
-"słowa są poprawnie wpisane i że wybrałeś wystarczającąliczbę kategorii."
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "Przeszukiwanie zakończone, znaleziono %s pasujących stron."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
-msgstr ""
+msgstr "Rozwiń pasek boczny"
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
-msgstr ""
+msgstr "Zwiń pasek boczny"
#: sphinx/themes/haiku/layout.html:26
msgid "Contents"
-msgstr ""
+msgstr "Treść"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Wydanie"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr "Przypisy"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr "kontynuacja poprzedniej strony"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
msgid "Continued on next page"
msgstr "Kontynuacja na następnej stronie"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
-msgstr "[obrazek]"
-
-#~ msgid "Parameter"
-#~ msgstr "Parametr"
-
-#~ msgid "here"
-#~ msgstr "tutaj"
-
-#~ msgid "module, in "
-#~ msgstr "moduł, w "
-
-#~ msgid "Platform: %s"
-#~ msgstr "Platforma: %s"
+msgstr "[obraz]"
diff --git a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js
index 312d0fc7..288c9692 100644
--- a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "pt_BR", "plural_expr": "(n > 1)", "messages": {"Search Results": "Resultados da Pesquisa", "Preparing search...": "Preparando pesquisa...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Sua pesquisa n\u00e3o encontrou nenhum documento. Por favor assegure-se de que todas as palavras foram digitadas corretamente e de que voc\u00ea tenha selecionado o m\u00ednimo de categorias.", "Search finished, found %s page(s) matching the search query.": "Pesquisa finalizada, foram encontrada(s) %s p\u00e1gina(s) que conferem com o crit\u00e9rio de pesquisa.", ", in ": ", em ", "Expand sidebar": "Expandir painel lateral", "Permalink to this headline": "Link permanente para este t\u00edtulo", "Searching": "Pesquisando", "Collapse sidebar": "Recolher painel lateral", "Permalink to this definition": "Link permanente para esta defini\u00e7\u00e3o", "Hide Search Matches": "Esconder Resultados da Pesquisa"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "pt_BR", "plural_expr": "(n > 1)", "messages": {"Hide Search Matches": "Esconder Resultados da Pesquisa", "Permalink to this definition": "Link permanente para esta defini\u00e7\u00e3o", "Expand sidebar": "Expandir painel lateral", "Permalink to this headline": "Link permanente para este t\u00edtulo", "Collapse sidebar": "Recolher painel lateral"}}); \ No newline at end of file
diff --git a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo
index 67c1ce54..3016d5ef 100644
--- a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po
index 7df9013e..b41b5ad1 100644
--- a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po
@@ -7,406 +7,401 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 0.5\n"
"Report-Msgid-Bugs-To: roger.demetrescu@gmail.com\n"
-"POT-Creation-Date: 2008-11-09 19:46+0100\n"
-"PO-Revision-Date: 2010-06-20 18:34-0300\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
"Last-Translator: Roger Demetrescu <roger.demetrescu@gmail.com>\n"
"Language-Team: pt_BR <roger.demetrescu@gmail.com>\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106
-#: sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, fuzzy, python-format
+msgid "%s %s documentation"
+msgstr "%s %s documentação"
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%d/%m/%Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, fuzzy, python-format
+msgid "see %s"
+msgstr "veja %s"
+
+#: sphinx/environment.py:1628
+#, fuzzy, python-format
+msgid "see also %s"
+msgstr "veja também %s"
+
+#: sphinx/roles.py:175
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Internos"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Módulo"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d/%m/%Y"
-#: sphinx/builders/html.py:285
-#: sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Índice Geral"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "índice"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "próximo"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "anterior"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr " (em "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Autor da seção: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Autor do módulo: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
msgid "Code author: "
msgstr "Autor do código: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Autor: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Veja também"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr "%s %s"
-#: sphinx/domains/c.py:51
-#: sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Parâmetros"
-#: sphinx/domains/c.py:54
-#: sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Retorna"
-#: sphinx/domains/c.py:56
-#: sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Tipo de retorno"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (função C)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (membro C)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (macro C)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (tipo C)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (variável C)"
-#: sphinx/domains/c.py:171
-#: sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166
-#: sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "função"
-#: sphinx/domains/c.py:172
-#: sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "membro"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr "macro"
-#: sphinx/domains/c.py:174
-#: sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "tipo"
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
msgid "variable"
msgstr "variável"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr "%s (classe C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (tipo C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (membro C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (função C++)"
-#: sphinx/domains/cpp.py:1030
-#: sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr "classe"
-#: sphinx/domains/javascript.py:117
-#: sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (função interna)"
-#: sphinx/domains/javascript.py:118
-#: sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (método %s)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (classe)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr "%s (variável global ou constante)"
-#: sphinx/domains/javascript.py:122
-#: sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (atributo %s)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
msgid "Arguments"
msgstr "Parâmetros"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr "Gera"
-#: sphinx/domains/javascript.py:167
-#: sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr "dado"
-#: sphinx/domains/javascript.py:168
-#: sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "atributo"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
msgid "Variables"
msgstr "Variáveis"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Levanta"
-#: sphinx/domains/python.py:222
-#: sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291
-#: sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (no módulo %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (variável interna)"
-#: sphinx/domains/python.py:226
-#: sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (no módulo %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (classe interna)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (classe em %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (método %s.%s)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (método estático %s.%s)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (método estático %s)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (método de classe %s.%s)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s() (%s class method)"
msgstr "%s() (método de classe %s)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (atributo %s.%s)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Plataformas: "
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (módulo)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
msgid "Python Module Index"
msgstr "Índice de Módulos do Python"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "módulos"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Obsoleto"
-#: sphinx/domains/python.py:500
-#: sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "exceção"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr "método"
-#: sphinx/domains/python.py:502
-#, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
msgstr "método de classe"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "método estático"
-#: sphinx/domains/python.py:505
-#: sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "módulo"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (obsoleto)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr "%s (diretiva)"
-#: sphinx/domains/rst.py:55
+#: sphinx/domains/rst.py:57
#, python-format
msgid "%s (role)"
msgstr "%s (papel)"
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr "diretiva"
-#: sphinx/domains/rst.py:104
+#: sphinx/domains/rst.py:107
msgid "role"
msgstr "papel"
-#: sphinx/domains/std.py:68
-#: sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "váriavel de ambiente; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%sopção de linha de comando; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr "Termo de glossário"
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr "token de gramática"
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr "rótulo de referência"
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "váriavel de ambiente"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr "opção de programa"
-#: sphinx/domains/std.py:360
-#: sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11
-#: sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50
-#: sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Índice"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Índice do Módulo"
-#: sphinx/domains/std.py:362
-#: sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Página de Pesquisa"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr " Bases: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr "apelido de :class:`%s`"
@@ -424,131 +419,125 @@ msgstr "(A <<entrada original>> está localizada em %s, linha %d.)"
msgid "original entry"
msgstr "entrada original"
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr "[código fonte]"
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr "[documentos]"
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
msgid "Module code"
msgstr "Código do módulo"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr "<h1>Código fonte de %s</h1>"
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr "Visão geral: código do módulo"
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr "<h1>Todos os módulos onde este código está disponível</h1>"
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Atenção"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Cuidado"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Perigo"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Erro"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Dica"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Importante"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Nota"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Veja Também"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Dica"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Aviso"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Novo na versão %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Alterado na versão %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Obsoleto desde a versão %s"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "palavra-chave"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "operador"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "objeto"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "comando"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "função interna"
-#: sphinx/themes/agogo/layout.html:45
-#: sphinx/themes/basic/globaltoc.html:10
+#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10
#: sphinx/themes/basic/localtoc.html:11
msgid "Table Of Contents"
msgstr "Tabela de Conteúdo"
-#: sphinx/themes/agogo/layout.html:49
-#: sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11
-#: sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Pesquisar"
-#: sphinx/themes/agogo/layout.html:52
-#: sphinx/themes/basic/searchbox.html:15
+#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15
msgid "Go"
msgstr "Ir"
-#: sphinx/themes/agogo/layout.html:57
-#: sphinx/themes/basic/searchbox.html:20
+#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20
msgid "Enter search terms or a module, class or function name."
msgstr "Digite os termos da busca ou o nome de um módulo, classe ou função."
-#: sphinx/themes/agogo/layout.html:78
-#: sphinx/themes/basic/sourcelink.html:14
+#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14
msgid "Show Source"
msgstr "Exibir Fonte"
@@ -584,15 +573,15 @@ msgstr "acesso rápido para todos os módulos"
msgid "all functions, classes, terms"
msgstr "todas funções, classes, termos"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Índice &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Índice completo em uma página"
@@ -604,42 +593,46 @@ msgstr "Paginas de índice por letra"
msgid "can be huge"
msgstr "pode ser enorme"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Navegação"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Pesquisar dentro de %(docstitle)s"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "Sobre estes documentos"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Copyright"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Copyright %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Última atualização em %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
-msgid "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s."
-msgstr "Criado com <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s."
+msgid ""
+"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
+msgstr ""
+"Criado com <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
#: sphinx/themes/basic/opensearch.xml:4
#, python-format
@@ -662,13 +655,13 @@ msgstr "Próximo tópico"
msgid "next chapter"
msgstr "próximo capítulo"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr "Por favor ative o JavaScript para habilitar a funcionalidade de pesquisa."
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -676,20 +669,21 @@ msgid ""
" containing fewer words won't appear in the result list."
msgstr ""
"A partir daqui você pode pesquisar estes documentos. Preencha suas \n"
-" palavras de pesquisa na caixa abaixo e clique em \"pesquisar\". Observe que a função de pesquisa\n"
+" palavras de pesquisa na caixa abaixo e clique em \"pesquisar\". "
+"Observe que a função de pesquisa\n"
" irá pesquisar automaticamente por todas as palavras.\n"
-" Páginas contendo menos palavras não irão aparecer na lista de resultado."
+" Páginas contendo menos palavras não irão aparecer na lista de "
+"resultado."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "pesquisar"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Resultados da Pesquisa"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Sua pesquisa não encontrou nenhum resultado."
@@ -729,14 +723,12 @@ msgstr "Alterações na API C"
msgid "Other changes"
msgstr "Outras alterações"
-#: sphinx/themes/basic/static/doctools.js:154
-#: sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Link permanente para este título"
-#: sphinx/themes/basic/static/doctools.js:160
-#: sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Link permanente para esta definição"
@@ -744,33 +736,12 @@ msgstr "Link permanente para esta definição"
msgid "Hide Search Matches"
msgstr "Esconder Resultados da Pesquisa"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Pesquisando"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Preparando pesquisa..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", em "
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 "Sua pesquisa não encontrou nenhum documento. Por favor assegure-se de que todas as palavras foram digitadas corretamente e de que você tenha selecionado o mínimo de categorias."
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "Pesquisa finalizada, foram encontrada(s) %s página(s) que conferem com o critério de pesquisa."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr "Expandir painel lateral"
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr "Recolher painel lateral"
@@ -778,24 +749,24 @@ msgstr "Recolher painel lateral"
msgid "Contents"
msgstr "Conteúdo"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Versão"
-#: sphinx/writers/latex.py:572
-#: sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr "Notas de rodapé"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr "continuação da página anterior"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
msgid "Continued on next page"
msgstr "Continua na próxima página"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[imagem]"
diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.js b/sphinx/locale/ru/LC_MESSAGES/sphinx.js
index e597cfad..ca0376ac 100644
--- a/sphinx/locale/ru/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "ru", "plural_expr": "n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", "messages": {"Search Results": "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430", "Preparing search...": "\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u043f\u043e\u0438\u0441\u043a\u0443...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u041d\u0435\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u044b \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0438 \u043d\u0435\u0442 \u043b\u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435.", "Search finished, found %s page(s) matching the search query.": "\u041f\u043e\u0438\u0441\u043a \u043e\u043a\u043e\u043d\u0447\u0435\u043d, \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446: %s.", ", in ": ", \u0432 ", "Expand sidebar": "", "Permalink to this headline": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Searching": "\u041f\u043e\u0438\u0441\u043a", "Collapse sidebar": "", "Permalink to this definition": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435", "Hide Search Matches": "\u0421\u043d\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "ru", "plural_expr": "n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", "messages": {"Hide Search Matches": "\u0421\u043d\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435", "Permalink to this definition": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435", "Expand sidebar": "", "Permalink to this headline": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.mo b/sphinx/locale/ru/LC_MESSAGES/sphinx.mo
index ecdc6860..593350d3 100644
--- a/sphinx/locale/ru/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.po b/sphinx/locale/ru/LC_MESSAGES/sphinx.po
index e2b1e3a1..b6374d81 100644
--- a/sphinx/locale/ru/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 0.6b1\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2009-01-24 18:39+0000\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-09-21 10:14+0200\n"
"Last-Translator: alexander smishlajev <alex@tycobka.lv>\n"
"Language-Team: ru <LL@li.org>\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
@@ -15,379 +15,399 @@ msgstr ""
"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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%d %B %Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "see %s"
+msgstr ""
+
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr ""
-#: sphinx/builders/changes.py:72
+#: sphinx/roles.py:175
+#, fuzzy, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
+
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Встроенные функции"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Модуль"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d %b %Y"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Словарь-указатель"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "словарь"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "следующий"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "предыдущий"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr " (в "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Автор секции: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Автор модуля: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
#, fuzzy
msgid "Code author: "
msgstr "Автор модуля: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Автор: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "См.также"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Параметры"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Результат"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Тип результата"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (функция C)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (поле C)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (макроподстановка C)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (тип C)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (переменная C)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "функция"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "поле"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "тип"
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
#, fuzzy
msgid "variable"
msgstr "Переменная"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr "%s (класс C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (тип C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (поле C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (функция C++)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr "класс"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (встроенная функция)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (метод %s)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (класс)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (атрибут %s)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
#, fuzzy
msgid "Arguments"
msgstr "Параметры"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "атрибут"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
#, fuzzy
msgid "Variables"
msgstr "Переменная"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Исключение"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (в модуле %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (встроенная переменная)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (в модуле %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (встроенный класс)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (класс в %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (метод %s.%s)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (статический метод %s.%s)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (статический метод %s)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (метод %s.%s)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (метод %s)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (атрибут %s.%s)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Платформы: "
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (модуль)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
#, fuzzy
msgid "Python Module Index"
msgstr "Состав модуля"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "модули"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Не рекомендуется"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "исключение"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
-msgstr "%s() (метод %s)"
+msgstr ""
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "статический метод"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "модуль"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+#, fuzzy
+msgid " (deprecated)"
+msgstr " (не рекомендуется)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
-#, fuzzy, python-format
+#: sphinx/domains/rst.py:57
+#, python-format
msgid "%s (role)"
-msgstr "%s (модуль)"
+msgstr ""
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
-#, fuzzy
+#: sphinx/domains/rst.py:107
msgid "role"
-msgstr "модуль"
+msgstr ""
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "переменная окружения; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "Опция командной строки %s; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr ""
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr ""
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr ""
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "переменная окружения"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Алфавитный указатель"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Состав модуля"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Поиск"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr " Базовые классы: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr "псевдоним класса :class:`%s`"
@@ -399,110 +419,110 @@ msgstr "План"
#: sphinx/ext/todo.py:109
#, fuzzy, python-format
msgid "(The <<original entry>> is located in %s, line %d.)"
-msgstr "(Исходный элемент находится в %s, в строке %d, и может быть найден "
+msgstr "(Исходный элемент находится в %s, в строке %d.)"
#: sphinx/ext/todo.py:117
msgid "original entry"
msgstr ""
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
#, fuzzy
msgid "Module code"
msgstr "модуль"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr ""
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr ""
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr ""
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Внимание"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Осторожно"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Опасно"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Ошибка"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Подсказка"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Важно"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Примечание"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "См.также"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Совет"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Предупреждение"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Добавлено в версии %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Изменено в версии %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Не рекомендуется, начиная с версии %s"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "ключевое слово"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "оператор"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "объект"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "команда"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "базовая функция"
@@ -511,8 +531,8 @@ msgstr "базовая функция"
msgid "Table Of Contents"
msgstr "Содержание"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Поиск"
@@ -560,15 +580,15 @@ msgstr "сводный список всех модулей"
msgid "all functions, classes, terms"
msgstr "все функции, классы, переменные и константы"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Алфавитный указатель &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Полный алфавитный указатель на одной странице"
@@ -580,39 +600,39 @@ msgstr "Указатели по буквам алфавита"
msgid "can be huge"
msgstr "может быть очень большим"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Просмотр"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Поиск в документе «%(docstitle)s»"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "Об этих документах…"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Copyright"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Copyright %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Дата последнего обновления: %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -642,13 +662,13 @@ msgstr "Следующий раздел"
msgid "next chapter"
msgstr "следующая глава"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr "Для выполнения поиска необходима поддержка JavaScript в браузере."
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -661,16 +681,15 @@ msgstr ""
"упомянуты все указанные слова. Страницы, в которых встречается только "
"часть этих слов, отобраны не будут."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "искать"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Результаты поиска"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Результатов по вашему запросу не найдено."
@@ -710,12 +729,12 @@ msgstr "Изменения в C API"
msgid "Other changes"
msgstr "Другие изменения"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Ссылка на этот заголовок"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Ссылка на это определение"
@@ -723,37 +742,12 @@ msgstr "Ссылка на это определение"
msgid "Hide Search Matches"
msgstr "Снять выделение"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Поиск"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Подготовка к поиску..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", в "
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 ""
-"Нет документов, соответствующих вашему запросу. Проверьте, правильно ли "
-"выбраны категории и нет ли опечаток в запросе."
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "Поиск окончен, найдено страниц: %s."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr ""
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr ""
@@ -761,23 +755,25 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Выпуск"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
#, fuzzy
msgid "Continued on next page"
msgstr "Полный алфавитный указатель на одной странице"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[рисунок]"
+
diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.js b/sphinx/locale/sl/LC_MESSAGES/sphinx.js
index 2a2f960a..2bcb33da 100644
--- a/sphinx/locale/sl/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/sl/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "sl", "plural_expr": "0", "messages": {"Search Results": "Rezultati Iskanja", "Preparing search...": "Pripravljam iskanje...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Za va\u0161e iskanje ni rezultatov. Prosimo preglejte ali so vse besede pravilno \u010drkovane in ali ste izbrali dovolj kategorij.", "Search finished, found %s page(s) matching the search query.": "Iskanje kon\u010dano, najdeno %s strani, ki ustrezajo iskalnemu nizu.", ", in ": ", v ", "Expand sidebar": "", "Permalink to this headline": "Povezava na naslov", "Searching": "I\u0161\u010dem", "Collapse sidebar": "", "Permalink to this definition": "Povezava na to definicijo", "Hide Search Matches": "Skrij resultate iskanja"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "sl", "plural_expr": "0", "messages": {"Hide Search Matches": "Skrij resultate iskanja", "Permalink to this definition": "Povezava na to definicijo", "Expand sidebar": "", "Permalink to this headline": "Povezava na naslov", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.mo b/sphinx/locale/sl/LC_MESSAGES/sphinx.mo
index 21e64ffd..79f7f4eb 100644
--- a/sphinx/locale/sl/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/sl/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.po b/sphinx/locale/sl/LC_MESSAGES/sphinx.po
index 6028c35c..6f6e49ac 100644
--- a/sphinx/locale/sl/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/sl/LC_MESSAGES/sphinx.po
@@ -3,387 +3,406 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2008-09-11 23:58+0200\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-09-21 10:14+0200\n"
"Last-Translator: Luka Marinko <luka.marinko@simt.si>\n"
"Language-Team: Rok Garbas <rok.garbas@gmail.com>\n"
"Plural-Forms: nplurals=1; plural=0\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%d %B, %Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr ""
+
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr ""
+
+#: sphinx/roles.py:175
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Vgrajeni deli"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Nivo modula"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d %b, %Y"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Splošni abecedni seznam"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "abecedni seznam"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "naprej"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "nazaj"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr " (v "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Avtor sekcije: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Avtor modula: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
#, fuzzy
msgid "Code author: "
msgstr "Avtor modula: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Avtor: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Poglej Tudi"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Parametri"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Vrne"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Vrne tip"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (C funkcija)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (C član)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (C makro)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (C tip)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (C spremenljivka)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "funkcija"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "član"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "tip"
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
#, fuzzy
msgid "variable"
msgstr "Spremenljivka"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++ razred)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ tip)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ član)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ funkcija)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr "razred"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (vgrajene funkcije)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s metoda)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (razred)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s atribut)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
#, fuzzy
msgid "Arguments"
msgstr "Parametri"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "atribut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
#, fuzzy
msgid "Variables"
msgstr "Spremenljivka"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Sproži izjemo"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (v modulu %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (vgrajene spremenljivke)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (v modulu %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (vgrajen razred)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (razred v %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s metoda)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s statična metoda)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s statična metoda)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s metoda)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s metoda)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s atribut)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Platforme:"
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (modul)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
#, fuzzy
msgid "Python Module Index"
msgstr "Seznam modulov"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "Moduli"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Zastarelo"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "izjema"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
-msgstr "%s() (%s metoda)"
+msgstr ""
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "statična metoda"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "modul"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (zastarelo)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
-#, fuzzy, python-format
+#: sphinx/domains/rst.py:57
+#, python-format
msgid "%s (role)"
-msgstr "%s (modul)"
+msgstr ""
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
-#, fuzzy
+#: sphinx/domains/rst.py:107
msgid "role"
-msgstr "modul"
+msgstr ""
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "okoljska spremenljivka; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%scommand line parameter; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr ""
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr ""
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr ""
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "okoljska spremenljivka"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Abecedni seznam"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Seznam modulov"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Iskalnik"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr " Baza: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr "vzdevek za :class:`%s`"
@@ -395,110 +414,110 @@ msgstr "Todo"
#: sphinx/ext/todo.py:109
#, fuzzy, python-format
msgid "(The <<original entry>> is located in %s, line %d.)"
-msgstr "(Originalen vnos se nahaja v %s, v vrstici %d, in ga je moč poiskati "
+msgstr "(<<Originalen vnos>> se nahaja v %s, v vrstici %d.)"
#: sphinx/ext/todo.py:117
msgid "original entry"
msgstr ""
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
#, fuzzy
msgid "Module code"
msgstr "modul"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr ""
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr ""
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr ""
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Pozor"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Previdno"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Nevarno"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Napaka"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Nasvet"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Pomembno"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Opomba"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Poglej Tudi"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Nasvet"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Opozorilo"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Novo v verziji %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Spremenjeno v verziji %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Zastarelo od verzije %s"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "ključna beseda"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "operator"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "objekt"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "izjava"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "vgrajene funkcije"
@@ -507,8 +526,8 @@ msgstr "vgrajene funkcije"
msgid "Table Of Contents"
msgstr "Seznam Vsebine"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Išči"
@@ -556,15 +575,15 @@ msgstr "hiter dostop do vseh modulov"
msgid "all functions, classes, terms"
msgstr "vse funkcije, razredi, izrazi"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Seznam &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Poln indeks na eni strani"
@@ -576,39 +595,39 @@ msgstr "Indeksiraj strani po črki"
msgid "can be huge"
msgstr "lahko je veliko"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Navigacija"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Išči med %(docstitle)s"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "O dokumentih"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Vse pravice pridržane"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Vse pravice pridržane</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Vse pravice pridržane %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Zadnjič posodobljeno %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -638,7 +657,7 @@ msgstr "Naslednja tema"
msgid "next chapter"
msgstr "naslednje poglavje"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
@@ -646,7 +665,7 @@ msgstr ""
"Za pravilno delovanje Iskanja morete vklopiti\n"
" JavaScript."
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -658,16 +677,15 @@ msgstr ""
" bo iskalo po vseh besedah v iskalnem nizu. Strani, ki ne\n"
" vsebujejo vseh besed ne bodo prikazane na seznamu rezultatov."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "išči"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Rezultati Iskanja"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Vaše iskanje ni imelo nobenega zadetka."
@@ -707,12 +725,12 @@ msgstr "C API spremembe"
msgid "Other changes"
msgstr "Ostale spremembe"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Povezava na naslov"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Povezava na to definicijo"
@@ -720,37 +738,12 @@ msgstr "Povezava na to definicijo"
msgid "Hide Search Matches"
msgstr "Skrij resultate iskanja"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Iščem"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Pripravljam iskanje..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", v "
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 ""
-"Za vaše iskanje ni rezultatov. Prosimo preglejte ali so vse besede "
-"pravilno črkovane in ali ste izbrali dovolj kategorij."
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "Iskanje končano, najdeno %s strani, ki ustrezajo iskalnemu nizu."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr ""
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr ""
@@ -758,22 +751,24 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Izdaja"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr "Opombe"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr "nadaljevanje iz prejšnje strani"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
msgid "Continued on next page"
msgstr "Nadaljevanje na naslednji strani"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[slika]"
+
diff --git a/sphinx/locale/sphinx.pot b/sphinx/locale/sphinx.pot
index 955663aa..9ddde4c2 100644
--- a/sphinx/locale/sphinx.pot
+++ b/sphinx/locale/sphinx.pot
@@ -1,386 +1,407 @@
# Translations template for Sphinx.
-# Copyright (C) 2010 ORGANIZATION
+# Copyright (C) 2011 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
#
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: Sphinx 1.0pre/8b971dbc7d36\n"
+"Project-Id-Version: Sphinx 1.1pre/9523af9ba9aa+\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2010-05-24 23:53+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr ""
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
+msgid "see %s"
msgstr ""
-#: sphinx/builders/changes.py:72
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr ""
+
+#: sphinx/roles.py:175
+#, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr ""
+
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr ""
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr ""
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr ""
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr ""
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr ""
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr ""
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr ""
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr ""
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr ""
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
msgid "Code author: "
msgstr ""
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr ""
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr ""
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr ""
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr ""
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr ""
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr ""
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr ""
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr ""
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr ""
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr ""
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr ""
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr ""
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr ""
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
msgid "variable"
msgstr ""
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr ""
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr ""
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr ""
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr ""
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr ""
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr ""
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr ""
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr ""
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr ""
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
msgid "Arguments"
msgstr ""
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr ""
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
msgid "Variables"
msgstr ""
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr ""
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr ""
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr ""
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr ""
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr ""
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr ""
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr ""
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr ""
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr ""
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, python-format
msgid "%s() (%s.%s class method)"
msgstr ""
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s() (%s class method)"
msgstr ""
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr ""
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr ""
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr ""
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
msgid "Python Module Index"
msgstr ""
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr ""
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr ""
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr ""
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
+#: sphinx/domains/python.py:564
msgid "class method"
msgstr ""
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr ""
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr ""
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr ""
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
+#: sphinx/domains/rst.py:57
#, python-format
msgid "%s (role)"
msgstr ""
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
+#: sphinx/domains/rst.py:107
msgid "role"
msgstr ""
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr ""
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr ""
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr ""
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr ""
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr ""
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr ""
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr ""
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr ""
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr ""
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -398,103 +419,103 @@ msgstr ""
msgid "original entry"
msgstr ""
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
msgid "Module code"
msgstr ""
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr ""
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr ""
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr ""
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr ""
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr ""
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr ""
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr ""
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr ""
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr ""
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr ""
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr ""
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr ""
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr ""
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr ""
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr ""
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr ""
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr ""
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr ""
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr ""
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr ""
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr ""
@@ -503,8 +524,8 @@ msgstr ""
msgid "Table Of Contents"
msgstr ""
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr ""
@@ -552,15 +573,15 @@ msgstr ""
msgid "all functions, classes, terms"
msgstr ""
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr ""
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr ""
@@ -572,39 +593,39 @@ msgstr ""
msgid "can be huge"
msgstr ""
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr ""
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr ""
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr ""
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr ""
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr ""
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr ""
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr ""
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -632,13 +653,13 @@ msgstr ""
msgid "next chapter"
msgstr ""
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr ""
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -646,16 +667,15 @@ msgid ""
" containing fewer words won't appear in the result list."
msgstr ""
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr ""
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr ""
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr ""
@@ -695,12 +715,12 @@ msgstr ""
msgid "Other changes"
msgstr ""
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr ""
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr ""
@@ -708,35 +728,12 @@ msgstr ""
msgid "Hide Search Matches"
msgstr ""
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr ""
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr ""
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ""
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 ""
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr ""
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr ""
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr ""
@@ -744,23 +741,24 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr ""
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
msgid "Continued on next page"
msgstr ""
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr ""
diff --git a/sphinx/locale/sv/LC_MESSAGES/sphinx.js b/sphinx/locale/sv/LC_MESSAGES/sphinx.js
new file mode 100644
index 00000000..15821aba
--- /dev/null
+++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.js
@@ -0,0 +1 @@
+Documentation.addTranslations({"locale": "sv", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "D\u00f6lj S\u00f6kresultat", "Permalink to this definition": "Permalink till denna definition", "Expand sidebar": "Expandera sidolist", "Permalink to this headline": "Permalink till denna rubrik", "Collapse sidebar": "D\u00f6lj sidolist"}}); \ No newline at end of file
diff --git a/sphinx/locale/sv/LC_MESSAGES/sphinx.mo b/sphinx/locale/sv/LC_MESSAGES/sphinx.mo
new file mode 100644
index 00000000..11b18023
--- /dev/null
+++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/sv/LC_MESSAGES/sphinx.po b/sphinx/locale/sv/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..9967bdd7
--- /dev/null
+++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.po
@@ -0,0 +1,766 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-09-21 10:14+0200\n"
+"Last-Translator: Henrik Holmboe <henrik@holmboe.se>\n"
+"Language-Team: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
+#, python-format
+msgid "%B %d, %Y"
+msgstr "%B %d, %Y"
+
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr "se %s"
+
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr "se även %s"
+
+#: sphinx/roles.py:175
+#, python-format
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
+
+#: sphinx/builders/changes.py:73
+msgid "Builtins"
+msgstr "Inbyggda"
+
+#: sphinx/builders/changes.py:75
+msgid "Module level"
+msgstr "Modulnivå"
+
+#: sphinx/builders/html.py:274
+#, python-format
+msgid "%b %d, %Y"
+msgstr "%b %d, %Y"
+
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
+msgid "General Index"
+msgstr "Huvudindex"
+
+#: sphinx/builders/html.py:293
+msgid "index"
+msgstr "index"
+
+#: sphinx/builders/html.py:353
+msgid "next"
+msgstr "nästa"
+
+#: sphinx/builders/html.py:362
+msgid "previous"
+msgstr "föregående"
+
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
+msgid " (in "
+msgstr "(i "
+
+#: sphinx/directives/other.py:136
+msgid "Section author: "
+msgstr "Sektionsförfattare"
+
+#: sphinx/directives/other.py:138
+msgid "Module author: "
+msgstr "Modulförfattare"
+
+#: sphinx/directives/other.py:140
+msgid "Code author: "
+msgstr "Källkodsförfattare"
+
+#: sphinx/directives/other.py:142
+msgid "Author: "
+msgstr "Upphovsman:"
+
+#: sphinx/directives/other.py:215
+msgid "See also"
+msgstr "Se även"
+
+#: sphinx/domains/__init__.py:244
+#, python-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
+msgid "Parameters"
+msgstr "Parametrar"
+
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
+msgid "Returns"
+msgstr "Returnerar"
+
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
+msgid "Return type"
+msgstr "Returtyp"
+
+#: sphinx/domains/c.py:141
+#, python-format
+msgid "%s (C function)"
+msgstr "%s (C-funktion)"
+
+#: sphinx/domains/c.py:143
+#, python-format
+msgid "%s (C member)"
+msgstr "%s (C-medlem)"
+
+#: sphinx/domains/c.py:145
+#, python-format
+msgid "%s (C macro)"
+msgstr "%s (C-makro)"
+
+#: sphinx/domains/c.py:147
+#, python-format
+msgid "%s (C type)"
+msgstr "%s (C-typ)"
+
+#: sphinx/domains/c.py:149
+#, python-format
+msgid "%s (C variable)"
+msgstr "%s (C-variabel)"
+
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
+msgid "function"
+msgstr "funktion"
+
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
+msgid "member"
+msgstr "medlem"
+
+#: sphinx/domains/c.py:206
+msgid "macro"
+msgstr "makro"
+
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
+msgid "type"
+msgstr "typ"
+
+#: sphinx/domains/c.py:208
+msgid "variable"
+msgstr "variabel"
+
+#: sphinx/domains/cpp.py:904
+#, python-format
+msgid "%s (C++ class)"
+msgstr "%s (C++-klass)"
+
+#: sphinx/domains/cpp.py:919
+#, python-format
+msgid "%s (C++ type)"
+msgstr "%s (C++-typ)"
+
+#: sphinx/domains/cpp.py:938
+#, python-format
+msgid "%s (C++ member)"
+msgstr "%s (C++-medlem)"
+
+#: sphinx/domains/cpp.py:990
+#, python-format
+msgid "%s (C++ function)"
+msgstr "%s (C++-funktion)"
+
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
+msgid "class"
+msgstr "klass"
+
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
+#, python-format
+msgid "%s() (built-in function)"
+msgstr "%s() (inbyggd funktion)"
+
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
+#, python-format
+msgid "%s() (%s method)"
+msgstr "%s() (%s metod)"
+
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (klass)"
+
+#: sphinx/domains/javascript.py:111
+#, python-format
+msgid "%s (global variable or constant)"
+msgstr "%s (global variabel eller konstant)"
+
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
+#, python-format
+msgid "%s (%s attribute)"
+msgstr "%s (%s attribut)"
+
+#: sphinx/domains/javascript.py:122
+msgid "Arguments"
+msgstr "Argument"
+
+#: sphinx/domains/javascript.py:125
+msgid "Throws"
+msgstr "Kastar"
+
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
+msgid "data"
+msgstr "data"
+
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
+msgid "attribute"
+msgstr "attribut"
+
+#: sphinx/domains/python.py:100
+msgid "Variables"
+msgstr "Variabler"
+
+#: sphinx/domains/python.py:104
+msgid "Raises"
+msgstr "Väcker"
+
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
+#, python-format
+msgid "%s() (in module %s)"
+msgstr "%s() (i modul %s)"
+
+#: sphinx/domains/python.py:258
+#, python-format
+msgid "%s (built-in variable)"
+msgstr "%s (inbyggd variabel)"
+
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
+#, python-format
+msgid "%s (in module %s)"
+msgstr "%s (i modul %s)"
+
+#: sphinx/domains/python.py:275
+#, python-format
+msgid "%s (built-in class)"
+msgstr "%s (inbyggd klass)"
+
+#: sphinx/domains/python.py:276
+#, python-format
+msgid "%s (class in %s)"
+msgstr "%s (klass i %s)"
+
+#: sphinx/domains/python.py:316
+#, python-format
+msgid "%s() (%s.%s method)"
+msgstr "%s() (%s.%s metod)"
+
+#: sphinx/domains/python.py:328
+#, python-format
+msgid "%s() (%s.%s static method)"
+msgstr "%s() (%s.%s statisk metod)"
+
+#: sphinx/domains/python.py:331
+#, python-format
+msgid "%s() (%s static method)"
+msgstr "%s() (%s statisk metod)"
+
+#: sphinx/domains/python.py:341
+#, python-format
+msgid "%s() (%s.%s class method)"
+msgstr "%s() (%s.%s klassmetod)"
+
+#: sphinx/domains/python.py:344
+#, python-format
+msgid "%s() (%s class method)"
+msgstr "%s() (%s klassmetod)"
+
+#: sphinx/domains/python.py:354
+#, python-format
+msgid "%s (%s.%s attribute)"
+msgstr "%s (%s.%s attribut)"
+
+#: sphinx/domains/python.py:434
+#, python-format
+msgid "%s (module)"
+msgstr "%s (modul)"
+
+#: sphinx/domains/python.py:491
+msgid "Python Module Index"
+msgstr "Python Modulindex"
+
+#: sphinx/domains/python.py:492
+msgid "modules"
+msgstr "moduler"
+
+#: sphinx/domains/python.py:537
+msgid "Deprecated"
+msgstr "Ersatt"
+
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
+msgid "exception"
+msgstr "undantag"
+
+#: sphinx/domains/python.py:563
+msgid "method"
+msgstr "metod"
+
+#: sphinx/domains/python.py:564
+msgid "class method"
+msgstr "klassmetod"
+
+#: sphinx/domains/python.py:565
+msgid "static method"
+msgstr "statisk metod"
+
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
+msgid "module"
+msgstr "modul"
+
+#: sphinx/domains/python.py:695
+#, fuzzy
+msgid " (deprecated)"
+msgstr " (ersatt)"
+
+#: sphinx/domains/rst.py:55
+#, python-format
+msgid "%s (directive)"
+msgstr "%s (direktiv)"
+
+#: sphinx/domains/rst.py:57
+#, python-format
+msgid "%s (role)"
+msgstr "%s (roll)"
+
+#: sphinx/domains/rst.py:106
+msgid "directive"
+msgstr "direktiv"
+
+#: sphinx/domains/rst.py:107
+msgid "role"
+msgstr "roll"
+
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
+#, python-format
+msgid "environment variable; %s"
+msgstr "miljövariabel; %s"
+
+#: sphinx/domains/std.py:162
+#, python-format
+msgid "%scommand line option; %s"
+msgstr "%skommandorad växel; %s"
+
+#: sphinx/domains/std.py:393
+msgid "glossary term"
+msgstr "ordlista"
+
+#: sphinx/domains/std.py:394
+msgid "grammar token"
+msgstr "grammatisk token"
+
+#: sphinx/domains/std.py:395
+msgid "reference label"
+msgstr "referensetikett"
+
+#: sphinx/domains/std.py:396
+msgid "environment variable"
+msgstr "miljövariabel"
+
+#: sphinx/domains/std.py:397
+msgid "program option"
+msgstr "programväxel"
+
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
+#: sphinx/themes/basic/genindex-split.html:11
+#: sphinx/themes/basic/genindex-split.html:14
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
+msgid "Index"
+msgstr "Index"
+
+#: sphinx/domains/std.py:428
+msgid "Module Index"
+msgstr "Modulindex"
+
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
+msgid "Search Page"
+msgstr "Söksida"
+
+#: sphinx/ext/autodoc.py:1002
+#, python-format
+msgid " Bases: %s"
+msgstr " Baserad: %s"
+
+#: sphinx/ext/autodoc.py:1038
+#, python-format
+msgid "alias of :class:`%s`"
+msgstr "alias för :class:`%s`"
+
+#: sphinx/ext/todo.py:41
+msgid "Todo"
+msgstr "Att göra"
+
+#: sphinx/ext/todo.py:109
+#, python-format
+msgid "(The <<original entry>> is located in %s, line %d.)"
+msgstr "(<<Ursprunget>> finns i %s, på rad %d.)"
+
+#: sphinx/ext/todo.py:117
+msgid "original entry"
+msgstr "ursprungsvärde"
+
+#: sphinx/ext/viewcode.py:70
+msgid "[source]"
+msgstr "[source]"
+
+#: sphinx/ext/viewcode.py:117
+msgid "[docs]"
+msgstr "[docs]"
+
+#: sphinx/ext/viewcode.py:131
+msgid "Module code"
+msgstr "Modulkällkod"
+
+#: sphinx/ext/viewcode.py:137
+#, python-format
+msgid "<h1>Source code for %s</h1>"
+msgstr "<h1>Källkod för %s</h1>"
+
+#: sphinx/ext/viewcode.py:164
+msgid "Overview: module code"
+msgstr "Översikt: modulkällkod"
+
+#: sphinx/ext/viewcode.py:165
+msgid "<h1>All modules for which code is available</h1>"
+msgstr "<h1>Alla moduler där källkod finns</h1>"
+
+#: sphinx/locale/__init__.py:155
+msgid "Attention"
+msgstr "Uppmärksamma"
+
+#: sphinx/locale/__init__.py:156
+msgid "Caution"
+msgstr "Varning"
+
+#: sphinx/locale/__init__.py:157
+msgid "Danger"
+msgstr "Risk"
+
+#: sphinx/locale/__init__.py:158
+msgid "Error"
+msgstr "Fel"
+
+#: sphinx/locale/__init__.py:159
+msgid "Hint"
+msgstr "Råd"
+
+#: sphinx/locale/__init__.py:160
+msgid "Important"
+msgstr "Viktigt"
+
+#: sphinx/locale/__init__.py:161
+msgid "Note"
+msgstr "Observera"
+
+#: sphinx/locale/__init__.py:162
+msgid "See Also"
+msgstr "Se även"
+
+#: sphinx/locale/__init__.py:163
+msgid "Tip"
+msgstr "Tips"
+
+#: sphinx/locale/__init__.py:164
+msgid "Warning"
+msgstr "Varning"
+
+#: sphinx/locale/__init__.py:168
+#, python-format
+msgid "New in version %s"
+msgstr "Nyheter i version %s"
+
+#: sphinx/locale/__init__.py:169
+#, python-format
+msgid "Changed in version %s"
+msgstr "Förändrat i version %s"
+
+#: sphinx/locale/__init__.py:170
+#, python-format
+msgid "Deprecated since version %s"
+msgstr "Ersatt sedan version %s"
+
+#: sphinx/locale/__init__.py:176
+msgid "keyword"
+msgstr "nyckelord"
+
+#: sphinx/locale/__init__.py:177
+msgid "operator"
+msgstr "operator"
+
+#: sphinx/locale/__init__.py:178
+msgid "object"
+msgstr "objekt"
+
+#: sphinx/locale/__init__.py:180
+msgid "statement"
+msgstr "uttryck"
+
+#: sphinx/locale/__init__.py:181
+msgid "built-in function"
+msgstr "inbyggda funktioner"
+
+#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10
+#: sphinx/themes/basic/localtoc.html:11
+msgid "Table Of Contents"
+msgstr "Innehållsförteckning"
+
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
+msgid "Search"
+msgstr "Sök"
+
+#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15
+msgid "Go"
+msgstr "Gå"
+
+#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20
+msgid "Enter search terms or a module, class or function name."
+msgstr "Ange sökord eller modul-, klass- eller funktionsnamn."
+
+#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14
+msgid "Show Source"
+msgstr "Visa källfil"
+
+#: sphinx/themes/basic/defindex.html:11
+msgid "Overview"
+msgstr "Översikt"
+
+#: sphinx/themes/basic/defindex.html:20
+msgid "Indices and tables:"
+msgstr "Index och tabeller"
+
+#: sphinx/themes/basic/defindex.html:23
+msgid "Complete Table of Contents"
+msgstr "Komplett Innehållsförteckning"
+
+#: sphinx/themes/basic/defindex.html:24
+msgid "lists all sections and subsections"
+msgstr "lista över alla paragrafer och underparagrafer"
+
+#: sphinx/themes/basic/defindex.html:26
+msgid "search this documentation"
+msgstr "sök i det här dokumentet"
+
+#: sphinx/themes/basic/defindex.html:28
+msgid "Global Module Index"
+msgstr "Global Modulindex"
+
+#: sphinx/themes/basic/defindex.html:29
+msgid "quick access to all modules"
+msgstr "genväg till alla moduler"
+
+#: sphinx/themes/basic/defindex.html:31
+msgid "all functions, classes, terms"
+msgstr "alla funktioner, klasser, villkor"
+
+#: sphinx/themes/basic/genindex-single.html:35
+#, python-format
+msgid "Index &ndash; %(key)s"
+msgstr "Index &ndash; %(key)s"
+
+#: sphinx/themes/basic/genindex-single.html:63
+#: sphinx/themes/basic/genindex-split.html:24
+#: sphinx/themes/basic/genindex-split.html:38
+#: sphinx/themes/basic/genindex.html:74
+msgid "Full index on one page"
+msgstr "Hela innehållsförteckningen på en sida"
+
+#: sphinx/themes/basic/genindex-split.html:16
+msgid "Index pages by letter"
+msgstr "Innehållsförteckning per inledande bokstav"
+
+#: sphinx/themes/basic/genindex-split.html:25
+msgid "can be huge"
+msgstr "kan bli stort"
+
+#: sphinx/themes/basic/layout.html:29
+msgid "Navigation"
+msgstr "Navigation"
+
+#: sphinx/themes/basic/layout.html:122
+#, python-format
+msgid "Search within %(docstitle)s"
+msgstr "Sök bland %(docstitle)s"
+
+#: sphinx/themes/basic/layout.html:131
+msgid "About these documents"
+msgstr "Om dessa dokument"
+
+#: sphinx/themes/basic/layout.html:140
+msgid "Copyright"
+msgstr "Copyright"
+
+#: sphinx/themes/basic/layout.html:189
+#, python-format
+msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
+msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
+
+#: sphinx/themes/basic/layout.html:191
+#, python-format
+msgid "&copy; Copyright %(copyright)s."
+msgstr "&copy; Copyright %(copyright)s."
+
+#: sphinx/themes/basic/layout.html:195
+#, python-format
+msgid "Last updated on %(last_updated)s."
+msgstr "Senast uppdaterad %(last_updated)s."
+
+#: sphinx/themes/basic/layout.html:198
+#, python-format
+msgid ""
+"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
+msgstr ""
+"Skapad med <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
+
+#: sphinx/themes/basic/opensearch.xml:4
+#, python-format
+msgid "Search %(docstitle)s"
+msgstr "Sök %(docstitle)s"
+
+#: sphinx/themes/basic/relations.html:11
+msgid "Previous topic"
+msgstr "Föregående titel"
+
+#: sphinx/themes/basic/relations.html:13
+msgid "previous chapter"
+msgstr "Föregående kapitel"
+
+#: sphinx/themes/basic/relations.html:16
+msgid "Next topic"
+msgstr "Nästa titel"
+
+#: sphinx/themes/basic/relations.html:18
+msgid "next chapter"
+msgstr "Nästa kapitel"
+
+#: sphinx/themes/basic/search.html:24
+msgid ""
+"Please activate JavaScript to enable the search\n"
+" functionality."
+msgstr "Var god aktivera JavaScript för sökfunktionalitet."
+
+#: sphinx/themes/basic/search.html:29
+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 ""
+"Här kan du söka bland dessa dokument. Ange sökord nedan och klicka "
+"\"sök\".\n"
+" Sökningen måste träffa på samtliga angivna sökord."
+
+#: sphinx/themes/basic/search.html:36
+msgid "search"
+msgstr "sök"
+
+#: sphinx/themes/basic/search.html:40
+msgid "Search Results"
+msgstr "Sökresultat"
+
+#: sphinx/themes/basic/search.html:42
+msgid "Your search did not match any results."
+msgstr "Din sökning gav inga resultat."
+
+#: sphinx/themes/basic/searchbox.html:12
+msgid "Quick search"
+msgstr "Snabbsök"
+
+#: sphinx/themes/basic/sourcelink.html:11
+msgid "This Page"
+msgstr "Denna Sida"
+
+#: 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 "Förändringar 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 "Automatiskt genererad lista över förändringar i version %(version)s"
+
+#: sphinx/themes/basic/changes/versionchanges.html:18
+msgid "Library changes"
+msgstr "Förändringar i bibliotek"
+
+#: sphinx/themes/basic/changes/versionchanges.html:23
+msgid "C API changes"
+msgstr "Förändringar i C-API"
+
+#: sphinx/themes/basic/changes/versionchanges.html:25
+msgid "Other changes"
+msgstr "Övriga förändringar"
+
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
+msgid "Permalink to this headline"
+msgstr "Permalink till denna rubrik"
+
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
+msgid "Permalink to this definition"
+msgstr "Permalink till denna definition"
+
+#: sphinx/themes/basic/static/doctools.js:189
+msgid "Hide Search Matches"
+msgstr "Dölj Sökresultat"
+
+#: sphinx/themes/default/static/sidebar.js:69
+msgid "Expand sidebar"
+msgstr "Expandera sidolist"
+
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
+msgid "Collapse sidebar"
+msgstr "Dölj sidolist"
+
+#: sphinx/themes/haiku/layout.html:26
+msgid "Contents"
+msgstr "Innehåll"
+
+#: sphinx/writers/latex.py:177
+msgid "Release"
+msgstr "Utgåva"
+
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
+msgid "Footnotes"
+msgstr "Fotnoter"
+
+#: sphinx/writers/latex.py:676
+msgid "continued from previous page"
+msgstr "fortsättning från föregående sida"
+
+#: sphinx/writers/latex.py:681
+msgid "Continued on next page"
+msgstr "Fortsätter på nästa sida"
+
+#: sphinx/writers/text.py:437
+msgid "[image]"
+msgstr "[image]"
+
diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.js b/sphinx/locale/tr/LC_MESSAGES/sphinx.js
index 3cb91177..4ba20a32 100644
--- a/sphinx/locale/tr/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/tr/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "tr", "plural_expr": "0", "messages": {"Search Results": "Arama Sonu\u00e7lar\u0131", "Preparing search...": "Aramaya haz\u0131rlan\u0131yor...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Arama sonucunda hi\u00e7bir belge bulunamad\u0131. B\u00fct\u00fcn kelimeleri do\u011fru yazd\u0131\u011f\u0131n\u0131zdan ve gereken kategorileri se\u00e7ti\u011finizden emin olun.", "Search finished, found %s page(s) matching the search query.": "Arama sonu\u00e7land\u0131, aramayla e\u015fle\u015fen %s sayfa bulundu.", ", in ": ", \u015funun i\u00e7inde: ", "Expand sidebar": "Yan \u00e7ubu\u011fu geni\u015flet", "Permalink to this headline": "Bu ba\u015fl\u0131\u011f\u0131n kal\u0131c\u0131 ba\u011flant\u0131s\u0131", "Searching": "Ar\u0131yor", "Collapse sidebar": "Yan \u00e7ubu\u011fu daralt", "Permalink to this definition": "Bu tan\u0131m\u0131n kal\u0131c\u0131 ba\u011flant\u0131s\u0131", "Hide Search Matches": "Arama Sonu\u00e7lar\u0131n\u0131 Gizle"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "tr", "plural_expr": "0", "messages": {"Hide Search Matches": "Arama Sonu\u00e7lar\u0131n\u0131 Gizle", "Permalink to this definition": "Bu tan\u0131m\u0131n kal\u0131c\u0131 ba\u011flant\u0131s\u0131", "Expand sidebar": "Yan \u00e7ubu\u011fu geni\u015flet", "Permalink to this headline": "Bu ba\u015fl\u0131\u011f\u0131n kal\u0131c\u0131 ba\u011flant\u0131s\u0131", "Collapse sidebar": "Yan \u00e7ubu\u011fu daralt"}}); \ No newline at end of file
diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.mo b/sphinx/locale/tr/LC_MESSAGES/sphinx.mo
index 5054199c..812b7cd9 100644
--- a/sphinx/locale/tr/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/tr/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.po b/sphinx/locale/tr/LC_MESSAGES/sphinx.po
index e1e5c173..bf5fd568 100644
--- a/sphinx/locale/tr/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/tr/LC_MESSAGES/sphinx.po
@@ -1,412 +1,407 @@
# Turkish translations for Sphinx.
-# Copyright (C) 2009 ORGANIZATION
+# Copyright (C) 2011 ORGANIZATION
# This file is distributed under the same license as the Sphinx project.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2009.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
#
msgid ""
msgstr ""
-"Project-Id-Version: Sphinx 0.6.2+/6b02a19ccf31\n"
+"Project-Id-Version: Sphinx 1.1pre/339c7a794c1a\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2009-08-06 22:48+0200\n"
-"PO-Revision-Date: 2010-05-28 10:18+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-09-21 10:14+0200\n"
"Last-Translator: Firat Ozgul <ozgulfirat@gmail.com>\n"
-"Language-Team: Turkish <kistihza@yahoo.com>\n"
+"Language-Team: tr <LL@li.org>\n"
"Plural-Forms: nplurals=1; plural=0\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106
-#: sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%d %B %Y"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr "bkz. %s"
+
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr "ayrıca bkz. %s"
+
+#: sphinx/roles.py:175
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python'u İyileştirme Önerileri!PEP %s"
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python'u İyileştirme Önerileri; PEP %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Gömülüler"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Modül düzeyi"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%d %b %Y"
-#: sphinx/builders/html.py:285
-#: sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Genel Dizin"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "dizin"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "sonraki"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "önceki"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr " (şunun içinde: "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Bölümü yazan: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Modülü yazan: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
msgid "Code author: "
msgstr "Kodu yazan: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Yazan: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Ayrıca bkz."
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr "%s %s"
-#: sphinx/domains/c.py:51
-#: sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Parametreler"
-#: sphinx/domains/c.py:54
-#: sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
-msgstr "Şunu döndürür:"
+msgstr "Dönüş değeri:"
-#: sphinx/domains/c.py:56
-#: sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Dönüş tipi"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (C fonksiyonu)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (C öğesi)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (C makrosu)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (C tipi)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (C değişkeni)"
-#: sphinx/domains/c.py:171
-#: sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166
-#: sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "fonksiyonu"
-#: sphinx/domains/c.py:172
-#: sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "öğesi"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr "makrosu"
-#: sphinx/domains/c.py:174
-#: sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "tipi"
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
msgid "variable"
msgstr "değişkeni"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++ sınıfı)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ tipi)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ öğesi)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ fonksiyonu)"
-#: sphinx/domains/cpp.py:1030
-#: sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr "sınıfı"
-#: sphinx/domains/javascript.py:117
-#: sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (gömülü fonksiyon)"
-#: sphinx/domains/javascript.py:118
-#: sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s metodu)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (sınıfı)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr "%s (global değişken veya sabit)"
-#: sphinx/domains/javascript.py:122
-#: sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s niteliği)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
msgid "Arguments"
msgstr "Argümanlar"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr "Şunu verir: "
-#: sphinx/domains/javascript.py:167
-#: sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr "verisi"
-#: sphinx/domains/javascript.py:168
-#: sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "niteliği"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
msgid "Variables"
msgstr "Değişkenler"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Şunu üretir:"
-#: sphinx/domains/python.py:222
-#: sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291
-#: sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (%s modülü içinde)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (gömülü değişken)"
-#: sphinx/domains/python.py:226
-#: sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (%s modülü içinde)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (gömülü sınıf)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (%s içinde bir sınıf)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s metodu)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s statik metodu)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s statik metodu)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s sınıf metodu)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s sınıf metodu)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s niteliği)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Platformlar:"
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (modül)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
msgid "Python Module Index"
msgstr "Python Modül Dizini"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "modüller"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Önerilmiyor"
-#: sphinx/domains/python.py:500
-#: sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "istisnası"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr "metodu"
-#: sphinx/domains/python.py:502
-#, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
msgstr "sınıf metodu"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "statik metodu"
-#: sphinx/domains/python.py:505
-#: sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "modülü"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (önerilmiyor)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr "%s (yönerge)"
-#: sphinx/domains/rst.py:55
+#: sphinx/domains/rst.py:57
#, python-format
msgid "%s (role)"
msgstr "%s (rol)"
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr "yönergesi"
-#: sphinx/domains/rst.py:104
+#: sphinx/domains/rst.py:107
msgid "role"
msgstr "rolü"
-#: sphinx/domains/std.py:68
-#: sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "çevre değişkeni; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%skomut satırı seçeneği; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr "sözlük terimi"
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr "dilbilgisi girdisi"
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr "referans etiketi"
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "çevre değişkeni"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr "program seçeneği"
-#: sphinx/domains/std.py:360
-#: sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11
-#: sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50
-#: sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Dizin"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Modül Dizini"
-#: sphinx/domains/std.py:362
-#: sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Arama Sayfası"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr " Taban: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr "şunun takma adı: :class:`%s`"
@@ -424,131 +419,125 @@ msgstr "(<<özgün girdi>> %s içinde ve %d satırında bulunuyor.)"
msgid "original entry"
msgstr "özgün girdi"
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr "[kaynak]"
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr "[belgeler]"
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
msgid "Module code"
msgstr "Modül kodu"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr "<h1>%s öğesinin kaynak kodu</h1>"
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr "Genel bakış: modül kodu"
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr "<h1>Kodları mevcut bütün modüller</h1>"
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Dikkat"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Uyarı"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Tehlike"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Hata"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "İpucu"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Önemli"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Not"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Ayrıca bkz."
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Tüyo"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Uyarı"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "%s sürümüyle geldi"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "%s sürümünde değişti"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "%s sürümünden beri önerilmiyor"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
-msgstr "anahtar kelime"
+msgstr "anahtar sözcük"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "işleç"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "nesne"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "deyim"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "gömülü fonksiyon"
-#: sphinx/themes/agogo/layout.html:45
-#: sphinx/themes/basic/globaltoc.html:10
+#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10
#: sphinx/themes/basic/localtoc.html:11
msgid "Table Of Contents"
msgstr "İçindekiler Tablosu"
-#: sphinx/themes/agogo/layout.html:49
-#: sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11
-#: sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Ara"
-#: sphinx/themes/agogo/layout.html:52
-#: sphinx/themes/basic/searchbox.html:15
+#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15
msgid "Go"
msgstr "Git"
-#: sphinx/themes/agogo/layout.html:57
-#: sphinx/themes/basic/searchbox.html:20
+#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20
msgid "Enter search terms or a module, class or function name."
msgstr "Aranacak terimleri veya modül, sınıf ya da fonksiyon adını yazınız"
-#: sphinx/themes/agogo/layout.html:78
-#: sphinx/themes/basic/sourcelink.html:14
+#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14
msgid "Show Source"
msgstr "Kaynağı Göster"
@@ -584,15 +573,15 @@ msgstr "bütün modüllere hızlı erişim"
msgid "all functions, classes, terms"
msgstr "bütün fonksiyonlar, sınıflar, terimler"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Dizin &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Bütün dizin tek sayfada"
@@ -604,42 +593,46 @@ msgstr "Harfe göre dizin sayfaları"
msgid "can be huge"
msgstr "çok büyük olabilir"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Gezinti"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "%(docstitle)s içinde ara"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "Bu belgeler hakkında"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Copyright"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Copyright %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Son güncelleme: %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
-msgid "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s."
-msgstr "<a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s ile oluşturulmuştur."
+msgid ""
+"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
+"%(sphinx_version)s."
+msgstr ""
+"<a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s ile "
+"oluşturulmuştur."
#: sphinx/themes/basic/opensearch.xml:4
#, python-format
@@ -662,7 +655,7 @@ msgstr "Sonraki konu"
msgid "next chapter"
msgstr "sonraki bölüm"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
@@ -670,7 +663,7 @@ msgstr ""
"Arama işlevini kullanabilmek için lütfen JavaScript'i\n"
" etkinleştirin."
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -682,16 +675,15 @@ msgstr ""
"otomatik olarak bütün kelimeleri arayacaktır. Eksik kelime içeren \n"
"sayfalar sonuç listesinde görünmez."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "ara"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Arama Sonuçları"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Arama sonucunda herhangi bir belge bulunamadı."
@@ -731,14 +723,12 @@ msgstr "C API'sindeki değişiklikler"
msgid "Other changes"
msgstr "Diğer değişiklikler"
-#: sphinx/themes/basic/static/doctools.js:154
-#: sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Bu başlığın kalıcı bağlantısı"
-#: sphinx/themes/basic/static/doctools.js:160
-#: sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Bu tanımın kalıcı bağlantısı"
@@ -746,33 +736,12 @@ msgstr "Bu tanımın kalıcı bağlantısı"
msgid "Hide Search Matches"
msgstr "Arama Sonuçlarını Gizle"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Arıyor"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Aramaya hazırlanıyor..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", şunun içinde: "
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 "Arama sonucunda hiçbir belge bulunamadı. Bütün kelimeleri doğru yazdığınızdan ve gereken kategorileri seçtiğinizden emin olun."
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "Arama sonuçlandı, aramayla eşleşen %s sayfa bulundu."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr "Yan çubuğu genişlet"
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr "Yan çubuğu daralt"
@@ -780,24 +749,24 @@ msgstr "Yan çubuğu daralt"
msgid "Contents"
msgstr "İçindekiler"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Sürüm"
-#: sphinx/writers/latex.py:572
-#: sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr "Dipnotları"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr "önceki sayfadan devam"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
msgid "Continued on next page"
msgstr "Devamı sonraki sayfada"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[resim]"
diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js
index 7af42ca8..1c7babb7 100644
--- a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "uk_UA", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Search Results": "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0438 \u043f\u043e\u0448\u0443\u043a\u0443", "Preparing search...": "\u041f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u043e \u043f\u043e\u0448\u0443\u043a\u0443...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u0412\u0430\u0448 \u043f\u043e\u0448\u0443\u043a \u043d\u0435 \u0432\u0438\u044f\u0432\u0438\u0432 \u0436\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043f\u0456\u0432\u043f\u0430\u0434\u0456\u043d\u043d\u044f. \u0411\u0443\u0434\u044c-\u043b\u0430\u0441\u043a\u0430 \u043f\u0435\u0440\u0435\u043a\u043e\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0449\u043e \u0432\u0441\u0456 \u0441\u043b\u043e\u0432\u0430 \u043d\u0430\u0431\u0440\u0430\u043d\u0456 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0456 \u0432\u0438 \u043e\u0431\u0440\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043d\u044c\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0439.", "Search finished, found %s page(s) matching the search query.": "\u041f\u043e\u0448\u0443\u043a \u0437\u0430\u043a\u0456\u043d\u0447\u0435\u043d\u043e, \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e %s \u0441\u0442\u043e\u0440\u0456\u043d\u043e\u043a \u044f\u043a\u0456 \u0441\u043f\u0456\u0432\u043f\u0430\u043b\u0438 \u0437 \u043f\u043e\u0448\u0443\u043a\u043e\u0432\u0438\u043c \u0437\u0430\u043f\u0438\u0442\u043e\u043c.", ", in ": ", \u0432 ", "Expand sidebar": "", "Permalink to this headline": "\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u0435\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Searching": "\u0428\u0443\u043a\u0430\u044e", "Collapse sidebar": "", "Permalink to this definition": "\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u0435 \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f", "Hide Search Matches": "\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u0442\u0438 \u0441\u043f\u0456\u0432\u043f\u0430\u0434\u0456\u043d\u043d\u044f \u043f\u043e\u0448\u0443\u043a\u0443"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "uk_UA", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Hide Search Matches": "\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u0442\u0438 \u0441\u043f\u0456\u0432\u043f\u0430\u0434\u0456\u043d\u043d\u044f \u043f\u043e\u0448\u0443\u043a\u0443", "Permalink to this definition": "\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u0435 \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f", "Expand sidebar": "", "Permalink to this headline": "\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u0435\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo
index cfa0b8e0..4bc58ee1 100644
--- a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po
index 6871e412..32ce1dc4 100644
--- a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 0.6\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2008-12-28 23:40+0100\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-09-21 10:15+0200\n"
"Last-Translator: Petro Sasnyk <petro@sasnyk.name>\n"
"Language-Team: uk_UA <LL@li.org>\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
@@ -16,380 +16,398 @@ msgstr ""
"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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr ""
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr ""
+
+#: sphinx/environment.py:1628
+#, fuzzy, python-format
+msgid "see also %s"
+msgstr "дивись також %s"
+
+#: sphinx/roles.py:175
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python Enhancement Proposals!PEP %s"
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python Enhancement Proposals; PEP %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "Вбудовані елементи"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "Рівень модуля"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%b %d, %Y"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Загальний індекс"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "індекс"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "наступний"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "попередній"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr " (в "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Автор секції: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "Автор модуля: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
#, fuzzy
msgid "Code author: "
msgstr "Автор модуля: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "Автор: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "Дивись також"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "Параметри"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "Повертає"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "Тип повернення"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (С функція)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (C член)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (C макрос)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (C тип)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (C змінна)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "функція"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "член"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr "макрос"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "тип"
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
#, fuzzy
msgid "variable"
msgstr "Змінна"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++ клас)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ тип)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ член)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ функція)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr "клас"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (вбудована функція)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s метод)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (клас)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s атрибут)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
#, fuzzy
msgid "Arguments"
msgstr "Параметри"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
-#, python-format
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "атрибут"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
#, fuzzy
msgid "Variables"
msgstr "Змінна"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "Викликає"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (в модулі %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (вбудована змінна)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s (в модулі %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (вбудований клас)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr "%s (клас в %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s метод)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s статичний метод)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s статичний метод)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s метод)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s метод)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s атрибут)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "Платформи: "
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (модуль)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
#, fuzzy
msgid "Python Module Index"
msgstr "Індекс модулів"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "модулі"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "Застарілий"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "виняткова ситуація"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
-msgstr "%s() (%s метод)"
+msgstr ""
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "статичний метод"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "модуль"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+msgid " (deprecated)"
+msgstr " (застарілий)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
-#, fuzzy, python-format
+#: sphinx/domains/rst.py:57
+#, python-format
msgid "%s (role)"
-msgstr "%s (модуль)"
+msgstr ""
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
-#, fuzzy
+#: sphinx/domains/rst.py:107
msgid "role"
-msgstr "модуль"
+msgstr ""
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "змінна оточення; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%sопція командного рядка; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr ""
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr ""
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr ""
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "змінна оточення"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "Індекс"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "Індекс модулів"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Сторінка пошуку"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr " Базовий: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr "синонім :class:`%s`"
@@ -401,110 +419,110 @@ msgstr "Доробити"
#: sphinx/ext/todo.py:109
#, fuzzy, python-format
msgid "(The <<original entry>> is located in %s, line %d.)"
-msgstr "(Початкове входження знаходиться в %s, рядок %d і може бути знайдений "
+msgstr "(Початкове входження знаходиться в %s, рядок %d.)"
#: sphinx/ext/todo.py:117
msgid "original entry"
msgstr ""
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
#, fuzzy
msgid "Module code"
msgstr "модуль"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr ""
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr ""
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr ""
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "Увага"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "Застереження"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "Небезпека"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "Помилка"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "Підказка"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "Важливо"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "Примітка"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "Дивись також"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "Порада"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "Попередження"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "Нове в версії %s"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "Змінено в версії %s"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "Застаріло починаючи з версії %s"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "ключове слово"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "оператор"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "об'єкт"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "вираз"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "вбудована функція"
@@ -513,8 +531,8 @@ msgstr "вбудована функція"
msgid "Table Of Contents"
msgstr "Зміст"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Пошук"
@@ -562,15 +580,15 @@ msgstr "швидкий доступ до всіх модулів"
msgid "all functions, classes, terms"
msgstr "всі функції, класи, терміни"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "Індекс &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "Повний індекс на одній сторінці"
@@ -582,39 +600,39 @@ msgstr "Індексні сторінки по символам"
msgid "can be huge"
msgstr "може бути величезним"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "Навігація"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Шукати в %(docstitle)s"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "Про ці документи"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "Авторські права"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; Copyright %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "Востаннє оновлено %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -644,7 +662,7 @@ msgstr "Наступна тема"
msgid "next chapter"
msgstr "наступний розділ"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
@@ -653,7 +671,7 @@ msgstr ""
"\"\n"
"\" пошук."
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -665,16 +683,15 @@ msgstr ""
" пошуку автоматично шукатиме за всіма словами. Сторінки\n"
" що містять менше слів не з'являться в результуючому списку."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "пошук"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "Результати пошуку"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "Ваш пошук не виявив жодних співпадінь."
@@ -714,12 +731,12 @@ msgstr "зміни C API"
msgid "Other changes"
msgstr "Інші зміни"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "Постійне посилання на цей заголовок"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "Постійне посилання на це визначення"
@@ -727,37 +744,12 @@ msgstr "Постійне посилання на це визначення"
msgid "Hide Search Matches"
msgstr "Приховати співпадіння пошуку"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "Шукаю"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "Підготовка до пошуку..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", в "
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 ""
-"Ваш пошук не виявив жодного співпадіння. Будь-ласка переконайтеся що всі "
-"слова набрані правильно і ви обрали достатньо категорій."
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "Пошук закінчено, знайдено %s сторінок які співпали з пошуковим запитом."
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr ""
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr ""
@@ -765,23 +757,25 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "Реліз"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
#, fuzzy
msgid "Continued on next page"
msgstr "Повний індекс на одній сторінці"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr ""
+
diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js
index bf0de29d..a59a8b24 100644
--- a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "zh_CN", "plural_expr": "0", "messages": {"Search Results": "\u641c\u7d22\u7ed3\u679c", "Preparing search...": "\u51c6\u5907\u641c\u7d22...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u4f60\u7684\u641c\u7d22\u6ca1\u6709\u5339\u914d\u5230\u4efb\u4f55\u6587\u6863\u3002\u8bf7\u786e\u8ba4\u4f60\u6240\u641c\u7d22\u7684\u5173\u952e\u5b57.", "Search finished, found %s page(s) matching the search query.": "\u641c\u7d22\u5b8c\u6210\uff0c \u627e\u5230\u4e86 %s \u9875\u5339\u914d\u6240\u641c\u7d22\u7684\u5173\u952e\u5b57", ", in ": ", \u4f4d\u4e8e", "Expand sidebar": "", "Permalink to this headline": "\u6c38\u4e45\u94fe\u63a5\u81f3\u6807\u9898", "Searching": "\u641c\u7d22\u4e2d", "Collapse sidebar": "", "Permalink to this definition": "\u6c38\u4e45\u94fe\u63a5\u81f3\u76ee\u6807", "Hide Search Matches": "\u9690\u85cf\u641c\u7d22\u7ed3\u679c"}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "zh_CN", "plural_expr": "0", "messages": {"Hide Search Matches": "\u9690\u85cf\u641c\u7d22\u7ed3\u679c", "Permalink to this definition": "\u6c38\u4e45\u94fe\u63a5\u81f3\u76ee\u6807", "Expand sidebar": "", "Permalink to this headline": "\u6c38\u4e45\u94fe\u63a5\u81f3\u6807\u9898", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo
index b62c4c5b..3d9dac2b 100644
--- a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po
index 7afde026..cb7b3e6f 100644
--- a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po
@@ -8,387 +8,407 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 0.6\n"
"Report-Msgid-Bugs-To: zhutao.iscas@gmail.com\n"
-"POT-Creation-Date: 2009-03-09 19:46+0120\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-09-21 10:15+0200\n"
"Last-Translator: Tower Joo<zhutao.iscas@gmail.com>\n"
"Language-Team: cn <LL@li.org>\n"
"Plural-Forms: nplurals=1; plural=0\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%Y 年 %m 月 %d 日"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
+#, python-format
+msgid "see %s"
+msgstr ""
+
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr "也可以参考 %s"
+
+#: sphinx/roles.py:175
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
-msgstr "Python 建议文件!PEP %s"
+msgid "Python Enhancement Proposals; PEP %s"
+msgstr "Python 建议文件; PEP %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr "内置"
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr "模块级别"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%Y 年 %m 月 %d 日"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "总目录"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "索引"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "下一页"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "上一页"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Section 作者:"
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "模块作者:"
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
#, fuzzy
msgid "Code author: "
msgstr "模块作者:"
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "作者:"
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr "也可以参考"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "参数"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "返回"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "返回类型"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (C 函数)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (C 成员)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (C 宏)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (C 类型)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (C 变量)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "函数"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "成员"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr ""
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
#, fuzzy
msgid "variable"
msgstr "变量"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, fuzzy, python-format
msgid "%s (C++ class)"
-msgstr "%s (內置类)"
+msgstr "%s (C++ 內置类)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ 类型)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ 成员)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ 函数)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr ""
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (內置函数)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s 方法)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s() (內置类)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s 属性)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
#, fuzzy
msgid "Arguments"
msgstr "参数"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "属性"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
#, fuzzy
msgid "Variables"
msgstr "变量"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr "引发"
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (在 %s 模块中)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (內置变量)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s() (在 %s 模块中)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (內置类)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr ""
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s 方法)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s 静态方法)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s 静态方法)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s 方法)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s 方法)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s 属性)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "平台"
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (模块)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
#, fuzzy
msgid "Python Module Index"
msgstr "模块索引"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "模块"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "已移除"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "例外"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
msgid "class method"
-msgstr "%s() (%s 方法)"
+msgstr ""
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "静态方法"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "模块"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+#, fuzzy
+msgid " (deprecated)"
+msgstr " (已移除)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
-#, fuzzy, python-format
+#: sphinx/domains/rst.py:57
+#, python-format
msgid "%s (role)"
-msgstr "%s (模块)"
+msgstr ""
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
-#, fuzzy
+#: sphinx/domains/rst.py:107
msgid "role"
-msgstr "模块"
+msgstr ""
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "环境变量; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%s命令行选项; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr ""
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr ""
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr ""
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "环境变量"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "索引"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "模块索引"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "搜索页面"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -398,112 +418,112 @@ msgid "Todo"
msgstr "待处理"
#: sphinx/ext/todo.py:109
-#, fuzzy, python-format
+#, python-format
msgid "(The <<original entry>> is located in %s, line %d.)"
-msgstr "(最初的入口位于%s 的第%d行"
+msgstr ""
#: sphinx/ext/todo.py:117
msgid "original entry"
msgstr ""
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
#, fuzzy
msgid "Module code"
msgstr "模块"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr ""
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr ""
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr ""
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "注意"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "警告"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "危险"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "错误"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "提示"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "重要"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "注解"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr "也可以参考"
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "小技巧"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "警告"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "%s 新版功能"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "在 %s 版更改"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "%s 版后已移除"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "关键字"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "操作数"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "对象"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr "语句"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "內置函数"
@@ -512,8 +532,8 @@ msgstr "內置函数"
msgid "Table Of Contents"
msgstr "內容目录"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "搜索"
@@ -561,15 +581,15 @@ msgstr "快速查看所有的模块"
msgid "all functions, classes, terms"
msgstr "所的函数,类,术语"
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr "索引 &ndash; %(key)s"
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr "一页的全部索引"
@@ -581,39 +601,39 @@ msgstr "按照字母的索引页"
msgid "can be huge"
msgstr "可能会很多"
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "导航"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "在 %(docstitle)s 中搜索"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr "关于这些文档"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "版权所有"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr "&copy; <a href=\"%(path)s\">版权所有</a> %(copyright)s."
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr "&copy; 版权所有 %(copyright)s."
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "最后更新日期是 %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -641,13 +661,13 @@ msgstr "下一个主题"
msgid "next chapter"
msgstr "下一章"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr ""
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -655,16 +675,15 @@ msgid ""
" containing fewer words won't appear in the result list."
msgstr "在这儿,你可以对这些文档进行搜索。向搜索框中输入你所要搜索的关键字并点击\"搜索\"。注意:搜索引擎会自动搜索所有的关键字。将不会搜索到部分关键字的页面."
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "搜索"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "搜索结果"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr "你的搜索没有找到任何的结果."
@@ -704,12 +723,12 @@ msgstr "C API 更改"
msgid "Other changes"
msgstr "其他更改"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr "永久链接至标题"
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr "永久链接至目标"
@@ -717,35 +736,12 @@ msgstr "永久链接至目标"
msgid "Hide Search Matches"
msgstr "隐藏搜索结果"
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "搜索中"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "准备搜索..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ", 位于"
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 "你的搜索没有匹配到任何文档。请确认你所搜索的关键字."
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr "搜索完成, 找到了 %s 页匹配所搜索的关键字"
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr ""
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr ""
@@ -753,23 +749,25 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "发布"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
#, fuzzy
msgid "Continued on next page"
msgstr "一页的全部索引"
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[图片]"
+
diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js
index ac64cd0b..9bfcec76 100644
--- a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js
+++ b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js
@@ -1 +1 @@
-Documentation.addTranslations({"locale": "zh_TW", "plural_expr": "0", "messages": {"Search Results": "\u641c\u5c0b\u7d50\u679c", "Preparing search...": "\u6e96\u5099\u641c\u5c0b...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Search finished, found %s page(s) matching the search query.": "", ", in ": "", "Expand sidebar": "", "Permalink to this headline": "", "Searching": "\u641c\u5c0b\u4e2d", "Collapse sidebar": "", "Permalink to this definition": "", "Hide Search Matches": ""}}); \ No newline at end of file
+Documentation.addTranslations({"locale": "zh_TW", "plural_expr": "0", "messages": {"Hide Search Matches": "", "Permalink to this definition": "", "Expand sidebar": "", "Permalink to this headline": "", "Collapse sidebar": ""}}); \ No newline at end of file
diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo
index 008ecec0..9dd86da5 100644
--- a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo
+++ b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo
Binary files differ
diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po
index 33dff8ca..2a4fbef0 100644
--- a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po
@@ -7,390 +7,409 @@ msgid ""
msgstr ""
"Project-Id-Version: Sphinx 0.5\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2008-11-09 19:46+0100\n"
-"PO-Revision-Date: 2010-05-24 23:54+0200\n"
+"POT-Creation-Date: 2011-09-21 10:06+0200\n"
+"PO-Revision-Date: 2011-01-22 14:41+0100\n"
"Last-Translator: Fred Lin <gasolin@gmail.com>\n"
"Language-Team: tw <LL@li.org>\n"
"Plural-Forms: nplurals=1; plural=0\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"
+"Generated-By: Babel 0.9.6\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
-#: sphinx/writers/manpage.py:67
+#: sphinx/config.py:81
+#, python-format
+msgid "%s %s documentation"
+msgstr ""
+
+#: sphinx/environment.py:119 sphinx/writers/latex.py:190
+#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203
#, python-format
msgid "%B %d, %Y"
msgstr "%Y 年 %m 月 %d 日"
-#: sphinx/roles.py:174
+#: sphinx/environment.py:1625
#, python-format
-msgid "Python Enhancement Proposals!PEP %s"
+msgid "see %s"
+msgstr ""
+
+#: sphinx/environment.py:1628
+#, python-format
+msgid "see also %s"
+msgstr ""
+
+#: sphinx/roles.py:175
+#, fuzzy, python-format
+msgid "Python Enhancement Proposals; PEP %s"
msgstr "Python 建議文件!PEP %s"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:73
msgid "Builtins"
msgstr ""
-#: sphinx/builders/changes.py:74
+#: sphinx/builders/changes.py:75
msgid "Module level"
msgstr ""
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:274
#, python-format
msgid "%b %d, %Y"
msgstr "%Y 年 %m 月 %d 日"
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "總索引"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:293
msgid "index"
msgstr "索引"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:353
msgid "next"
msgstr "下一頁"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:362
msgid "previous"
msgstr "上一頁"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:136
msgid "Section author: "
msgstr "Section 作者:"
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:138
msgid "Module author: "
msgstr "模組作者:"
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:140
#, fuzzy
msgid "Code author: "
msgstr "模組作者:"
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:142
msgid "Author: "
msgstr "作者:"
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:215
msgid "See also"
msgstr ""
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:244
#, python-format
msgid "%s %s"
msgstr ""
-#: sphinx/domains/c.py:51 sphinx/domains/python.py:49
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:95
msgid "Parameters"
msgstr "參數"
-#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137
-#: sphinx/domains/python.py:59
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128
+#: sphinx/domains/python.py:107
msgid "Returns"
msgstr "返回"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:109
msgid "Return type"
msgstr "返回類別"
-#: sphinx/domains/c.py:133
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C function)"
msgstr "%s (C 函式)"
-#: sphinx/domains/c.py:135
+#: sphinx/domains/c.py:143
#, python-format
msgid "%s (C member)"
msgstr "%s (C 成員)"
-#: sphinx/domains/c.py:137
+#: sphinx/domains/c.py:145
#, python-format
msgid "%s (C macro)"
msgstr "%s (C 巨集)"
-#: sphinx/domains/c.py:139
+#: sphinx/domains/c.py:147
#, python-format
msgid "%s (C type)"
msgstr "%s (C 類別)"
-#: sphinx/domains/c.py:141
+#: sphinx/domains/c.py:149
#, python-format
msgid "%s (C variable)"
msgstr "%s (C 變數)"
-#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031
-#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497
-#, python-format
+#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060
+#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559
msgid "function"
msgstr "函式"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061
msgid "member"
msgstr "成員"
-#: sphinx/domains/c.py:173
+#: sphinx/domains/c.py:206
msgid "macro"
msgstr "巨集"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062
msgid "type"
msgstr "類別"
-#: sphinx/domains/c.py:175
+#: sphinx/domains/c.py:208
#, fuzzy
msgid "variable"
msgstr "變數"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:904
#, fuzzy, python-format
msgid "%s (C++ class)"
msgstr "%s (內建類別)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:919
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ 類別)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:938
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ 成員)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:990
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ 函式)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163
+#: sphinx/domains/python.py:561
msgid "class"
msgstr ""
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (內建函式)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s 方法)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:109
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (內建類別)"
+
+#: sphinx/domains/javascript.py:111
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s 屬性)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:122
#, fuzzy
msgid "Arguments"
msgstr "參數"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:125
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
-#, python-format
+#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566
msgid "attribute"
msgstr "屬性"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:100
#, fuzzy
msgid "Variables"
msgstr "變數"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:104
msgid "Raises"
msgstr ""
-#: sphinx/domains/python.py:222 sphinx/domains/python.py:279
-#: sphinx/domains/python.py:291 sphinx/domains/python.py:304
+#: sphinx/domains/python.py:255 sphinx/domains/python.py:312
+#: sphinx/domains/python.py:324 sphinx/domains/python.py:337
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (在 %s 模組中)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:258
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (內建變數)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:259 sphinx/domains/python.py:350
#, python-format
msgid "%s (in module %s)"
msgstr "%s() (在 %s 模組中)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:275
#, python-format
msgid "%s (built-in class)"
msgstr "%s (內建類別)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:276
#, python-format
msgid "%s (class in %s)"
msgstr ""
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:316
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s 方法)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:328
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s 靜態方法)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s 靜態方法)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:341
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s 方法)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:344
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s 方法)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:354
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s 屬性)"
-#: sphinx/domains/python.py:366
-msgid "Platforms: "
-msgstr "平台"
-
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:434
#, python-format
msgid "%s (module)"
msgstr "%s (模組)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:491
#, fuzzy
msgid "Python Module Index"
msgstr "模組索引"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:492
msgid "modules"
msgstr "模組"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:537
msgid "Deprecated"
msgstr "已移除"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179
msgid "exception"
msgstr "例外"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:563
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:564
+#, fuzzy
msgid "class method"
msgstr "%s() (%s 方法)"
-#: sphinx/domains/python.py:503
-#, python-format
+#: sphinx/domains/python.py:565
msgid "static method"
msgstr "靜態方法"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175
msgid "module"
msgstr "模組"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:695
+#, fuzzy
+msgid " (deprecated)"
+msgstr "已移除"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
msgstr ""
-#: sphinx/domains/rst.py:55
+#: sphinx/domains/rst.py:57
#, fuzzy, python-format
msgid "%s (role)"
msgstr "%s (模組)"
-#: sphinx/domains/rst.py:103
+#: sphinx/domains/rst.py:106
msgid "directive"
msgstr ""
-#: sphinx/domains/rst.py:104
+#: sphinx/domains/rst.py:107
#, fuzzy
msgid "role"
msgstr "模組"
-#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
+#: sphinx/domains/std.py:70 sphinx/domains/std.py:86
#, python-format
msgid "environment variable; %s"
msgstr "環境變數; %s"
-#: sphinx/domains/std.py:160
+#: sphinx/domains/std.py:162
#, python-format
msgid "%scommand line option; %s"
msgstr "%s命令列選項; %s"
-#: sphinx/domains/std.py:328
+#: sphinx/domains/std.py:393
msgid "glossary term"
msgstr ""
-#: sphinx/domains/std.py:329
+#: sphinx/domains/std.py:394
msgid "grammar token"
msgstr ""
-#: sphinx/domains/std.py:330
+#: sphinx/domains/std.py:395
msgid "reference label"
msgstr ""
-#: sphinx/domains/std.py:331
+#: sphinx/domains/std.py:396
msgid "environment variable"
msgstr "環境變數"
-#: sphinx/domains/std.py:332
+#: sphinx/domains/std.py:397
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32
#: sphinx/themes/basic/genindex-split.html:11
#: sphinx/themes/basic/genindex-split.html:14
-#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14
-#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
-#: sphinx/writers/latex.py:173
+#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35
+#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134
+#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456
msgid "Index"
msgstr "索引"
-#: sphinx/domains/std.py:361
+#: sphinx/domains/std.py:428
msgid "Module Index"
msgstr "模組索引"
-#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "搜尋頁面"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:1002
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:1038
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -408,104 +427,104 @@ msgstr ""
msgid "original entry"
msgstr ""
-#: sphinx/ext/viewcode.py:66
+#: sphinx/ext/viewcode.py:70
msgid "[source]"
msgstr ""
-#: sphinx/ext/viewcode.py:109
+#: sphinx/ext/viewcode.py:117
msgid "[docs]"
msgstr ""
-#: sphinx/ext/viewcode.py:123
+#: sphinx/ext/viewcode.py:131
#, fuzzy
msgid "Module code"
msgstr "模組"
-#: sphinx/ext/viewcode.py:129
+#: sphinx/ext/viewcode.py:137
#, python-format
msgid "<h1>Source code for %s</h1>"
msgstr ""
-#: sphinx/ext/viewcode.py:156
+#: sphinx/ext/viewcode.py:164
msgid "Overview: module code"
msgstr ""
-#: sphinx/ext/viewcode.py:157
+#: sphinx/ext/viewcode.py:165
msgid "<h1>All modules for which code is available</h1>"
msgstr ""
-#: sphinx/locale/__init__.py:139
+#: sphinx/locale/__init__.py:155
msgid "Attention"
msgstr "注意"
-#: sphinx/locale/__init__.py:140
+#: sphinx/locale/__init__.py:156
msgid "Caution"
msgstr "警示"
-#: sphinx/locale/__init__.py:141
+#: sphinx/locale/__init__.py:157
msgid "Danger"
msgstr "危險"
-#: sphinx/locale/__init__.py:142
+#: sphinx/locale/__init__.py:158
msgid "Error"
msgstr "錯誤"
-#: sphinx/locale/__init__.py:143
+#: sphinx/locale/__init__.py:159
msgid "Hint"
msgstr "提示"
-#: sphinx/locale/__init__.py:144
+#: sphinx/locale/__init__.py:160
msgid "Important"
msgstr "重要"
-#: sphinx/locale/__init__.py:145
+#: sphinx/locale/__init__.py:161
msgid "Note"
msgstr "註解"
-#: sphinx/locale/__init__.py:146
+#: sphinx/locale/__init__.py:162
msgid "See Also"
msgstr ""
-#: sphinx/locale/__init__.py:147
+#: sphinx/locale/__init__.py:163
msgid "Tip"
msgstr "小技巧"
-#: sphinx/locale/__init__.py:148
+#: sphinx/locale/__init__.py:164
msgid "Warning"
msgstr "警告"
-#: sphinx/locale/__init__.py:152
+#: sphinx/locale/__init__.py:168
#, python-format
msgid "New in version %s"
msgstr "%s 版新功能"
-#: sphinx/locale/__init__.py:153
+#: sphinx/locale/__init__.py:169
#, python-format
msgid "Changed in version %s"
msgstr "在 %s 版改變"
-#: sphinx/locale/__init__.py:154
+#: sphinx/locale/__init__.py:170
#, python-format
msgid "Deprecated since version %s"
msgstr "%s 版後已移除"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "keyword"
msgstr "關鍵字"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "operator"
msgstr "運算子"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:178
msgid "object"
msgstr "物件"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
msgid "statement"
msgstr ""
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:181
msgid "built-in function"
msgstr "內建函式"
@@ -514,8 +533,8 @@ msgstr "內建函式"
msgid "Table Of Contents"
msgstr "內容目錄"
-#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128
-#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14
+#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137
+#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "搜尋"
@@ -564,15 +583,15 @@ msgstr ""
msgid "all functions, classes, terms"
msgstr ""
-#: sphinx/themes/basic/genindex-single.html:14
+#: sphinx/themes/basic/genindex-single.html:35
#, python-format
msgid "Index &ndash; %(key)s"
msgstr ""
-#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-single.html:63
#: sphinx/themes/basic/genindex-split.html:24
#: sphinx/themes/basic/genindex-split.html:38
-#: sphinx/themes/basic/genindex.html:56
+#: sphinx/themes/basic/genindex.html:74
msgid "Full index on one page"
msgstr ""
@@ -584,39 +603,39 @@ msgstr ""
msgid "can be huge"
msgstr ""
-#: sphinx/themes/basic/layout.html:23
+#: sphinx/themes/basic/layout.html:29
msgid "Navigation"
msgstr "瀏覽"
-#: sphinx/themes/basic/layout.html:113
+#: sphinx/themes/basic/layout.html:122
#, python-format
msgid "Search within %(docstitle)s"
msgstr "在 %(docstitle)s 中搜尋"
-#: sphinx/themes/basic/layout.html:122
+#: sphinx/themes/basic/layout.html:131
msgid "About these documents"
msgstr ""
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:140
msgid "Copyright"
msgstr "版權所有"
-#: sphinx/themes/basic/layout.html:180
+#: sphinx/themes/basic/layout.html:189
#, python-format
msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
msgstr ""
-#: sphinx/themes/basic/layout.html:182
+#: sphinx/themes/basic/layout.html:191
#, python-format
msgid "&copy; Copyright %(copyright)s."
msgstr ""
-#: sphinx/themes/basic/layout.html:186
+#: sphinx/themes/basic/layout.html:195
#, python-format
msgid "Last updated on %(last_updated)s."
msgstr "最後更新日期是 %(last_updated)s."
-#: sphinx/themes/basic/layout.html:189
+#: sphinx/themes/basic/layout.html:198
#, python-format
msgid ""
"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> "
@@ -644,13 +663,13 @@ msgstr "下一個主題"
msgid "next chapter"
msgstr "下一章"
-#: sphinx/themes/basic/search.html:18
+#: sphinx/themes/basic/search.html:24
msgid ""
"Please activate JavaScript to enable the search\n"
" functionality."
msgstr ""
-#: sphinx/themes/basic/search.html:23
+#: sphinx/themes/basic/search.html:29
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"
@@ -658,16 +677,15 @@ msgid ""
" containing fewer words won't appear in the result list."
msgstr ""
-#: sphinx/themes/basic/search.html:30
+#: sphinx/themes/basic/search.html:36
msgid "search"
msgstr "搜尋"
-#: sphinx/themes/basic/search.html:34
-#: sphinx/themes/basic/static/searchtools.js:489
+#: sphinx/themes/basic/search.html:40
msgid "Search Results"
msgstr "搜尋結果"
-#: sphinx/themes/basic/search.html:36
+#: sphinx/themes/basic/search.html:42
msgid "Your search did not match any results."
msgstr ""
@@ -707,12 +725,12 @@ msgstr "C API 改變"
msgid "Other changes"
msgstr "其他改變:"
-#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482
-#: sphinx/writers/html.py:487
+#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504
+#: sphinx/writers/html.py:510
msgid "Permalink to this headline"
msgstr ""
-#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92
msgid "Permalink to this definition"
msgstr ""
@@ -720,35 +738,12 @@ msgstr ""
msgid "Hide Search Matches"
msgstr ""
-#: sphinx/themes/basic/static/searchtools.js:285
-msgid "Searching"
-msgstr "搜尋中"
-
-#: sphinx/themes/basic/static/searchtools.js:290
-msgid "Preparing search..."
-msgstr "準備搜尋..."
-
-#: sphinx/themes/basic/static/searchtools.js:364
-msgid ", in "
-msgstr ""
-
-#: sphinx/themes/basic/static/searchtools.js:491
-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 ""
-
-#: sphinx/themes/basic/static/searchtools.js:493
-#, python-format
-msgid "Search finished, found %s page(s) matching the search query."
-msgstr ""
-
-#: sphinx/themes/default/static/sidebar.js:66
+#: sphinx/themes/default/static/sidebar.js:69
msgid "Expand sidebar"
msgstr ""
-#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:82
+#: sphinx/themes/default/static/sidebar.js:110
msgid "Collapse sidebar"
msgstr ""
@@ -756,22 +751,24 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:177
msgid "Release"
msgstr "釋出"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182
+#: sphinx/writers/texinfo.py:589
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:676
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:681
msgid "Continued on next page"
msgstr ""
-#: sphinx/writers/text.py:422
+#: sphinx/writers/text.py:437
msgid "[image]"
msgstr "[圖片]"
+
diff --git a/sphinx/pycode/__init__.py b/sphinx/pycode/__init__.py
index 8271b299..ac840750 100644
--- a/sphinx/pycode/__init__.py
+++ b/sphinx/pycode/__init__.py
@@ -9,15 +9,13 @@
:license: BSD, see LICENSE for details.
"""
-import re
-import sys
from os import path
-from cStringIO import StringIO
from sphinx.errors import PycodeError
from sphinx.pycode import nodes
from sphinx.pycode.pgen2 import driver, token, tokenize, parse, literals
from sphinx.util import get_module_source, detect_encoding
+from sphinx.util.pycompat import next, StringIO, BytesIO, TextIOWrapper
from sphinx.util.docstrings import prepare_docstring, prepare_commentdoc
@@ -80,10 +78,30 @@ class AttrDocVisitor(nodes.NodeVisitor):
self.in_init -= 1
def visit_expr_stmt(self, node):
- """Visit an assignment which may have a special comment before it."""
+ """Visit an assignment which may have a special comment before (or
+ after) it.
+ """
if _eq not in node.children:
# not an assignment (we don't care for augmented assignments)
return
+ # look *after* the node; there may be a comment prefixing the NEWLINE
+ # of the simple_stmt
+ parent = node.parent
+ idx = parent.children.index(node) + 1
+ while idx < len(parent):
+ if parent[idx].type == sym.SEMI:
+ idx += 1
+ continue # skip over semicolon
+ if parent[idx].type == sym.NEWLINE:
+ prefix = parent[idx].get_prefix()
+ if not isinstance(prefix, unicode):
+ prefix = prefix.decode(self.encoding)
+ docstring = prepare_commentdoc(prefix)
+ if docstring:
+ self.add_docstring(node, docstring)
+ return # don't allow docstrings both before and after
+ break
+ # now look *before* the node
pnode = node[0]
prefix = pnode.get_prefix()
# if the assignment is the first statement on a new indentation
@@ -94,7 +112,8 @@ class AttrDocVisitor(nodes.NodeVisitor):
if not pnode or pnode.type not in (token.INDENT, token.DEDENT):
break
prefix = pnode.get_prefix()
- prefix = prefix.decode(self.encoding)
+ if not isinstance(prefix, unicode):
+ prefix = prefix.decode(self.encoding)
docstring = prepare_commentdoc(prefix)
self.add_docstring(node, docstring)
@@ -150,14 +169,16 @@ class ModuleAnalyzer(object):
@classmethod
def for_string(cls, string, modname, srcname='<string>'):
- return cls(StringIO(string), modname, srcname)
+ if isinstance(string, bytes):
+ return cls(BytesIO(string), modname, srcname)
+ return cls(StringIO(string), modname, srcname, decoded=True)
@classmethod
def for_file(cls, filename, modname):
if ('file', filename) in cls.cache:
return cls.cache['file', filename]
try:
- fileobj = open(filename, 'r')
+ fileobj = open(filename, 'rb')
except Exception, err:
raise PycodeError('error opening %r' % filename, err)
obj = cls(fileobj, modname, filename)
@@ -184,7 +205,7 @@ class ModuleAnalyzer(object):
cls.cache['module', modname] = obj
return obj
- def __init__(self, source, modname, srcname):
+ def __init__(self, source, modname, srcname, decoded=False):
# name of the module
self.modname = modname
# name of the source file
@@ -194,9 +215,15 @@ class ModuleAnalyzer(object):
# cache the source code as well
pos = self.source.tell()
- self.encoding = detect_encoding(self.source.readline)
- self.code = self.source.read()
- self.source.seek(pos)
+ if not decoded:
+ self.encoding = detect_encoding(self.source.readline)
+ self.code = self.source.read().decode(self.encoding)
+ self.source.seek(pos)
+ self.source = TextIOWrapper(self.source, self.encoding)
+ else:
+ self.encoding = None
+ self.code = self.source.read()
+ self.source.seek(pos)
# will be filled by tokenize()
self.tokens = None
@@ -266,7 +293,7 @@ class ModuleAnalyzer(object):
result[fullname] = (dtype, startline, endline)
expect_indent = False
if tok in ('def', 'class'):
- name = tokeniter.next()[1]
+ name = next(tokeniter)[1]
namespace.append(name)
fullname = '.'.join(namespace)
stack.append((tok, fullname, spos[0], indent))
diff --git a/sphinx/pycode/nodes.py b/sphinx/pycode/nodes.py
index 14388f37..7adacc1d 100644
--- a/sphinx/pycode/nodes.py
+++ b/sphinx/pycode/nodes.py
@@ -29,6 +29,8 @@ class BaseNode(object):
return NotImplemented
return not self._eq(other)
+ __hash__ = None
+
def get_prev_sibling(self):
"""Return previous child in parent's children, or None."""
if self.parent is None:
diff --git a/sphinx/pycode/pgen2/literals.py b/sphinx/pycode/pgen2/literals.py
index 31900291..d4893702 100644
--- a/sphinx/pycode/pgen2/literals.py
+++ b/sphinx/pycode/pgen2/literals.py
@@ -66,7 +66,7 @@ uni_escape_re = re.compile(r"\\(\'|\"|\\|[abfnrtv]|x.{0,2}|[0-7]{1,3}|"
def evalString(s, encoding=None):
regex = escape_re
repl = escape
- if encoding:
+ if encoding and not isinstance(s, unicode):
s = s.decode(encoding)
if s.startswith('u') or s.startswith('U'):
regex = uni_escape_re
diff --git a/sphinx/pycode/pgen2/tokenize.py b/sphinx/pycode/pgen2/tokenize.py
index 4489db89..7ad9f012 100644
--- a/sphinx/pycode/pgen2/tokenize.py
+++ b/sphinx/pycode/pgen2/tokenize.py
@@ -143,7 +143,9 @@ class TokenError(Exception): pass
class StopTokenizing(Exception): pass
-def printtoken(type, token, (srow, scol), (erow, ecol), line): # for testing
+def printtoken(type, token, scell, ecell, line): # for testing
+ srow, scol = scell
+ erow, ecol = ecell
print "%d,%d-%d,%d:\t%s\t%s" % \
(srow, scol, erow, ecol, tok_name[type], repr(token))
diff --git a/sphinx/pygments_styles.py b/sphinx/pygments_styles.py
new file mode 100644
index 00000000..44740b31
--- /dev/null
+++ b/sphinx/pygments_styles.py
@@ -0,0 +1,96 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.pygments_styles
+ ~~~~~~~~~~~~~~~~~~~~~~
+
+ Sphinx theme specific highlighting styles.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from pygments.style import Style
+from pygments.styles.friendly import FriendlyStyle
+from pygments.token import Generic, Comment, Number, Whitespace, Keyword, \
+ Operator, Name, String, Error
+
+
+class NoneStyle(Style):
+ """Style without any styling."""
+
+
+class SphinxStyle(Style):
+ """
+ Like friendly, but a bit darker to enhance contrast on the green
+ background.
+ """
+
+ background_color = '#eeffcc'
+ default_style = ''
+
+ styles = FriendlyStyle.styles
+ styles.update({
+ Generic.Output: '#333',
+ Comment: 'italic #408090',
+ Number: '#208050',
+ })
+
+
+class PyramidStyle(Style):
+ """
+ Pylons/pyramid pygments style based on friendly style, by Blaise Laflamme.
+ """
+
+ # work in progress...
+
+ background_color = "#f8f8f8"
+ default_style = ""
+
+ styles = {
+ Whitespace: "#bbbbbb",
+ Comment: "italic #60a0b0",
+ Comment.Preproc: "noitalic #007020",
+ Comment.Special: "noitalic bg:#fff0f0",
+
+ Keyword: "bold #007020",
+ Keyword.Pseudo: "nobold",
+ Keyword.Type: "nobold #902000",
+
+ Operator: "#666666",
+ Operator.Word: "bold #007020",
+
+ Name.Builtin: "#007020",
+ Name.Function: "#06287e",
+ Name.Class: "bold #0e84b5",
+ Name.Namespace: "bold #0e84b5",
+ Name.Exception: "#007020",
+ Name.Variable: "#bb60d5",
+ Name.Constant: "#60add5",
+ Name.Label: "bold #002070",
+ Name.Entity: "bold #d55537",
+ Name.Attribute: "#0e84b5",
+ Name.Tag: "bold #062873",
+ Name.Decorator: "bold #555555",
+
+ String: "#4070a0",
+ String.Doc: "italic",
+ String.Interpol: "italic #70a0d0",
+ String.Escape: "bold #4070a0",
+ String.Regex: "#235388",
+ String.Symbol: "#517918",
+ String.Other: "#c65d09",
+ Number: "#40a070",
+
+ Generic.Heading: "bold #000080",
+ Generic.Subheading: "bold #800080",
+ Generic.Deleted: "#A00000",
+ Generic.Inserted: "#00A000",
+ Generic.Error: "#FF0000",
+ Generic.Emph: "italic",
+ Generic.Strong: "bold",
+ Generic.Prompt: "bold #c65d09",
+ Generic.Output: "#888",
+ Generic.Traceback: "#04D",
+
+ Error: "#a40000 bg:#fbe3e4"
+ }
diff --git a/sphinx/quickstart.py b/sphinx/quickstart.py
index 27189a66..c7b3aaf8 100644
--- a/sphinx/quickstart.py
+++ b/sphinx/quickstart.py
@@ -9,8 +9,9 @@
:license: BSD, see LICENSE for details.
"""
-import sys, os, time
+import sys, os, time, re
from os import path
+from codecs import open
TERM_ENCODING = getattr(sys.stdin, 'encoding', None)
@@ -20,10 +21,23 @@ from sphinx.util.console import purple, bold, red, turquoise, \
nocolor, color_terminal
from sphinx.util import texescape
+# function to get input from terminal -- overridden by the test suite
+try:
+ # this raw_input is not converted by 2to3
+ term_input = raw_input
+except NameError:
+ term_input = input
+
PROMPT_PREFIX = '> '
-QUICKSTART_CONF = '''\
+if sys.version_info >= (3, 0):
+ # prevents that the file is checked for being written in Python 2.x syntax
+ QUICKSTART_CONF = '#!/usr/bin/env python3\n'
+else:
+ QUICKSTART_CONF = ''
+
+QUICKSTART_CONF += '''\
# -*- coding: utf-8 -*-
#
# %(project)s documentation build configuration file, created by
@@ -195,11 +209,16 @@ htmlhelp_basename = '%(project_fn)sdoc'
# -- Options for LaTeX output --------------------------------------------------
-# The paper size ('letter' or 'a4').
-#latex_paper_size = 'letter'
+latex_elements = {
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
-#latex_font_size = '10pt'
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
@@ -222,9 +241,6 @@ latex_documents = [
# If true, show URL addresses after external links.
#latex_show_urls = False
-# Additional stuff for the LaTeX preamble.
-#latex_preamble = ''
-
# Documents to append as an appendix to all manuals.
#latex_appendices = []
@@ -237,9 +253,32 @@ latex_documents = [
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
- ('%(master_str)s', '%(project_manpage)s', u'%(project_doc)s',
+ ('%(master_str)s', '%(project_manpage)s', u'%(project_doc_str)s',
[u'%(author_str)s'], 1)
]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output ------------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+# dir menu entry, description, category)
+texinfo_documents = [
+ ('%(master_str)s', '%(project_fn)s', u'%(project_doc_str)s', u'%(author_str)s',
+ '%(project_fn)s', 'One line description of project.', 'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
'''
EPUB_CONFIG = '''
@@ -266,6 +305,9 @@ epub_copyright = u'%(copyright_str)s'
# A unique identification for the text.
#epub_uid = ''
+# A tuple containing the cover image and cover page html template filenames.
+#epub_cover = ()
+
# HTML files that should be inserted before the pages created by sphinx.
# The format is a list of tuples containing the path and title.
#epub_pre_files = []
@@ -328,9 +370,11 @@ PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) \
$(SPHINXOPTS) %(rsrcdir)s
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) %(rsrcdir)s
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp \
-epub latex latexpdf text man changes linkcheck doctest
+epub latex latexpdf text man changes linkcheck doctest gettext
help:
\t@echo "Please use \\`make <target>' where <target> is one of"
@@ -347,6 +391,9 @@ help:
\t@echo " latexpdf to make LaTeX files and run them through pdflatex"
\t@echo " text to make text files"
\t@echo " man to make manual pages"
+\t@echo " texinfo to make Texinfo files"
+\t@echo " info to make Texinfo files and run them through makeinfo"
+\t@echo " gettext to make PO message catalogs"
\t@echo " changes to make an overview of all changed/added/deprecated items"
\t@echo " linkcheck to check all external links for integrity"
\t@echo " doctest to run all doctests embedded in the documentation \
@@ -433,6 +480,24 @@ man:
\t@echo
\t@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+texinfo:
+\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+\t@echo
+\t@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+\t@echo "Run \\`make' in that directory to run these through makeinfo" \\
+\t "(use \\`make info' here to do that automatically)."
+
+info:
+\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+\t@echo "Running Texinfo files through makeinfo..."
+\tmake -C $(BUILDDIR)/texinfo info
+\t@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+\t$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+\t@echo
+\t@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
changes:
\t$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
\t@echo
@@ -460,8 +525,10 @@ if "%%SPHINXBUILD%%" == "" (
)
set BUILDDIR=%(rbuilddir)s
set ALLSPHINXOPTS=-d %%BUILDDIR%%/doctrees %%SPHINXOPTS%% %(rsrcdir)s
+set I18NSPHINXOPTS=%%SPHINXOPTS%% %(rsrcdir)s
if NOT "%%PAPER%%" == "" (
\tset ALLSPHINXOPTS=-D latex_paper_size=%%PAPER%% %%ALLSPHINXOPTS%%
+\tset I18NSPHINXOPTS=-D latex_paper_size=%%PAPER%% %%I18NSPHINXOPTS%%
)
if "%%1" == "" goto help
@@ -481,6 +548,8 @@ if "%%1" == "help" (
\techo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
\techo. text to make text files
\techo. man to make manual pages
+\techo. texinfo to make Texinfo files
+\techo. gettext to make PO message catalogs
\techo. changes to make an overview over all changed/added/deprecated items
\techo. linkcheck to check all external links for integrity
\techo. doctest to run all doctests embedded in the documentation if enabled
@@ -594,6 +663,22 @@ if "%%1" == "man" (
\tgoto end
)
+if "%%1" == "texinfo" (
+\t%%SPHINXBUILD%% -b texinfo %%ALLSPHINXOPTS%% %%BUILDDIR%%/texinfo
+\tif errorlevel 1 exit /b 1
+\techo.
+\techo.Build finished. The Texinfo files are in %%BUILDDIR%%/texinfo.
+\tgoto end
+)
+
+if "%%1" == "gettext" (
+\t%%SPHINXBUILD%% -b gettext %%I18NSPHINXOPTS%% %%BUILDDIR%%/locale
+\tif errorlevel 1 exit /b 1
+\techo.
+\techo.Build finished. The message catalogs are in %%BUILDDIR%%/locale.
+\tgoto end
+)
+
if "%%1" == "changes" (
\t%%SPHINXBUILD%% -b changes %%ALLSPHINXOPTS%% %%BUILDDIR%%/changes
\tif errorlevel 1 exit /b 1
@@ -671,20 +756,22 @@ def do_prompt(d, key, text, default=None, validator=nonempty):
prompt = purple(PROMPT_PREFIX + '%s [%s]: ' % (text, default))
else:
prompt = purple(PROMPT_PREFIX + text + ': ')
- x = raw_input(prompt)
+ x = term_input(prompt)
if default and not x:
x = default
- if x.decode('ascii', 'replace').encode('ascii', 'replace') != x:
- if TERM_ENCODING:
- x = x.decode(TERM_ENCODING)
- else:
- print turquoise('* Note: non-ASCII characters entered '
- 'and terminal encoding unknown -- assuming '
- 'UTF-8 or Latin-1.')
- try:
- x = x.decode('utf-8')
- except UnicodeDecodeError:
- x = x.decode('latin1')
+ if not isinstance(x, unicode):
+ # for Python 2.x, try to get a Unicode string out of it
+ if x.decode('ascii', 'replace').encode('ascii', 'replace') != x:
+ if TERM_ENCODING:
+ x = x.decode(TERM_ENCODING)
+ else:
+ print turquoise('* Note: non-ASCII characters entered '
+ 'and terminal encoding unknown -- assuming '
+ 'UTF-8 or Latin-1.')
+ try:
+ x = x.decode('utf-8')
+ except UnicodeDecodeError:
+ x = x.decode('latin1')
try:
x = validator(x)
except ValidationError, err:
@@ -694,6 +781,18 @@ def do_prompt(d, key, text, default=None, validator=nonempty):
d[key] = x
+if sys.version_info >= (3, 0):
+ # remove Unicode literal prefixes
+ _unicode_string_re = re.compile(r"[uU]('.*?')")
+ def _convert_python_source(source):
+ return _unicode_string_re.sub('\\1', source)
+
+ for f in ['QUICKSTART_CONF', 'EPUB_CONFIG', 'INTERSPHINX_CONFIG']:
+ globals()[f] = _convert_python_source(globals()[f])
+
+ del _unicode_string_re, _convert_python_source
+
+
def inner_main(args):
d = {}
texescape.init()
@@ -701,14 +800,24 @@ def inner_main(args):
if not color_terminal():
nocolor()
+ if len(args) > 3:
+ print 'Usage: sphinx-quickstart [root]'
+ sys.exit(1)
+ elif len(args) == 2:
+ d['path'] = args[1]
+
print bold('Welcome to the Sphinx %s quickstart utility.') % __version__
print '''
Please enter values for the following settings (just press Enter to
accept a default value, if one is given in brackets).'''
- print '''
+ if 'path' in d:
+ print bold('''
+Selected root path: %s''' % d['path'])
+ else:
+ print '''
Enter the root path for documentation.'''
- do_prompt(d, 'path', 'Root path for the documentation', '.', is_path)
+ do_prompt(d, 'path', 'Root path for the documentation', '.', is_path)
while path.isfile(path.join(d['path'], 'conf.py')) or \
path.isfile(path.join(d['path'], 'source', 'conf.py')):
@@ -823,8 +932,9 @@ directly.'''
# escape backslashes and single quotes in strings that are put into
# a Python string literal
- for key in ('project', 'copyright', 'author', 'author_texescaped',
- 'project_doc_texescaped', 'version', 'release', 'master'):
+ for key in ('project', 'project_doc', 'project_doc_texescaped',
+ 'author', 'author_texescaped', 'copyright',
+ 'version', 'release', 'master'):
d[key + '_str'] = d[key].replace('\\', '\\\\').replace("'", "\\'")
if not path.isdir(d['path']):
@@ -849,28 +959,28 @@ directly.'''
if d['ext_intersphinx']:
conf_text += INTERSPHINX_CONFIG
- f = open(path.join(srcdir, 'conf.py'), 'w')
- f.write(conf_text.encode('utf-8'))
+ f = open(path.join(srcdir, 'conf.py'), 'w', encoding='utf-8')
+ f.write(conf_text)
f.close()
masterfile = path.join(srcdir, d['master'] + d['suffix'])
- f = open(masterfile, 'w')
- f.write((MASTER_FILE % d).encode('utf-8'))
+ f = open(masterfile, 'w', encoding='utf-8')
+ f.write(MASTER_FILE % d)
f.close()
if d['makefile']:
d['rsrcdir'] = d['sep'] and 'source' or '.'
d['rbuilddir'] = d['sep'] and 'build' or d['dot'] + 'build'
# use binary mode, to avoid writing \r\n on Windows
- f = open(path.join(d['path'], 'Makefile'), 'wb')
- f.write((MAKEFILE % d).encode('utf-8'))
+ f = open(path.join(d['path'], 'Makefile'), 'wb', encoding='utf-8')
+ f.write(MAKEFILE % d)
f.close()
if d['batchfile']:
d['rsrcdir'] = d['sep'] and 'source' or '.'
d['rbuilddir'] = d['sep'] and 'build' or d['dot'] + 'build'
- f = open(path.join(d['path'], 'make.bat'), 'w')
- f.write((BATCHFILE % d).encode('utf-8'))
+ f = open(path.join(d['path'], 'make.bat'), 'w', encoding='utf-8')
+ f.write(BATCHFILE % d)
f.close()
print
@@ -895,4 +1005,3 @@ def main(argv=sys.argv):
print
print '[Interrupted.]'
return
-
diff --git a/sphinx/roles.py b/sphinx/roles.py
index 32d02da1..30743914 100644
--- a/sphinx/roles.py
+++ b/sphinx/roles.py
@@ -18,7 +18,7 @@ from docutils.parsers.rst import roles
from sphinx import addnodes
from sphinx.locale import _
from sphinx.util import ws_re
-from sphinx.util.nodes import split_explicit_title
+from sphinx.util.nodes import split_explicit_title, process_index_entry
generic_docroles = {
@@ -141,16 +141,15 @@ class XRefRole(object):
# methods that can be overwritten
def process_link(self, env, refnode, has_explicit_title, title, target):
- """
- Called after parsing title and target text, and creating the reference
- node (given in *refnode*). This method can alter the reference node and
- must return a new (or the same) ``(title, target)`` tuple.
+ """Called after parsing title and target text, and creating the
+ reference node (given in *refnode*). This method can alter the
+ reference node and must return a new (or the same) ``(title, target)``
+ tuple.
"""
return title, ws_re.sub(' ', target)
def result_nodes(self, document, env, node, is_ref):
- """
- Called before returning the finished nodes. *node* is the reference
+ """Called before returning the finished nodes. *node* is the reference
node if one was created (*is_ref* is then true), else the content node.
This method can add other nodes and must return a ``(nodes, messages)``
tuple (the usual return value of a role function).
@@ -173,8 +172,8 @@ def indexmarkup_role(typ, rawtext, etext, lineno, inliner,
inliner.document.note_explicit_target(targetnode)
if typ == 'pep':
indexnode['entries'] = [
- ('single', _('Python Enhancement Proposals!PEP %s') % text,
- targetid, 'PEP %s' % text)]
+ ('single', _('Python Enhancement Proposals; PEP %s') % text,
+ targetid, '')]
anchor = ''
anchorindex = text.find('#')
if anchorindex > 0:
@@ -193,8 +192,7 @@ def indexmarkup_role(typ, rawtext, etext, lineno, inliner,
rn += sn
return [indexnode, targetnode, rn], []
elif typ == 'rfc':
- indexnode['entries'] = [('single', 'RFC; RFC %s' % text,
- targetid, 'RFC %s' % text)]
+ indexnode['entries'] = [('single', 'RFC; RFC %s' % text, targetid, '')]
anchor = ''
anchorindex = text.find('#')
if anchorindex > 0:
@@ -271,11 +269,38 @@ def abbr_role(typ, rawtext, text, lineno, inliner, options={}, content=[]):
return [addnodes.abbreviation(abbr, abbr, explanation=expl)], []
+def index_role(typ, rawtext, text, lineno, inliner, options={}, content=[]):
+ # create new reference target
+ env = inliner.document.settings.env
+ targetid = 'index-%s' % env.new_serialno('index')
+ targetnode = nodes.target('', '', ids=[targetid])
+ # split text and target in role content
+ has_explicit_title, title, target = split_explicit_title(text)
+ title = utils.unescape(title)
+ target = utils.unescape(target)
+ # if an explicit target is given, we can process it as a full entry
+ if has_explicit_title:
+ entries = process_index_entry(target, targetid)
+ # otherwise we just create a "single" entry
+ else:
+ # but allow giving main entry
+ main = ''
+ if target.startswith('!'):
+ target = target[1:]
+ title = title[1:]
+ main = 'main'
+ entries = [('single', target, targetid, main)]
+ indexnode = addnodes.index()
+ indexnode['entries'] = entries
+ textnode = nodes.Text(title, title)
+ return [indexnode, targetnode, textnode], []
+
+
specific_docroles = {
# links to download references
'download': XRefRole(nodeclass=addnodes.download_reference),
# links to documents
- 'doc': XRefRole(),
+ 'doc': XRefRole(warn_dangling=True),
'pep': indexmarkup_role,
'rfc': indexmarkup_role,
@@ -284,6 +309,7 @@ specific_docroles = {
'file': emph_literal_role,
'samp': emph_literal_role,
'abbr': abbr_role,
+ 'index': index_role,
}
for rolename, func in specific_docroles.iteritems():
diff --git a/sphinx/search.py b/sphinx/search/__init__.py
index 51f997c2..645ebfc8 100644
--- a/sphinx/search.py
+++ b/sphinx/search/__init__.py
@@ -3,7 +3,7 @@
sphinx.search
~~~~~~~~~~~~~
- Create a search index for offline search.
+ Create a full-text search index for offline search.
:copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
@@ -14,28 +14,90 @@ import cPickle as pickle
from docutils.nodes import comment, Text, NodeVisitor, SkipNode
from sphinx.util import jsdump, rpartition
-try:
- # http://bitbucket.org/methane/porterstemmer/
- from porterstemmer import Stemmer as CStemmer
- CSTEMMER = True
-except ImportError:
- from sphinx.util.stemmer import PorterStemmer
- CSTEMMER = False
-
-
-word_re = re.compile(r'\w+(?u)')
-
-stopwords = set("""
-a and are as at
-be but by
-for
-if in into is it
-near no not
-of on or
-such
-that the their then there these they this to
-was will with
-""".split())
+
+
+class SearchLanguage(object):
+ """
+ This class is the base class for search natural language preprocessors. If
+ you want to add support for a new language, you should override the methods
+ of this class.
+
+ You should override `lang` class property too (e.g. 'en', 'fr' and so on).
+
+ .. attribute:: stopwords
+
+ This is a set of stop words of the target language. Default `stopwords`
+ is empty. This word is used for building index and embedded in JS.
+
+ .. attribute:: js_stemmer_code
+
+ Return stemmer class of JavaScript version. This class' name should be
+ ``Stemmer`` and this class must have ``stemWord`` method. This string is
+ embedded as-is in searchtools.js.
+
+ This class is used to preprocess search word which Sphinx HTML readers
+ type, before searching index. Default implementation does nothing.
+ """
+ lang = None
+ stopwords = set()
+ js_stemmer_code = """
+/**
+ * Dummy stemmer for languages without stemming rules.
+ */
+var Stemmer = function() {
+ this.stemWord = function(w) {
+ return w;
+ }
+}
+"""
+
+ _word_re = re.compile(r'\w+(?u)')
+
+ def __init__(self, options):
+ self.options = options
+ self.init(options)
+
+ def init(self, options):
+ """
+ Initialize the class with the options the user has given.
+ """
+
+ def split(self, input):
+ """
+ This method splits a sentence into words. Default splitter splits input
+ at white spaces, which should be enough for most languages except CJK
+ languages.
+ """
+ return self._word_re.findall(input)
+
+ def stem(self, word):
+ """
+ This method implements stemming algorithm of the Python version.
+
+ Default implementation does nothing. You should implement this if the
+ language has any stemming rules.
+
+ This class is used to preprocess search words before registering them in
+ the search index. The stemming of the Python version and the JS version
+ (given in the js_stemmer_code attribute) must be compatible.
+ """
+ return word
+
+ def word_filter(self, word):
+ """
+ Return true if the target word should be registered in the search index.
+ This method is called after stemming.
+ """
+ return not (((len(word) < 3) and (12353 < ord(word[0]) < 12436)) or
+ (ord(word[0]) < 256 and (len(word) < 3 or word in self.stopwords or
+ word.isdigit())))
+
+from sphinx.search import en, ja
+
+languages = {
+ 'en': en.SearchEnglish,
+ 'ja': ja.SearchJapanese,
+}
class _JavaScriptIndex(object):
@@ -67,39 +129,21 @@ class _JavaScriptIndex(object):
js_index = _JavaScriptIndex()
-if CSTEMMER:
- class Stemmer(CStemmer):
-
- def stem(self, word):
- return self(word.lower())
-
-else:
- class Stemmer(PorterStemmer):
- """
- All those porter stemmer implementations look hideous.
- make at least the stem method nicer.
- """
-
- def stem(self, word):
- word = word.lower()
- return PorterStemmer.stem(self, word, 0, len(word) - 1)
-
-
-
class WordCollector(NodeVisitor):
"""
A special visitor that collects words for the `IndexBuilder`.
"""
- def __init__(self, document):
+ def __init__(self, document, lang):
NodeVisitor.__init__(self, document)
self.found_words = []
+ self.lang = lang
def dispatch_visit(self, node):
if node.__class__ is comment:
raise SkipNode
if node.__class__ is Text:
- self.found_words.extend(word_re.findall(node.astext()))
+ self.found_words.extend(self.lang.split(node.astext()))
class IndexBuilder(object):
@@ -112,9 +156,8 @@ class IndexBuilder(object):
'pickle': pickle
}
- def __init__(self, env):
+ def __init__(self, env, lang, options):
self.env = env
- self._stemmer = Stemmer()
# filename -> title
self._titles = {}
# stemmed word -> set(filenames)
@@ -123,6 +166,8 @@ class IndexBuilder(object):
self._objtypes = {}
# objtype index -> objname (localized)
self._objnames = {}
+ # add language-specific SearchLanguage instance
+ self.lang = languages[lang](options)
def load(self, stream, format):
"""Reconstruct from frozen data."""
@@ -215,17 +260,22 @@ class IndexBuilder(object):
"""Feed a doctree to the index."""
self._titles[filename] = title
- visitor = WordCollector(doctree)
+ visitor = WordCollector(doctree, self.lang)
doctree.walk(visitor)
- def add_term(word, stem=self._stemmer.stem):
+ def add_term(word, stem=self.lang.stem):
word = stem(word)
- if len(word) < 3 or word in stopwords or word.isdigit():
- return
- self._mapping.setdefault(word, set()).add(filename)
+ if self.lang.word_filter(word):
+ self._mapping.setdefault(word, set()).add(filename)
- for word in word_re.findall(title):
+ for word in self.lang.split(title):
add_term(word)
for word in visitor.found_words:
add_term(word)
+
+ def context_for_searchtool(self):
+ return dict(
+ search_language_stemming_code = self.lang.js_stemmer_code,
+ search_language_stop_words = jsdump.dumps(self.lang.stopwords),
+ )
diff --git a/sphinx/search/en.py b/sphinx/search/en.py
new file mode 100644
index 00000000..1f3c3731
--- /dev/null
+++ b/sphinx/search/en.py
@@ -0,0 +1,244 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.search.en
+ ~~~~~~~~~~~~~~~~
+
+ English search language: includes the JS porter stemmer.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from sphinx.search import SearchLanguage
+
+try:
+ # http://bitbucket.org/methane/porterstemmer/
+ from porterstemmer import Stemmer as CStemmer
+ CSTEMMER = True
+except ImportError:
+ from sphinx.util.stemmer import PorterStemmer
+ CSTEMMER = False
+
+
+english_stopwords = set("""
+a and are as at
+be but by
+for
+if in into is it
+near no not
+of on or
+such
+that the their then there these they this to
+was will with
+""".split())
+
+js_porter_stemmer = """
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+ var step2list = {
+ ational: 'ate',
+ tional: 'tion',
+ enci: 'ence',
+ anci: 'ance',
+ izer: 'ize',
+ bli: 'ble',
+ alli: 'al',
+ entli: 'ent',
+ eli: 'e',
+ ousli: 'ous',
+ ization: 'ize',
+ ation: 'ate',
+ ator: 'ate',
+ alism: 'al',
+ iveness: 'ive',
+ fulness: 'ful',
+ ousness: 'ous',
+ aliti: 'al',
+ iviti: 'ive',
+ biliti: 'ble',
+ logi: 'log'
+ };
+
+ var step3list = {
+ icate: 'ic',
+ ative: '',
+ alize: 'al',
+ iciti: 'ic',
+ ical: 'ic',
+ ful: '',
+ ness: ''
+ };
+
+ var c = "[^aeiou]"; // consonant
+ var v = "[aeiouy]"; // vowel
+ var C = c + "[^aeiouy]*"; // consonant sequence
+ var V = v + "[aeiou]*"; // vowel sequence
+
+ var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
+ var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
+ var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
+ var s_v = "^(" + C + ")?" + v; // vowel in stem
+
+ this.stemWord = function (w) {
+ var stem;
+ var suffix;
+ var firstch;
+ var origword = w;
+
+ if (w.length < 3)
+ return w;
+
+ var re;
+ var re2;
+ var re3;
+ var re4;
+
+ firstch = w.substr(0,1);
+ if (firstch == "y")
+ w = firstch.toUpperCase() + w.substr(1);
+
+ // Step 1a
+ re = /^(.+?)(ss|i)es$/;
+ re2 = /^(.+?)([^s])s$/;
+
+ if (re.test(w))
+ w = w.replace(re,"$1$2");
+ else if (re2.test(w))
+ w = w.replace(re2,"$1$2");
+
+ // Step 1b
+ re = /^(.+?)eed$/;
+ re2 = /^(.+?)(ed|ing)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ re = new RegExp(mgr0);
+ if (re.test(fp[1])) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+ }
+ else if (re2.test(w)) {
+ var fp = re2.exec(w);
+ stem = fp[1];
+ re2 = new RegExp(s_v);
+ if (re2.test(stem)) {
+ w = stem;
+ re2 = /(at|bl|iz)$/;
+ re3 = new RegExp("([^aeiouylsz])\\\\1$");
+ re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+ if (re2.test(w))
+ w = w + "e";
+ else if (re3.test(w)) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+ else if (re4.test(w))
+ w = w + "e";
+ }
+ }
+
+ // Step 1c
+ re = /^(.+?)y$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(s_v);
+ if (re.test(stem))
+ w = stem + "i";
+ }
+
+ // Step 2
+ re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|\
+ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ suffix = fp[2];
+ re = new RegExp(mgr0);
+ if (re.test(stem))
+ w = stem + step2list[suffix];
+ }
+
+ // Step 3
+ re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ suffix = fp[2];
+ re = new RegExp(mgr0);
+ if (re.test(stem))
+ w = stem + step3list[suffix];
+ }
+
+ // Step 4
+ re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|\
+iti|ous|ive|ize)$/;
+ re2 = /^(.+?)(s|t)(ion)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(mgr1);
+ if (re.test(stem))
+ w = stem;
+ }
+ else if (re2.test(w)) {
+ var fp = re2.exec(w);
+ stem = fp[1] + fp[2];
+ re2 = new RegExp(mgr1);
+ if (re2.test(stem))
+ w = stem;
+ }
+
+ // Step 5
+ re = /^(.+?)e$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(mgr1);
+ re2 = new RegExp(meq1);
+ re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+ if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+ w = stem;
+ }
+ re = /ll$/;
+ re2 = new RegExp(mgr1);
+ if (re.test(w) && re2.test(w)) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+
+ // and turn initial Y back to y
+ if (firstch == "y")
+ w = firstch.toLowerCase() + w.substr(1);
+ return w;
+ }
+}
+"""
+
+
+class SearchEnglish(SearchLanguage):
+ lang = 'en'
+ js_stemmer_code = js_porter_stemmer
+ stopwords = english_stopwords
+
+ def init(self, options):
+ if CSTEMMER:
+ class Stemmer(CStemmer):
+ def stem(self, word):
+ return self(word.lower())
+ else:
+ class Stemmer(PorterStemmer):
+ """All those porter stemmer implementations look hideous;
+ make at least the stem method nicer.
+ """
+ def stem(self, word):
+ word = word.lower()
+ return PorterStemmer.stem(self, word, 0, len(word) - 1)
+
+ self.stemmer = Stemmer()
+
+ def stem(self, word):
+ return self.stemmer.stem(word)
diff --git a/sphinx/search/ja.py b/sphinx/search/ja.py
new file mode 100644
index 00000000..0a7d83a1
--- /dev/null
+++ b/sphinx/search/ja.py
@@ -0,0 +1,273 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.search.ja
+ ~~~~~~~~~~~~~~~~
+
+ Japanese search language: includes routine to split words.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+# Python Version of TinySegmenter
+# (http://chasen.org/~taku/software/TinySegmenter/)
+# TinySegmenter is super compact Japanese tokenizer.
+#
+# TinySegmenter was originally developed by Taku Kudo <taku(at)chasen.org>.
+# Python Version was developed by xnights <programming.magic(at)gmail.com>.
+# For details, see http://programming-magic.com/?id=170
+
+import os
+import re
+import sys
+
+try:
+ import MeCab
+ native_module = True
+except ImportError:
+ native_module = False
+
+from sphinx.search import SearchLanguage
+
+
+class MecabBinder(object):
+ def __init__(self, options):
+ self.ctypes_libmecab = None
+ self.ctypes_mecab = None
+ if not native_module:
+ self.init_ctypes(options)
+ else:
+ self.init_native(options)
+ self.dict_encode = options.get('dic_enc', 'utf-8')
+
+ def split(self, input):
+ input2 = input.encode(self.dict_encode)
+ if native_module:
+ result = self.native.parse(input2)
+ else:
+ result = self.ctypes_libmecab.mecab_sparse_tostr(
+ self.ctypes_mecab, input)
+ return result.decode(self.dict_encode).split(' ')
+
+ def init_native(self, options):
+ param = '-Owakati'
+ dict = options.get('dict')
+ if dict:
+ param += ' -d %s' % dict
+ self.native = MeCab.Tagger(param)
+
+ def init_ctypes(self, options):
+ import ctypes.util
+
+ lib = options.get('lib')
+
+ if lib is None:
+ if sys.platform.startswith('win'):
+ libname = 'libmecab.dll'
+ else:
+ libname = 'mecab'
+ libpath = ctypes.util.find_library(libname)
+ elif os.path.basename(lib) == lib:
+ libpath = ctypes.util.find_library(lib)
+ else:
+ libpath = None
+ if os.path.exists(lib):
+ libpath = lib
+ if libpath is None:
+ raise RuntimeError('MeCab dynamic library is not available')
+
+ param = 'mecab -Owakati'
+ dict = options.get('dict')
+ if dict:
+ param += ' -d %s' % dict
+
+ self.ctypes_libmecab = ctypes.CDLL(libpath)
+ self.ctypes_libmecab.mecab_sparse_tostr.restype = ctypes.c_char_p
+ self.ctypes_mecab = self.libmecab.mecab_new2(param)
+
+ def __del__(self):
+ if self.ctypes_libmecab:
+ self.ctypes_libmecab.mecab_destroy(self.ctypes_mecab)
+
+
+class TinySegmenter(object):
+ patterns_ = dict([(re.compile(pattern), value) for pattern, value in {
+ u'[一二三四五六七八九十百千万億兆]': u'M',
+ u'[一-龠々〆ヵヶ]': u'H',
+ u'[ぁ-ん]': u'I',
+ u'[ァ-ヴーア-ン゙ー]': u'K',
+ u'[a-zA-Za-zA-Z]': u'A',
+ u'[0-90-9]': u'N',
+ }.iteritems()])
+ BIAS__ = -332
+ BC1__ = {u'HH':6,u'II':2461,u'KH':406,u'OH':-1378}
+ BC2__ = {u'AA':-3267,u'AI':2744,u'AN':-878,u'HH':-4070,u'HM':-1711,u'HN':4012,u'HO':3761,u'IA':1327,u'IH':-1184,u'II':-1332,u'IK':1721,u'IO':5492,u'KI':3831,u'KK':-8741,u'MH':-3132,u'MK':3334,u'OO':-2920}
+ BC3__ = {u'HH':996,u'HI':626,u'HK':-721,u'HN':-1307,u'HO':-836,u'IH':-301,u'KK':2762,u'MK':1079,u'MM':4034,u'OA':-1652,u'OH':266}
+ BP1__ = {u'BB':295,u'OB':304,u'OO':-125,u'UB':352}
+ BP2__ = {u'BO':60,u'OO':-1762}
+ BQ1__ = {u'BHH':1150,u'BHM':1521,u'BII':-1158,u'BIM':886,u'BMH':1208,u'BNH':449,u'BOH':-91,u'BOO':-2597,u'OHI':451,u'OIH':-296,u'OKA':1851,u'OKH':-1020,u'OKK':904,u'OOO':2965}
+ BQ2__ = {u'BHH':118,u'BHI':-1159,u'BHM':466,u'BIH':-919,u'BKK':-1720,u'BKO':864,u'OHH':-1139,u'OHM':-181,u'OIH':153,u'UHI':-1146}
+ BQ3__ = {u'BHH':-792,u'BHI':2664,u'BII':-299,u'BKI':419,u'BMH':937,u'BMM':8335,u'BNN':998,u'BOH':775,u'OHH':2174,u'OHM':439,u'OII':280,u'OKH':1798,u'OKI':-793,u'OKO':-2242,u'OMH':-2402,u'OOO':11699}
+ BQ4__ = {u'BHH':-3895,u'BIH':3761,u'BII':-4654,u'BIK':1348,u'BKK':-1806,u'BMI':-3385,u'BOO':-12396,u'OAH':926,u'OHH':266,u'OHK':-2036,u'ONN':-973}
+ BW1__ = {u',と':660,u',同':727,u'B1あ':1404,u'B1同':542,u'、と':660,u'、同':727,u'」と':1682,u'あっ':1505,u'いう':1743,u'いっ':-2055,u'いる':672,u'うし':-4817,u'うん':665,u'から':3472,u'がら':600,u'こう':-790,u'こと':2083,u'こん':-1262,u'さら':-4143,u'さん':4573,u'した':2641,u'して':1104,u'すで':-3399,u'そこ':1977,u'それ':-871,u'たち':1122,u'ため':601,u'った':3463,u'つい':-802,u'てい':805,u'てき':1249,u'でき':1127,u'です':3445,u'では':844,u'とい':-4915,u'とみ':1922,u'どこ':3887,u'ない':5713,u'なっ':3015,u'など':7379,u'なん':-1113,u'にし':2468,u'には':1498,u'にも':1671,u'に対':-912,u'の一':-501,u'の中':741,u'ませ':2448,u'まで':1711,u'まま':2600,u'まる':-2155,u'やむ':-1947,u'よっ':-2565,u'れた':2369,u'れで':-913,u'をし':1860,u'を見':731,u'亡く':-1886,u'京都':2558,u'取り':-2784,u'大き':-2604,u'大阪':1497,u'平方':-2314,u'引き':-1336,u'日本':-195,u'本当':-2423,u'毎日':-2113,u'目指':-724,u'B1あ':1404,u'B1同':542,u'」と':1682}
+ BW2__ = {u'..':-11822,u'11':-669,u'――':-5730,u'−−':-13175,u'いう':-1609,u'うか':2490,u'かし':-1350,u'かも':-602,u'から':-7194,u'かれ':4612,u'がい':853,u'がら':-3198,u'きた':1941,u'くな':-1597,u'こと':-8392,u'この':-4193,u'させ':4533,u'され':13168,u'さん':-3977,u'しい':-1819,u'しか':-545,u'した':5078,u'して':972,u'しな':939,u'その':-3744,u'たい':-1253,u'たた':-662,u'ただ':-3857,u'たち':-786,u'たと':1224,u'たは':-939,u'った':4589,u'って':1647,u'っと':-2094,u'てい':6144,u'てき':3640,u'てく':2551,u'ては':-3110,u'ても':-3065,u'でい':2666,u'でき':-1528,u'でし':-3828,u'です':-4761,u'でも':-4203,u'とい':1890,u'とこ':-1746,u'とと':-2279,u'との':720,u'とみ':5168,u'とも':-3941,u'ない':-2488,u'なが':-1313,u'など':-6509,u'なの':2614,u'なん':3099,u'にお':-1615,u'にし':2748,u'にな':2454,u'によ':-7236,u'に対':-14943,u'に従':-4688,u'に関':-11388,u'のか':2093,u'ので':-7059,u'のに':-6041,u'のの':-6125,u'はい':1073,u'はが':-1033,u'はず':-2532,u'ばれ':1813,u'まし':-1316,u'まで':-6621,u'まれ':5409,u'めて':-3153,u'もい':2230,u'もの':-10713,u'らか':-944,u'らし':-1611,u'らに':-1897,u'りし':651,u'りま':1620,u'れた':4270,u'れて':849,u'れば':4114,u'ろう':6067,u'われ':7901,u'を通':-11877,u'んだ':728,u'んな':-4115,u'一人':602,u'一方':-1375,u'一日':970,u'一部':-1051,u'上が':-4479,u'会社':-1116,u'出て':2163,u'分の':-7758,u'同党':970,u'同日':-913,u'大阪':-2471,u'委員':-1250,u'少な':-1050,u'年度':-8669,u'年間':-1626,u'府県':-2363,u'手権':-1982,u'新聞':-4066,u'日新':-722,u'日本':-7068,u'日米':3372,u'曜日':-601,u'朝鮮':-2355,u'本人':-2697,u'東京':-1543,u'然と':-1384,u'社会':-1276,u'立て':-990,u'第に':-1612,u'米国':-4268,u'11':-669}
+ BW3__ = {u'あた':-2194,u'あり':719,u'ある':3846,u'い.':-1185,u'い。':-1185,u'いい':5308,u'いえ':2079,u'いく':3029,u'いた':2056,u'いっ':1883,u'いる':5600,u'いわ':1527,u'うち':1117,u'うと':4798,u'えと':1454,u'か.':2857,u'か。':2857,u'かけ':-743,u'かっ':-4098,u'かに':-669,u'から':6520,u'かり':-2670,u'が,':1816,u'が、':1816,u'がき':-4855,u'がけ':-1127,u'がっ':-913,u'がら':-4977,u'がり':-2064,u'きた':1645,u'けど':1374,u'こと':7397,u'この':1542,u'ころ':-2757,u'さい':-714,u'さを':976,u'し,':1557,u'し、':1557,u'しい':-3714,u'した':3562,u'して':1449,u'しな':2608,u'しま':1200,u'す.':-1310,u'す。':-1310,u'する':6521,u'ず,':3426,u'ず、':3426,u'ずに':841,u'そう':428,u'た.':8875,u'た。':8875,u'たい':-594,u'たの':812,u'たり':-1183,u'たる':-853,u'だ.':4098,u'だ。':4098,u'だっ':1004,u'った':-4748,u'って':300,u'てい':6240,u'てお':855,u'ても':302,u'です':1437,u'でに':-1482,u'では':2295,u'とう':-1387,u'とし':2266,u'との':541,u'とも':-3543,u'どう':4664,u'ない':1796,u'なく':-903,u'など':2135,u'に,':-1021,u'に、':-1021,u'にし':1771,u'にな':1906,u'には':2644,u'の,':-724,u'の、':-724,u'の子':-1000,u'は,':1337,u'は、':1337,u'べき':2181,u'まし':1113,u'ます':6943,u'まっ':-1549,u'まで':6154,u'まれ':-793,u'らし':1479,u'られ':6820,u'るる':3818,u'れ,':854,u'れ、':854,u'れた':1850,u'れて':1375,u'れば':-3246,u'れる':1091,u'われ':-605,u'んだ':606,u'んで':798,u'カ月':990,u'会議':860,u'入り':1232,u'大会':2217,u'始め':1681,u'市':965,u'新聞':-5055,u'日,':974,u'日、':974,u'社会':2024,u'カ月':990}
+ TC1__ = {u'AAA':1093,u'HHH':1029,u'HHM':580,u'HII':998,u'HOH':-390,u'HOM':-331,u'IHI':1169,u'IOH':-142,u'IOI':-1015,u'IOM':467,u'MMH':187,u'OOI':-1832}
+ TC2__ = {u'HHO':2088,u'HII':-1023,u'HMM':-1154,u'IHI':-1965,u'KKH':703,u'OII':-2649}
+ TC3__ = {u'AAA':-294,u'HHH':346,u'HHI':-341,u'HII':-1088,u'HIK':731,u'HOH':-1486,u'IHH':128,u'IHI':-3041,u'IHO':-1935,u'IIH':-825,u'IIM':-1035,u'IOI':-542,u'KHH':-1216,u'KKA':491,u'KKH':-1217,u'KOK':-1009,u'MHH':-2694,u'MHM':-457,u'MHO':123,u'MMH':-471,u'NNH':-1689,u'NNO':662,u'OHO':-3393}
+ TC4__ = {u'HHH':-203,u'HHI':1344,u'HHK':365,u'HHM':-122,u'HHN':182,u'HHO':669,u'HIH':804,u'HII':679,u'HOH':446,u'IHH':695,u'IHO':-2324,u'IIH':321,u'III':1497,u'IIO':656,u'IOO':54,u'KAK':4845,u'KKA':3386,u'KKK':3065,u'MHH':-405,u'MHI':201,u'MMH':-241,u'MMM':661,u'MOM':841}
+ TQ1__ = {u'BHHH':-227,u'BHHI':316,u'BHIH':-132,u'BIHH':60,u'BIII':1595,u'BNHH':-744,u'BOHH':225,u'BOOO':-908,u'OAKK':482,u'OHHH':281,u'OHIH':249,u'OIHI':200,u'OIIH':-68}
+ TQ2__ = {u'BIHH':-1401,u'BIII':-1033,u'BKAK':-543,u'BOOO':-5591}
+ TQ3__ = {u'BHHH':478,u'BHHM':-1073,u'BHIH':222,u'BHII':-504,u'BIIH':-116,u'BIII':-105,u'BMHI':-863,u'BMHM':-464,u'BOMH':620,u'OHHH':346,u'OHHI':1729,u'OHII':997,u'OHMH':481,u'OIHH':623,u'OIIH':1344,u'OKAK':2792,u'OKHH':587,u'OKKA':679,u'OOHH':110,u'OOII':-685}
+ TQ4__ = {u'BHHH':-721,u'BHHM':-3604,u'BHII':-966,u'BIIH':-607,u'BIII':-2181,u'OAAA':-2763,u'OAKK':180,u'OHHH':-294,u'OHHI':2446,u'OHHO':480,u'OHIH':-1573,u'OIHH':1935,u'OIHI':-493,u'OIIH':626,u'OIII':-4007,u'OKAK':-8156}
+ TW1__ = {u'につい':-4681,u'東京都':2026}
+ TW2__ = {u'ある程':-2049,u'いった':-1256,u'ころが':-2434,u'しょう':3873,u'その後':-4430,u'だって':-1049,u'ていた':1833,u'として':-4657,u'ともに':-4517,u'もので':1882,u'一気に':-792,u'初めて':-1512,u'同時に':-8097,u'大きな':-1255,u'対して':-2721,u'社会党':-3216}
+ TW3__ = {u'いただ':-1734,u'してい':1314,u'として':-4314,u'につい':-5483,u'にとっ':-5989,u'に当た':-6247,u'ので,':-727,u'ので、':-727,u'のもの':-600,u'れから':-3752,u'十二月':-2287}
+ TW4__ = {u'いう.':8576,u'いう。':8576,u'からな':-2348,u'してい':2958,u'たが,':1516,u'たが、':1516,u'ている':1538,u'という':1349,u'ました':5543,u'ません':1097,u'ようと':-4258,u'よると':5865}
+ UC1__ = {u'A':484,u'K':93,u'M':645,u'O':-505}
+ UC2__ = {u'A':819,u'H':1059,u'I':409,u'M':3987,u'N':5775,u'O':646}
+ UC3__ = {u'A':-1370,u'I':2311}
+ UC4__ = {u'A':-2643,u'H':1809,u'I':-1032,u'K':-3450,u'M':3565,u'N':3876,u'O':6646}
+ UC5__ = {u'H':313,u'I':-1238,u'K':-799,u'M':539,u'O':-831}
+ UC6__ = {u'H':-506,u'I':-253,u'K':87,u'M':247,u'O':-387}
+ UP1__ = {u'O':-214}
+ UP2__ = {u'B':69,u'O':935}
+ UP3__ = {u'B':189}
+ UQ1__ = {u'BH':21,u'BI':-12,u'BK':-99,u'BN':142,u'BO':-56,u'OH':-95,u'OI':477,u'OK':410,u'OO':-2422}
+ UQ2__ = {u'BH':216,u'BI':113,u'OK':1759}
+ UQ3__ = {u'BA':-479,u'BH':42,u'BI':1913,u'BK':-7198,u'BM':3160,u'BN':6427,u'BO':14761,u'OI':-827,u'ON':-3212}
+ UW1__ = {u',':156,u'、':156,u'「':-463,u'あ':-941,u'う':-127,u'が':-553,u'き':121,u'こ':505,u'で':-201,u'と':-547,u'ど':-123,u'に':-789,u'の':-185,u'は':-847,u'も':-466,u'や':-470,u'よ':182,u'ら':-292,u'り':208,u'れ':169,u'を':-446,u'ん':-137,u'・':-135,u'主':-402,u'京':-268,u'区':-912,u'午':871,u'国':-460,u'大':561,u'委':729,u'市':-411,u'日':-141,u'理':361,u'生':-408,u'県':-386,u'都':-718,u'「':-463,u'・':-135}
+ UW2__ = {u',':-829,u'、':-829,u'〇':892,u'「':-645,u'」':3145,u'あ':-538,u'い':505,u'う':134,u'お':-502,u'か':1454,u'が':-856,u'く':-412,u'こ':1141,u'さ':878,u'ざ':540,u'し':1529,u'す':-675,u'せ':300,u'そ':-1011,u'た':188,u'だ':1837,u'つ':-949,u'て':-291,u'で':-268,u'と':-981,u'ど':1273,u'な':1063,u'に':-1764,u'の':130,u'は':-409,u'ひ':-1273,u'べ':1261,u'ま':600,u'も':-1263,u'や':-402,u'よ':1639,u'り':-579,u'る':-694,u'れ':571,u'を':-2516,u'ん':2095,u'ア':-587,u'カ':306,u'キ':568,u'ッ':831,u'三':-758,u'不':-2150,u'世':-302,u'中':-968,u'主':-861,u'事':492,u'人':-123,u'会':978,u'保':362,u'入':548,u'初':-3025,u'副':-1566,u'北':-3414,u'区':-422,u'大':-1769,u'天':-865,u'太':-483,u'子':-1519,u'学':760,u'実':1023,u'小':-2009,u'市':-813,u'年':-1060,u'強':1067,u'手':-1519,u'揺':-1033,u'政':1522,u'文':-1355,u'新':-1682,u'日':-1815,u'明':-1462,u'最':-630,u'朝':-1843,u'本':-1650,u'東':-931,u'果':-665,u'次':-2378,u'民':-180,u'気':-1740,u'理':752,u'発':529,u'目':-1584,u'相':-242,u'県':-1165,u'立':-763,u'第':810,u'米':509,u'自':-1353,u'行':838,u'西':-744,u'見':-3874,u'調':1010,u'議':1198,u'込':3041,u'開':1758,u'間':-1257,u'「':-645,u'」':3145,u'ッ':831,u'ア':-587,u'カ':306,u'キ':568}
+ UW3__ = {u',':4889,u'1':-800,u'−':-1723,u'、':4889,u'々':-2311,u'〇':5827,u'」':2670,u'〓':-3573,u'あ':-2696,u'い':1006,u'う':2342,u'え':1983,u'お':-4864,u'か':-1163,u'が':3271,u'く':1004,u'け':388,u'げ':401,u'こ':-3552,u'ご':-3116,u'さ':-1058,u'し':-395,u'す':584,u'せ':3685,u'そ':-5228,u'た':842,u'ち':-521,u'っ':-1444,u'つ':-1081,u'て':6167,u'で':2318,u'と':1691,u'ど':-899,u'な':-2788,u'に':2745,u'の':4056,u'は':4555,u'ひ':-2171,u'ふ':-1798,u'へ':1199,u'ほ':-5516,u'ま':-4384,u'み':-120,u'め':1205,u'も':2323,u'や':-788,u'よ':-202,u'ら':727,u'り':649,u'る':5905,u'れ':2773,u'わ':-1207,u'を':6620,u'ん':-518,u'ア':551,u'グ':1319,u'ス':874,u'ッ':-1350,u'ト':521,u'ム':1109,u'ル':1591,u'ロ':2201,u'ン':278,u'・':-3794,u'一':-1619,u'下':-1759,u'世':-2087,u'両':3815,u'中':653,u'主':-758,u'予':-1193,u'二':974,u'人':2742,u'今':792,u'他':1889,u'以':-1368,u'低':811,u'何':4265,u'作':-361,u'保':-2439,u'元':4858,u'党':3593,u'全':1574,u'公':-3030,u'六':755,u'共':-1880,u'円':5807,u'再':3095,u'分':457,u'初':2475,u'別':1129,u'前':2286,u'副':4437,u'力':365,u'動':-949,u'務':-1872,u'化':1327,u'北':-1038,u'区':4646,u'千':-2309,u'午':-783,u'協':-1006,u'口':483,u'右':1233,u'各':3588,u'合':-241,u'同':3906,u'和':-837,u'員':4513,u'国':642,u'型':1389,u'場':1219,u'外':-241,u'妻':2016,u'学':-1356,u'安':-423,u'実':-1008,u'家':1078,u'小':-513,u'少':-3102,u'州':1155,u'市':3197,u'平':-1804,u'年':2416,u'広':-1030,u'府':1605,u'度':1452,u'建':-2352,u'当':-3885,u'得':1905,u'思':-1291,u'性':1822,u'戸':-488,u'指':-3973,u'政':-2013,u'教':-1479,u'数':3222,u'文':-1489,u'新':1764,u'日':2099,u'旧':5792,u'昨':-661,u'時':-1248,u'曜':-951,u'最':-937,u'月':4125,u'期':360,u'李':3094,u'村':364,u'東':-805,u'核':5156,u'森':2438,u'業':484,u'氏':2613,u'民':-1694,u'決':-1073,u'法':1868,u'海':-495,u'無':979,u'物':461,u'特':-3850,u'生':-273,u'用':914,u'町':1215,u'的':7313,u'直':-1835,u'省':792,u'県':6293,u'知':-1528,u'私':4231,u'税':401,u'立':-960,u'第':1201,u'米':7767,u'系':3066,u'約':3663,u'級':1384,u'統':-4229,u'総':1163,u'線':1255,u'者':6457,u'能':725,u'自':-2869,u'英':785,u'見':1044,u'調':-562,u'財':-733,u'費':1777,u'車':1835,u'軍':1375,u'込':-1504,u'通':-1136,u'選':-681,u'郎':1026,u'郡':4404,u'部':1200,u'金':2163,u'長':421,u'開':-1432,u'間':1302,u'関':-1282,u'雨':2009,u'電':-1045,u'非':2066,u'駅':1620,u'1':-800,u'」':2670,u'・':-3794,u'ッ':-1350,u'ア':551,u'グ':1319,u'ス':874,u'ト':521,u'ム':1109,u'ル':1591,u'ロ':2201,u'ン':278}
+ UW4__ = {u',':3930,u'.':3508,u'―':-4841,u'、':3930,u'。':3508,u'〇':4999,u'「':1895,u'」':3798,u'〓':-5156,u'あ':4752,u'い':-3435,u'う':-640,u'え':-2514,u'お':2405,u'か':530,u'が':6006,u'き':-4482,u'ぎ':-3821,u'く':-3788,u'け':-4376,u'げ':-4734,u'こ':2255,u'ご':1979,u'さ':2864,u'し':-843,u'じ':-2506,u'す':-731,u'ず':1251,u'せ':181,u'そ':4091,u'た':5034,u'だ':5408,u'ち':-3654,u'っ':-5882,u'つ':-1659,u'て':3994,u'で':7410,u'と':4547,u'な':5433,u'に':6499,u'ぬ':1853,u'ね':1413,u'の':7396,u'は':8578,u'ば':1940,u'ひ':4249,u'び':-4134,u'ふ':1345,u'へ':6665,u'べ':-744,u'ほ':1464,u'ま':1051,u'み':-2082,u'む':-882,u'め':-5046,u'も':4169,u'ゃ':-2666,u'や':2795,u'ょ':-1544,u'よ':3351,u'ら':-2922,u'り':-9726,u'る':-14896,u'れ':-2613,u'ろ':-4570,u'わ':-1783,u'を':13150,u'ん':-2352,u'カ':2145,u'コ':1789,u'セ':1287,u'ッ':-724,u'ト':-403,u'メ':-1635,u'ラ':-881,u'リ':-541,u'ル':-856,u'ン':-3637,u'・':-4371,u'ー':-11870,u'一':-2069,u'中':2210,u'予':782,u'事':-190,u'井':-1768,u'人':1036,u'以':544,u'会':950,u'体':-1286,u'作':530,u'側':4292,u'先':601,u'党':-2006,u'共':-1212,u'内':584,u'円':788,u'初':1347,u'前':1623,u'副':3879,u'力':-302,u'動':-740,u'務':-2715,u'化':776,u'区':4517,u'協':1013,u'参':1555,u'合':-1834,u'和':-681,u'員':-910,u'器':-851,u'回':1500,u'国':-619,u'園':-1200,u'地':866,u'場':-1410,u'塁':-2094,u'士':-1413,u'多':1067,u'大':571,u'子':-4802,u'学':-1397,u'定':-1057,u'寺':-809,u'小':1910,u'屋':-1328,u'山':-1500,u'島':-2056,u'川':-2667,u'市':2771,u'年':374,u'庁':-4556,u'後':456,u'性':553,u'感':916,u'所':-1566,u'支':856,u'改':787,u'政':2182,u'教':704,u'文':522,u'方':-856,u'日':1798,u'時':1829,u'最':845,u'月':-9066,u'木':-485,u'来':-442,u'校':-360,u'業':-1043,u'氏':5388,u'民':-2716,u'気':-910,u'沢':-939,u'済':-543,u'物':-735,u'率':672,u'球':-1267,u'生':-1286,u'産':-1101,u'田':-2900,u'町':1826,u'的':2586,u'目':922,u'省':-3485,u'県':2997,u'空':-867,u'立':-2112,u'第':788,u'米':2937,u'系':786,u'約':2171,u'経':1146,u'統':-1169,u'総':940,u'線':-994,u'署':749,u'者':2145,u'能':-730,u'般':-852,u'行':-792,u'規':792,u'警':-1184,u'議':-244,u'谷':-1000,u'賞':730,u'車':-1481,u'軍':1158,u'輪':-1433,u'込':-3370,u'近':929,u'道':-1291,u'選':2596,u'郎':-4866,u'都':1192,u'野':-1100,u'銀':-2213,u'長':357,u'間':-2344,u'院':-2297,u'際':-2604,u'電':-878,u'領':-1659,u'題':-792,u'館':-1984,u'首':1749,u'高':2120,u'「':1895,u'」':3798,u'・':-4371,u'ッ':-724,u'ー':-11870,u'カ':2145,u'コ':1789,u'セ':1287,u'ト':-403,u'メ':-1635,u'ラ':-881,u'リ':-541,u'ル':-856,u'ン':-3637}
+ UW5__ = {u',':465,u'.':-299,u'1':-514,u'E2':-32768,u']':-2762,u'、':465,u'。':-299,u'「':363,u'あ':1655,u'い':331,u'う':-503,u'え':1199,u'お':527,u'か':647,u'が':-421,u'き':1624,u'ぎ':1971,u'く':312,u'げ':-983,u'さ':-1537,u'し':-1371,u'す':-852,u'だ':-1186,u'ち':1093,u'っ':52,u'つ':921,u'て':-18,u'で':-850,u'と':-127,u'ど':1682,u'な':-787,u'に':-1224,u'の':-635,u'は':-578,u'べ':1001,u'み':502,u'め':865,u'ゃ':3350,u'ょ':854,u'り':-208,u'る':429,u'れ':504,u'わ':419,u'を':-1264,u'ん':327,u'イ':241,u'ル':451,u'ン':-343,u'中':-871,u'京':722,u'会':-1153,u'党':-654,u'務':3519,u'区':-901,u'告':848,u'員':2104,u'大':-1296,u'学':-548,u'定':1785,u'嵐':-1304,u'市':-2991,u'席':921,u'年':1763,u'思':872,u'所':-814,u'挙':1618,u'新':-1682,u'日':218,u'月':-4353,u'査':932,u'格':1356,u'機':-1508,u'氏':-1347,u'田':240,u'町':-3912,u'的':-3149,u'相':1319,u'省':-1052,u'県':-4003,u'研':-997,u'社':-278,u'空':-813,u'統':1955,u'者':-2233,u'表':663,u'語':-1073,u'議':1219,u'選':-1018,u'郎':-368,u'長':786,u'間':1191,u'題':2368,u'館':-689,u'1':-514,u'E2':-32768,u'「':363,u'イ':241,u'ル':451,u'ン':-343}
+ UW6__ = {u',':227,u'.':808,u'1':-270,u'E1':306,u'、':227,u'。':808,u'あ':-307,u'う':189,u'か':241,u'が':-73,u'く':-121,u'こ':-200,u'じ':1782,u'す':383,u'た':-428,u'っ':573,u'て':-1014,u'で':101,u'と':-105,u'な':-253,u'に':-149,u'の':-417,u'は':-236,u'も':-206,u'り':187,u'る':-135,u'を':195,u'ル':-673,u'ン':-496,u'一':-277,u'中':201,u'件':-800,u'会':624,u'前':302,u'区':1792,u'員':-1212,u'委':798,u'学':-960,u'市':887,u'広':-695,u'後':535,u'業':-697,u'相':753,u'社':-507,u'福':974,u'空':-822,u'者':1811,u'連':463,u'郎':1082,u'1':-270,u'E1':306,u'ル':-673,u'ン':-496}
+
+ # ctype_
+ def ctype_(self, char):
+ for pattern, value in self.patterns_.iteritems():
+ if pattern.match(char):
+ return value
+ return u'O'
+ # ts_
+ def ts_(self, dict, key):
+ if key in dict:
+ return dict[key]
+ return 0
+
+ # segment
+ def split(self, input):
+ if not input:
+ return []
+
+ result = []
+ seg = [u'B3',u'B2',u'B1']
+ ctype = [u'O',u'O',u'O']
+ for t in input:
+ seg.append(t)
+ ctype.append(self.ctype_(t))
+ seg.append(u'E1')
+ seg.append(u'E2')
+ seg.append(u'E3')
+ ctype.append(u'O')
+ ctype.append(u'O')
+ ctype.append(u'O')
+ word = seg[3]
+ p1 = u'U'
+ p2 = u'U'
+ p3 = u'U'
+
+ for i in range(4, len(seg) - 3):
+ score = self.BIAS__
+ w1 = seg[i-3]
+ w2 = seg[i-2]
+ w3 = seg[i-1]
+ w4 = seg[i]
+ w5 = seg[i+1]
+ w6 = seg[i+2]
+ c1 = ctype[i-3]
+ c2 = ctype[i-2]
+ c3 = ctype[i-1]
+ c4 = ctype[i]
+ c5 = ctype[i+1]
+ c6 = ctype[i+2]
+ score += self.ts_(self.UP1__, p1)
+ score += self.ts_(self.UP2__, p2)
+ score += self.ts_(self.UP3__, p3)
+ score += self.ts_(self.BP1__, p1 + p2)
+ score += self.ts_(self.BP2__, p2 + p3)
+ score += self.ts_(self.UW1__, w1)
+ score += self.ts_(self.UW2__, w2)
+ score += self.ts_(self.UW3__, w3)
+ score += self.ts_(self.UW4__, w4)
+ score += self.ts_(self.UW5__, w5)
+ score += self.ts_(self.UW6__, w6)
+ score += self.ts_(self.BW1__, w2 + w3)
+ score += self.ts_(self.BW2__, w3 + w4)
+ score += self.ts_(self.BW3__, w4 + w5)
+ score += self.ts_(self.TW1__, w1 + w2 + w3)
+ score += self.ts_(self.TW2__, w2 + w3 + w4)
+ score += self.ts_(self.TW3__, w3 + w4 + w5)
+ score += self.ts_(self.TW4__, w4 + w5 + w6)
+ score += self.ts_(self.UC1__, c1)
+ score += self.ts_(self.UC2__, c2)
+ score += self.ts_(self.UC3__, c3)
+ score += self.ts_(self.UC4__, c4)
+ score += self.ts_(self.UC5__, c5)
+ score += self.ts_(self.UC6__, c6)
+ score += self.ts_(self.BC1__, c2 + c3)
+ score += self.ts_(self.BC2__, c3 + c4)
+ score += self.ts_(self.BC3__, c4 + c5)
+ score += self.ts_(self.TC1__, c1 + c2 + c3)
+ score += self.ts_(self.TC2__, c2 + c3 + c4)
+ score += self.ts_(self.TC3__, c3 + c4 + c5)
+ score += self.ts_(self.TC4__, c4 + c5 + c6)
+# score += self.ts_(self.TC5__, c4 + c5 + c6)
+ score += self.ts_(self.UQ1__, p1 + c1)
+ score += self.ts_(self.UQ2__, p2 + c2)
+ score += self.ts_(self.UQ1__, p3 + c3)
+ score += self.ts_(self.BQ1__, p2 + c2 + c3)
+ score += self.ts_(self.BQ2__, p2 + c3 + c4)
+ score += self.ts_(self.BQ3__, p3 + c2 + c3)
+ score += self.ts_(self.BQ4__, p3 + c3 + c4)
+ score += self.ts_(self.TQ1__, p2 + c1 + c2 + c3)
+ score += self.ts_(self.TQ2__, p2 + c2 + c3 + c4)
+ score += self.ts_(self.TQ3__, p3 + c1 + c2 + c3)
+ score += self.ts_(self.TQ4__, p3 + c2 + c3 + c4)
+ p = u'O'
+ if score > 0:
+ result.append(word)
+ word = u''
+ p = u'B'
+ p1 = p2
+ p2 = p3
+ p3 = p
+ word += seg[i]
+
+ result.append(word)
+ return result
+
+
+class SearchJapanese(SearchLanguage):
+ """
+ Japanese search implementation: uses no stemmer, but word splitting is quite
+ complicated.
+ """
+ lang = 'ja'
+
+ def init(self, options):
+ type = options.get('type', 'default')
+ if type not in ('mecab', 'default'):
+ raise ValueError(("Japanese tokenizer's type should be 'mecab'"
+ " or 'default'"))
+ self.libmecab = None
+ if type == 'mecab':
+ self.splitter = MecabBinder(options)
+ else:
+ self.splitter = TinySegmenter()
+
+ def split(self, input):
+ return self.splitter.split(input)
+
+ def word_filter(self, stemmed_word):
+ return len(stemmed_word) > 1
diff --git a/sphinx/setup_command.py b/sphinx/setup_command.py
index 34da039b..ebbcf27b 100644
--- a/sphinx/setup_command.py
+++ b/sphinx/setup_command.py
@@ -22,7 +22,8 @@ from sphinx.util.console import darkred, nocolor, color_terminal
class BuildDoc(Command):
- """Distutils command to build Sphinx documentation.
+ """
+ Distutils command to build Sphinx documentation.
The Sphinx build can then be triggered from distutils, and some Sphinx
options can be set in ``setup.py`` or ``setup.cfg`` instead of Sphinx own
diff --git a/sphinx/texinputs/sphinx.sty b/sphinx/texinputs/sphinx.sty
index 47881094..ef7b891b 100644
--- a/sphinx/texinputs/sphinx.sty
+++ b/sphinx/texinputs/sphinx.sty
@@ -128,7 +128,6 @@
\newcommand{\strong}[1]{{\bf #1}}
\newcommand{\code}[1]{\texttt{#1}}
\newcommand{\bfcode}[1]{\code{\bfseries#1}}
-\newcommand{\samp}[1]{`\code{#1}'}
\newcommand{\email}[1]{\textsf{#1}}
% Redefine the Verbatim environment to allow border and background colors.
@@ -175,23 +174,6 @@
}
-% Index-entry generation support.
-%
-
-% Command to generate two index entries (using subentries)
-\newcommand{\indexii}[2]{\index{#1!#2}\index{#2!#1}}
-
-% And three entries (using only one level of subentries)
-\newcommand{\indexiii}[3]{\index{#1!#2 #3}\index{#2!#3, #1}\index{#3!#1 #2}}
-
-% And four (again, using only one level of subentries)
-\newcommand{\indexiv}[4]{
-\index{#1!#2 #3 #4}
-\index{#2!#3 #4, #1}
-\index{#3!#4, #1 #2}
-\index{#4!#1 #2 #3}
-}
-
% \moduleauthor{name}{email}
\newcommand{\moduleauthor}[2]{}
diff --git a/sphinx/themes/agogo/layout.html b/sphinx/themes/agogo/layout.html
index 3c427ed1..d063194a 100644
--- a/sphinx/themes/agogo/layout.html
+++ b/sphinx/themes/agogo/layout.html
@@ -19,7 +19,8 @@
</a></p>
{%- endif %}
{%- block headertitle %}
- <h1><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a></h1>
+ <div class="headertitle"><a
+ href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a></div>
{%- endblock %}
<div class="rel">
{%- for rellink in rellinks|reverse %}
diff --git a/sphinx/themes/agogo/static/agogo.css_t b/sphinx/themes/agogo/static/agogo.css_t
index fe60145d..5d9a1eb7 100644
--- a/sphinx/themes/agogo/static/agogo.css_t
+++ b/sphinx/themes/agogo/static/agogo.css_t
@@ -128,14 +128,15 @@ div.header {
padding-bottom: 10px;
}
-div.header h1 {
+div.header .headertitle {
font-family: {{ theme_headerfont }};
font-weight: normal;
font-size: 180%;
letter-spacing: .08em;
+ margin-bottom: .8em;
}
-div.header h1 a {
+div.header .headertitle a {
color: white;
}
diff --git a/sphinx/themes/basic/genindex-single.html b/sphinx/themes/basic/genindex-single.html
index 0f2cad23..eff8c1ce 100644
--- a/sphinx/themes/basic/genindex-single.html
+++ b/sphinx/themes/basic/genindex-single.html
@@ -7,31 +7,48 @@
:copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
#}
+{% macro indexentries(firstname, links) %}
+ <dt>
+ {%- if links -%}
+ <a href="{{ links[0][1] }}">
+ {%- if links[0][0] %}<strong>{% endif -%}
+ {{ firstname|e }}
+ {%- if links[0][0] %}</strong>{% endif -%}
+ </a>
+
+ {%- for ismain, link in links[1:] -%}
+ , <a href="{{ link }}">{% if ismain %}<strong>{% endif -%}
+ [{{ loop.index }}]
+ {%- if ismain %}</strong>{% endif -%}
+ </a>
+ {%- endfor %}
+ {%- else %}
+ {{ firstname|e }}
+ {%- endif %}
+ </dt>
+{% endmacro %}
+
{% extends "layout.html" %}
{% set title = _('Index') %}
{% block body %}
- <h1 id="index">{% trans key=key %}Index &ndash; {{ key }}{% endtrans %}</h1>
+<h1 id="index">{% trans key=key %}Index &ndash; {{ key }}{% endtrans %}</h1>
<table style="width: 100%" class="indextable"><tr>
{%- for column in entries|slice(2) if column %}
<td style="width: 33%" valign="top"><dl>
- {%- for entryname, (links, subitems) in column %}
- <dt>{% if links %}<a href="{{ links[0] }}">{{ entryname|e }}</a>
- {%- for link in links[1:] %}, <a href="{{ link }}">[{{ loop.index }}]</a>{% endfor %}
- {%- else %}{{ entryname|e }}{% endif %}</dt>
- {%- if subitems %}
- <dd><dl>
- {%- for subentryname, subentrylinks in subitems %}
- <dt><a href="{{ subentrylinks[0] }}">{{ subentryname|e }}</a>
- {%- for link in subentrylinks[1:] %}, <a href="{{ link }}">[{{ loop.index }}]</a>{% endfor -%}
- </dt>
+ {%- for entryname, (links, subitems) in column %}
+ {{ indexentries(entryname, links) }}
+ {%- if subitems %}
+ <dd><dl>
+ {%- for subentryname, subentrylinks in subitems %}
+ {{ indexentries(subentryname, subentrylinks) }}
+ {%- endfor %}
+ </dl></dd>
+ {%- endif -%}
{%- endfor %}
- </dl></dd>
- {%- endif -%}
-{%- endfor %}
-</dl></td>
-{%- endfor %}
+ </dl></td>
+ {%- endfor %}
</tr></table>
{% endblock %}
diff --git a/sphinx/themes/basic/genindex.html b/sphinx/themes/basic/genindex.html
index 182bbf8e..7bc002b6 100644
--- a/sphinx/themes/basic/genindex.html
+++ b/sphinx/themes/basic/genindex.html
@@ -7,39 +7,57 @@
:copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
#}
+{% macro indexentries(firstname, links) %}
+ <dt>
+ {%- if links -%}
+ <a href="{{ links[0][1] }}">
+ {%- if links[0][0] %}<strong>{% endif -%}
+ {{ firstname|e }}
+ {%- if links[0][0] %}</strong>{% endif -%}
+ </a>
+
+ {%- for ismain, link in links[1:] -%}
+ , <a href="{{ link }}">{% if ismain %}<strong>{% endif -%}
+ [{{ loop.index }}]
+ {%- if ismain %}</strong>{% endif -%}
+ </a>
+ {%- endfor %}
+ {%- else %}
+ {{ firstname|e }}
+ {%- endif %}
+ </dt>
+{% endmacro %}
+
{% extends "layout.html" %}
{% set title = _('Index') %}
{% block body %}
- <h1 id="index">{{ _('Index') }}</h1>
+<h1 id="index">{{ _('Index') }}</h1>
- <div class="genindex-jumpbox">
- {% for key, dummy in genindexentries -%}
- <a href="#{{ key }}"><strong>{{ key }}</strong></a> {% if not loop.last %}| {% endif %}
- {%- endfor %}
- </div>
+<div class="genindex-jumpbox">
+ {% for key, dummy in genindexentries -%}
+ <a href="#{{ key }}"><strong>{{ key }}</strong></a>
+ {% if not loop.last %}| {% endif %}
+ {%- endfor %}
+</div>
- {%- for key, entries in genindexentries %}
+{%- for key, entries in genindexentries %}
<h2 id="{{ key }}">{{ key }}</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
{%- for column in entries|slice(2) if column %}
<td style="width: 33%" valign="top"><dl>
- {%- for entryname, (links, subitems) in column %}
- <dt>{% if links %}<a href="{{ links[0] }}">{{ entryname|e }}</a>
- {%- for link in links[1:] %}, <a href="{{ link }}">[{{ loop.index }}]</a>{% endfor %}
- {%- else %}{{ entryname|e }}{% endif %}</dt>
- {%- if subitems %}
- <dd><dl>
- {%- for subentryname, subentrylinks in subitems %}
- <dt><a href="{{ subentrylinks[0] }}">{{ subentryname|e }}</a>
- {%- for link in subentrylinks[1:] %}, <a href="{{ link }}">[{{ loop.index }}]</a>{% endfor -%}
- </dt>
+ {%- for entryname, (links, subitems) in column %}
+ {{ indexentries(entryname, links) }}
+ {%- if subitems %}
+ <dd><dl>
+ {%- for subentryname, subentrylinks in subitems %}
+ {{ indexentries(subentryname, subentrylinks) }}
+ {%- endfor %}
+ </dl></dd>
+ {%- endif -%}
{%- endfor %}
- </dl></dd>
- {%- endif -%}
-{%- endfor %}
-</dl></td>
-{%- endfor %}
+ </dl></td>
+ {%- endfor %}
</tr></table>
{% endfor %}
diff --git a/sphinx/themes/basic/layout.html b/sphinx/themes/basic/layout.html
index 7aa03155..9fb989cb 100644
--- a/sphinx/themes/basic/layout.html
+++ b/sphinx/themes/basic/layout.html
@@ -16,7 +16,13 @@
{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and
(sidebars != []) %}
{%- set url_root = pathto('', 1) %}
+{# XXX necessary? #}
{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
+{%- if not embedded and docstitle %}
+ {%- set titlesuffix = " &mdash; "|safe + docstitle|e %}
+{%- else %}
+ {%- set titlesuffix = "" %}
+{%- endif %}
{%- macro relbar() %}
<div class="related">
@@ -78,24 +84,7 @@
{%- endif %}
{%- endmacro %}
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" />
- {{ metatags }}
- {%- if not embedded and docstitle %}
- {%- set titlesuffix = " &mdash; "|safe + docstitle|e %}
- {%- else %}
- {%- set titlesuffix = "" %}
- {%- endif %}
- {%- block htmltitle %}
- <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" />
- {%- for cssfile in css_files %}
- <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
- {%- endfor %}
- {%- if not embedded %}
+{%- macro script() %}
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '{{ url_root }}',
@@ -108,6 +97,26 @@
{%- for scriptfile in script_files %}
<script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
{%- endfor %}
+{%- endmacro %}
+
+{%- macro css() %}
+ <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
+ <link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
+ {%- for cssfile in css_files %}
+ <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
+ {%- endfor %}
+{%- endmacro %}
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" />
+ {{ metatags }}
+ {%- block htmltitle %}
+ <title>{{ title|striptags|e }}{{ titlesuffix }}</title>
+ {%- endblock %}
+ {{ css() }}
+ {%- if not embedded %}
+ {{ script() }}
{%- if use_opensearch %}
<link rel="search" type="application/opensearchdescription+xml"
title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
diff --git a/sphinx/themes/basic/searchresults.html b/sphinx/themes/basic/searchresults.html
new file mode 100644
index 00000000..667abffd
--- /dev/null
+++ b/sphinx/themes/basic/searchresults.html
@@ -0,0 +1,36 @@
+{#
+ basic/searchresults.html
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Template for the body of the search results page.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+#}
+<h1 id="search-documentation">Search</h1>
+<p>
+ From here you can search these documents. Enter your search
+ words into the box below and click "search".
+</p>
+<form action="" method="get">
+ <input type="text" name="q" value="" />
+ <input type="submit" value="search" />
+ <span id="search-progress" style="padding-left: 10px"></span>
+</form>
+{%- if search_performed %}
+ <h2>Search Results</h2>
+ {%- if not search_results %}
+ <p>Your search did not match any results.</p>
+ {%- endif %}
+{%- endif %}
+<div id="search-results">
+ {%- if search_results %}
+ <ul class="search">
+ {% for href, caption, context in search_results %}
+ <li><a href="{{ docroot }}{{ href }}/?highlight={{ q }}">{{ caption }}</a>
+ <div class="context">{{ context|e }}</div>
+ </li>
+ {% endfor %}
+ </ul>
+ {%- endif %}
+</div>
diff --git a/sphinx/themes/basic/static/ajax-loader.gif b/sphinx/themes/basic/static/ajax-loader.gif
new file mode 100644
index 00000000..61faf8ca
--- /dev/null
+++ b/sphinx/themes/basic/static/ajax-loader.gif
Binary files differ
diff --git a/sphinx/themes/basic/static/basic.css b/sphinx/themes/basic/static/basic.css_t
index eb22a942..9459201e 100644
--- a/sphinx/themes/basic/static/basic.css
+++ b/sphinx/themes/basic/static/basic.css_t
@@ -49,7 +49,7 @@ div.sphinxsidebarwrapper {
div.sphinxsidebar {
float: left;
- width: 230px;
+ width: {{ theme_sidebarwidth|toint }}px;
margin-left: -100%;
font-size: 90%;
}
@@ -447,6 +447,11 @@ dl.glossary dt {
font-style: oblique;
}
+abbr, acronym {
+ border-bottom: dotted 1px;
+ cursor: help;
+}
+
/* -- code displays --------------------------------------------------------- */
pre {
diff --git a/sphinx/themes/basic/static/comment-bright.png b/sphinx/themes/basic/static/comment-bright.png
new file mode 100644
index 00000000..551517b8
--- /dev/null
+++ b/sphinx/themes/basic/static/comment-bright.png
Binary files differ
diff --git a/sphinx/themes/basic/static/comment-close.png b/sphinx/themes/basic/static/comment-close.png
new file mode 100644
index 00000000..09b54be4
--- /dev/null
+++ b/sphinx/themes/basic/static/comment-close.png
Binary files differ
diff --git a/sphinx/themes/basic/static/comment.png b/sphinx/themes/basic/static/comment.png
new file mode 100644
index 00000000..92feb52b
--- /dev/null
+++ b/sphinx/themes/basic/static/comment.png
Binary files differ
diff --git a/sphinx/themes/basic/static/down-pressed.png b/sphinx/themes/basic/static/down-pressed.png
new file mode 100644
index 00000000..6f7ad782
--- /dev/null
+++ b/sphinx/themes/basic/static/down-pressed.png
Binary files differ
diff --git a/sphinx/themes/basic/static/down.png b/sphinx/themes/basic/static/down.png
new file mode 100644
index 00000000..3003a887
--- /dev/null
+++ b/sphinx/themes/basic/static/down.png
Binary files differ
diff --git a/sphinx/themes/basic/static/searchtools.js b/sphinx/themes/basic/static/searchtools.js_t
index 9308c6d5..fbb3bb65 100644
--- a/sphinx/themes/basic/static/searchtools.js
+++ b/sphinx/themes/basic/static/searchtools.js_t
@@ -1,6 +1,6 @@
/*
- * searchtools.js
- * ~~~~~~~~~~~~~~
+ * searchtools.js_t
+ * ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilties for the full-text search.
*
@@ -36,188 +36,7 @@ jQuery.makeSearchSummary = function(text, keywords, hlwords) {
return rv;
}
-/**
- * Porter Stemmer
- */
-var PorterStemmer = function() {
-
- var step2list = {
- ational: 'ate',
- tional: 'tion',
- enci: 'ence',
- anci: 'ance',
- izer: 'ize',
- bli: 'ble',
- alli: 'al',
- entli: 'ent',
- eli: 'e',
- ousli: 'ous',
- ization: 'ize',
- ation: 'ate',
- ator: 'ate',
- alism: 'al',
- iveness: 'ive',
- fulness: 'ful',
- ousness: 'ous',
- aliti: 'al',
- iviti: 'ive',
- biliti: 'ble',
- logi: 'log'
- };
-
- var step3list = {
- icate: 'ic',
- ative: '',
- alize: 'al',
- iciti: 'ic',
- ical: 'ic',
- ful: '',
- ness: ''
- };
-
- var c = "[^aeiou]"; // consonant
- var v = "[aeiouy]"; // vowel
- var C = c + "[^aeiouy]*"; // consonant sequence
- var V = v + "[aeiou]*"; // vowel sequence
-
- var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
- var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
- var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
- var s_v = "^(" + C + ")?" + v; // vowel in stem
-
- this.stemWord = function (w) {
- var stem;
- var suffix;
- var firstch;
- var origword = w;
-
- if (w.length < 3)
- return w;
-
- var re;
- var re2;
- var re3;
- var re4;
-
- firstch = w.substr(0,1);
- if (firstch == "y")
- w = firstch.toUpperCase() + w.substr(1);
-
- // Step 1a
- re = /^(.+?)(ss|i)es$/;
- re2 = /^(.+?)([^s])s$/;
-
- if (re.test(w))
- w = w.replace(re,"$1$2");
- else if (re2.test(w))
- w = w.replace(re2,"$1$2");
-
- // Step 1b
- re = /^(.+?)eed$/;
- re2 = /^(.+?)(ed|ing)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- re = new RegExp(mgr0);
- if (re.test(fp[1])) {
- re = /.$/;
- w = w.replace(re,"");
- }
- }
- else if (re2.test(w)) {
- var fp = re2.exec(w);
- stem = fp[1];
- re2 = new RegExp(s_v);
- if (re2.test(stem)) {
- w = stem;
- re2 = /(at|bl|iz)$/;
- re3 = new RegExp("([^aeiouylsz])\\1$");
- re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
- if (re2.test(w))
- w = w + "e";
- else if (re3.test(w)) {
- re = /.$/;
- w = w.replace(re,"");
- }
- else if (re4.test(w))
- w = w + "e";
- }
- }
-
- // Step 1c
- re = /^(.+?)y$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = new RegExp(s_v);
- if (re.test(stem))
- w = stem + "i";
- }
-
- // Step 2
- re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- suffix = fp[2];
- re = new RegExp(mgr0);
- if (re.test(stem))
- w = stem + step2list[suffix];
- }
-
- // Step 3
- re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- suffix = fp[2];
- re = new RegExp(mgr0);
- if (re.test(stem))
- w = stem + step3list[suffix];
- }
-
- // Step 4
- re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
- re2 = /^(.+?)(s|t)(ion)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = new RegExp(mgr1);
- if (re.test(stem))
- w = stem;
- }
- else if (re2.test(w)) {
- var fp = re2.exec(w);
- stem = fp[1] + fp[2];
- re2 = new RegExp(mgr1);
- if (re2.test(stem))
- w = stem;
- }
-
- // Step 5
- re = /^(.+?)e$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = new RegExp(mgr1);
- re2 = new RegExp(meq1);
- re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
- if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
- w = stem;
- }
- re = /ll$/;
- re2 = new RegExp(mgr1);
- if (re.test(w) && re2.test(w)) {
- re = /.$/;
- w = w.replace(re,"");
- }
-
- // and turn initial Y back to y
- if (firstch == "y")
- w = firstch.toLowerCase() + w.substr(1);
- return w;
- }
-}
-
+{{ search_language_stemming_code|safe }}
/**
* Search Module
@@ -300,20 +119,20 @@ var Search = {
},
query : function(query) {
- var stopwords = ['and', 'then', 'into', 'it', 'as', 'are', 'in',
- 'if', 'for', 'no', 'there', 'their', 'was', 'is',
- 'be', 'to', 'that', 'but', 'they', 'not', 'such',
- 'with', 'by', 'a', 'on', 'these', 'of', 'will',
- 'this', 'near', 'the', 'or', 'at'];
-
- // stem the searchterms and add them to the correct list
- var stemmer = new PorterStemmer();
+ var stopwords = {{ search_language_stop_words }};
+
+ // Stem the searchterms and add them to the correct list
+ var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = query.split(/\s+/);
- var object = (tmp.length == 1) ? tmp[0].toLowerCase() : null;
+ var objectterms = [];
for (var i = 0; i < tmp.length; i++) {
+ if (tmp[i] != "") {
+ objectterms.push(tmp[i].toLowerCase());
+ }
+
if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) ||
tmp[i] == "") {
// skip this "word"
@@ -344,9 +163,6 @@ var Search = {
var filenames = this._index.filenames;
var titles = this._index.titles;
var terms = this._index.terms;
- var objects = this._index.objects;
- var objtypes = this._index.objtypes;
- var objnames = this._index.objnames;
var fileMap = {};
var files = null;
// different result priorities
@@ -357,40 +173,19 @@ var Search = {
$('#search-progress').empty();
// lookup as object
- if (object != null) {
- for (var prefix in objects) {
- for (var name in objects[prefix]) {
- var fullname = (prefix ? prefix + '.' : '') + name;
- if (fullname.toLowerCase().indexOf(object) > -1) {
- match = objects[prefix][name];
- descr = objnames[match[1]] + _(', in ') + titles[match[0]];
- // XXX the generated anchors are not generally correct
- // XXX there may be custom prefixes
- result = [filenames[match[0]], fullname, '#'+fullname, descr];
- switch (match[2]) {
- case 1: objectResults.push(result); break;
- case 0: importantResults.push(result); break;
- case 2: unimportantResults.push(result); break;
- }
- }
- }
- }
+ for (var i = 0; i < objectterms.length; i++) {
+ var others = [].concat(objectterms.slice(0,i),
+ objectterms.slice(i+1, objectterms.length))
+ var results = this.performObjectSearch(objectterms[i], others);
+ // Assume first word is most likely to be the object,
+ // other words more likely to be in description.
+ // Therefore put matches for earlier words first.
+ // (Results are eventually used in reverse order).
+ objectResults = results[0].concat(objectResults);
+ importantResults = results[1].concat(importantResults);
+ unimportantResults = results[2].concat(unimportantResults);
}
- // sort results descending
- objectResults.sort(function(a, b) {
- return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
- });
-
- importantResults.sort(function(a, b) {
- return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
- });
-
- unimportantResults.sort(function(a, b) {
- return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
- });
-
-
// perform the search on the required terms
for (var i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
@@ -510,6 +305,67 @@ var Search = {
}
}
displayNextItem();
+ },
+
+ performObjectSearch : function(object, otherterms) {
+ var filenames = this._index.filenames;
+ var objects = this._index.objects;
+ var objnames = this._index.objnames;
+ var titles = this._index.titles;
+
+ var importantResults = [];
+ var objectResults = [];
+ var unimportantResults = [];
+
+ for (var prefix in objects) {
+ for (var name in objects[prefix]) {
+ var fullname = (prefix ? prefix + '.' : '') + name;
+ if (fullname.toLowerCase().indexOf(object) > -1) {
+ var match = objects[prefix][name];
+ var objname = objnames[match[1]];
+ var title = titles[match[0]];
+ // If more than one term searched for, we require other words to be
+ // found in the name/title/description
+ if (otherterms.length > 0) {
+ var haystack = (prefix + ' ' + name + ' ' + objname + ' ' + title).toLowerCase();
+ var allfound = true;
+ for (var i = 0; i < otherterms.length; i++) {
+ if (haystack.indexOf(otherterms[i]) == -1) {
+ allfound = false;
+ break;
+ }
+ }
+ if (!allfound) {
+ continue;
+ }
+ }
+ var descr = objname + _(', in ') + title;
+ // XXX the generated anchors are not generally correct
+ // XXX there may be custom prefixes
+ result = [filenames[match[0]], fullname, '#'+fullname, descr];
+ switch (match[2]) {
+ case 1: objectResults.push(result); break;
+ case 0: importantResults.push(result); break;
+ case 2: unimportantResults.push(result); break;
+ }
+ }
+ }
+ }
+
+ // sort results descending
+ objectResults.sort(function(a, b) {
+ return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
+ });
+
+ importantResults.sort(function(a, b) {
+ return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
+ });
+
+ unimportantResults.sort(function(a, b) {
+ return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
+ });
+
+ return [importantResults, objectResults, unimportantResults]
}
}
diff --git a/sphinx/themes/basic/static/underscore.js b/sphinx/themes/basic/static/underscore.js
index 9146e086..5d899143 100644
--- a/sphinx/themes/basic/static/underscore.js
+++ b/sphinx/themes/basic/static/underscore.js
@@ -1,3 +1,10 @@
+// Underscore.js 0.5.5
+// (c) 2009 Jeremy Ashkenas, DocumentCloud Inc.
+// Underscore is freely distributable under the terms of the MIT license.
+// Portions of Underscore are inspired by or borrowed from Prototype.js,
+// Oliver Steele's Functional, and John Resig's Micro-Templating.
+// For all details and documentation:
+// http://documentcloud.github.com/underscore/
(function(){var j=this,n=j._,i=function(a){this._wrapped=a},m=typeof StopIteration!=="undefined"?StopIteration:"__break__",b=j._=function(a){return new i(a)};if(typeof exports!=="undefined")exports._=b;var k=Array.prototype.slice,o=Array.prototype.unshift,p=Object.prototype.toString,q=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;b.VERSION="0.5.5";b.each=function(a,c,d){try{if(a.forEach)a.forEach(c,d);else if(b.isArray(a)||b.isArguments(a))for(var e=0,f=a.length;e<f;e++)c.call(d,
a[e],e,a);else{var g=b.keys(a);f=g.length;for(e=0;e<f;e++)c.call(d,a[g[e]],g[e],a)}}catch(h){if(h!=m)throw h;}return a};b.map=function(a,c,d){if(a&&b.isFunction(a.map))return a.map(c,d);var e=[];b.each(a,function(f,g,h){e.push(c.call(d,f,g,h))});return e};b.reduce=function(a,c,d,e){if(a&&b.isFunction(a.reduce))return a.reduce(b.bind(d,e),c);b.each(a,function(f,g,h){c=d.call(e,c,f,g,h)});return c};b.reduceRight=function(a,c,d,e){if(a&&b.isFunction(a.reduceRight))return a.reduceRight(b.bind(d,e),c);
var f=b.clone(b.toArray(a)).reverse();b.each(f,function(g,h){c=d.call(e,c,g,h,a)});return c};b.detect=function(a,c,d){var e;b.each(a,function(f,g,h){if(c.call(d,f,g,h)){e=f;b.breakLoop()}});return e};b.select=function(a,c,d){if(a&&b.isFunction(a.filter))return a.filter(c,d);var e=[];b.each(a,function(f,g,h){c.call(d,f,g,h)&&e.push(f)});return e};b.reject=function(a,c,d){var e=[];b.each(a,function(f,g,h){!c.call(d,f,g,h)&&e.push(f)});return e};b.all=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.every))return a.every(c,
diff --git a/sphinx/themes/basic/static/up-pressed.png b/sphinx/themes/basic/static/up-pressed.png
new file mode 100644
index 00000000..8bd587af
--- /dev/null
+++ b/sphinx/themes/basic/static/up-pressed.png
Binary files differ
diff --git a/sphinx/themes/basic/static/up.png b/sphinx/themes/basic/static/up.png
new file mode 100644
index 00000000..b9462568
--- /dev/null
+++ b/sphinx/themes/basic/static/up.png
Binary files differ
diff --git a/sphinx/themes/basic/static/websupport.js b/sphinx/themes/basic/static/websupport.js
new file mode 100644
index 00000000..cbb60923
--- /dev/null
+++ b/sphinx/themes/basic/static/websupport.js
@@ -0,0 +1,808 @@
+/*
+ * websupport.js
+ * ~~~~~~~~~~~~~
+ *
+ * sphinx.websupport utilties for all documentation.
+ *
+ * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+(function($) {
+ $.fn.autogrow = function() {
+ return this.each(function() {
+ var textarea = this;
+
+ $.fn.autogrow.resize(textarea);
+
+ $(textarea)
+ .focus(function() {
+ textarea.interval = setInterval(function() {
+ $.fn.autogrow.resize(textarea);
+ }, 500);
+ })
+ .blur(function() {
+ clearInterval(textarea.interval);
+ });
+ });
+ };
+
+ $.fn.autogrow.resize = function(textarea) {
+ var lineHeight = parseInt($(textarea).css('line-height'), 10);
+ var lines = textarea.value.split('\n');
+ var columns = textarea.cols;
+ var lineCount = 0;
+ $.each(lines, function() {
+ lineCount += Math.ceil(this.length / columns) || 1;
+ });
+ var height = lineHeight * (lineCount + 1);
+ $(textarea).css('height', height);
+ };
+})(jQuery);
+
+(function($) {
+ var comp, by;
+
+ function init() {
+ initEvents();
+ initComparator();
+ }
+
+ function initEvents() {
+ $('a.comment-close').live("click", function(event) {
+ event.preventDefault();
+ hide($(this).attr('id').substring(2));
+ });
+ $('a.vote').live("click", function(event) {
+ event.preventDefault();
+ handleVote($(this));
+ });
+ $('a.reply').live("click", function(event) {
+ event.preventDefault();
+ openReply($(this).attr('id').substring(2));
+ });
+ $('a.close-reply').live("click", function(event) {
+ event.preventDefault();
+ closeReply($(this).attr('id').substring(2));
+ });
+ $('a.sort-option').live("click", function(event) {
+ event.preventDefault();
+ handleReSort($(this));
+ });
+ $('a.show-proposal').live("click", function(event) {
+ event.preventDefault();
+ showProposal($(this).attr('id').substring(2));
+ });
+ $('a.hide-proposal').live("click", function(event) {
+ event.preventDefault();
+ hideProposal($(this).attr('id').substring(2));
+ });
+ $('a.show-propose-change').live("click", function(event) {
+ event.preventDefault();
+ showProposeChange($(this).attr('id').substring(2));
+ });
+ $('a.hide-propose-change').live("click", function(event) {
+ event.preventDefault();
+ hideProposeChange($(this).attr('id').substring(2));
+ });
+ $('a.accept-comment').live("click", function(event) {
+ event.preventDefault();
+ acceptComment($(this).attr('id').substring(2));
+ });
+ $('a.delete-comment').live("click", function(event) {
+ event.preventDefault();
+ deleteComment($(this).attr('id').substring(2));
+ });
+ $('a.comment-markup').live("click", function(event) {
+ event.preventDefault();
+ toggleCommentMarkupBox($(this).attr('id').substring(2));
+ });
+ }
+
+ /**
+ * Set comp, which is a comparator function used for sorting and
+ * inserting comments into the list.
+ */
+ function setComparator() {
+ // If the first three letters are "asc", sort in ascending order
+ // and remove the prefix.
+ if (by.substring(0,3) == 'asc') {
+ var i = by.substring(3);
+ comp = function(a, b) { return a[i] - b[i]; };
+ } else {
+ // Otherwise sort in descending order.
+ comp = function(a, b) { return b[by] - a[by]; };
+ }
+
+ // Reset link styles and format the selected sort option.
+ $('a.sel').attr('href', '#').removeClass('sel');
+ $('a.by' + by).removeAttr('href').addClass('sel');
+ }
+
+ /**
+ * Create a comp function. If the user has preferences stored in
+ * the sortBy cookie, use those, otherwise use the default.
+ */
+ function initComparator() {
+ by = 'rating'; // Default to sort by rating.
+ // If the sortBy cookie is set, use that instead.
+ if (document.cookie.length > 0) {
+ var start = document.cookie.indexOf('sortBy=');
+ if (start != -1) {
+ start = start + 7;
+ var end = document.cookie.indexOf(";", start);
+ if (end == -1) {
+ end = document.cookie.length;
+ by = unescape(document.cookie.substring(start, end));
+ }
+ }
+ }
+ setComparator();
+ }
+
+ /**
+ * Show a comment div.
+ */
+ function show(id) {
+ $('#ao' + id).hide();
+ $('#ah' + id).show();
+ var context = $.extend({id: id}, opts);
+ var popup = $(renderTemplate(popupTemplate, context)).hide();
+ popup.find('textarea[name="proposal"]').hide();
+ popup.find('a.by' + by).addClass('sel');
+ var form = popup.find('#cf' + id);
+ form.submit(function(event) {
+ event.preventDefault();
+ addComment(form);
+ });
+ $('#s' + id).after(popup);
+ popup.slideDown('fast', function() {
+ getComments(id);
+ });
+ }
+
+ /**
+ * Hide a comment div.
+ */
+ function hide(id) {
+ $('#ah' + id).hide();
+ $('#ao' + id).show();
+ var div = $('#sc' + id);
+ div.slideUp('fast', function() {
+ div.remove();
+ });
+ }
+
+ /**
+ * Perform an ajax request to get comments for a node
+ * and insert the comments into the comments tree.
+ */
+ function getComments(id) {
+ $.ajax({
+ type: 'GET',
+ url: opts.getCommentsURL,
+ data: {node: id},
+ success: function(data, textStatus, request) {
+ var ul = $('#cl' + id);
+ var speed = 100;
+ $('#cf' + id)
+ .find('textarea[name="proposal"]')
+ .data('source', data.source);
+
+ if (data.comments.length === 0) {
+ ul.html('<li>No comments yet.</li>');
+ ul.data('empty', true);
+ } else {
+ // If there are comments, sort them and put them in the list.
+ var comments = sortComments(data.comments);
+ speed = data.comments.length * 100;
+ appendComments(comments, ul);
+ ul.data('empty', false);
+ }
+ $('#cn' + id).slideUp(speed + 200);
+ ul.slideDown(speed);
+ },
+ error: function(request, textStatus, error) {
+ showError('Oops, there was a problem retrieving the comments.');
+ },
+ dataType: 'json'
+ });
+ }
+
+ /**
+ * Add a comment via ajax and insert the comment into the comment tree.
+ */
+ function addComment(form) {
+ var node_id = form.find('input[name="node"]').val();
+ var parent_id = form.find('input[name="parent"]').val();
+ var text = form.find('textarea[name="comment"]').val();
+ var proposal = form.find('textarea[name="proposal"]').val();
+
+ if (text == '') {
+ showError('Please enter a comment.');
+ return;
+ }
+
+ // Disable the form that is being submitted.
+ form.find('textarea,input').attr('disabled', 'disabled');
+
+ // Send the comment to the server.
+ $.ajax({
+ type: "POST",
+ url: opts.addCommentURL,
+ dataType: 'json',
+ data: {
+ node: node_id,
+ parent: parent_id,
+ text: text,
+ proposal: proposal
+ },
+ success: function(data, textStatus, error) {
+ // Reset the form.
+ if (node_id) {
+ hideProposeChange(node_id);
+ }
+ form.find('textarea')
+ .val('')
+ .add(form.find('input'))
+ .removeAttr('disabled');
+ var ul = $('#cl' + (node_id || parent_id));
+ if (ul.data('empty')) {
+ $(ul).empty();
+ ul.data('empty', false);
+ }
+ insertComment(data.comment);
+ var ao = $('#ao' + node_id);
+ ao.find('img').attr({'src': opts.commentBrightImage});
+ if (node_id) {
+ // if this was a "root" comment, remove the commenting box
+ // (the user can get it back by reopening the comment popup)
+ $('#ca' + node_id).slideUp();
+ }
+ },
+ error: function(request, textStatus, error) {
+ form.find('textarea,input').removeAttr('disabled');
+ showError('Oops, there was a problem adding the comment.');
+ }
+ });
+ }
+
+ /**
+ * Recursively append comments to the main comment list and children
+ * lists, creating the comment tree.
+ */
+ function appendComments(comments, ul) {
+ $.each(comments, function() {
+ var div = createCommentDiv(this);
+ ul.append($(document.createElement('li')).html(div));
+ appendComments(this.children, div.find('ul.comment-children'));
+ // To avoid stagnating data, don't store the comments children in data.
+ this.children = null;
+ div.data('comment', this);
+ });
+ }
+
+ /**
+ * After adding a new comment, it must be inserted in the correct
+ * location in the comment tree.
+ */
+ function insertComment(comment) {
+ var div = createCommentDiv(comment);
+
+ // To avoid stagnating data, don't store the comments children in data.
+ comment.children = null;
+ div.data('comment', comment);
+
+ var ul = $('#cl' + (comment.node || comment.parent));
+ var siblings = getChildren(ul);
+
+ var li = $(document.createElement('li'));
+ li.hide();
+
+ // Determine where in the parents children list to insert this comment.
+ for(i=0; i < siblings.length; i++) {
+ if (comp(comment, siblings[i]) <= 0) {
+ $('#cd' + siblings[i].id)
+ .parent()
+ .before(li.html(div));
+ li.slideDown('fast');
+ return;
+ }
+ }
+
+ // If we get here, this comment rates lower than all the others,
+ // or it is the only comment in the list.
+ ul.append(li.html(div));
+ li.slideDown('fast');
+ }
+
+ function acceptComment(id) {
+ $.ajax({
+ type: 'POST',
+ url: opts.acceptCommentURL,
+ data: {id: id},
+ success: function(data, textStatus, request) {
+ $('#cm' + id).fadeOut('fast');
+ $('#cd' + id).removeClass('moderate');
+ },
+ error: function(request, textStatus, error) {
+ showError('Oops, there was a problem accepting the comment.');
+ }
+ });
+ }
+
+ function deleteComment(id) {
+ $.ajax({
+ type: 'POST',
+ url: opts.deleteCommentURL,
+ data: {id: id},
+ success: function(data, textStatus, request) {
+ var div = $('#cd' + id);
+ if (data == 'delete') {
+ // Moderator mode: remove the comment and all children immediately
+ div.slideUp('fast', function() {
+ div.remove();
+ });
+ return;
+ }
+ // User mode: only mark the comment as deleted
+ div
+ .find('span.user-id:first')
+ .text('[deleted]').end()
+ .find('div.comment-text:first')
+ .text('[deleted]').end()
+ .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
+ ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
+ .remove();
+ var comment = div.data('comment');
+ comment.username = '[deleted]';
+ comment.text = '[deleted]';
+ div.data('comment', comment);
+ },
+ error: function(request, textStatus, error) {
+ showError('Oops, there was a problem deleting the comment.');
+ }
+ });
+ }
+
+ function showProposal(id) {
+ $('#sp' + id).hide();
+ $('#hp' + id).show();
+ $('#pr' + id).slideDown('fast');
+ }
+
+ function hideProposal(id) {
+ $('#hp' + id).hide();
+ $('#sp' + id).show();
+ $('#pr' + id).slideUp('fast');
+ }
+
+ function showProposeChange(id) {
+ $('#pc' + id).hide();
+ $('#hc' + id).show();
+ var textarea = $('#pt' + id);
+ textarea.val(textarea.data('source'));
+ $.fn.autogrow.resize(textarea[0]);
+ textarea.slideDown('fast');
+ }
+
+ function hideProposeChange(id) {
+ $('#hc' + id).hide();
+ $('#pc' + id).show();
+ var textarea = $('#pt' + id);
+ textarea.val('').removeAttr('disabled');
+ textarea.slideUp('fast');
+ }
+
+ function toggleCommentMarkupBox(id) {
+ $('#mb' + id).toggle();
+ }
+
+ /** Handle when the user clicks on a sort by link. */
+ function handleReSort(link) {
+ var classes = link.attr('class').split(/\s+/);
+ for (var i=0; i<classes.length; i++) {
+ if (classes[i] != 'sort-option') {
+ by = classes[i].substring(2);
+ }
+ }
+ setComparator();
+ // Save/update the sortBy cookie.
+ var expiration = new Date();
+ expiration.setDate(expiration.getDate() + 365);
+ document.cookie= 'sortBy=' + escape(by) +
+ ';expires=' + expiration.toUTCString();
+ $('ul.comment-ul').each(function(index, ul) {
+ var comments = getChildren($(ul), true);
+ comments = sortComments(comments);
+ appendComments(comments, $(ul).empty());
+ });
+ }
+
+ /**
+ * Function to process a vote when a user clicks an arrow.
+ */
+ function handleVote(link) {
+ if (!opts.voting) {
+ showError("You'll need to login to vote.");
+ return;
+ }
+
+ var id = link.attr('id');
+ if (!id) {
+ // Didn't click on one of the voting arrows.
+ return;
+ }
+ // If it is an unvote, the new vote value is 0,
+ // Otherwise it's 1 for an upvote, or -1 for a downvote.
+ var value = 0;
+ if (id.charAt(1) != 'u') {
+ value = id.charAt(0) == 'u' ? 1 : -1;
+ }
+ // The data to be sent to the server.
+ var d = {
+ comment_id: id.substring(2),
+ value: value
+ };
+
+ // Swap the vote and unvote links.
+ link.hide();
+ $('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
+ .show();
+
+ // The div the comment is displayed in.
+ var div = $('div#cd' + d.comment_id);
+ var data = div.data('comment');
+
+ // If this is not an unvote, and the other vote arrow has
+ // already been pressed, unpress it.
+ if ((d.value !== 0) && (data.vote === d.value * -1)) {
+ $('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
+ $('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
+ }
+
+ // Update the comments rating in the local data.
+ data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
+ data.vote = d.value;
+ div.data('comment', data);
+
+ // Change the rating text.
+ div.find('.rating:first')
+ .text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));
+
+ // Send the vote information to the server.
+ $.ajax({
+ type: "POST",
+ url: opts.processVoteURL,
+ data: d,
+ error: function(request, textStatus, error) {
+ showError('Oops, there was a problem casting that vote.');
+ }
+ });
+ }
+
+ /**
+ * Open a reply form used to reply to an existing comment.
+ */
+ function openReply(id) {
+ // Swap out the reply link for the hide link
+ $('#rl' + id).hide();
+ $('#cr' + id).show();
+
+ // Add the reply li to the children ul.
+ var div = $(renderTemplate(replyTemplate, {id: id})).hide();
+ $('#cl' + id)
+ .prepend(div)
+ // Setup the submit handler for the reply form.
+ .find('#rf' + id)
+ .submit(function(event) {
+ event.preventDefault();
+ addComment($('#rf' + id));
+ closeReply(id);
+ })
+ .find('input[type=button]')
+ .click(function() {
+ closeReply(id);
+ });
+ div.slideDown('fast', function() {
+ $('#rf' + id).find('textarea').focus();
+ });
+ }
+
+ /**
+ * Close the reply form opened with openReply.
+ */
+ function closeReply(id) {
+ // Remove the reply div from the DOM.
+ $('#rd' + id).slideUp('fast', function() {
+ $(this).remove();
+ });
+
+ // Swap out the hide link for the reply link
+ $('#cr' + id).hide();
+ $('#rl' + id).show();
+ }
+
+ /**
+ * Recursively sort a tree of comments using the comp comparator.
+ */
+ function sortComments(comments) {
+ comments.sort(comp);
+ $.each(comments, function() {
+ this.children = sortComments(this.children);
+ });
+ return comments;
+ }
+
+ /**
+ * Get the children comments from a ul. If recursive is true,
+ * recursively include childrens' children.
+ */
+ function getChildren(ul, recursive) {
+ var children = [];
+ ul.children().children("[id^='cd']")
+ .each(function() {
+ var comment = $(this).data('comment');
+ if (recursive)
+ comment.children = getChildren($(this).find('#cl' + comment.id), true);
+ children.push(comment);
+ });
+ return children;
+ }
+
+ /** Create a div to display a comment in. */
+ function createCommentDiv(comment) {
+ if (!comment.displayed && !opts.moderator) {
+ return $('<div class="moderate">Thank you! Your comment will show up '
+ + 'once it is has been approved by a moderator.</div>');
+ }
+ // Prettify the comment rating.
+ comment.pretty_rating = comment.rating + ' point' +
+ (comment.rating == 1 ? '' : 's');
+ // Make a class (for displaying not yet moderated comments differently)
+ comment.css_class = comment.displayed ? '' : ' moderate';
+ // Create a div for this comment.
+ var context = $.extend({}, opts, comment);
+ var div = $(renderTemplate(commentTemplate, context));
+
+ // If the user has voted on this comment, highblight the correct arrow.
+ if (comment.vote) {
+ var direction = (comment.vote == 1) ? 'u' : 'd';
+ div.find('#' + direction + 'v' + comment.id).hide();
+ div.find('#' + direction + 'u' + comment.id).show();
+ }
+
+ if (opts.moderator || comment.text != '[deleted]') {
+ div.find('a.reply').show();
+ if (comment.proposal_diff)
+ div.find('#sp' + comment.id).show();
+ if (opts.moderator && !comment.displayed)
+ div.find('#cm' + comment.id).show();
+ if (opts.moderator || (opts.username == comment.username))
+ div.find('#dc' + comment.id).show();
+ }
+ return div;
+ }
+
+ /**
+ * A simple template renderer. Placeholders such as <%id%> are replaced
+ * by context['id'] with items being escaped. Placeholders such as <#id#>
+ * are not escaped.
+ */
+ function renderTemplate(template, context) {
+ var esc = $(document.createElement('div'));
+
+ function handle(ph, escape) {
+ var cur = context;
+ $.each(ph.split('.'), function() {
+ cur = cur[this];
+ });
+ return escape ? esc.text(cur || "").html() : cur;
+ }
+
+ return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
+ return handle(arguments[2], arguments[1] == '%' ? true : false);
+ });
+ }
+
+ /** Flash an error message briefly. */
+ function showError(message) {
+ $(document.createElement('div')).attr({'class': 'popup-error'})
+ .append($(document.createElement('div'))
+ .attr({'class': 'error-message'}).text(message))
+ .appendTo('body')
+ .fadeIn("slow")
+ .delay(2000)
+ .fadeOut("slow");
+ }
+
+ /** Add a link the user uses to open the comments popup. */
+ $.fn.comment = function() {
+ return this.each(function() {
+ var id = $(this).attr('id').substring(1);
+ var count = COMMENT_METADATA[id];
+ var title = count + ' comment' + (count == 1 ? '' : 's');
+ var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
+ var addcls = count == 0 ? ' nocomment' : '';
+ $(this)
+ .append(
+ $(document.createElement('a')).attr({
+ href: '#',
+ 'class': 'sphinx-comment-open' + addcls,
+ id: 'ao' + id
+ })
+ .append($(document.createElement('img')).attr({
+ src: image,
+ alt: 'comment',
+ title: title
+ }))
+ .click(function(event) {
+ event.preventDefault();
+ show($(this).attr('id').substring(2));
+ })
+ )
+ .append(
+ $(document.createElement('a')).attr({
+ href: '#',
+ 'class': 'sphinx-comment-close hidden',
+ id: 'ah' + id
+ })
+ .append($(document.createElement('img')).attr({
+ src: opts.closeCommentImage,
+ alt: 'close',
+ title: 'close'
+ }))
+ .click(function(event) {
+ event.preventDefault();
+ hide($(this).attr('id').substring(2));
+ })
+ );
+ });
+ };
+
+ var opts = {
+ processVoteURL: '/_process_vote',
+ addCommentURL: '/_add_comment',
+ getCommentsURL: '/_get_comments',
+ acceptCommentURL: '/_accept_comment',
+ deleteCommentURL: '/_delete_comment',
+ commentImage: '/static/_static/comment.png',
+ closeCommentImage: '/static/_static/comment-close.png',
+ loadingImage: '/static/_static/ajax-loader.gif',
+ commentBrightImage: '/static/_static/comment-bright.png',
+ upArrow: '/static/_static/up.png',
+ downArrow: '/static/_static/down.png',
+ upArrowPressed: '/static/_static/up-pressed.png',
+ downArrowPressed: '/static/_static/down-pressed.png',
+ voting: false,
+ moderator: false
+ };
+
+ if (typeof COMMENT_OPTIONS != "undefined") {
+ opts = jQuery.extend(opts, COMMENT_OPTIONS);
+ }
+
+ var popupTemplate = '\
+ <div class="sphinx-comments" id="sc<%id%>">\
+ <p class="sort-options">\
+ Sort by:\
+ <a href="#" class="sort-option byrating">best rated</a>\
+ <a href="#" class="sort-option byascage">newest</a>\
+ <a href="#" class="sort-option byage">oldest</a>\
+ </p>\
+ <div class="comment-header">Comments</div>\
+ <div class="comment-loading" id="cn<%id%>">\
+ loading comments... <img src="<%loadingImage%>" alt="" /></div>\
+ <ul id="cl<%id%>" class="comment-ul"></ul>\
+ <div id="ca<%id%>">\
+ <p class="add-a-comment">Add a comment\
+ (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
+ <div class="comment-markup-box" id="mb<%id%>">\
+ reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
+ <tt>``code``</tt>, \
+ code blocks: <tt>::</tt> and an indented block after blank line</div>\
+ <form method="post" id="cf<%id%>" class="comment-form" action="">\
+ <textarea name="comment" cols="80"></textarea>\
+ <p class="propose-button">\
+ <a href="#" id="pc<%id%>" class="show-propose-change">\
+ Propose a change &#9657;\
+ </a>\
+ <a href="#" id="hc<%id%>" class="hide-propose-change">\
+ Propose a change &#9663;\
+ </a>\
+ </p>\
+ <textarea name="proposal" id="pt<%id%>" cols="80"\
+ spellcheck="false"></textarea>\
+ <input type="submit" value="Add comment" />\
+ <input type="hidden" name="node" value="<%id%>" />\
+ <input type="hidden" name="parent" value="" />\
+ </form>\
+ </div>\
+ </div>';
+
+ var commentTemplate = '\
+ <div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
+ <div class="vote">\
+ <div class="arrow">\
+ <a href="#" id="uv<%id%>" class="vote" title="vote up">\
+ <img src="<%upArrow%>" />\
+ </a>\
+ <a href="#" id="uu<%id%>" class="un vote" title="vote up">\
+ <img src="<%upArrowPressed%>" />\
+ </a>\
+ </div>\
+ <div class="arrow">\
+ <a href="#" id="dv<%id%>" class="vote" title="vote down">\
+ <img src="<%downArrow%>" id="da<%id%>" />\
+ </a>\
+ <a href="#" id="du<%id%>" class="un vote" title="vote down">\
+ <img src="<%downArrowPressed%>" />\
+ </a>\
+ </div>\
+ </div>\
+ <div class="comment-content">\
+ <p class="tagline comment">\
+ <span class="user-id"><%username%></span>\
+ <span class="rating"><%pretty_rating%></span>\
+ <span class="delta"><%time.delta%></span>\
+ </p>\
+ <div class="comment-text comment"><#text#></div>\
+ <p class="comment-opts comment">\
+ <a href="#" class="reply hidden" id="rl<%id%>">reply &#9657;</a>\
+ <a href="#" class="close-reply" id="cr<%id%>">reply &#9663;</a>\
+ <a href="#" id="sp<%id%>" class="show-proposal">proposal &#9657;</a>\
+ <a href="#" id="hp<%id%>" class="hide-proposal">proposal &#9663;</a>\
+ <a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
+ <span id="cm<%id%>" class="moderation hidden">\
+ <a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
+ </span>\
+ </p>\
+ <pre class="proposal" id="pr<%id%>">\
+<#proposal_diff#>\
+ </pre>\
+ <ul class="comment-children" id="cl<%id%>"></ul>\
+ </div>\
+ <div class="clearleft"></div>\
+ </div>\
+ </div>';
+
+ var replyTemplate = '\
+ <li>\
+ <div class="reply-div" id="rd<%id%>">\
+ <form id="rf<%id%>">\
+ <textarea name="comment" cols="80"></textarea>\
+ <input type="submit" value="Add reply" />\
+ <input type="button" value="Cancel" />\
+ <input type="hidden" name="parent" value="<%id%>" />\
+ <input type="hidden" name="node" value="" />\
+ </form>\
+ </div>\
+ </li>';
+
+ $(document).ready(function() {
+ init();
+ });
+})(jQuery);
+
+$(document).ready(function() {
+ // add comment anchors for all paragraphs that are commentable
+ $('.sphinx-has-comment').comment();
+
+ // highlight search words in search results
+ $("div.context").each(function() {
+ var params = $.getQueryParameters();
+ var terms = (params.q) ? params.q[0].split(/\s+/) : [];
+ var result = $(this);
+ $.each(terms, function() {
+ result.highlightText(this.toLowerCase(), 'highlighted');
+ });
+ });
+
+ // directly open comment window if requested
+ var anchor = document.location.hash;
+ if (anchor.substring(0, 9) == '#comment-') {
+ $('#ao' + anchor.substring(9)).click();
+ document.location.hash = '#s' + anchor.substring(9);
+ }
+});
diff --git a/sphinx/themes/basic/theme.conf b/sphinx/themes/basic/theme.conf
index d1fe6d1f..f7283730 100644
--- a/sphinx/themes/basic/theme.conf
+++ b/sphinx/themes/basic/theme.conf
@@ -5,3 +5,4 @@ pygments_style = none
[options]
nosidebar = false
+sidebarwidth = 230 \ No newline at end of file
diff --git a/sphinx/themes/default/static/default.css_t b/sphinx/themes/default/static/default.css_t
index ba20dca7..85c9436a 100644
--- a/sphinx/themes/default/static/default.css_t
+++ b/sphinx/themes/default/static/default.css_t
@@ -32,7 +32,7 @@ div.documentwrapper {
}
div.bodywrapper {
- margin: 0 0 0 230px;
+ margin: 0 0 0 {{ theme_sidebarwidth|toint }}px;
}
div.body {
@@ -43,7 +43,7 @@ div.body {
{%- if theme_rightsidebar|tobool %}
div.bodywrapper {
- margin: 0 230px 0 0;
+ margin: 0 {{ theme_sidebarwidth|toint }}px 0 0;
}
{%- endif %}
diff --git a/sphinx/themes/default/static/sidebar.js b/sphinx/themes/default/static/sidebar.js
index e9ef491c..a45e1926 100644
--- a/sphinx/themes/default/static/sidebar.js
+++ b/sphinx/themes/default/static/sidebar.js
@@ -29,6 +29,9 @@ $(function() {
var sidebar = $('.sphinxsidebar');
var sidebarwrapper = $('.sphinxsidebarwrapper');
+ // for some reason, the document has no sidebar; do not run into errors
+ if (!sidebar.length) return;
+
// original margin-left of the bodywrapper and width of the sidebar
// with the sidebar expanded
var bw_margin_expanded = bodywrapper.css('margin-left');
diff --git a/sphinx/themes/epub/epub-cover.html b/sphinx/themes/epub/epub-cover.html
new file mode 100644
index 00000000..f8088925
--- /dev/null
+++ b/sphinx/themes/epub/epub-cover.html
@@ -0,0 +1,24 @@
+{#
+ epub/epub-cover.html
+ ~~~~~~~~~~~~~~~~~~~~
+
+ Sample template for the html cover page.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+#}
+{% extends "layout.html" %}
+{%- block rootrellink %}{% endblock %}
+{%- block relbaritems %}{% endblock %}
+{%- block sidebarlogo %}{% endblock %}
+{%- block linktags %}{% endblock %}
+{%- block relbar1 %}{% endblock %}
+{%- block sidebar1 %}{% endblock %}
+{%- block sidebar2 %}{% endblock %}
+{%- block footer %}{% endblock %}
+
+{% block content %}
+ <div class="epub-cover">
+ <img src="{{ image }}" alt="Cover image" />
+ </div>
+{% endblock %}
diff --git a/sphinx/themes/nature/static/nature.css_t b/sphinx/themes/nature/static/nature.css_t
index f9986c90..a98bd420 100644
--- a/sphinx/themes/nature/static/nature.css_t
+++ b/sphinx/themes/nature/static/nature.css_t
@@ -28,7 +28,7 @@ div.documentwrapper {
}
div.bodywrapper {
- margin: 0 0 0 230px;
+ margin: 0 0 0 {{ theme_sidebarwidth|toint }}px;
}
hr {
diff --git a/sphinx/themes/pyramid/layout.html b/sphinx/themes/pyramid/layout.html
new file mode 100644
index 00000000..1887361e
--- /dev/null
+++ b/sphinx/themes/pyramid/layout.html
@@ -0,0 +1,24 @@
+{% extends "basic/layout.html" %}
+
+{%- block extrahead %}
+<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Neuton&amp;subset=latin" type="text/css" media="screen" charset="utf-8" />
+<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Nobile:regular,italic,bold,bolditalic&amp;subset=latin" type="text/css" media="screen" charset="utf-8" />
+<!--[if lte IE 6]>
+<link rel="stylesheet" href="{{ pathto('_static/ie6.css', 1) }}" type="text/css" media="screen" charset="utf-8" />
+<![endif]-->
+{% endblock %}
+
+{% block header %}
+{%- if logo %}
+<div class="header">
+ <div class="logo">
+ <a href="{{ pathto(master_doc) }}">
+ <img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/>
+ </a>
+ </div>
+</div>
+{%- endif %}
+{% endblock %}
+
+{%- block sidebarlogo %}{%- endblock %}
+{%- block sidebarsourcelink %}{%- endblock %}
diff --git a/sphinx/themes/pyramid/static/dialog-note.png b/sphinx/themes/pyramid/static/dialog-note.png
new file mode 100644
index 00000000..263fbd58
--- /dev/null
+++ b/sphinx/themes/pyramid/static/dialog-note.png
Binary files differ
diff --git a/sphinx/themes/pyramid/static/dialog-seealso.png b/sphinx/themes/pyramid/static/dialog-seealso.png
new file mode 100644
index 00000000..3eb7b05c
--- /dev/null
+++ b/sphinx/themes/pyramid/static/dialog-seealso.png
Binary files differ
diff --git a/sphinx/themes/pyramid/static/dialog-topic.png b/sphinx/themes/pyramid/static/dialog-topic.png
new file mode 100644
index 00000000..2ac57475
--- /dev/null
+++ b/sphinx/themes/pyramid/static/dialog-topic.png
Binary files differ
diff --git a/sphinx/themes/pyramid/static/dialog-warning.png b/sphinx/themes/pyramid/static/dialog-warning.png
new file mode 100644
index 00000000..7233d45d
--- /dev/null
+++ b/sphinx/themes/pyramid/static/dialog-warning.png
Binary files differ
diff --git a/sphinx/themes/pyramid/static/epub.css b/sphinx/themes/pyramid/static/epub.css
new file mode 100644
index 00000000..28dff738
--- /dev/null
+++ b/sphinx/themes/pyramid/static/epub.css
@@ -0,0 +1,310 @@
+/*
+ * default.css_t
+ * ~~~~~~~~~~~~~
+ *
+ * Sphinx stylesheet -- default theme.
+ *
+ * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+@import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+ font-family: {{ theme_bodyfont }};
+ font-size: 100%;
+ background-color: {{ theme_footerbgcolor }};
+ color: #000;
+ margin: 0;
+ padding: 0;
+}
+
+div.document {
+ background-color: {{ theme_sidebarbgcolor }};
+}
+
+div.documentwrapper {
+ float: left;
+ width: 100%;
+}
+
+div.bodywrapper {
+ margin: 0 0 0 230px;
+}
+
+div.body {
+ background-color: {{ theme_bgcolor }};
+ color: {{ theme_textcolor }};
+ padding: 0 20px 30px 20px;
+}
+
+{%- if theme_rightsidebar|tobool %}
+div.bodywrapper {
+ margin: 0 230px 0 0;
+}
+{%- endif %}
+
+div.footer {
+ color: {{ theme_footertextcolor }};
+ width: 100%;
+ padding: 9px 0 9px 0;
+ text-align: center;
+ font-size: 75%;
+}
+
+div.footer a {
+ color: {{ theme_footertextcolor }};
+ text-decoration: underline;
+}
+
+div.related {
+ background-color: {{ theme_relbarbgcolor }};
+ line-height: 30px;
+ color: {{ theme_relbartextcolor }};
+}
+
+div.related a {
+ color: {{ theme_relbarlinkcolor }};
+}
+
+div.sphinxsidebar {
+ {%- if theme_stickysidebar|tobool %}
+ top: 30px;
+ bottom: 0;
+ margin: 0;
+ position: fixed;
+ overflow: auto;
+ height: auto;
+ {%- endif %}
+ {%- if theme_rightsidebar|tobool %}
+ float: right;
+ {%- if theme_stickysidebar|tobool %}
+ right: 0;
+ {%- endif %}
+ {%- endif %}
+}
+
+{%- if theme_stickysidebar|tobool %}
+/* this is nice, but it it leads to hidden headings when jumping
+ to an anchor */
+/*
+div.related {
+ position: fixed;
+}
+
+div.documentwrapper {
+ margin-top: 30px;
+}
+*/
+{%- endif %}
+
+div.sphinxsidebar h3 {
+ font-family: {{ theme_headfont }};
+ color: {{ theme_sidebartextcolor }};
+ font-size: 1.4em;
+ font-weight: normal;
+ margin: 0;
+ padding: 0;
+}
+
+div.sphinxsidebar h3 a {
+ color: {{ theme_sidebartextcolor }};
+}
+
+div.sphinxsidebar h4 {
+ font-family: {{ theme_headfont }};
+ color: {{ theme_sidebartextcolor }};
+ font-size: 1.3em;
+ font-weight: normal;
+ margin: 5px 0 0 0;
+ padding: 0;
+}
+
+div.sphinxsidebar p {
+ color: {{ theme_sidebartextcolor }};
+}
+
+div.sphinxsidebar p.topless {
+ margin: 5px 10px 10px 10px;
+}
+
+div.sphinxsidebar ul {
+ margin: 10px;
+ padding: 0;
+ color: {{ theme_sidebartextcolor }};
+}
+
+div.sphinxsidebar a {
+ color: {{ theme_sidebarlinkcolor }};
+}
+
+div.sphinxsidebar input {
+ border: 1px solid {{ theme_sidebarlinkcolor }};
+ font-family: sans-serif;
+ font-size: 1em;
+}
+
+{% if theme_collapsiblesidebar|tobool %}
+/* for collapsible sidebar */
+div#sidebarbutton {
+ background-color: {{ theme_sidebarbtncolor }};
+}
+{% endif %}
+
+/* -- hyperlink styles ------------------------------------------------------ */
+
+a {
+ color: {{ theme_linkcolor }};
+ text-decoration: none;
+}
+
+a:visited {
+ color: {{ theme_visitedlinkcolor }};
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+{% if theme_externalrefs|tobool %}
+a.external {
+ text-decoration: none;
+ border-bottom: 1px dashed {{ theme_linkcolor }};
+}
+
+a.external:hover {
+ text-decoration: none;
+ border-bottom: none;
+}
+
+a.external:visited {
+ text-decoration: none;
+ border-bottom: 1px dashed {{ theme_visitedlinkcolor }};
+}
+{% endif %}
+
+/* -- body styles ----------------------------------------------------------- */
+
+div.body h1,
+div.body h2,
+div.body h3,
+div.body h4,
+div.body h5,
+div.body h6 {
+ font-family: {{ theme_headfont }};
+ background-color: {{ theme_headbgcolor }};
+ font-weight: normal;
+ color: {{ theme_headtextcolor }};
+ border-bottom: 1px solid #ccc;
+ margin: 20px -20px 10px -20px;
+ padding: 3px 0 3px 10px;
+}
+
+div.body h1 { margin-top: 0; font-size: 200%; }
+div.body h2 { font-size: 160%; }
+div.body h3 { font-size: 140%; }
+div.body h4 { font-size: 120%; }
+div.body h5 { font-size: 110%; }
+div.body h6 { font-size: 100%; }
+
+a.headerlink {
+ color: {{ theme_headlinkcolor }};
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+}
+
+a.headerlink:hover {
+ background-color: {{ theme_headlinkcolor }};
+ color: white;
+}
+
+div.body p, div.body dd, div.body li {
+ text-align: justify;
+ line-height: 130%;
+}
+
+div.admonition p.admonition-title + p {
+ display: inline;
+}
+
+div.admonition p {
+ margin-bottom: 5px;
+}
+
+div.admonition pre {
+ margin-bottom: 5px;
+}
+
+div.admonition ul, div.admonition ol {
+ margin-bottom: 5px;
+}
+
+div.note {
+ background-color: #eee;
+ border: 1px solid #ccc;
+}
+
+div.seealso {
+ background-color: #ffc;
+ border: 1px solid #ff6;
+}
+
+div.topic {
+ background-color: #eee;
+}
+
+div.warning {
+ background-color: #ffe4e4;
+ border: 1px solid #f66;
+}
+
+p.admonition-title {
+ display: inline;
+}
+
+p.admonition-title:after {
+ content: ":";
+}
+
+pre {
+ padding: 5px;
+ background-color: {{ theme_codebgcolor }};
+ color: {{ theme_codetextcolor }};
+ line-height: 120%;
+ border: 1px solid #ac9;
+ border-left: none;
+ border-right: none;
+}
+
+tt {
+ background-color: #ecf0f3;
+ padding: 0 1px 0 1px;
+ font-size: 0.95em;
+}
+
+th {
+ background-color: #ede;
+}
+
+.warning tt {
+ background: #efc2c2;
+}
+
+.note tt {
+ background: #d6d6d6;
+}
+
+.viewcode-back {
+ font-family: {{ theme_bodyfont }};
+}
+
+div.viewcode-block:target {
+ background-color: #f4debf;
+ border-top: 1px solid #ac9;
+ border-bottom: 1px solid #ac9;
+}
diff --git a/sphinx/themes/pyramid/static/footerbg.png b/sphinx/themes/pyramid/static/footerbg.png
new file mode 100644
index 00000000..1fbc873d
--- /dev/null
+++ b/sphinx/themes/pyramid/static/footerbg.png
Binary files differ
diff --git a/sphinx/themes/pyramid/static/headerbg.png b/sphinx/themes/pyramid/static/headerbg.png
new file mode 100644
index 00000000..0596f202
--- /dev/null
+++ b/sphinx/themes/pyramid/static/headerbg.png
Binary files differ
diff --git a/sphinx/themes/pyramid/static/ie6.css b/sphinx/themes/pyramid/static/ie6.css
new file mode 100644
index 00000000..74baa5d5
--- /dev/null
+++ b/sphinx/themes/pyramid/static/ie6.css
@@ -0,0 +1,7 @@
+* html img,
+* html .png{position:relative;behavior:expression((this.runtimeStyle.behavior="none")&&(this.pngSet?this.pngSet=true:(this.nodeName == "IMG" && this.src.toLowerCase().indexOf('.png')>-1?(this.runtimeStyle.backgroundImage = "none",
+this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "',sizingMethod='image')",
+this.src = "_static/transparent.gif"):(this.origBg = this.origBg? this.origBg :this.currentStyle.backgroundImage.toString().replace('url("','').replace('")',''),
+this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.origBg + "',sizingMethod='crop')",
+this.runtimeStyle.backgroundImage = "none")),this.pngSet=true)
+);}
diff --git a/sphinx/themes/pyramid/static/middlebg.png b/sphinx/themes/pyramid/static/middlebg.png
new file mode 100644
index 00000000..2369cfb7
--- /dev/null
+++ b/sphinx/themes/pyramid/static/middlebg.png
Binary files differ
diff --git a/sphinx/themes/pyramid/static/pyramid.css_t b/sphinx/themes/pyramid/static/pyramid.css_t
new file mode 100644
index 00000000..442cbec0
--- /dev/null
+++ b/sphinx/themes/pyramid/static/pyramid.css_t
@@ -0,0 +1,323 @@
+/*
+ * pylons.css_t
+ * ~~~~~~~~~~~~
+ *
+ * Sphinx stylesheet -- pylons theme.
+ *
+ * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+@import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+ font-family: "Nobile", sans-serif;
+ font-size: 100%;
+ background-color: #393939;
+ color: #ffffff;
+ margin: 0;
+ padding: 0;
+}
+
+div.documentwrapper {
+ float: left;
+ width: 100%;
+}
+
+div.bodywrapper {
+ margin: 0 0 0 {{ theme_sidebarwidth }}px;
+}
+
+hr {
+ border: 1px solid #B1B4B6;
+}
+
+div.document {
+ background-color: #eee;
+}
+
+div.header {
+ width:100%;
+ background: #f4ad32 url(headerbg.png) repeat-x 0 top;
+ border-bottom: 2px solid #ffffff;
+}
+
+div.logo {
+ text-align: center;
+ padding-top: 10px;
+}
+
+div.body {
+ background-color: #ffffff;
+ color: #3E4349;
+ padding: 0 30px 30px 30px;
+ font-size: 1em;
+ border: 2px solid #ddd;
+ border-right-style: none;
+ overflow: auto;
+}
+
+div.footer {
+ color: #ffffff;
+ width: 100%;
+ padding: 13px 0;
+ text-align: center;
+ font-size: 75%;
+ background: transparent;
+ clear:both;
+}
+
+div.footer a {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+div.footer a:hover {
+ color: #e88f00;
+ text-decoration: underline;
+}
+
+div.related {
+ line-height: 30px;
+ color: #373839;
+ font-size: 0.8em;
+ background-color: #eee;
+}
+
+div.related a {
+ color: #1b61d6;
+}
+
+div.related ul {
+ padding-left: {{ theme_sidebarwidth|toint + 10 }}px;
+}
+
+div.sphinxsidebar {
+ font-size: 0.75em;
+ line-height: 1.5em;
+}
+
+div.sphinxsidebarwrapper{
+ padding: 10px 0;
+}
+
+div.sphinxsidebar h3,
+div.sphinxsidebar h4 {
+ font-family: "Neuton", sans-serif;
+ color: #373839;
+ font-size: 1.4em;
+ font-weight: normal;
+ margin: 0;
+ padding: 5px 10px;
+ border-bottom: 2px solid #ddd;
+}
+
+div.sphinxsidebar h4{
+ font-size: 1.3em;
+}
+
+div.sphinxsidebar h3 a {
+ color: #000000;
+}
+
+
+div.sphinxsidebar p {
+ color: #888;
+ padding: 5px 20px;
+}
+
+div.sphinxsidebar p.topless {
+}
+
+div.sphinxsidebar ul {
+ margin: 10px 20px;
+ padding: 0;
+ color: #373839;
+}
+
+div.sphinxsidebar a {
+ color: #444;
+}
+
+div.sphinxsidebar input {
+ border: 1px solid #ccc;
+ font-family: sans-serif;
+ font-size: 1em;
+}
+
+div.sphinxsidebar input[type=text]{
+ margin-left: 20px;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar {
+ margin: 0 0 0.5em 1em;
+ border: 2px solid #c6d880;
+ background-color: #e6efc2;
+ width: 40%;
+ float: right;
+ border-right-style: none;
+ border-left-style: none;
+ padding: 10px 20px;
+}
+
+p.sidebar-title {
+ font-weight: bold;
+}
+
+/* -- body styles ----------------------------------------------------------- */
+
+a, a .pre {
+ color: #1b61d6;
+ text-decoration: none;
+}
+
+a:hover, a:hover .pre {
+ text-decoration: underline;
+}
+
+div.body h1,
+div.body h2,
+div.body h3,
+div.body h4,
+div.body h5,
+div.body h6 {
+ font-family: "Neuton", sans-serif;
+ background-color: #ffffff;
+ font-weight: normal;
+ color: #373839;
+ margin: 30px 0px 10px 0px;
+ padding: 5px 0;
+}
+
+div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; }
+div.body h2 { font-size: 150%; background-color: #ffffff; }
+div.body h3 { font-size: 120%; background-color: #ffffff; }
+div.body h4 { font-size: 110%; background-color: #ffffff; }
+div.body h5 { font-size: 100%; background-color: #ffffff; }
+div.body h6 { font-size: 100%; background-color: #ffffff; }
+
+a.headerlink {
+ color: #1b61d6;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+}
+
+a.headerlink:hover {
+ text-decoration: underline;
+}
+
+div.body p, div.body dd, div.body li {
+ line-height: 1.5em;
+}
+
+div.admonition p.admonition-title + p {
+ display: inline;
+}
+
+div.highlight{
+ background-color: white;
+}
+
+div.note {
+ border: 2px solid #7a9eec;
+ border-right-style: none;
+ border-left-style: none;
+ padding: 10px 20px 10px 60px;
+ background: #e1ecfe url(dialog-note.png) no-repeat 10px 8px;
+}
+
+div.seealso {
+ background: #fff6bf url(dialog-seealso.png) no-repeat 10px 8px;
+ border: 2px solid #ffd324;
+ border-left-style: none;
+ border-right-style: none;
+ padding: 10px 20px 10px 60px;
+}
+
+div.topic {
+ background: #eeeeee;
+ border: 2px solid #C6C9CB;
+ padding: 10px 20px;
+ border-right-style: none;
+ border-left-style: none;
+}
+
+div.warning {
+ background: #fbe3e4 url(dialog-warning.png) no-repeat 10px 8px;
+ border: 2px solid #fbc2c4;
+ border-right-style: none;
+ border-left-style: none;
+ padding: 10px 20px 10px 60px;
+}
+
+p.admonition-title {
+ display: none;
+}
+
+p.admonition-title:after {
+ content: ":";
+}
+
+pre {
+ padding: 10px;
+ background-color: #fafafa;
+ color: #222;
+ line-height: 1.2em;
+ border: 2px solid #C6C9CB;
+ font-size: 1.1em;
+ margin: 1.5em 0 1.5em 0;
+ border-right-style: none;
+ border-left-style: none;
+}
+
+tt {
+ background-color: transparent;
+ color: #222;
+ font-size: 1.1em;
+ font-family: monospace;
+}
+
+.viewcode-back {
+ font-family: "Nobile", sans-serif;
+}
+
+div.viewcode-block:target {
+ background-color: #fff6bf;
+ border: 2px solid #ffd324;
+ border-left-style: none;
+ border-right-style: none;
+ padding: 10px 20px;
+}
+
+table.highlighttable {
+ width: 100%;
+}
+
+table.highlighttable td {
+ padding: 0;
+}
+
+a em.std-term {
+ color: #007f00;
+}
+
+a:hover em.std-term {
+ text-decoration: underline;
+}
+
+.download {
+ font-family: "Nobile", sans-serif;
+ font-weight: normal;
+ font-style: normal;
+}
+
+tt.xref {
+ font-weight: normal;
+ font-style: normal;
+}
diff --git a/sphinx/themes/pyramid/static/transparent.gif b/sphinx/themes/pyramid/static/transparent.gif
new file mode 100644
index 00000000..0341802e
--- /dev/null
+++ b/sphinx/themes/pyramid/static/transparent.gif
Binary files differ
diff --git a/sphinx/themes/pyramid/theme.conf b/sphinx/themes/pyramid/theme.conf
new file mode 100644
index 00000000..409579fd
--- /dev/null
+++ b/sphinx/themes/pyramid/theme.conf
@@ -0,0 +1,4 @@
+[theme]
+inherit = basic
+stylesheet = pyramid.css
+pygments_style = sphinx.pygments_styles.PyramidStyle
diff --git a/sphinx/themes/sphinxdoc/static/sphinxdoc.css b/sphinx/themes/sphinxdoc/static/sphinxdoc.css_t
index 0a428074..f535696b 100644
--- a/sphinx/themes/sphinxdoc/static/sphinxdoc.css
+++ b/sphinx/themes/sphinxdoc/static/sphinxdoc.css_t
@@ -38,7 +38,7 @@ div.document {
}
div.bodywrapper {
- margin: 0 240px 0 0;
+ margin: 0 {{ theme_sidebarwidth|toint + 10 }}px 0 0;
border-right: 1px solid #ccc;
}
@@ -88,7 +88,7 @@ div.sphinxsidebarwrapper {
div.sphinxsidebar {
margin: 0;
padding: 0.5em 15px 15px 0;
- width: 210px;
+ width: {{ theme_sidebarwidth|toint - 20 }}px;
float: right;
font-size: 1em;
text-align: left;
diff --git a/sphinx/themes/traditional/static/traditional.css b/sphinx/themes/traditional/static/traditional.css_t
index bac58c0d..51567255 100644
--- a/sphinx/themes/traditional/static/traditional.css
+++ b/sphinx/themes/traditional/static/traditional.css_t
@@ -23,7 +23,7 @@ div.documentwrapper {
}
div.bodywrapper {
- margin: 0 230px 0 0;
+ margin: 0 {{ theme_sidebarwidth }}px 0 0;
}
div.body {
@@ -40,7 +40,7 @@ div.sphinxsidebarwrapper {
div.sphinxsidebar {
float: right;
margin-left: -100%;
- width: 230px;
+ width: {{ theme_sidebarwidth }}px;
}
div.clearer {
@@ -667,38 +667,6 @@ h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
font-style: italic;
}
-form.comment {
- margin: 0;
- padding: 10px 30px 10px 30px;
- background-color: #eee;
-}
-
-form.comment h3 {
- background-color: #326591;
- color: white;
- margin: -10px -30px 10px -30px;
- padding: 5px;
- font-size: 1.4em;
-}
-
-form.comment input,
-form.comment textarea {
- border: 1px solid #ccc;
- padding: 2px;
- font-family: sans-serif;
- font-size: 13px;
-}
-
-form.comment input[type="text"] {
- width: 240px;
-}
-
-form.comment textarea {
- width: 100%;
- height: 200px;
- margin-bottom: 10px;
-}
-
/* :::: PRINT :::: */
@media print {
div.documentwrapper {
diff --git a/sphinx/theming.py b/sphinx/theming.py
index ebc88d27..68d11a49 100644
--- a/sphinx/theming.py
+++ b/sphinx/theming.py
@@ -30,13 +30,13 @@ class Theme(object):
themes = {}
@classmethod
- def init_themes(cls, builder):
+ def init_themes(cls, confdir, theme_path, warn=None):
"""Search all theme paths for available themes."""
- cls.themepath = list(builder.config.html_theme_path)
+ cls.themepath = list(theme_path)
cls.themepath.append(path.join(package_dir, 'themes'))
for themedir in cls.themepath[::-1]:
- themedir = path.join(builder.confdir, themedir)
+ themedir = path.join(confdir, themedir)
if not path.isdir(themedir):
continue
for theme in os.listdir(themedir):
@@ -48,8 +48,9 @@ class Theme(object):
tname = theme[:-4]
tinfo = zfile
except Exception:
- builder.warn('file %r on theme path is not a valid '
- 'zipfile or contains no theme' % theme)
+ if warn:
+ warn('file %r on theme path is not a valid '
+ 'zipfile or contains no theme' % theme)
continue
else:
if not path.isfile(path.join(themedir, theme, THEMECONF)):
@@ -98,8 +99,7 @@ class Theme(object):
self.base = Theme(inherit)
def get_confstr(self, section, name, default=NODEFAULT):
- """
- Return the value for a theme configuration setting, searching the
+ """Return the value for a theme configuration setting, searching the
base theme chain.
"""
try:
@@ -114,9 +114,7 @@ class Theme(object):
return default
def get_options(self, overrides):
- """
- Return a dictionary of theme options and their values.
- """
+ """Return a dictionary of theme options and their values."""
chain = [self.themeconf]
base = self.base
while base is not None:
@@ -135,8 +133,7 @@ class Theme(object):
return options
def get_dirchain(self):
- """
- Return a list of theme directories, beginning with this theme's,
+ """Return a list of theme directories, beginning with this theme's,
then the base theme's, then that one's base theme's, etc.
"""
chain = [self.themedir]
@@ -147,9 +144,7 @@ class Theme(object):
return chain
def cleanup(self):
- """
- Remove temporary directories.
- """
+ """Remove temporary directories."""
if self.themedir_created:
try:
shutil.rmtree(self.themedir)
diff --git a/sphinx/util/__init__.py b/sphinx/util/__init__.py
index b7e64b11..0721118e 100644
--- a/sphinx/util/__init__.py
+++ b/sphinx/util/__init__.py
@@ -18,7 +18,8 @@ import tempfile
import posixpath
import traceback
from os import path
-from codecs import BOM_UTF8
+from codecs import open, BOM_UTF8
+from collections import deque
import docutils
from docutils.utils import relative_path
@@ -49,8 +50,7 @@ def docname_join(basedocname, docname):
def get_matching_files(dirname, exclude_matchers=()):
- """
- Get all file names in a directory, recursively.
+ """Get all file names in a directory, recursively.
Exclude files and dirs matching some matcher in *exclude_matchers*.
"""
@@ -76,9 +76,8 @@ def get_matching_files(dirname, exclude_matchers=()):
def get_matching_docs(dirname, suffix, exclude_matchers=()):
- """
- Get all file names (without suffix) matching a suffix in a
- directory, recursively.
+ """Get all file names (without suffix) matching a suffix in a directory,
+ recursively.
Exclude files and dirs matching a pattern in *exclude_patterns*.
"""
@@ -141,8 +140,8 @@ def copy_static_entry(source, targetdir, builder, context={},
target = path.join(targetdir, path.basename(source))
if source.lower().endswith('_t') and builder.templates:
# templated!
- fsrc = open(source, 'rb')
- fdst = open(target[:-2], 'wb')
+ fsrc = open(source, 'r', encoding='utf-8')
+ fdst = open(target[:-2], 'w', encoding='utf-8')
fdst.write(builder.templates.render_string(fsrc.read(), context))
fsrc.close()
fdst.close()
@@ -163,19 +162,24 @@ def copy_static_entry(source, targetdir, builder, context={},
shutil.copytree(source, target)
+_DEBUG_HEADER = '''\
+# Sphinx version: %s
+# Python version: %s
+# Docutils version: %s %s
+# Jinja2 version: %s
+'''
+
def save_traceback():
- """
- Save the current exception's traceback in a temporary file.
- """
+ """Save the current exception's traceback in a temporary file."""
import platform
exc = traceback.format_exc()
fd, path = tempfile.mkstemp('.log', 'sphinx-err-')
- os.write(fd, '# Sphinx version: %s\n' % sphinx.__version__)
- os.write(fd, '# Python version: %s\n' % platform.python_version())
- os.write(fd, '# Docutils version: %s %s\n' % (docutils.__version__,
- docutils.__version_details__))
- os.write(fd, '# Jinja2 version: %s\n' % jinja2.__version__)
- os.write(fd, exc)
+ os.write(fd, (_DEBUG_HEADER %
+ (sphinx.__version__,
+ platform.python_version(),
+ docutils.__version__, docutils.__version_details__,
+ jinja2.__version__)).encode('utf-8'))
+ os.write(fd, exc.encode('utf-8'))
os.close(fd)
return path
@@ -283,8 +287,7 @@ class Tee(object):
def parselinenos(spec, total):
- """
- Parse a line number spec (such as "1,2,4-6") and return a list of
+ """Parse a line number spec (such as "1,2,4-6") and return a list of
wanted line numbers.
"""
items = list()
@@ -337,10 +340,16 @@ def rpartition(s, t):
return '', s
+def split_into(n, type, value):
+ """Split an index entry into a given number of parts at semicolons."""
+ parts = map(lambda x: x.strip(), value.split(';', n-1))
+ if sum(1 for part in parts if part) < n:
+ raise ValueError('invalid %s index entry %r' % (type, value))
+ return parts
+
+
def format_exception_cut_frames(x=1):
- """
- Format an exception with traceback, but only the last x frames.
- """
+ """Format an exception with traceback, but only the last x frames."""
typ, val, tb = sys.exc_info()
#res = ['Traceback (most recent call last):\n']
res = []
@@ -348,3 +357,34 @@ def format_exception_cut_frames(x=1):
res += tbres[-x:]
res += traceback.format_exception_only(typ, val)
return ''.join(res)
+
+
+class PeekableIterator(object):
+ """
+ An iterator which wraps any iterable and makes it possible to peek to see
+ what's the next item.
+ """
+ def __init__(self, iterable):
+ self.remaining = deque()
+ self._iterator = iter(iterable)
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ """Return the next item from the iterator."""
+ if self.remaining:
+ return self.remaining.popleft()
+ return self._iterator.next()
+
+ def push(self, item):
+ """Push the `item` on the internal stack, it will be returned on the
+ next :meth:`next` call.
+ """
+ self.remaining.append(item)
+
+ def peek(self):
+ """Return the next item without changing the state of the iterator."""
+ item = self.next()
+ self.push(item)
+ return item
diff --git a/sphinx/util/docstrings.py b/sphinx/util/docstrings.py
index fca79c3f..ba81bf00 100644
--- a/sphinx/util/docstrings.py
+++ b/sphinx/util/docstrings.py
@@ -12,26 +12,29 @@
import sys
-def prepare_docstring(s):
- """
- Convert a docstring into lines of parseable reST. Return it as a list of
- lines usable for inserting into a docutils ViewList (used as argument
- of nested_parse().) An empty line is added to act as a separator between
- this docstring and following content.
+def prepare_docstring(s, ignore=1):
+ """Convert a docstring into lines of parseable reST. Remove common leading
+ indentation, where the indentation of a given number of lines (usually just
+ one) is ignored.
+
+ Return the docstring as a list of lines usable for inserting into a docutils
+ ViewList (used as argument of nested_parse().) An empty line is added to
+ act as a separator between this docstring and following content.
"""
lines = s.expandtabs().splitlines()
- # Find minimum indentation of any non-blank lines after first line.
+ # Find minimum indentation of any non-blank lines after ignored lines.
margin = sys.maxint
- for line in lines[1:]:
+ for line in lines[ignore:]:
content = len(line.lstrip())
if content:
indent = len(line) - content
margin = min(margin, indent)
- # Remove indentation.
- if lines:
- lines[0] = lines[0].lstrip()
+ # Remove indentation from ignored lines.
+ for i in range(ignore):
+ if i < len(lines):
+ lines[i] = lines[i].lstrip()
if margin < sys.maxint:
- for i in range(1, len(lines)): lines[i] = lines[i][margin:]
+ for i in range(ignore, len(lines)): lines[i] = lines[i][margin:]
# Remove any leading blank lines.
while lines and not lines[0]:
lines.pop(0)
@@ -42,9 +45,8 @@ def prepare_docstring(s):
def prepare_commentdoc(s):
- """
- Extract documentation comment lines (starting with #:) and return them as a
- list of lines. Returns an empty list if there is no documentation.
+ """Extract documentation comment lines (starting with #:) and return them
+ as a list of lines. Returns an empty list if there is no documentation.
"""
result = []
lines = [line.strip() for line in s.expandtabs().splitlines()]
diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py
index a0574003..ff6c222d 100644
--- a/sphinx/util/inspect.py
+++ b/sphinx/util/inspect.py
@@ -9,6 +9,44 @@
:license: BSD, see LICENSE for details.
"""
+import sys
+
+# this imports the standard library inspect module without resorting to
+# relatively import this module
+inspect = __import__('inspect')
+
+
+if sys.version_info >= (2, 5):
+ from functools import partial
+ def getargspec(func):
+ """Like inspect.getargspec but supports functools.partial as well."""
+ if inspect.ismethod(func):
+ func = func.im_func
+ parts = 0, ()
+ if type(func) is partial:
+ parts = len(func.args), func.keywords.keys()
+ func = func.func
+ if not inspect.isfunction(func):
+ raise TypeError('%r is not a Python function' % func)
+ args, varargs, varkw = inspect.getargs(func.func_code)
+ func_defaults = func.func_defaults
+ if func_defaults:
+ func_defaults = list(func_defaults)
+ if parts[0]:
+ args = args[parts[0]:]
+ if parts[1]:
+ for arg in parts[1]:
+ i = args.index(arg) - len(args)
+ del args[i]
+ try:
+ del func_defaults[i]
+ except IndexError:
+ pass
+ return inspect.ArgSpec(args, varargs, varkw, func_defaults)
+else:
+ getargspec = inspect.getargspec
+
+
def isdescriptor(x):
"""Check if the object is some kind of descriptor."""
for item in '__get__', '__set__', '__delete__':
@@ -41,3 +79,12 @@ def safe_getmembers(object, predicate=None):
results.append((key, value))
results.sort()
return results
+
+
+def safe_repr(object):
+ """A repr() implementation that returns text safe to use in reST context."""
+ try:
+ s = repr(object)
+ except Exception:
+ raise ValueError
+ return s.replace('\n', ' ')
diff --git a/sphinx/util/jsdump.py b/sphinx/util/jsdump.py
index a0f6d0e3..191e2419 100644
--- a/sphinx/util/jsdump.py
+++ b/sphinx/util/jsdump.py
@@ -12,6 +12,8 @@
import re
+from sphinx.util.pycompat import u
+
_str_re = re.compile(r'"(\\\\|\\"|[^"])*"')
_int_re = re.compile(r'\d+')
_name_re = re.compile(r'[a-zA-Z]\w*')
@@ -50,7 +52,7 @@ def encode_string(s):
return '"' + str(ESCAPE_ASCII.sub(replace, s)) + '"'
def decode_string(s):
- return ESCAPED.sub(lambda m: eval('u"'+m.group()+'"'), s)
+ return ESCAPED.sub(lambda m: eval(u + '"' + m.group() + '"'), s)
reswords = set("""\
diff --git a/sphinx/util/jsonimpl.py b/sphinx/util/jsonimpl.py
index b1982d9f..cf5ddb42 100644
--- a/sphinx/util/jsonimpl.py
+++ b/sphinx/util/jsonimpl.py
@@ -13,7 +13,7 @@ import UserString
try:
import json
- # json-py's json module has not JSONEncoder; this will raise AttributeError
+ # json-py's json module has no JSONEncoder; this will raise AttributeError
# if json-py is imported instead of the built-in json module
JSONEncoder = json.JSONEncoder
except (ImportError, AttributeError):
diff --git a/sphinx/util/matching.py b/sphinx/util/matching.py
index d358a2a0..fa6cb7e0 100644
--- a/sphinx/util/matching.py
+++ b/sphinx/util/matching.py
@@ -13,8 +13,7 @@ import re
def _translate_pattern(pat):
- """
- Translate a shell-style glob pattern to a regular expression.
+ """Translate a shell-style glob pattern to a regular expression.
Adapted from the fnmatch module, but enhanced so that single stars don't
match slashes.
@@ -65,16 +64,14 @@ def compile_matchers(patterns):
_pat_cache = {}
def patmatch(name, pat):
- """
- Return if name matches pat. Adapted from fnmatch module.
- """
+ """Return if name matches pat. Adapted from fnmatch module."""
if pat not in _pat_cache:
_pat_cache[pat] = re.compile(_translate_pattern(pat))
return _pat_cache[pat].match(name)
def patfilter(names, pat):
- """
- Return the subset of the list NAMES that match PAT.
+ """Return the subset of the list NAMES that match PAT.
+
Adapted from fnmatch module.
"""
if pat not in _pat_cache:
diff --git a/sphinx/util/nodes.py b/sphinx/util/nodes.py
index fd6a2f83..682ea77b 100644
--- a/sphinx/util/nodes.py
+++ b/sphinx/util/nodes.py
@@ -10,19 +10,50 @@
"""
import re
-import types
from docutils import nodes
from sphinx import addnodes
+from sphinx.locale import pairindextypes
+from sphinx.util.pycompat import class_types
# \x00 means the "<" was backslash-escaped
explicit_title_re = re.compile(r'^(.+?)\s*(?<!\x00)<(.*?)>$', re.DOTALL)
caption_ref_re = explicit_title_re # b/w compat alias
+IGNORED_NODES = (
+ nodes.Invisible,
+ nodes.Inline,
+ nodes.literal_block,
+ nodes.doctest_block,
+ #XXX there are probably more
+)
+def extract_messages(doctree):
+ """Extract translatable messages from a document tree."""
+ for node in doctree.traverse(nodes.TextElement):
+ if not node.source:
+ continue # built-in message
+ if isinstance(node, IGNORED_NODES):
+ continue
+ # <field_name>orphan</field_name>
+ # XXX ignore all metadata (== docinfo)
+ if isinstance(node, nodes.field_name) and node.children[0] == 'orphan':
+ continue
+
+ msg = node.rawsource.replace('\n', ' ').strip()
+ # XXX nodes rendering empty are likely a bug in sphinx.addnodes
+ if msg:
+ yield node, msg
+
def nested_parse_with_titles(state, content, node):
+ """Version of state.nested_parse() that allows titles and does not require
+ titles to have the same decoration as the calling document.
+
+ This is useful when the parsed content comes from a completely different
+ context, such as docstrings.
+ """
# hack around title style bookkeeping
surrounding_title_styles = state.memo.title_styles
surrounding_section_level = state.memo.section_level
@@ -51,6 +82,46 @@ def split_explicit_title(text):
return False, text, text
+indextypes = [
+ 'single', 'pair', 'double', 'triple', 'see', 'seealso',
+]
+
+def process_index_entry(entry, targetid):
+ indexentries = []
+ entry = entry.strip()
+ oentry = entry
+ main = ''
+ if entry.startswith('!'):
+ main = 'main'
+ entry = entry[1:].lstrip()
+ for type in pairindextypes:
+ if entry.startswith(type+':'):
+ value = entry[len(type)+1:].strip()
+ value = pairindextypes[type] + '; ' + value
+ indexentries.append(('pair', value, targetid, main))
+ break
+ else:
+ for type in indextypes:
+ if entry.startswith(type+':'):
+ value = entry[len(type)+1:].strip()
+ if type == 'double':
+ type = 'pair'
+ indexentries.append((type, value, targetid, main))
+ break
+ # shorthand notation for single entries
+ else:
+ for value in oentry.split(','):
+ value = value.strip()
+ main = ''
+ if value.startswith('!'):
+ main = 'main'
+ value = value[1:].lstrip()
+ if not value:
+ continue
+ indexentries.append(('single', value, targetid, main))
+ return indexentries
+
+
def inline_all_toctrees(builder, docnameset, docname, tree, colorfunc):
"""Inline all toctrees in the *tree*.
@@ -115,7 +186,7 @@ def _new_traverse(self, condition=None,
if include_self and descend and not siblings and not ascend:
if condition is None:
return self._all_traverse([])
- elif isinstance(condition, (types.ClassType, type)):
+ elif isinstance(condition, class_types):
return self._fast_traverse(condition, [])
return self._old_traverse(condition, include_self,
descend, siblings, ascend)
diff --git a/sphinx/util/osutil.py b/sphinx/util/osutil.py
index 6aeb2f4f..b07fa6ab 100644
--- a/sphinx/util/osutil.py
+++ b/sphinx/util/osutil.py
@@ -11,6 +11,7 @@
import os
import re
+import sys
import time
import errno
import shutil
@@ -20,6 +21,7 @@ from os import path
EEXIST = getattr(errno, 'EEXIST', 0)
ENOENT = getattr(errno, 'ENOENT', 0)
EPIPE = getattr(errno, 'EPIPE', 0)
+EINVAL = getattr(errno, 'EINVAL', 0)
# SEP separates path elements in the canonical file names
#
@@ -58,8 +60,8 @@ def ensuredir(path):
def walk(top, topdown=True, followlinks=False):
- """
- Backport of os.walk from 2.6, where the followlinks argument was added.
+ """Backport of os.walk from 2.6, where the *followlinks* argument was
+ added.
"""
names = os.listdir(top)
@@ -124,7 +126,17 @@ no_fn_re = re.compile(r'[^a-zA-Z0-9_-]')
def make_filename(string):
return no_fn_re.sub('', string)
+if sys.version_info < (3, 0):
+ def ustrftime(format, *args):
+ # strftime for unicode strings
+ return time.strftime(unicode(format).encode('utf-8'), *args) \
+ .decode('utf-8')
+else:
+ ustrftime = time.strftime
+
-def ustrftime(format, *args):
- # strftime for unicode strings
- return time.strftime(unicode(format).encode('utf-8'), *args).decode('utf-8')
+def safe_relpath(path, start=None):
+ try:
+ return os.path.relpath(path, start)
+ except ValueError:
+ return path
diff --git a/sphinx/util/png.py b/sphinx/util/png.py
index 5450bccf..50c72efd 100644
--- a/sphinx/util/png.py
+++ b/sphinx/util/png.py
@@ -12,18 +12,18 @@
import struct
import binascii
+from sphinx.util.pycompat import b
+
LEN_IEND = 12
LEN_DEPTH = 22
DEPTH_CHUNK_LEN = struct.pack('!i', 10)
-DEPTH_CHUNK_START = 'tEXtDepth\x00'
-IEND_CHUNK = '\x00\x00\x00\x00IEND\xAE\x42\x60\x82'
+DEPTH_CHUNK_START = b('tEXtDepth\x00')
+IEND_CHUNK = b('\x00\x00\x00\x00IEND\xAE\x42\x60\x82')
def read_png_depth(filename):
- """
- Read the special tEXt chunk indicating the depth from a PNG file.
- """
+ """Read the special tEXt chunk indicating the depth from a PNG file."""
result = None
f = open(filename, 'rb')
try:
@@ -39,8 +39,8 @@ def read_png_depth(filename):
def write_png_depth(filename, depth):
- """
- Write the special tEXt chunk indicating the depth to a PNG file.
+ """Write the special tEXt chunk indicating the depth to a PNG file.
+
The chunk is placed immediately before the special IEND chunk.
"""
data = struct.pack('!i', depth)
diff --git a/sphinx/util/pycompat.py b/sphinx/util/pycompat.py
index bbaf4e23..cd9f6e2f 100644
--- a/sphinx/util/pycompat.py
+++ b/sphinx/util/pycompat.py
@@ -13,11 +13,116 @@ import sys
import codecs
import encodings
-
-try:
+# ------------------------------------------------------------------------------
+# Python 2/3 compatibility
+
+if sys.version_info >= (3, 0):
+ # Python 3
+ class_types = (type,)
+ # the ubiquitous "bytes" helper functions
+ def b(s):
+ return s.encode('utf-8')
+ bytes = bytes
+ # prefix for Unicode strings
+ u = ''
+ # StringIO/BytesIO classes
+ from io import StringIO, BytesIO, TextIOWrapper
+ # safely encode a string for printing to the terminal
+ def terminal_safe(s):
+ return s.encode('ascii', 'backslashreplace').decode('ascii')
+ # support for running 2to3 over config files
+ def convert_with_2to3(filepath):
+ from lib2to3.refactor import RefactoringTool, get_fixers_from_package
+ from lib2to3.pgen2.parse import ParseError
+ fixers = get_fixers_from_package('lib2to3.fixes')
+ refactoring_tool = RefactoringTool(fixers)
+ source = refactoring_tool._read_python_source(filepath)[0]
+ try:
+ tree = refactoring_tool.refactor_string(source, 'conf.py')
+ except ParseError, err:
+ # do not propagate lib2to3 exceptions
+ lineno, offset = err.context[1]
+ # try to match ParseError details with SyntaxError details
+ raise SyntaxError(err.msg, (filepath, lineno, offset, err.value))
+ return unicode(tree)
+
+else:
+ # Python 2
+ from types import ClassType
+ class_types = (type, ClassType)
+ b = str
+ bytes = str
+ u = 'u'
+ from StringIO import StringIO
+ BytesIO = StringIO
+ # no need to refactor on 2.x versions
+ convert_with_2to3 = None
+ def TextIOWrapper(stream, encoding):
+ return codecs.lookup(encoding or 'ascii')[2](stream)
+ # safely encode a string for printing to the terminal
+ def terminal_safe(s):
+ return s.encode('ascii', 'backslashreplace')
+
+
+# ------------------------------------------------------------------------------
+# Missing builtins and itertools in Python < 2.6
+
+if sys.version_info >= (2, 6):
+ # Python >= 2.6
+ next = next
+
+ from itertools import product
+ try:
+ from itertools import zip_longest # Python 3 name
+ except ImportError:
+ from itertools import izip_longest as zip_longest
+
+else:
+ # Python < 2.6
+ from itertools import izip, repeat, chain
+
+ # this is on Python 2, where the method is called "next" (it is refactored
+ # to __next__ by 2to3, but in that case never executed)
+ def next(iterator):
+ return iterator.next()
+
+ # These replacement functions have been taken from the Python 2.6
+ # itertools documentation.
+ def product(*args, **kwargs):
+ pools = map(tuple, args) * kwargs.get('repeat', 1)
+ result = [[]]
+ for pool in pools:
+ result = [x + [y] for x in result for y in pool]
+ for prod in result:
+ yield tuple(prod)
+
+ def zip_longest(*args, **kwds):
+ # zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-
+ fillvalue = kwds.get('fillvalue')
+ def sentinel(counter = ([fillvalue]*(len(args)-1)).pop):
+ yield counter() # yields the fillvalue, or raises IndexError
+ fillers = repeat(fillvalue)
+ iters = [chain(it, sentinel(), fillers) for it in args]
+ try:
+ for tup in izip(*iters):
+ yield tup
+ except IndexError:
+ pass
+
+
+# ------------------------------------------------------------------------------
+# Missing builtins and codecs in Python < 2.5
+
+if sys.version_info >= (2, 5):
+ # Python >= 2.5
+ base_exception = BaseException
any = any
all = all
-except NameError:
+
+else:
+ # Python 2.4
+ base_exception = Exception
+
def all(gen):
for i in gen:
if not i:
@@ -30,8 +135,6 @@ except NameError:
return True
return False
-
-if sys.version_info < (2, 5):
# Python 2.4 doesn't know the utf-8-sig encoding, so deliver it here
def my_search_function(encoding):
diff --git a/sphinx/util/websupport.py b/sphinx/util/websupport.py
new file mode 100644
index 00000000..d9b47213
--- /dev/null
+++ b/sphinx/util/websupport.py
@@ -0,0 +1,12 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.util.websupport
+ ~~~~~~~~~~~~~~~~~~~~~~
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+def is_commentable(node):
+ #return node.__class__.__name__ in ('paragraph', 'literal_block')
+ return node.__class__.__name__ == 'paragraph'
diff --git a/sphinx/versioning.py b/sphinx/versioning.py
new file mode 100644
index 00000000..d45ed1d3
--- /dev/null
+++ b/sphinx/versioning.py
@@ -0,0 +1,127 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.versioning
+ ~~~~~~~~~~~~~~~~~
+
+ Implements the low-level algorithms Sphinx uses for the versioning of
+ doctrees.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+from uuid import uuid4
+from operator import itemgetter
+
+from sphinx.util.pycompat import product, zip_longest, all
+
+
+# anything below that ratio is considered equal/changed
+VERSIONING_RATIO = 65
+
+
+def add_uids(doctree, condition):
+ """Add a unique id to every node in the `doctree` which matches the
+ condition and yield the nodes.
+
+ :param doctree:
+ A :class:`docutils.nodes.document` instance.
+
+ :param condition:
+ A callable which returns either ``True`` or ``False`` for a given node.
+ """
+ for node in doctree.traverse(condition):
+ node.uid = uuid4().hex
+ yield node
+
+
+def merge_doctrees(old, new, condition):
+ """Merge the `old` doctree with the `new` one while looking at nodes
+ matching the `condition`.
+
+ Each node which replaces another one or has been added to the `new` doctree
+ will be yielded.
+
+ :param condition:
+ A callable which returns either ``True`` or ``False`` for a given node.
+ """
+ old_iter = old.traverse(condition)
+ new_iter = new.traverse(condition)
+ old_nodes = []
+ new_nodes = []
+ ratios = {}
+ seen = set()
+ # compare the nodes each doctree in order
+ for old_node, new_node in zip_longest(old_iter, new_iter):
+ if old_node is None:
+ new_nodes.append(new_node)
+ continue
+ if new_node is None:
+ old_nodes.append(old_node)
+ continue
+ ratio = get_ratio(old_node.rawsource, new_node.rawsource)
+ if ratio == 0:
+ new_node.uid = old_node.uid
+ seen.add(new_node)
+ else:
+ ratios[old_node, new_node] = ratio
+ old_nodes.append(old_node)
+ new_nodes.append(new_node)
+ # calculate the ratios for each unequal pair of nodes, should we stumble
+ # on a pair which is equal we set the uid and add it to the seen ones
+ for old_node, new_node in product(old_nodes, new_nodes):
+ if new_node in seen or (old_node, new_node) in ratios:
+ continue
+ ratio = get_ratio(old_node.rawsource, new_node.rawsource)
+ if ratio == 0:
+ new_node.uid = old_node.uid
+ seen.add(new_node)
+ else:
+ ratios[old_node, new_node] = ratio
+ # choose the old node with the best ratio for each new node and set the uid
+ # as long as the ratio is under a certain value, in which case we consider
+ # them not changed but different
+ ratios = sorted(ratios.iteritems(), key=itemgetter(1))
+ for (old_node, new_node), ratio in ratios:
+ if new_node in seen:
+ continue
+ else:
+ seen.add(new_node)
+ if ratio < VERSIONING_RATIO:
+ new_node.uid = old_node.uid
+ else:
+ new_node.uid = uuid4().hex
+ yield new_node
+ # create new uuids for any new node we left out earlier, this happens
+ # if one or more nodes are simply added.
+ for new_node in set(new_nodes) - seen:
+ new_node.uid = uuid4().hex
+ yield new_node
+
+
+def get_ratio(old, new):
+ """Return a "similiarity ratio" (in percent) representing the similarity
+ between the two strings where 0 is equal and anything above less than equal.
+ """
+ if not all([old, new]):
+ return VERSIONING_RATIO
+ return levenshtein_distance(old, new) / (len(old) / 100.0)
+
+
+def levenshtein_distance(a, b):
+ """Return the Levenshtein edit distance between two strings *a* and *b*."""
+ if a == b:
+ return 0
+ if len(a) < len(b):
+ a, b = b, a
+ if not a:
+ return len(b)
+ previous_row = xrange(len(b) + 1)
+ for i, column1 in enumerate(a):
+ current_row = [i + 1]
+ for j, column2 in enumerate(b):
+ insertions = previous_row[j + 1] + 1
+ deletions = current_row[j] + 1
+ substitutions = previous_row[j] + (column1 != column2)
+ current_row.append(min(insertions, deletions, substitutions))
+ previous_row = current_row
+ return previous_row[-1]
diff --git a/sphinx/websupport/__init__.py b/sphinx/websupport/__init__.py
new file mode 100644
index 00000000..e054812e
--- /dev/null
+++ b/sphinx/websupport/__init__.py
@@ -0,0 +1,456 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.websupport
+ ~~~~~~~~~~~~~~~~~
+
+ Base Module for web support functions.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+import cgi
+import sys
+import cPickle as pickle
+import posixpath
+from os import path
+
+from jinja2 import Environment, FileSystemLoader
+
+from docutils.core import publish_parts
+
+from sphinx.application import Sphinx
+from sphinx.util.osutil import ensuredir
+from sphinx.util.jsonimpl import dumps as dump_json
+from sphinx.websupport import errors
+from sphinx.websupport.search import BaseSearch, SEARCH_ADAPTERS
+from sphinx.websupport.storage import StorageBackend
+
+
+class WebSupport(object):
+ """The main API class for the web support package. All interactions
+ with the web support package should occur through this class.
+ """
+ def __init__(self,
+ srcdir=None, # only required for building
+ builddir='', # the dir with data/static/doctrees subdirs
+ datadir=None, # defaults to builddir/data
+ staticdir=None, # defaults to builddir/static
+ doctreedir=None, # defaults to builddir/doctrees
+ search=None, # defaults to no search
+ storage=None, # defaults to SQLite in datadir
+ status=sys.stdout,
+ warning=sys.stderr,
+ moderation_callback=None,
+ allow_anonymous_comments=True,
+ docroot='',
+ staticroot='static',
+ ):
+ # directories
+ self.srcdir = srcdir
+ self.builddir = builddir
+ self.outdir = path.join(builddir, 'data')
+ self.datadir = datadir or self.outdir
+ self.staticdir = staticdir or path.join(self.builddir, 'static')
+ self.doctreedir = staticdir or path.join(self.builddir, 'doctrees')
+ # web server virtual paths
+ self.staticroot = staticroot.strip('/')
+ self.docroot = docroot.strip('/')
+
+ self.status = status
+ self.warning = warning
+ self.moderation_callback = moderation_callback
+ self.allow_anonymous_comments = allow_anonymous_comments
+
+ self._init_templating()
+ self._init_search(search)
+ self._init_storage(storage)
+
+ self._globalcontext = None
+
+ self._make_base_comment_options()
+
+ def _init_storage(self, storage):
+ if isinstance(storage, StorageBackend):
+ self.storage = storage
+ else:
+ # If a StorageBackend isn't provided, use the default
+ # SQLAlchemy backend.
+ from sphinx.websupport.storage.sqlalchemystorage \
+ import SQLAlchemyStorage
+ if not storage:
+ # no explicit DB path given; create default sqlite database
+ db_path = path.join(self.datadir, 'db', 'websupport.db')
+ ensuredir(path.dirname(db_path))
+ storage = 'sqlite:///' + db_path
+ self.storage = SQLAlchemyStorage(storage)
+
+ def _init_templating(self):
+ import sphinx
+ template_path = path.join(path.dirname(sphinx.__file__),
+ 'themes', 'basic')
+ loader = FileSystemLoader(template_path)
+ self.template_env = Environment(loader=loader)
+
+ def _init_search(self, search):
+ if isinstance(search, BaseSearch):
+ self.search = search
+ else:
+ mod, cls = SEARCH_ADAPTERS[search or 'null']
+ mod = 'sphinx.websupport.search.' + mod
+ SearchClass = getattr(__import__(mod, None, None, [cls]), cls)
+ search_path = path.join(self.datadir, 'search')
+ self.search = SearchClass(search_path)
+ self.results_template = \
+ self.template_env.get_template('searchresults.html')
+
+ def build(self):
+ """Build the documentation. Places the data into the `outdir`
+ directory. Use it like this::
+
+ support = WebSupport(srcdir, builddir, search='xapian')
+ support.build()
+
+ This will read reStructured text files from `srcdir`. Then it will
+ build the pickles and search index, placing them into `builddir`.
+ It will also save node data to the database.
+ """
+ if not self.srcdir:
+ raise RuntimeError('No srcdir associated with WebSupport object')
+ app = Sphinx(self.srcdir, self.srcdir, self.outdir, self.doctreedir,
+ 'websupport', status=self.status, warning=self.warning)
+ app.builder.set_webinfo(self.staticdir, self.staticroot,
+ self.search, self.storage)
+
+ self.storage.pre_build()
+ app.build()
+ self.storage.post_build()
+
+ def get_globalcontext(self):
+ """Load and return the "global context" pickle."""
+ if not self._globalcontext:
+ infilename = path.join(self.datadir, 'globalcontext.pickle')
+ f = open(infilename, 'rb')
+ try:
+ self._globalcontext = pickle.load(f)
+ finally:
+ f.close()
+ return self._globalcontext
+
+ def get_document(self, docname, username='', moderator=False):
+ """Load and return a document from a pickle. The document will
+ be a dict object which can be used to render a template::
+
+ support = WebSupport(datadir=datadir)
+ support.get_document('index', username, moderator)
+
+ In most cases `docname` will be taken from the request path and
+ passed directly to this function. In Flask, that would be something
+ like this::
+
+ @app.route('/<path:docname>')
+ def index(docname):
+ username = g.user.name if g.user else ''
+ moderator = g.user.moderator if g.user else False
+ try:
+ document = support.get_document(docname, username,
+ moderator)
+ except DocumentNotFoundError:
+ abort(404)
+ render_template('doc.html', document=document)
+
+ The document dict that is returned contains the following items
+ to be used during template rendering.
+
+ * **body**: The main body of the document as HTML
+ * **sidebar**: The sidebar of the document as HTML
+ * **relbar**: A div containing links to related documents
+ * **title**: The title of the document
+ * **css**: Links to css files used by Sphinx
+ * **script**: Javascript containing comment options
+
+ This raises :class:`~sphinx.websupport.errors.DocumentNotFoundError`
+ if a document matching `docname` is not found.
+
+ :param docname: the name of the document to load.
+ """
+ docpath = path.join(self.datadir, 'pickles', docname)
+ if path.isdir(docpath):
+ infilename = docpath + '/index.fpickle'
+ if not docname:
+ docname = 'index'
+ else:
+ docname += '/index'
+ else:
+ infilename = docpath + '.fpickle'
+
+ try:
+ f = open(infilename, 'rb')
+ except IOError:
+ raise errors.DocumentNotFoundError(
+ 'The document "%s" could not be found' % docname)
+ try:
+ document = pickle.load(f)
+ finally:
+ f.close()
+
+ comment_opts = self._make_comment_options(username, moderator)
+ comment_meta = self._make_metadata(
+ self.storage.get_metadata(docname, moderator))
+
+ document['script'] = comment_opts + comment_meta + document['script']
+ return document
+
+ def get_search_results(self, q):
+ """Perform a search for the query `q`, and create a set
+ of search results. Then render the search results as html and
+ return a context dict like the one created by
+ :meth:`get_document`::
+
+ document = support.get_search_results(q)
+
+ :param q: the search query
+ """
+ results = self.search.query(q)
+ ctx = {
+ 'q': q,
+ 'search_performed': True,
+ 'search_results': results,
+ 'docroot': '../', # XXX
+ }
+ document = {
+ 'body': self.results_template.render(ctx),
+ 'title': 'Search Results',
+ 'sidebar': '',
+ 'relbar': ''
+ }
+ return document
+
+ def get_data(self, node_id, username=None, moderator=False):
+ """Get the comments and source associated with `node_id`. If
+ `username` is given vote information will be included with the
+ returned comments. The default CommentBackend returns a dict with
+ two keys, *source*, and *comments*. *source* is raw source of the
+ node and is used as the starting point for proposals a user can
+ add. *comments* is a list of dicts that represent a comment, each
+ having the following items:
+
+ ============= ======================================================
+ Key Contents
+ ============= ======================================================
+ text The comment text.
+ username The username that was stored with the comment.
+ id The comment's unique identifier.
+ rating The comment's current rating.
+ age The time in seconds since the comment was added.
+ time A dict containing time information. It contains the
+ following keys: year, month, day, hour, minute, second,
+ iso, and delta. `iso` is the time formatted in ISO
+ 8601 format. `delta` is a printable form of how old
+ the comment is (e.g. "3 hours ago").
+ vote If `user_id` was given, this will be an integer
+ representing the vote. 1 for an upvote, -1 for a
+ downvote, or 0 if unvoted.
+ node The id of the node that the comment is attached to.
+ If the comment's parent is another comment rather than
+ a node, this will be null.
+ parent The id of the comment that this comment is attached
+ to if it is not attached to a node.
+ children A list of all children, in this format.
+ proposal_diff An HTML representation of the differences between the
+ the current source and the user's proposed source.
+ ============= ======================================================
+
+ :param node_id: the id of the node to get comments for.
+ :param username: the username of the user viewing the comments.
+ :param moderator: whether the user is a moderator.
+ """
+ return self.storage.get_data(node_id, username, moderator)
+
+ def delete_comment(self, comment_id, username='', moderator=False):
+ """Delete a comment.
+
+ If `moderator` is True, the comment and all descendants will be deleted
+ from the database, and the function returns ``True``.
+
+ If `moderator` is False, the comment will be marked as deleted (but not
+ removed from the database so as not to leave any comments orphaned), but
+ only if the `username` matches the `username` on the comment. The
+ username and text files are replaced with "[deleted]" . In this case,
+ the function returns ``False``.
+
+ This raises :class:`~sphinx.websupport.errors.UserNotAuthorizedError`
+ if moderator is False and `username` doesn't match username on the
+ comment.
+
+ :param comment_id: the id of the comment to delete.
+ :param username: the username requesting the deletion.
+ :param moderator: whether the requestor is a moderator.
+ """
+ return self.storage.delete_comment(comment_id, username, moderator)
+
+ def add_comment(self, text, node_id='', parent_id='', displayed=True,
+ username=None, time=None, proposal=None,
+ moderator=False):
+ """Add a comment to a node or another comment. Returns the comment
+ in the same format as :meth:`get_comments`. If the comment is being
+ attached to a node, pass in the node's id (as a string) with the
+ node keyword argument::
+
+ comment = support.add_comment(text, node_id=node_id)
+
+ If the comment is the child of another comment, provide the parent's
+ id (as a string) with the parent keyword argument::
+
+ comment = support.add_comment(text, parent_id=parent_id)
+
+ If you would like to store a username with the comment, pass
+ in the optional `username` keyword argument::
+
+ comment = support.add_comment(text, node=node_id,
+ username=username)
+
+ :param parent_id: the prefixed id of the comment's parent.
+ :param text: the text of the comment.
+ :param displayed: for moderation purposes
+ :param username: the username of the user making the comment.
+ :param time: the time the comment was created, defaults to now.
+ """
+ if username is None:
+ if self.allow_anonymous_comments:
+ username = 'Anonymous'
+ else:
+ raise errors.UserNotAuthorizedError()
+ parsed = self._parse_comment_text(text)
+ comment = self.storage.add_comment(parsed, displayed, username,
+ time, proposal, node_id,
+ parent_id, moderator)
+ comment['original_text'] = text
+ if not displayed and self.moderation_callback:
+ self.moderation_callback(comment)
+ return comment
+
+ def process_vote(self, comment_id, username, value):
+ """Process a user's vote. The web support package relies
+ on the API user to perform authentication. The API user will
+ typically receive a comment_id and value from a form, and then
+ make sure the user is authenticated. A unique username must be
+ passed in, which will also be used to retrieve the user's past
+ voting data. An example, once again in Flask::
+
+ @app.route('/docs/process_vote', methods=['POST'])
+ def process_vote():
+ if g.user is None:
+ abort(401)
+ comment_id = request.form.get('comment_id')
+ value = request.form.get('value')
+ if value is None or comment_id is None:
+ abort(400)
+ support.process_vote(comment_id, g.user.name, value)
+ return "success"
+
+ :param comment_id: the comment being voted on
+ :param username: the unique username of the user voting
+ :param value: 1 for an upvote, -1 for a downvote, 0 for an unvote.
+ """
+ value = int(value)
+ if not -1 <= value <= 1:
+ raise ValueError('vote value %s out of range (-1, 1)' % value)
+ self.storage.process_vote(comment_id, username, value)
+
+ def update_username(self, old_username, new_username):
+ """To remain decoupled from a webapp's authentication system, the
+ web support package stores a user's username with each of their
+ comments and votes. If the authentication system allows a user to
+ change their username, this can lead to stagnate data in the web
+ support system. To avoid this, each time a username is changed, this
+ method should be called.
+
+ :param old_username: The original username.
+ :param new_username: The new username.
+ """
+ self.storage.update_username(old_username, new_username)
+
+ def accept_comment(self, comment_id, moderator=False):
+ """Accept a comment that is pending moderation.
+
+ This raises :class:`~sphinx.websupport.errors.UserNotAuthorizedError`
+ if moderator is False.
+
+ :param comment_id: The id of the comment that was accepted.
+ :param moderator: Whether the user making the request is a moderator.
+ """
+ if not moderator:
+ raise errors.UserNotAuthorizedError()
+ self.storage.accept_comment(comment_id)
+
+ def _make_base_comment_options(self):
+ """Helper method to create the part of the COMMENT_OPTIONS javascript
+ that remains the same throughout the lifetime of the
+ :class:`~sphinx.websupport.WebSupport` object.
+ """
+ self.base_comment_opts = {}
+
+ if self.docroot != '':
+ comment_urls = [
+ ('addCommentURL', '_add_comment'),
+ ('getCommentsURL', '_get_comments'),
+ ('processVoteURL', '_process_vote'),
+ ('acceptCommentURL', '_accept_comment'),
+ ('deleteCommentURL', '_delete_comment')
+ ]
+ for key, value in comment_urls:
+ self.base_comment_opts[key] = \
+ '/' + posixpath.join(self.docroot, value)
+ if self.staticroot != 'static':
+ static_urls = [
+ ('commentImage', 'comment.png'),
+ ('closeCommentImage', 'comment-close.png'),
+ ('loadingImage', 'ajax-loader.gif'),
+ ('commentBrightImage', 'comment-bright.png'),
+ ('upArrow', 'up.png'),
+ ('upArrowPressed', 'up-pressed.png'),
+ ('downArrow', 'down.png'),
+ ('downArrowPressed', 'down-pressed.png')
+ ]
+ for key, value in static_urls:
+ self.base_comment_opts[key] = \
+ '/' + posixpath.join(self.staticroot, '_static', value)
+
+ def _make_comment_options(self, username, moderator):
+ """Helper method to create the parts of the COMMENT_OPTIONS
+ javascript that are unique to each request.
+
+ :param username: The username of the user making the request.
+ :param moderator: Whether the user making the request is a moderator.
+ """
+ rv = self.base_comment_opts.copy()
+ if username:
+ rv.update({
+ 'voting': True,
+ 'username': username,
+ 'moderator': moderator,
+ })
+ return '''\
+ <script type="text/javascript">
+ var COMMENT_OPTIONS = %s;
+ </script>
+ ''' % dump_json(rv)
+
+ def _make_metadata(self, data):
+ return '''\
+ <script type="text/javascript">
+ var COMMENT_METADATA = %s;
+ </script>
+ ''' % dump_json(data)
+
+ def _parse_comment_text(self, text):
+ settings = {'file_insertion_enabled': False,
+ 'raw_enabled': False,
+ 'output_encoding': 'unicode'}
+ try:
+ ret = publish_parts(text, writer_name='html',
+ settings_overrides=settings)['fragment']
+ except Exception:
+ ret = cgi.escape(text)
+ return ret
diff --git a/sphinx/websupport/errors.py b/sphinx/websupport/errors.py
new file mode 100644
index 00000000..225b10c8
--- /dev/null
+++ b/sphinx/websupport/errors.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.websupport.errors
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Contains Error classes for the web support package.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+
+class DocumentNotFoundError(Exception):
+ pass
+
+
+class UserNotAuthorizedError(Exception):
+ pass
+
+
+class CommentNotAllowedError(Exception):
+ pass
+
+
+class NullSearchException(Exception):
+ pass
diff --git a/sphinx/websupport/search/__init__.py b/sphinx/websupport/search/__init__.py
new file mode 100644
index 00000000..385c3fa9
--- /dev/null
+++ b/sphinx/websupport/search/__init__.py
@@ -0,0 +1,126 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.websupport.search
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Server side search support for the web support package.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+import re
+
+
+class BaseSearch(object):
+ def __init__(self, path):
+ pass
+
+ def init_indexing(self, changed=[]):
+ """Called by the builder to initialize the search indexer. `changed`
+ is a list of pagenames that will be reindexed. You may want to remove
+ these from the search index before indexing begins.
+
+ :param changed: a list of pagenames that will be re-indexed
+ """
+ pass
+
+ def finish_indexing(self):
+ """Called by the builder when writing has been completed. Use this
+ to perform any finalization or cleanup actions after indexing is
+ complete.
+ """
+ pass
+
+ def feed(self, pagename, title, doctree):
+ """Called by the builder to add a doctree to the index. Converts the
+ `doctree` to text and passes it to :meth:`add_document`. You probably
+ won't want to override this unless you need access to the `doctree`.
+ Override :meth:`add_document` instead.
+
+ :param pagename: the name of the page to be indexed
+ :param title: the title of the page to be indexed
+ :param doctree: is the docutils doctree representation of the page
+ """
+ self.add_document(pagename, title, doctree.astext())
+
+ def add_document(self, pagename, title, text):
+ """Called by :meth:`feed` to add a document to the search index.
+ This method should should do everything necessary to add a single
+ document to the search index.
+
+ `pagename` is name of the page being indexed. It is the combination
+ of the source files relative path and filename,
+ minus the extension. For example, if the source file is
+ "ext/builders.rst", the `pagename` would be "ext/builders". This
+ will need to be returned with search results when processing a
+ query.
+
+ :param pagename: the name of the page being indexed
+ :param title: the page's title
+ :param text: the full text of the page
+ """
+ raise NotImplementedError()
+
+ def query(self, q):
+ """Called by the web support api to get search results. This method
+ compiles the regular expression to be used when :meth:`extracting
+ context <extract_context>`, then calls :meth:`handle_query`. You
+ won't want to override this unless you don't want to use the included
+ :meth:`extract_context` method. Override :meth:`handle_query` instead.
+
+ :param q: the search query string.
+ """
+ self.context_re = re.compile('|'.join(q.split()), re.I)
+ return self.handle_query(q)
+
+ def handle_query(self, q):
+ """Called by :meth:`query` to retrieve search results for a search
+ query `q`. This should return an iterable containing tuples of the
+ following format::
+
+ (<path>, <title>, <context>)
+
+ `path` and `title` are the same values that were passed to
+ :meth:`add_document`, and `context` should be a short text snippet
+ of the text surrounding the search query in the document.
+
+ The :meth:`extract_context` method is provided as a simple way
+ to create the `context`.
+
+ :param q: the search query
+ """
+ raise NotImplementedError()
+
+ def extract_context(self, text, length=240):
+ """Extract the context for the search query from the document's
+ full `text`.
+
+ :param text: the full text of the document to create the context for
+ :param length: the length of the context snippet to return.
+ """
+ res = self.context_re.search(text)
+ if res is None:
+ return ''
+ context_start = max(res.start() - length/2, 0)
+ context_end = context_start + length
+ context = ''.join([context_start > 0 and '...' or '',
+ text[context_start:context_end],
+ context_end < len(text) and '...' or ''])
+
+ try:
+ return unicode(context, errors='ignore')
+ except TypeError:
+ return context
+
+ def context_for_searchtool(self):
+ """Required by the HTML builder."""
+ return {}
+
+
+# The built-in search adapters.
+SEARCH_ADAPTERS = {
+ 'xapian': ('xapiansearch', 'XapianSearch'),
+ 'whoosh': ('whooshsearch', 'WhooshSearch'),
+ 'null': ('nullsearch', 'NullSearch'),
+}
diff --git a/sphinx/websupport/search/nullsearch.py b/sphinx/websupport/search/nullsearch.py
new file mode 100644
index 00000000..61f2d2fb
--- /dev/null
+++ b/sphinx/websupport/search/nullsearch.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.websupport.search.nullsearch
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ The default search adapter, does nothing.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from sphinx.websupport.search import BaseSearch
+from sphinx.websupport.errors import NullSearchException
+
+
+class NullSearch(BaseSearch):
+ """A search adapter that does nothing. Used when no search adapter
+ is specified.
+ """
+ def feed(self, pagename, title, doctree):
+ pass
+
+ def query(self, q):
+ raise NullSearchException('No search adapter specified.')
diff --git a/sphinx/websupport/search/whooshsearch.py b/sphinx/websupport/search/whooshsearch.py
new file mode 100644
index 00000000..1ed3d714
--- /dev/null
+++ b/sphinx/websupport/search/whooshsearch.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.websupport.search.whooshsearch
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Whoosh search adapter.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from whoosh import index
+from whoosh.fields import Schema, ID, TEXT
+from whoosh.qparser import QueryParser
+from whoosh.analysis import StemmingAnalyzer
+
+from sphinx.util.osutil import ensuredir
+from sphinx.websupport.search import BaseSearch
+
+
+class WhooshSearch(BaseSearch):
+ """The whoosh search adapter for sphinx web support."""
+
+ # Define the Whoosh Schema for the search index.
+ schema = Schema(path=ID(stored=True, unique=True),
+ title=TEXT(field_boost=2.0, stored=True),
+ text=TEXT(analyzer=StemmingAnalyzer(), stored=True))
+
+ def __init__(self, db_path):
+ ensuredir(db_path)
+ if index.exists_in(db_path):
+ self.index = index.open_dir(db_path)
+ else:
+ self.index = index.create_in(db_path, schema=self.schema)
+ self.qparser = QueryParser('text', self.schema)
+
+ def init_indexing(self, changed=[]):
+ for changed_path in changed:
+ self.index.delete_by_term('path', changed_path)
+ self.index_writer = self.index.writer()
+
+ def finish_indexing(self):
+ self.index_writer.commit()
+
+ def add_document(self, pagename, title, text):
+ self.index_writer.add_document(path=unicode(pagename),
+ title=title,
+ text=text)
+
+ def handle_query(self, q):
+ searcher = self.index.searcher()
+ whoosh_results = searcher.search(self.qparser.parse(q))
+ results = []
+ for result in whoosh_results:
+ context = self.extract_context(result['text'])
+ results.append((result['path'],
+ result.get('title', ''),
+ context))
+ return results
diff --git a/sphinx/websupport/search/xapiansearch.py b/sphinx/websupport/search/xapiansearch.py
new file mode 100644
index 00000000..0615be84
--- /dev/null
+++ b/sphinx/websupport/search/xapiansearch.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.websupport.search.xapiansearch
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Xapian search adapter.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+import xapian
+
+from sphinx.util.osutil import ensuredir
+from sphinx.websupport.search import BaseSearch
+
+
+class XapianSearch(BaseSearch):
+ # Adapted from the GSOC 2009 webapp project.
+
+ # Xapian metadata constants
+ DOC_PATH = 0
+ DOC_TITLE = 1
+
+ def __init__(self, db_path):
+ self.db_path = db_path
+
+ def init_indexing(self, changed=[]):
+ ensuredir(self.db_path)
+ self.database = xapian.WritableDatabase(self.db_path,
+ xapian.DB_CREATE_OR_OPEN)
+ self.indexer = xapian.TermGenerator()
+ stemmer = xapian.Stem("english")
+ self.indexer.set_stemmer(stemmer)
+
+ def finish_indexing(self):
+ # Ensure the db lock is removed.
+ del self.database
+
+ def add_document(self, path, title, text):
+ self.database.begin_transaction()
+ # sphinx_page_path is used to easily retrieve documents by path.
+ sphinx_page_path = '"sphinxpagepath%s"' % path.replace('/', '_')
+ # Delete the old document if it exists.
+ self.database.delete_document(sphinx_page_path)
+
+ doc = xapian.Document()
+ doc.set_data(text)
+ doc.add_value(self.DOC_PATH, path)
+ doc.add_value(self.DOC_TITLE, title)
+ self.indexer.set_document(doc)
+ self.indexer.index_text(text)
+ doc.add_term(sphinx_page_path)
+ for word in text.split():
+ doc.add_posting(word, 1)
+ self.database.add_document(doc)
+ self.database.commit_transaction()
+
+ def handle_query(self, q):
+ database = xapian.Database(self.db_path)
+ enquire = xapian.Enquire(database)
+ qp = xapian.QueryParser()
+ stemmer = xapian.Stem("english")
+ qp.set_stemmer(stemmer)
+ qp.set_database(database)
+ qp.set_stemming_strategy(xapian.QueryParser.STEM_SOME)
+ query = qp.parse_query(q)
+
+ # Find the top 100 results for the query.
+ enquire.set_query(query)
+ matches = enquire.get_mset(0, 100)
+
+ results = []
+
+ for m in matches:
+ context = self.extract_context(m.document.get_data())
+ results.append((m.document.get_value(self.DOC_PATH),
+ m.document.get_value(self.DOC_TITLE),
+ ''.join(context) ))
+
+ return results
diff --git a/sphinx/websupport/storage/__init__.py b/sphinx/websupport/storage/__init__.py
new file mode 100644
index 00000000..77292812
--- /dev/null
+++ b/sphinx/websupport/storage/__init__.py
@@ -0,0 +1,115 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.websupport.storage
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Storage for the websupport package.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+class StorageBackend(object):
+ def pre_build(self):
+ """Called immediately before the build process begins. Use this
+ to prepare the StorageBackend for the addition of nodes.
+ """
+ pass
+
+ def has_node(self, id):
+ """Check to see if a node exists.
+
+ :param id: the id to check for.
+ """
+ raise NotImplementedError()
+
+ def add_node(self, id, document, source):
+ """Add a node to the StorageBackend.
+
+ :param id: a unique id for the comment.
+ :param document: the name of the document the node belongs to.
+ :param source: the source files name.
+ """
+ raise NotImplementedError()
+
+ def post_build(self):
+ """Called after a build has completed. Use this to finalize the
+ addition of nodes if needed.
+ """
+ pass
+
+ def add_comment(self, text, displayed, username, time,
+ proposal, node_id, parent_id, moderator):
+ """Called when a comment is being added.
+
+ :param text: the text of the comment
+ :param displayed: whether the comment should be displayed
+ :param username: the name of the user adding the comment
+ :param time: a date object with the time the comment was added
+ :param proposal: the text of the proposal the user made
+ :param node_id: the id of the node that the comment is being added to
+ :param parent_id: the id of the comment's parent comment.
+ :param moderator: whether the user adding the comment is a moderator
+ """
+ raise NotImplementedError()
+
+ def delete_comment(self, comment_id, username, moderator):
+ """Delete a comment.
+
+ Raises :class:`~sphinx.websupport.errors.UserNotAuthorizedError`
+ if moderator is False and `username` doesn't match the username
+ on the comment.
+
+ :param comment_id: The id of the comment being deleted.
+ :param username: The username of the user requesting the deletion.
+ :param moderator: Whether the user is a moderator.
+ """
+ raise NotImplementedError()
+
+ def get_metadata(self, docname, moderator):
+ """Get metadata for a document. This is currently just a dict
+ of node_id's with associated comment counts.
+
+ :param docname: the name of the document to get metadata for.
+ :param moderator: whether the requester is a moderator.
+ """
+ raise NotImplementedError()
+
+ def get_data(self, node_id, username, moderator):
+ """Called to retrieve all data for a node. This should return a
+ dict with two keys, *source* and *comments* as described by
+ :class:`~sphinx.websupport.WebSupport`'s
+ :meth:`~sphinx.websupport.WebSupport.get_data` method.
+
+ :param node_id: The id of the node to get data for.
+ :param username: The name of the user requesting the data.
+ :param moderator: Whether the requestor is a moderator.
+ """
+ raise NotImplementedError()
+
+ def process_vote(self, comment_id, username, value):
+ """Process a vote that is being cast. `value` will be either -1, 0,
+ or 1.
+
+ :param comment_id: The id of the comment being voted on.
+ :param username: The username of the user casting the vote.
+ :param value: The value of the vote being cast.
+ """
+ raise NotImplementedError()
+
+ def update_username(self, old_username, new_username):
+ """If a user is allowed to change their username this method should
+ be called so that there is not stagnate data in the storage system.
+
+ :param old_username: The username being changed.
+ :param new_username: What the username is being changed to.
+ """
+ raise NotImplementedError()
+
+ def accept_comment(self, comment_id):
+ """Called when a moderator accepts a comment. After the method is
+ called the comment should be displayed to all users.
+
+ :param comment_id: The id of the comment being accepted.
+ """
+ raise NotImplementedError()
diff --git a/sphinx/websupport/storage/differ.py b/sphinx/websupport/storage/differ.py
new file mode 100644
index 00000000..33fe54f3
--- /dev/null
+++ b/sphinx/websupport/storage/differ.py
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.websupport.storage.differ
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ A differ for creating an HTML representations of proposal diffs
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+import re
+from cgi import escape
+from difflib import Differ
+
+
+class CombinedHtmlDiff(object):
+ """Create an HTML representation of the differences between two pieces
+ of text.
+ """
+ highlight_regex = re.compile(r'([\+\-\^]+)')
+
+ def __init__(self, source, proposal):
+ proposal = escape(proposal)
+
+ differ = Differ()
+ self.diff = list(differ.compare(source.splitlines(1),
+ proposal.splitlines(1)))
+
+ def make_text(self):
+ return '\n'.join(self.diff)
+
+ def make_html(self):
+ """Return the HTML representation of the differences between
+ `source` and `proposal`.
+
+ :param source: the original text
+ :param proposal: the proposed text
+ """
+ html = []
+ diff = self.diff[:]
+ line = diff.pop(0)
+ next = diff.pop(0)
+ while True:
+ html.append(self._handle_line(line, next))
+ line = next
+ try:
+ next = diff.pop(0)
+ except IndexError:
+ html.append(self._handle_line(line))
+ break
+ return ''.join(html).rstrip()
+
+ def _handle_line(self, line, next=None):
+ """Handle an individual line in a diff."""
+ prefix = line[0]
+ text = line[2:]
+
+ if prefix == ' ':
+ return text
+ elif prefix == '?':
+ return ''
+
+ if next is not None and next[0] == '?':
+ tag = prefix == '+' and 'ins' or 'del'
+ text = self._highlight_text(text, next, tag)
+ css_class = prefix == '+' and 'prop-added' or 'prop-removed'
+
+ return '<span class="%s">%s</span>\n' % (css_class, text.rstrip())
+
+ def _highlight_text(self, text, next, tag):
+ """Highlight the specific changes made to a line by adding
+ <ins> and <del> tags.
+ """
+ next = next[2:]
+ new_text = []
+ start = 0
+ for match in self.highlight_regex.finditer(next):
+ new_text.append(text[start:match.start()])
+ new_text.append('<%s>' % tag)
+ new_text.append(text[match.start():match.end()])
+ new_text.append('</%s>' % tag)
+ start = match.end()
+ new_text.append(text[start:])
+ return ''.join(new_text)
diff --git a/sphinx/websupport/storage/sqlalchemy_db.py b/sphinx/websupport/storage/sqlalchemy_db.py
new file mode 100644
index 00000000..dc2ec6a7
--- /dev/null
+++ b/sphinx/websupport/storage/sqlalchemy_db.py
@@ -0,0 +1,208 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.websupport.storage.sqlalchemy_db
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ SQLAlchemy table and mapper definitions used by the
+ :class:`sphinx.websupport.storage.sqlalchemystorage.SQLAlchemyStorage`.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from datetime import datetime
+
+from sqlalchemy import Column, Integer, Text, String, Boolean, \
+ ForeignKey, DateTime
+from sqlalchemy.orm import relation, sessionmaker, aliased
+from sqlalchemy.ext.declarative import declarative_base
+
+Base = declarative_base()
+Session = sessionmaker()
+
+db_prefix = 'sphinx_'
+
+
+class Node(Base):
+ """Data about a Node in a doctree."""
+ __tablename__ = db_prefix + 'nodes'
+
+ id = Column(String(32), primary_key=True)
+ document = Column(String(256), nullable=False)
+ source = Column(Text, nullable=False)
+
+ def nested_comments(self, username, moderator):
+ """Create a tree of comments. First get all comments that are
+ descendants of this node, then convert them to a tree form.
+
+ :param username: the name of the user to get comments for.
+ :param moderator: whether the user is moderator.
+ """
+ session = Session()
+
+ if username:
+ # If a username is provided, create a subquery to retrieve all
+ # votes by this user. We will outerjoin with the comment query
+ # with this subquery so we have a user's voting information.
+ sq = session.query(CommentVote).\
+ filter(CommentVote.username == username).subquery()
+ cvalias = aliased(CommentVote, sq)
+ q = session.query(Comment, cvalias.value).outerjoin(cvalias)
+ else:
+ # If a username is not provided, we don't need to join with
+ # CommentVote.
+ q = session.query(Comment)
+
+ # Filter out all comments not descending from this node.
+ q = q.filter(Comment.path.like(str(self.id) + '.%'))
+
+ # Filter out all comments that are not moderated yet.
+ if not moderator:
+ q = q.filter(Comment.displayed == True)
+
+ # Retrieve all results. Results must be ordered by Comment.path
+ # so that we can easily transform them from a flat list to a tree.
+ results = q.order_by(Comment.path).all()
+ session.close()
+
+ return self._nest_comments(results, username)
+
+ def _nest_comments(self, results, username):
+ """Given the flat list of results, convert the list into a
+ tree.
+
+ :param results: the flat list of comments
+ :param username: the name of the user requesting the comments.
+ """
+ comments = []
+ list_stack = [comments]
+ for r in results:
+ comment, vote = r if username else (r, 0)
+
+ inheritance_chain = comment.path.split('.')[1:]
+
+ if len(inheritance_chain) == len(list_stack) + 1:
+ parent = list_stack[-1][-1]
+ list_stack.append(parent['children'])
+ elif len(inheritance_chain) < len(list_stack):
+ while len(inheritance_chain) < len(list_stack):
+ list_stack.pop()
+
+ list_stack[-1].append(comment.serializable(vote=vote))
+
+ return comments
+
+ def __init__(self, id, document, source):
+ self.id = id
+ self.document = document
+ self.source = source
+
+
+class CommentVote(Base):
+ """A vote a user has made on a Comment."""
+ __tablename__ = db_prefix + 'commentvote'
+
+ username = Column(String(64), primary_key=True)
+ comment_id = Column(Integer, ForeignKey(db_prefix + 'comments.id'),
+ primary_key=True)
+ # -1 if downvoted, +1 if upvoted, 0 if voted then unvoted.
+ value = Column(Integer, nullable=False)
+
+ def __init__(self, comment_id, username, value):
+ self.comment_id = comment_id
+ self.username = username
+ self.value = value
+
+
+class Comment(Base):
+ """An individual Comment being stored."""
+ __tablename__ = db_prefix + 'comments'
+
+ id = Column(Integer, primary_key=True)
+ rating = Column(Integer, nullable=False)
+ time = Column(DateTime, nullable=False)
+ text = Column(Text, nullable=False)
+ displayed = Column(Boolean, index=True, default=False)
+ username = Column(String(64))
+ proposal = Column(Text)
+ proposal_diff = Column(Text)
+ path = Column(String(256), index=True)
+
+ node_id = Column(String, ForeignKey(db_prefix + 'nodes.id'))
+ node = relation(Node, backref="comments")
+
+ votes = relation(CommentVote, backref="comment",
+ cascade="all")
+
+ def __init__(self, text, displayed, username, rating, time,
+ proposal, proposal_diff):
+ self.text = text
+ self.displayed = displayed
+ self.username = username
+ self.rating = rating
+ self.time = time
+ self.proposal = proposal
+ self.proposal_diff = proposal_diff
+
+ def set_path(self, node_id, parent_id):
+ """Set the materialized path for this comment."""
+ # This exists because the path can't be set until the session has
+ # been flushed and this Comment has an id.
+ if node_id:
+ self.node_id = node_id
+ self.path = '%s.%s' % (node_id, self.id)
+ else:
+ session = Session()
+ parent_path = session.query(Comment.path).\
+ filter(Comment.id == parent_id).one().path
+ session.close()
+ self.node_id = parent_path.split('.')[0]
+ self.path = '%s.%s' % (parent_path, self.id)
+
+ def serializable(self, vote=0):
+ """Creates a serializable representation of the comment. This is
+ converted to JSON, and used on the client side.
+ """
+ delta = datetime.now() - self.time
+
+ time = {'year': self.time.year,
+ 'month': self.time.month,
+ 'day': self.time.day,
+ 'hour': self.time.hour,
+ 'minute': self.time.minute,
+ 'second': self.time.second,
+ 'iso': self.time.isoformat(),
+ 'delta': self.pretty_delta(delta)}
+
+ path = self.path.split('.')
+ node = path[0]
+ parent = path[-2] if len(path) > 2 else None
+
+ return {'text': self.text,
+ 'username': self.username or 'Anonymous',
+ 'id': self.id,
+ 'node': node,
+ 'parent': parent,
+ 'rating': self.rating,
+ 'displayed': self.displayed,
+ 'age': delta.seconds,
+ 'time': time,
+ 'vote': vote or 0,
+ 'proposal_diff': self.proposal_diff,
+ 'children': []}
+
+ def pretty_delta(self, delta):
+ """Create a pretty representation of the Comment's age.
+ (e.g. 2 minutes).
+ """
+ days = delta.days
+ seconds = delta.seconds
+ hours = seconds / 3600
+ minutes = seconds / 60
+
+ if days == 0:
+ dt = (minutes, 'minute') if hours == 0 else (hours, 'hour')
+ else:
+ dt = (days, 'day')
+
+ return '%s %s ago' % dt if dt[0] == 1 else '%s %ss ago' % dt
diff --git a/sphinx/websupport/storage/sqlalchemystorage.py b/sphinx/websupport/storage/sqlalchemystorage.py
new file mode 100644
index 00000000..e6eccfe9
--- /dev/null
+++ b/sphinx/websupport/storage/sqlalchemystorage.py
@@ -0,0 +1,177 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.websupport.storage.sqlalchemystorage
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ An SQLAlchemy storage backend.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from datetime import datetime
+
+import sqlalchemy
+from sqlalchemy.orm import aliased
+from sqlalchemy.sql import func
+
+if sqlalchemy.__version__[:3] < '0.5':
+ raise ImportError('SQLAlchemy version 0.5 or greater is required for this '
+ 'storage backend; you have version %s' % sqlalchemy.__version__)
+
+from sphinx.websupport.errors import CommentNotAllowedError, \
+ UserNotAuthorizedError
+from sphinx.websupport.storage import StorageBackend
+from sphinx.websupport.storage.sqlalchemy_db import Base, Node, \
+ Comment, CommentVote, Session
+from sphinx.websupport.storage.differ import CombinedHtmlDiff
+
+
+class SQLAlchemyStorage(StorageBackend):
+ """
+ A :class:`.StorageBackend` using SQLAlchemy.
+ """
+
+ def __init__(self, uri):
+ self.engine = sqlalchemy.create_engine(uri)
+ Base.metadata.bind = self.engine
+ Base.metadata.create_all()
+ Session.configure(bind=self.engine)
+
+ def pre_build(self):
+ self.build_session = Session()
+
+ def has_node(self, id):
+ session = Session()
+ node = session.query(Node).filter(Node.id == id).first()
+ session.close()
+ return bool(node)
+
+ def add_node(self, id, document, source):
+ node = Node(id, document, source)
+ self.build_session.add(node)
+ self.build_session.flush()
+
+ def post_build(self):
+ self.build_session.commit()
+ self.build_session.close()
+
+ def add_comment(self, text, displayed, username, time,
+ proposal, node_id, parent_id, moderator):
+ session = Session()
+ proposal_diff = None
+ proposal_diff_text = None
+
+ if node_id and proposal:
+ node = session.query(Node).filter(Node.id == node_id).one()
+ differ = CombinedHtmlDiff(node.source, proposal)
+ proposal_diff = differ.make_html()
+ proposal_diff_text = differ.make_text()
+ elif parent_id:
+ parent = session.query(Comment.displayed).\
+ filter(Comment.id == parent_id).one()
+ if not parent.displayed:
+ raise CommentNotAllowedError(
+ "Can't add child to a parent that is not displayed")
+
+ comment = Comment(text, displayed, username, 0,
+ time or datetime.now(), proposal, proposal_diff)
+ session.add(comment)
+ session.flush()
+ # We have to flush the session before setting the path so the
+ # Comment has an id.
+ comment.set_path(node_id, parent_id)
+ session.commit()
+ d = comment.serializable()
+ d['document'] = comment.node.document
+ d['proposal_diff_text'] = proposal_diff_text
+ session.close()
+ return d
+
+ def delete_comment(self, comment_id, username, moderator):
+ session = Session()
+ comment = session.query(Comment).\
+ filter(Comment.id == comment_id).one()
+ if moderator:
+ # moderator mode: delete the comment and all descendants
+ # find descendants via path
+ session.query(Comment).filter(
+ Comment.path.like(comment.path + '.%')).delete(False)
+ session.delete(comment)
+ session.commit()
+ session.close()
+ return True
+ elif comment.username == username:
+ # user mode: do not really delete, but remove text and proposal
+ comment.username = '[deleted]'
+ comment.text = '[deleted]'
+ comment.proposal = ''
+ session.commit()
+ session.close()
+ return False
+ else:
+ session.close()
+ raise UserNotAuthorizedError()
+
+ def get_metadata(self, docname, moderator):
+ session = Session()
+ subquery = session.query(
+ Comment.id, Comment.node_id,
+ func.count('*').label('comment_count')).group_by(
+ Comment.node_id).subquery()
+ nodes = session.query(Node.id, subquery.c.comment_count).outerjoin(
+ (subquery, Node.id==subquery.c.node_id)).filter(
+ Node.document==docname)
+ session.close()
+ session.commit()
+ return dict([(k, v or 0) for k, v in nodes])
+
+ def get_data(self, node_id, username, moderator):
+ session = Session()
+ node = session.query(Node).filter(Node.id == node_id).one()
+ session.close()
+ comments = node.nested_comments(username, moderator)
+ return {'source': node.source,
+ 'comments': comments}
+
+ def process_vote(self, comment_id, username, value):
+ session = Session()
+
+ subquery = session.query(CommentVote).filter(
+ CommentVote.username == username).subquery()
+ vote_alias = aliased(CommentVote, subquery)
+ q = session.query(Comment, vote_alias).outerjoin(vote_alias).filter(
+ Comment.id == comment_id)
+ comment, vote = q.one()
+
+ if vote is None:
+ vote = CommentVote(comment_id, username, value)
+ comment.rating += value
+ else:
+ comment.rating += value - vote.value
+ vote.value = value
+
+ session.add(vote)
+ session.commit()
+ session.close()
+
+ def update_username(self, old_username, new_username):
+ session = Session()
+
+ session.query(Comment).filter(Comment.username == old_username).\
+ update({Comment.username: new_username})
+ session.query(CommentVote).\
+ filter(CommentVote.username == old_username).\
+ update({CommentVote.username: new_username})
+
+ session.commit()
+ session.close()
+
+ def accept_comment(self, comment_id):
+ session = Session()
+ session.query(Comment).filter(Comment.id == comment_id).update(
+ {Comment.displayed: True}
+ )
+
+ session.commit()
+ session.close()
diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py
index f8770264..7872dabe 100644
--- a/sphinx/writers/html.py
+++ b/sphinx/writers/html.py
@@ -59,7 +59,11 @@ class HTMLTranslator(BaseTranslator):
self.highlightlang = builder.config.highlight_language
self.highlightlinenothreshold = sys.maxint
self.protect_literal_text = 0
- self.add_permalinks = builder.config.html_add_permalinks
+ self.permalink_text = builder.config.html_add_permalinks
+ # support backwards-compatible setting to a bool
+ if not isinstance(self.permalink_text, basestring):
+ self.permalink_text = self.permalink_text and u'\u00B6' or ''
+ self.permalink_text = self.encode(self.permalink_text)
self.secnumber_suffix = builder.config.html_secnumber_suffix
def visit_start_of_file(self, node):
@@ -81,11 +85,12 @@ class HTMLTranslator(BaseTranslator):
and node['ids'] and node['first']:
self.body.append('<!--[%s]-->' % node['ids'][0])
def depart_desc_signature(self, node):
- if node['ids'] and self.add_permalinks and self.builder.add_permalinks:
+ if node['ids'] and self.permalink_text and self.builder.add_permalinks:
self.body.append(u'<a class="headerlink" href="#%s" '
% node['ids'][0] +
- u'title="%s">\u00B6</a>' %
- _('Permalink to this definition'))
+ u'title="%s">%s</a>' % (
+ _('Permalink to this definition'),
+ self.permalink_text))
self.body.append('</dt>\n')
def visit_desc_addname(self, node):
@@ -181,7 +186,7 @@ class HTMLTranslator(BaseTranslator):
atts['title'] = node['reftitle']
self.body.append(self.starttag(node, 'a', '', **atts))
- if node.hasattr('secnumber'):
+ if node.get('secnumber'):
self.body.append(('%s' + self.secnumber_suffix) %
'.'.join(map(str, node['secnumber'])))
@@ -203,14 +208,14 @@ class HTMLTranslator(BaseTranslator):
self.depart_admonition(node)
def add_secnumber(self, node):
- if node.hasattr('secnumber'):
+ if node.get('secnumber'):
self.body.append('.'.join(map(str, node['secnumber'])) +
self.secnumber_suffix)
elif isinstance(node.parent, nodes.section):
anchorname = '#' + node.parent['ids'][0]
if anchorname not in self.builder.secnumbers:
anchorname = '' # try first heading which has no anchor
- if anchorname in self.builder.secnumbers:
+ if self.builder.secnumbers.get(anchorname):
numbers = self.builder.secnumbers[anchorname]
self.body.append('.'.join(map(str, numbers)) +
self.secnumber_suffix)
@@ -233,10 +238,12 @@ class HTMLTranslator(BaseTranslator):
lang = node['language']
if node.has_key('linenos'):
linenos = node['linenos']
+ highlight_args = node.get('highlight_args', {})
def warner(msg):
self.builder.warn(msg, (self.builder.current_docname, node.line))
highlighted = self.highlighter.highlight_block(
- node.rawsource, lang, linenos, warn=warner)
+ node.rawsource, lang, warn=warner, linenos=linenos,
+ **highlight_args)
starttag = self.starttag(node, 'div', suffix='',
CLASS='highlight-%s' % lang)
self.body.append(starttag + highlighted + '</div>\n')
@@ -253,9 +260,6 @@ class HTMLTranslator(BaseTranslator):
# overwritten
def visit_literal(self, node):
- if len(node.children) == 1 and \
- node.children[0] in ('None', 'True', 'False'):
- node['classes'].append('xref')
self.body.append(self.starttag(node, 'tt', '',
CLASS='docutils literal'))
self.protect_literal_text += 1
@@ -334,22 +338,20 @@ class HTMLTranslator(BaseTranslator):
if node['uri'].lower().endswith('svg') or \
node['uri'].lower().endswith('svgz'):
- atts = {'data': node['uri'], 'type': 'image/svg+xml'}
+ atts = {'src': node['uri']}
if node.has_key('width'):
atts['width'] = node['width']
if node.has_key('height'):
atts['height'] = node['height']
+ if node.has_key('alt'):
+ atts['alt'] = node['alt']
if node.has_key('align'):
self.body.append('<div align="%s" class="align-%s">' %
(node['align'], node['align']))
self.context.append('</div>\n')
else:
self.context.append('')
- embatts = atts.copy()
- embatts['src'] = embatts.pop('data')
- self.body.append(self.starttag(node, 'object', '', **atts))
- self.body.append(self.emptytag(node, 'embed', '', **embatts))
- self.body.append('</object>\n')
+ self.body.append(self.emptytag(node, 'img', '', **atts))
return
if node.has_key('scale'):
@@ -488,24 +490,57 @@ class HTMLTranslator(BaseTranslator):
def depart_abbreviation(self, node):
self.body.append('</abbr>')
+ def visit_termsep(self, node):
+ self.body.append('<br />')
+ raise nodes.SkipNode
+
def depart_title(self, node):
close_tag = self.context[-1]
- if (self.add_permalinks and self.builder.add_permalinks and
+ if (self.permalink_text and self.builder.add_permalinks and
node.parent.hasattr('ids') and node.parent['ids']):
aname = node.parent['ids'][0]
# add permalink anchor
if close_tag.startswith('</h'):
self.body.append(u'<a class="headerlink" href="#%s" ' % aname +
- u'title="%s">\u00B6</a>' %
- _('Permalink to this headline'))
+ u'title="%s">%s</a>' % (
+ _('Permalink to this headline'),
+ self.permalink_text))
elif close_tag.startswith('</a></h'):
self.body.append(u'</a><a class="headerlink" href="#%s" ' %
aname +
- u'title="%s">\u00B6' %
- _('Permalink to this headline'))
+ u'title="%s">%s' % (
+ _('Permalink to this headline'),
+ self.permalink_text))
BaseTranslator.depart_title(self, node)
+ # overwritten to add even/odd classes
+
+ def visit_table(self, node):
+ self._table_row_index = 0
+ return BaseTranslator.visit_table(self, node)
+
+ def visit_row(self, node):
+ self._table_row_index += 1
+ if self._table_row_index % 2 == 0:
+ node['classes'].append('row-even')
+ else:
+ node['classes'].append('row-odd')
+ self.body.append(self.starttag(node, 'tr', ''))
+ node.column = 0
+
+ def visit_field_list(self, node):
+ self._fieldlist_row_index = 0
+ return BaseTranslator.visit_field_list(self, node)
+
+ def visit_field(self, node):
+ self._fieldlist_row_index += 1
+ if self._fieldlist_row_index % 2 == 0:
+ node['classes'].append('field-even')
+ else:
+ node['classes'].append('field-odd')
+ self.body.append(self.starttag(node, 'tr', '', CLASS='field'))
+
def unknown_visit(self, node):
raise NotImplementedError('Unknown node: ' + node.__class__.__name__)
diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py
index 9fa85b3f..14e24cfb 100644
--- a/sphinx/writers/latex.py
+++ b/sphinx/writers/latex.py
@@ -23,6 +23,7 @@ from sphinx import addnodes
from sphinx import highlighting
from sphinx.errors import SphinxError
from sphinx.locale import admonitionlabels, versionlabels, _
+from sphinx.util import split_into
from sphinx.util.osutil import ustrftime
from sphinx.util.pycompat import any
from sphinx.util.texescape import tex_escape_map, tex_replace_map
@@ -39,6 +40,7 @@ HEADER = r'''%% Generated by Sphinx.
%(fncychap)s
%(longtable)s
\usepackage{sphinx}
+\usepackage{multirow}
%(preamble)s
\title{%(title)s}
@@ -250,6 +252,9 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.no_contractions = 0
self.compact_list = 0
self.first_param = 0
+ self.previous_spanning_row = 0
+ self.previous_spanning_column = 0
+ self.remember_multirow = {}
def astext(self):
return (HEADER % self.elements +
@@ -330,7 +335,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
# ... and all others are the appendices
self.body.append(u'\n\\appendix\n')
self.first_document = -1
- if node.has_key('docname'):
+ if 'docname' in node:
self.body.append(self.hypertarget(':doc'))
# "- 1" because the level is increased before the title is visited
self.sectionlevel = self.top_sectionlevel - 1
@@ -621,6 +626,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.table = Table()
self.table.longtable = 'longtable' in node['classes']
self.tablebody = []
+ self.tableheaders = []
# Redirect body output until table is finished.
self._body = self.body
self.body = self.tablebody
@@ -665,11 +671,13 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.next_table_ids.clear()
if self.table.longtable:
self.body.append('\\hline\n')
+ self.body.extend(self.tableheaders)
self.body.append('\\endfirsthead\n\n')
self.body.append('\\multicolumn{%s}{c}%%\n' % self.table.colcount)
self.body.append(r'{{\bfseries \tablename\ \thetable{} -- %s}} \\'
% _('continued from previous page'))
self.body.append('\n\\hline\n')
+ self.body.extend(self.tableheaders)
self.body.append('\\endhead\n\n')
self.body.append(ur'\hline \multicolumn{%s}{|r|}{{%s}} \\ \hline'
% (self.table.colcount,
@@ -679,6 +687,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.body.append('\\endlastfoot\n\n')
else:
self.body.append('\\hline\n')
+ self.body.extend(self.tableheaders)
self.body.extend(self.tablebody)
self.body.append(endmacro)
if not self.table.longtable and self.table.caption is not None:
@@ -697,39 +706,60 @@ class LaTeXTranslator(nodes.NodeVisitor):
pass
def visit_thead(self, node):
+ self.table.had_head = True
if self.next_table_colspec:
self.table.colspec = '{%s}\n' % self.next_table_colspec
self.next_table_colspec = None
-# self.body.append('\\hline\n')
-# self.table.had_head = True
+ # Redirect head output until header is finished. see visit_tbody.
+ self.body = self.tableheaders
def depart_thead(self, node):
- self.body.append('\\hline\n')
+ pass
def visit_tbody(self, node):
if not self.table.had_head:
self.visit_thead(node)
+ self.body = self.tablebody
def depart_tbody(self, node):
- self.body.append('\\hline\n')
+ pass
def visit_row(self, node):
self.table.col = 0
def depart_row(self, node):
- self.body.append('\\\\\n')
+ if self.previous_spanning_row == 1:
+ self.previous_spanning_row = 0
+ self.body.append('\\\\\n')
+ else:
+ self.body.append('\\\\\\hline\n')
self.table.rowcount += 1
def visit_entry(self, node):
- if node.has_key('morerows') or node.has_key('morecols'):
- raise UnsupportedError('%s:%s: column or row spanning cells are '
- 'not yet implemented.' %
- (self.curfilestack[-1], node.line or ''))
+ if self.remember_multirow.get(0, 0) > 1:
+ self.body.append(' & ')
if self.table.col > 0:
self.body.append(' & ')
self.table.col += 1
+ self.context.append('')
+ if 'morerows' in node:
+ self.body.append(' \multirow{')
+ self.previous_spanning_row = 1
+ self.body.append(str(node.get('morerows') + 1))
+ self.body.append('}{*}{')
+ self.context.append('}')
+ self.remember_multirow[self.table.col] = node.get('morerows') + 1
+ if 'morecols' in node:
+ self.body.append(' \multicolumn{')
+ self.body.append(str(node.get('morecols') + 1))
+ if self.table.col == 1:
+ self.body.append('}{|l|}{')
+ else:
+ self.body.append('}{l|}{')
+ self.context.append('}')
if isinstance(node.parent.parent, nodes.thead):
self.body.append('\\textbf{')
self.context.append('}')
- else:
- self.context.append('')
+ if self.remember_multirow.get(self.table.col + 1, 0) > 1:
+ self.remember_multirow[self.table.col + 1] -= 1
+ self.context.append(' & ')
def depart_entry(self, node):
self.body.append(self.context.pop()) # header
@@ -781,13 +811,17 @@ class LaTeXTranslator(nodes.NodeVisitor):
def visit_term(self, node):
ctx = '}] \\leavevmode'
- if node.has_key('ids') and node['ids']:
+ if node.get('ids'):
ctx += self.hypertarget(node['ids'][0])
self.body.append('\\item[{')
self.context.append(ctx)
def depart_term(self, node):
self.body.append(self.context.pop())
+ def visit_termsep(self, node):
+ self.body.append(', ')
+ raise nodes.SkipNode
+
def visit_classifier(self, node):
self.body.append('{[}')
def depart_classifier(self, node):
@@ -869,20 +903,20 @@ class LaTeXTranslator(nodes.NodeVisitor):
post = []
include_graphics_options = []
is_inline = self.is_inline(node)
- if attrs.has_key('scale'):
+ if 'scale' in attrs:
# Could also be done with ``scale`` option to
# ``\includegraphics``; doing it this way for consistency.
pre.append('\\scalebox{%f}{' % (attrs['scale'] / 100.0,))
post.append('}')
- if attrs.has_key('width'):
+ if 'width' in attrs:
w = self.latex_image_length(attrs['width'])
if w:
include_graphics_options.append('width=%s' % w)
- if attrs.has_key('height'):
+ if 'height' in attrs:
h = self.latex_image_length(attrs['height'])
if h:
include_graphics_options.append('height=%s' % h)
- if attrs.has_key('align'):
+ if 'align' in attrs:
align_prepost = {
# By default latex aligns the top of an image.
(1, 'top'): ('', ''),
@@ -927,13 +961,13 @@ class LaTeXTranslator(nodes.NodeVisitor):
for id in self.next_figure_ids:
ids += self.hypertarget(id, anchor=False)
self.next_figure_ids.clear()
- if node.has_key('width') and node.get('align', '') in ('left', 'right'):
+ if 'width' in node and node.get('align', '') in ('left', 'right'):
self.body.append('\\begin{wrapfigure}{%s}{%s}\n\\centering' %
(node['align'] == 'right' and 'r' or 'l',
node['width']))
self.context.append(ids + '\\end{wrapfigure}\n')
else:
- if (not node.attributes.has_key('align') or
+ if (not 'align' in node.attributes or
node.attributes['align'] == 'center'):
# centering does not add vertical space like center.
align = '\n\\centering'
@@ -1063,29 +1097,39 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.body.append('\n\\end{flushright}\n')
def visit_index(self, node, scre=re.compile(r';\s*')):
- if not node.get('inline'):
+ if not node.get('inline', True):
self.body.append('\n')
entries = node['entries']
- for type, string, tid, _ in entries:
- if type == 'single':
- self.body.append(r'\index{%s}' %
- scre.sub('!', self.encode(string)))
- elif type == 'pair':
- parts = tuple(self.encode(x.strip())
- for x in string.split(';', 1))
- try:
- self.body.append(r'\indexii{%s}{%s}' % parts)
- except TypeError:
- self.builder.warn('invalid pair index entry %r' % string)
- elif type == 'triple':
- parts = tuple(self.encode(x.strip())
- for x in string.split(';', 2))
- try:
- self.body.append(r'\indexiii{%s}{%s}{%s}' % parts)
- except TypeError:
- self.builder.warn('invalid triple index entry %r' % string)
- else:
- self.builder.warn('unknown index entry type %s found' % type)
+ for type, string, tid, ismain in entries:
+ m = ''
+ if ismain:
+ m = '|textbf'
+ try:
+ if type == 'single':
+ p = scre.sub('!', self.encode(string))
+ self.body.append(r'\index{%s%s}' % (p, m))
+ elif type == 'pair':
+ p1, p2 = map(self.encode, split_into(2, 'pair', string))
+ self.body.append(r'\index{%s!%s%s}\index{%s!%s%s}' %
+ (p1, p2, m, p2, p1, m))
+ elif type == 'triple':
+ p1, p2, p3 = map(self.encode,
+ split_into(3, 'triple', string))
+ self.body.append(
+ r'\index{%s!%s %s%s}\index{%s!%s, %s%s}'
+ r'\index{%s!%s %s%s}' %
+ (p1, p2, p3, m, p2, p3, p1, m, p3, p1, p2, m))
+ elif type == 'see':
+ p1, p2 = map(self.encode, split_into(2, 'see', string))
+ self.body.append(r'\index{%s|see{%s}}' % (p1, p2))
+ elif type == 'seealso':
+ p1, p2 = map(self.encode, split_into(2, 'seealso', string))
+ self.body.append(r'\index{%s|see{%s}}' % (p1, p2))
+ else:
+ self.builder.warn(
+ 'unknown index entry type %s found' % type)
+ except ValueError, err:
+ self.builder.warn(str(err))
raise nodes.SkipNode
def visit_raw(self, node):
@@ -1103,11 +1147,17 @@ class LaTeXTranslator(nodes.NodeVisitor):
uri.startswith('https:') or uri.startswith('ftp:'):
self.body.append('\\href{%s}{' % self.encode_uri(uri))
# if configured, put the URL after the link
- if self.builder.config.latex_show_urls and \
- node.astext() != uri:
+ show_urls = self.builder.config.latex_show_urls
+ if node.astext() != uri and show_urls and show_urls != 'no':
if uri.startswith('mailto:'):
uri = uri[7:]
- self.context.append('} (%s)' % self.encode_uri(uri))
+ if show_urls == 'footnote' and not \
+ (self.in_footnote or self.in_caption):
+ # obviously, footnotes in footnotes are not going to work
+ self.context.append(
+ r'}\footnote{%s}' % self.encode_uri(uri))
+ else: # all other true values (b/w compat)
+ self.context.append('} (%s)' % self.encode_uri(uri))
else:
self.context.append('}')
elif uri.startswith('#'):
@@ -1206,15 +1256,13 @@ class LaTeXTranslator(nodes.NodeVisitor):
def visit_literal(self, node):
self.no_contractions += 1
- content = self.encode(node.astext().strip())
- self.no_contractions -= 1
if self.in_title:
- self.body.append(r'\texttt{%s}' % content)
- elif node.has_key('role') and node['role'] == 'samp':
- self.body.append(r'\samp{%s}' % content)
+ self.body.append(r'\texttt{')
else:
- self.body.append(r'\code{%s}' % content)
- raise nodes.SkipNode
+ self.body.append(r'\code{')
+ def depart_literal(self, node):
+ self.no_contractions -= 1
+ self.body.append('}')
def visit_footnote_reference(self, node):
num = node.astext().strip()
@@ -1243,15 +1291,16 @@ class LaTeXTranslator(nodes.NodeVisitor):
code = self.verbatim.rstrip('\n')
lang = self.hlsettingstack[-1][0]
linenos = code.count('\n') >= self.hlsettingstack[-1][1] - 1
- if node.has_key('language'):
+ if 'language' in node:
# code-block directives
lang = node['language']
- if node.has_key('linenos'):
+ if 'linenos' in node:
linenos = node['linenos']
+ highlight_args = node.get('highlight_args', {})
def warner(msg):
self.builder.warn(msg, (self.curfilestack[-1], node.line))
- hlcode = self.highlighter.highlight_block(code, lang, linenos,
- warn=warner)
+ hlcode = self.highlighter.highlight_block(code, lang, warn=warner,
+ linenos=linenos, **highlight_args)
# workaround for Unicode issue
hlcode = hlcode.replace(u'€', u'@texteuro[]')
# must use original Verbatim environment and "tabular" environment
@@ -1431,7 +1480,9 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.verbatim += node.astext()
else:
text = self.encode(node.astext())
- self.body.append(educate_quotes_latex(text))
+ if not self.no_contractions:
+ text = educate_quotes_latex(text)
+ self.body.append(text)
def depart_Text(self, node):
pass
diff --git a/sphinx/writers/manpage.py b/sphinx/writers/manpage.py
index 5377ee58..620873bb 100644
--- a/sphinx/writers/manpage.py
+++ b/sphinx/writers/manpage.py
@@ -161,6 +161,10 @@ class ManualPageTranslator(BaseTranslator):
def depart_versionmodified(self, node):
self.depart_paragraph(node)
+ def visit_termsep(self, node):
+ self.body.append(', ')
+ raise nodes.SkipNode
+
# overwritten -- we don't want source comments to show up
def visit_comment(self, node):
raise nodes.SkipNode
@@ -193,7 +197,7 @@ class ManualPageTranslator(BaseTranslator):
def visit_admonition(self, node, name=None):
if name:
self.body.append('.IP %s\n' %
- admonitionlabels.get(name, name))
+ self.deunicode(admonitionlabels.get(name, name)))
def visit_productionlist(self, node):
self.ensure_eol()
@@ -235,6 +239,19 @@ class ManualPageTranslator(BaseTranslator):
self.body.append(self.defs['reference'][0])
self.body.append(node.astext())
self.body.append(self.defs['reference'][1])
+
+ uri = node.get('refuri', '')
+ if uri.startswith('mailto:') or uri.startswith('http:') or \
+ uri.startswith('https:') or uri.startswith('ftp:'):
+ # if configured, put the URL after the link
+ if self.builder.config.man_show_urls and \
+ node.astext() != uri:
+ if uri.startswith('mailto:'):
+ uri = uri[7:]
+ self.body.extend([
+ ' <',
+ self.defs['strong'][0], uri, self.defs['strong'][1],
+ '>'])
raise nodes.SkipNode
def visit_centered(self, node):
diff --git a/sphinx/writers/texinfo.py b/sphinx/writers/texinfo.py
new file mode 100644
index 00000000..5799e023
--- /dev/null
+++ b/sphinx/writers/texinfo.py
@@ -0,0 +1,1372 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.writers.texinfo
+ ~~~~~~~~~~~~~~~~~~~~~~
+
+ Custom docutils writer for Texinfo.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+import re
+import string
+import textwrap
+from os import path
+
+from docutils import nodes, writers
+
+from sphinx import addnodes, __version__
+from sphinx.locale import versionlabels, _
+from sphinx.util import ustrftime
+from sphinx.writers.latex import collected_footnote
+
+
+COPYING = """\
+@quotation
+%(project)s %(release)s, %(date)s
+
+%(author)s
+
+Copyright @copyright{} %(copyright)s
+@end quotation
+"""
+
+TEMPLATE = """\
+\\input texinfo @c -*-texinfo-*-
+@c %%**start of header
+@setfilename %(filename)s
+@documentencoding UTF-8
+@ifinfo
+@*Generated by Sphinx """ + __version__ + """.@*
+@end ifinfo
+@settitle %(title)s
+@defindex ge
+@paragraphindent %(paragraphindent)s
+@exampleindent %(exampleindent)s
+@afourlatex
+%(direntry)s
+@c %%**end of header
+
+@copying
+%(copying)s
+@end copying
+
+@titlepage
+@title %(title)s
+@insertcopying
+@end titlepage
+@contents
+
+@c %%** start of user preamble
+%(preamble)s
+@c %%** end of user preamble
+
+@ifnottex
+@node Top
+@top %(title)s
+@insertcopying
+@end ifnottex
+
+@c %%**start of body
+%(body)s
+@c %%**end of body
+@bye
+"""
+
+
+def find_subsections(section):
+ """Return a list of subsections for the given ``section``."""
+ result = []
+ for child in section.children:
+ if isinstance(child, nodes.section):
+ result.append(child)
+ continue
+ result.extend(find_subsections(child))
+ return result
+
+
+class TexinfoWriter(writers.Writer):
+ """Texinfo writer for generating Texinfo documents."""
+ supported = ('texinfo', 'texi')
+
+ settings_spec = (
+ 'Texinfo Specific Options', None, (
+ ("Name of the Info file", ['--texinfo-filename'], {'default': ''}),
+ ('Dir entry', ['--texinfo-dir-entry'], {'default': ''}),
+ ('Description', ['--texinfo-dir-description'], {'default': ''}),
+ ('Category', ['--texinfo-dir-category'], {'default':
+ 'Miscellaneous'})))
+
+ settings_defaults = {}
+
+ output = None
+
+ visitor_attributes = ('output', 'fragment')
+
+ def __init__(self, builder):
+ writers.Writer.__init__(self)
+ self.builder = builder
+
+ def translate(self):
+ self.visitor = visitor = TexinfoTranslator(self.document, self.builder)
+ self.document.walkabout(visitor)
+ visitor.finish()
+ for attr in self.visitor_attributes:
+ setattr(self, attr, getattr(visitor, attr))
+
+
+class TexinfoTranslator(nodes.NodeVisitor):
+
+ ignore_missing_images = False
+
+ default_elements = {
+ 'author': '',
+ 'body': '',
+ 'copying': '',
+ 'date': '',
+ 'direntry': '',
+ 'exampleindent': 4,
+ 'filename': '',
+ 'paragraphindent': 2,
+ 'preamble': '',
+ 'project': '',
+ 'release': '',
+ 'title': '',
+ }
+
+ def __init__(self, document, builder):
+ nodes.NodeVisitor.__init__(self, document)
+ self.builder = builder
+ self.init_settings()
+
+ self.written_ids = set() # node names and anchors in output
+ self.referenced_ids = set() # node names and anchors that should
+ # be in output
+ self.indices = [] # (node name, content)
+ self.short_ids = {} # anchors --> short ids
+ self.node_names = {} # node name --> node's name to display
+ self.node_menus = {} # node name --> node's menu entries
+ self.rellinks = {} # node name --> (next, previous, up)
+
+ self.collect_indices()
+ self.collect_node_names()
+ self.collect_node_menus()
+ self.collect_rellinks()
+
+ self.body = []
+ self.context = []
+ self.previous_section = None
+ self.section_level = 0
+ self.seen_title = False
+ self.next_section_ids = set()
+ self.escape_newlines = 0
+ self.curfilestack = []
+ self.footnotestack = []
+ self.in_footnote = 0
+ self.handled_abbrs = set()
+
+ def finish(self):
+ if self.previous_section is None:
+ self.add_menu('Top')
+ for index in self.indices:
+ name, content = index
+ pointers = tuple([name] + self.rellinks[name])
+ self.body.append('\n@node %s,%s,%s,%s\n' % pointers)
+ self.body.append('@unnumbered %s\n\n%s\n' % (name, content))
+
+ while self.referenced_ids:
+ # handle xrefs with missing anchors
+ r = self.referenced_ids.pop()
+ if r not in self.written_ids:
+ self.body.append('@anchor{%s}@w{%s}\n' % (r, ' ' * 30))
+ self.fragment = ''.join(self.body).strip() + '\n'
+ self.elements['body'] = self.fragment
+ self.output = TEMPLATE % self.elements
+
+ ## Helper routines
+
+ def init_settings(self):
+ settings = self.settings = self.document.settings
+ elements = self.elements = self.default_elements.copy()
+ elements.update({
+ # if empty, the title is set to the first section title
+ 'title': settings.title,
+ 'author': settings.author,
+ # if empty, use basename of input file
+ 'filename': settings.texinfo_filename,
+ 'release': self.escape(self.builder.config.release),
+ 'project': self.escape(self.builder.config.project),
+ 'copyright': self.escape(self.builder.config.copyright),
+ 'date': self.escape(self.builder.config.today or
+ ustrftime(self.builder.config.today_fmt
+ or _('%B %d, %Y')))
+ })
+ # title
+ title = elements['title']
+ if not title:
+ title = self.document.next_node(nodes.title)
+ title = (title and title.astext()) or '<untitled>'
+ elements['title'] = self.escape_id(title) or '<untitled>'
+ # filename
+ if not elements['filename']:
+ elements['filename'] = self.document.get('source') or 'untitled'
+ if elements['filename'][-4:] in ('.txt', '.rst'):
+ elements['filename'] = elements['filename'][:-4]
+ elements['filename'] += '.info'
+ # direntry
+ if settings.texinfo_dir_entry:
+ entry = self.format_menu_entry(
+ self.escape_menu(settings.texinfo_dir_entry),
+ '(%s)' % elements['filename'],
+ self.escape_arg(settings.texinfo_dir_description))
+ elements['direntry'] = ('@dircategory %s\n'
+ '@direntry\n'
+ '%s'
+ '@end direntry\n') % (
+ self.escape_id(settings.texinfo_dir_category), entry)
+ elements['copying'] = COPYING % elements
+ # allow the user to override them all
+ elements.update(settings.texinfo_elements)
+
+ def collect_node_names(self):
+ """Generates a unique id for each section.
+
+ Assigns the attribute ``node_name`` to each section."""
+ # must have a "Top" node
+ self.document['node_name'] = 'Top'
+ self.node_names['Top'] = 'Top'
+ self.written_ids.update(('Top', 'top'))
+ # each index is a node
+ for name, content in self.indices:
+ self.node_names[name] = name
+ self.written_ids.add(name)
+ # each section is also a node
+ for section in self.document.traverse(nodes.section):
+ title = section.next_node(nodes.Titular)
+ name = (title and title.astext()) or '<untitled>'
+ node_id = self.escape_id(name) or '<untitled>'
+ assert node_id and name
+ nth, suffix = 1, ''
+ while node_id + suffix in self.written_ids:
+ nth += 1
+ suffix = '<%s>' % nth
+ node_id += suffix
+ assert node_id not in self.node_names
+ assert node_id not in self.written_ids
+ section['node_name'] = node_id
+ self.node_names[node_id] = name
+ self.written_ids.add(node_id)
+
+ def collect_node_menus(self):
+ """Collect the menu entries for each "node" section."""
+ node_menus = self.node_menus
+ for node in ([self.document] +
+ self.document.traverse(nodes.section)):
+ assert 'node_name' in node and node['node_name']
+ entries = [s['node_name'] for s in find_subsections(node)]
+ node_menus[node['node_name']] = entries
+ # try to find a suitable "Top" node
+ title = self.document.next_node(nodes.title)
+ top = (title and title.parent) or self.document
+ if not isinstance(top, (nodes.document, nodes.section)):
+ top = self.document
+ if top is not self.document:
+ entries = node_menus[top['node_name']]
+ entries += node_menus['Top'][1:]
+ node_menus['Top'] = entries
+ del node_menus[top['node_name']]
+ top['node_name'] = 'Top'
+ # handle the indices
+ for name, content in self.indices:
+ node_menus[name] = ()
+ node_menus['Top'].append(name)
+
+ def collect_rellinks(self):
+ """Collect the relative links (next, previous, up) for each "node"."""
+ rellinks = self.rellinks
+ node_menus = self.node_menus
+ for id, entries in node_menus.items():
+ rellinks[id] = ['', '', '']
+ # up's
+ for id, entries in node_menus.items():
+ for e in entries:
+ rellinks[e][2] = id
+ # next's and prev's
+ for id, entries in node_menus.items():
+ for i, id in enumerate(entries):
+ # First child's prev is empty
+ if i != 0:
+ rellinks[id][1] = entries[i-1]
+ # Last child's next is empty
+ if i != len(entries) - 1:
+ rellinks[id][0] = entries[i+1]
+ # top's next is its first child
+ try:
+ first = node_menus['Top'][0]
+ except IndexError:
+ pass
+ else:
+ rellinks['Top'][0] = first
+ rellinks[first][1] = 'Top'
+
+ ## Escaping
+ # Which characters to escape depends on the context. In some cases,
+ # namely menus and node names, it's not possible to escape certain
+ # characters.
+
+ def escape(self, s):
+ """Return a string with Texinfo command characters escaped."""
+ s = s.replace('@', '@@')
+ s = s.replace('{', '@{')
+ s = s.replace('}', '@}')
+ # prevent `` and '' quote conversion
+ s = s.replace('``', "`@w{`}")
+ s = s.replace("''", "'@w{'}")
+ # prevent "--" from being converted to an "em dash"
+ # s = s.replace('-', '@w{-}')
+ return s
+
+ def escape_arg(self, s):
+ """Return an escaped string suitable for use as an argument
+ to a Texinfo command."""
+ s = self.escape(s)
+ # commas are the argument delimeters
+ s = s.replace(',', '@comma{}')
+ # normalize white space
+ s = ' '.join(s.split()).strip()
+ return s
+
+ def escape_id(self, s):
+ """Return an escaped string suitable for node names and anchors."""
+ bad_chars = ',:.()'
+ for bc in bad_chars:
+ s = s.replace(bc, ' ')
+ s = ' '.join(s.split()).strip()
+ return self.escape(s)
+
+ def escape_menu(self, s):
+ """Return an escaped string suitable for menu entries."""
+ s = self.escape_arg(s)
+ s = s.replace(':', ';')
+ s = ' '.join(s.split()).strip()
+ return s
+
+ def ensure_eol(self):
+ """Ensure the last line in body is terminated by new line."""
+ if self.body and self.body[-1][-1:] != '\n':
+ self.body.append('\n')
+
+ def format_menu_entry(self, name, node_name, desc):
+ if name == node_name:
+ s = '* %s:: ' % (name,)
+ else:
+ s = '* %s: %s. ' % (name, node_name)
+ offset = max((24, (len(name) + 4) % 78))
+ wdesc = '\n'.join(' ' * offset + l for l in
+ textwrap.wrap(desc, width=78-offset))
+ return s + wdesc.strip() + '\n'
+
+ def add_menu_entries(self, entries, reg=re.compile(r'\s+---?\s+')):
+ for entry in entries:
+ name = self.node_names[entry]
+ # special formatting for entries that are divided by an em-dash
+ parts = reg.split(name, 1)
+ if len(parts) == 2:
+ name, desc = parts
+ else:
+ desc = ''
+ name = self.escape_menu(name)
+ desc = self.escape(desc)
+ self.body.append(self.format_menu_entry(name, entry, desc))
+
+ def add_menu(self, node_name):
+ entries = self.node_menus[node_name]
+ if not entries:
+ return
+ self.body.append('\n@menu\n')
+ self.add_menu_entries(entries)
+ if not self.node_menus[entries[0]]:
+ self.body.append('\n@end menu\n')
+ return
+
+ def _add_detailed_menu(name):
+ entries = self.node_menus[name]
+ if not entries:
+ return
+ self.body.append('\n%s\n\n' % (self.escape(self.node_names[name],)))
+ self.add_menu_entries(entries)
+ for subentry in entries:
+ _add_detailed_menu(subentry)
+
+ if node_name == 'Top':
+ self.body.append('\n@detailmenu\n'
+ ' --- The Detailed Node Listing ---\n')
+ for entry in entries:
+ _add_detailed_menu(entry)
+ if node_name == 'Top':
+ self.body.append('\n@end detailmenu')
+ self.body.append('\n@end menu\n\n')
+
+ def tex_image_length(self, width_str):
+ match = re.match('(\d*\.?\d*)\s*(\S*)', width_str)
+ if not match:
+ # fallback
+ return width_str
+ res = width_str
+ amount, unit = match.groups()[:2]
+ if not unit or unit == "px":
+ # pixels: let TeX alone
+ return ''
+ elif unit == "%":
+ # a4paper: textwidth=418.25368pt
+ res = "%d.0pt" % (float(amount) * 4.1825368)
+ return res
+
+ def collect_indices(self):
+ def generate(content, collapsed):
+ ret = ['\n@menu\n']
+ for letter, entries in content:
+ for entry in entries:
+ if not entry[3]:
+ continue
+ name = self.escape_menu(entry[0])
+ sid = self.get_short_id('%s:%s' % (entry[2], entry[3]))
+ desc = self.escape_arg(entry[6])
+ me = self.format_menu_entry(name, sid, desc)
+ ret.append(me)
+ ret.append('@end menu\n')
+ return ''.join(ret)
+
+ indices_config = self.builder.config.texinfo_domain_indices
+ if indices_config:
+ for domain in self.builder.env.domains.itervalues():
+ for indexcls in domain.indices:
+ indexname = '%s-%s' % (domain.name, indexcls.name)
+ if isinstance(indices_config, list):
+ if indexname not in indices_config:
+ continue
+ content, collapsed = indexcls(domain).generate(
+ self.builder.docnames)
+ if not content:
+ continue
+ node_name = self.escape_id(indexcls.localname)
+ self.indices.append((node_name,
+ generate(content, collapsed)))
+ self.indices.append((_('Index'), '\n@printindex ge\n'))
+
+ # this is copied from the latex writer
+ # TODO: move this to sphinx.util
+
+ def collect_footnotes(self, node):
+ fnotes = {}
+ def footnotes_under(n):
+ if isinstance(n, nodes.footnote):
+ yield n
+ else:
+ for c in n.children:
+ if isinstance(c, addnodes.start_of_file):
+ continue
+ for k in footnotes_under(c):
+ yield k
+ for fn in footnotes_under(node):
+ num = fn.children[0].astext().strip()
+ fnotes[num] = [collected_footnote(*fn.children), False]
+ return fnotes
+
+ ## xref handling
+
+ def get_short_id(self, id):
+ """Return a shorter 'id' associated with ``id``."""
+ # Shorter ids improve paragraph filling in places
+ # that the id is hidden by Emacs.
+ try:
+ sid = self.short_ids[id]
+ except KeyError:
+ sid = hex(len(self.short_ids))[2:]
+ self.short_ids[id] = sid
+ return sid
+
+ def add_anchor(self, id, node):
+ if id.startswith('index-'):
+ return
+ id = self.curfilestack[-1] + ':' + id
+ eid = self.escape_id(id)
+ sid = self.get_short_id(id)
+ for id in (eid, sid):
+ if id not in self.written_ids:
+ self.body.append('@anchor{%s}' % id)
+ self.written_ids.add(id)
+
+ def add_xref(self, id, name, node):
+ name = self.escape_menu(name)
+ sid = self.get_short_id(id)
+ self.body.append('@pxref{%s,,%s}' % (sid, name))
+ self.referenced_ids.add(sid)
+ self.referenced_ids.add(self.escape_id(id))
+
+ ## Visiting
+
+ def visit_document(self, node):
+ self.footnotestack.append(self.collect_footnotes(node))
+ self.curfilestack.append(node.get('docname', ''))
+ if 'docname' in node:
+ self.add_anchor(':doc', node)
+ def depart_document(self, node):
+ self.footnotestack.pop()
+ self.curfilestack.pop()
+
+ def visit_Text(self, node):
+ s = self.escape(node.astext())
+ if self.escape_newlines:
+ s = s.replace('\n', ' ')
+ self.body.append(s)
+ def depart_Text(self, node):
+ pass
+
+ def visit_section(self, node):
+ self.next_section_ids.update(node.get('ids', []))
+ if not self.seen_title:
+ return
+ if self.previous_section:
+ self.add_menu(self.previous_section['node_name'])
+ else:
+ self.add_menu('Top')
+
+ node_name = node['node_name']
+ pointers = tuple([node_name] + self.rellinks[node_name])
+ self.body.append('\n@node %s,%s,%s,%s\n' % pointers)
+ for id in self.next_section_ids:
+ self.add_anchor(id, node)
+
+ self.next_section_ids.clear()
+ self.previous_section = node
+ self.section_level += 1
+
+ def depart_section(self, node):
+ self.section_level -= 1
+
+ headings = (
+ '@unnumbered',
+ '@chapter',
+ '@section',
+ '@subsection',
+ '@subsubsection',
+ )
+
+ rubrics = (
+ '@heading',
+ '@subheading',
+ '@subsubheading',
+ )
+
+ def visit_title(self, node):
+ if not self.seen_title:
+ self.seen_title = 1
+ raise nodes.SkipNode
+ parent = node.parent
+ if isinstance(parent, nodes.table):
+ return
+ if isinstance(parent, (nodes.Admonition, nodes.sidebar, nodes.topic)):
+ raise nodes.SkipNode
+ elif not isinstance(parent, nodes.section):
+ self.builder.warn(
+ 'encountered title node not in section, topic, table, '
+ 'admonition or sidebar', (self.curfilestack[-1], node.line))
+ self.visit_rubric(node)
+ else:
+ try:
+ heading = self.headings[self.section_level]
+ except IndexError:
+ heading = self.headings[-1]
+ self.body.append('\n%s ' % heading)
+
+ def depart_title(self, node):
+ self.body.append('\n\n')
+
+ def visit_rubric(self, node):
+ if len(node.children) == 1 and node.children[0].astext() in \
+ ('Footnotes', _('Footnotes')):
+ raise nodes.SkipNode
+ try:
+ rubric = self.rubrics[self.section_level]
+ except IndexError:
+ rubric = self.rubrics[-1]
+ self.body.append('\n%s ' % rubric)
+ def depart_rubric(self, node):
+ self.body.append('\n\n')
+
+ def visit_subtitle(self, node):
+ self.body.append('\n\n@noindent\n')
+ def depart_subtitle(self, node):
+ self.body.append('\n\n')
+
+ ## References
+
+ def visit_target(self, node):
+ # postpone the labels until after the sectioning command
+ parindex = node.parent.index(node)
+ try:
+ try:
+ next = node.parent[parindex+1]
+ except IndexError:
+ # last node in parent, look at next after parent
+ # (for section of equal level)
+ next = node.parent.parent[node.parent.parent.index(node.parent)]
+ if isinstance(next, nodes.section):
+ if node.get('refid'):
+ self.next_section_ids.add(node['refid'])
+ self.next_section_ids.update(node['ids'])
+ return
+ except IndexError:
+ pass
+ if 'refuri' in node:
+ return
+ if node.get('refid'):
+ self.add_anchor(node['refid'], node)
+ for id in node['ids']:
+ self.add_anchor(id, node)
+ def depart_target(self, node):
+ pass
+
+ def visit_reference(self, node):
+ # an xref's target is displayed in Info so we ignore a few
+ # cases for the sake of appearance
+ if isinstance(node.parent, (nodes.title, addnodes.desc_type,)):
+ return
+ if isinstance(node[0], nodes.image):
+ return
+ name = node.get('name', node.astext()).strip()
+ uri = node.get('refuri', '')
+ if not uri and node.get('refid'):
+ uri = '%' + self.curfilestack[-1] + '#' + node['refid']
+ if not uri:
+ return
+ if uri.startswith('mailto:'):
+ uri = self.escape_arg(uri[7:])
+ name = self.escape_arg(name)
+ if not name or name == uri:
+ self.body.append('@email{%s}' % uri)
+ else:
+ self.body.append('@email{%s,%s}' % (uri, name))
+ elif uri.startswith('#'):
+ # references to labels in the same document
+ id = self.curfilestack[-1] + ':' + uri[1:]
+ self.add_xref(id, name, node)
+ elif uri.startswith('%'):
+ # references to documents or labels inside documents
+ hashindex = uri.find('#')
+ if hashindex == -1:
+ # reference to the document
+ id = uri[1:] + '::doc'
+ else:
+ # reference to a label
+ id = uri[1:].replace('#', ':')
+ self.add_xref(id, name, node)
+ elif uri.startswith('info:'):
+ # references to an external Info file
+ uri = uri[5:].replace('_', ' ')
+ uri = self.escape_arg(uri)
+ id = 'Top'
+ if '#' in uri:
+ uri, id = uri.split('#', 1)
+ id = self.escape_id(id)
+ name = self.escape_menu(name)
+ if name == id:
+ self.body.append('@pxref{%s,,,%s}' % (id, uri))
+ else:
+ self.body.append('@pxref{%s,,%s,%s}' % (id, name, uri))
+ else:
+ uri = self.escape_arg(uri)
+ name = self.escape_arg(name)
+ show_urls = self.builder.config.texinfo_show_urls
+ if self.in_footnote:
+ show_urls = 'inline'
+ if not name or uri == name:
+ self.body.append('@indicateurl{%s}' % uri)
+ elif show_urls == 'inline':
+ self.body.append('@uref{%s,%s}' % (uri, name))
+ elif show_urls == 'no':
+ self.body.append('@uref{%s,,%s}' % (uri, name))
+ else:
+ self.body.append('%s@footnote{%s}' % (name, uri))
+ raise nodes.SkipNode
+
+ def depart_reference(self, node):
+ pass
+
+ def visit_title_reference(self, node):
+ text = node.astext()
+ self.body.append('@cite{%s}' % self.escape_arg(text))
+ raise nodes.SkipNode
+
+ ## Blocks
+
+ def visit_paragraph(self, node):
+ if 'continued' in node or isinstance(node.parent, nodes.compound):
+ self.body.append('\n@noindent')
+ self.body.append('\n')
+ def depart_paragraph(self, node):
+ self.body.append('\n')
+
+ def visit_block_quote(self, node):
+ self.body.append('\n@quotation\n')
+ def depart_block_quote(self, node):
+ self.ensure_eol()
+ self.body.append('@end quotation\n')
+
+ def visit_literal_block(self, node):
+ self.body.append('\n@example\n')
+ def depart_literal_block(self, node):
+ self.body.append('\n@end example\n\n'
+ '@noindent\n')
+
+ visit_doctest_block = visit_literal_block
+ depart_doctest_block = depart_literal_block
+
+ def visit_line_block(self, node):
+ if not isinstance(node.parent, nodes.line_block):
+ self.body.append('\n\n')
+ self.body.append('@display\n')
+ def depart_line_block(self, node):
+ self.body.append('@end display\n')
+ if not isinstance(node.parent, nodes.line_block):
+ self.body.append('\n\n')
+
+ def visit_line(self, node):
+ self.escape_newlines += 1
+ def depart_line(self, node):
+ self.body.append('@w{ }\n')
+ self.escape_newlines -= 1
+
+ ## Inline
+
+ def visit_strong(self, node):
+ self.body.append('@strong{')
+ def depart_strong(self, node):
+ self.body.append('}')
+
+ def visit_emphasis(self, node):
+ self.body.append('@emph{')
+ def depart_emphasis(self, node):
+ self.body.append('}')
+
+ def visit_literal(self, node):
+ self.body.append('@code{')
+ def depart_literal(self, node):
+ self.body.append('}')
+
+ def visit_superscript(self, node):
+ self.body.append('@w{^')
+ def depart_superscript(self, node):
+ self.body.append('}')
+
+ def visit_subscript(self, node):
+ self.body.append('@w{[')
+ def depart_subscript(self, node):
+ self.body.append(']}')
+
+ ## Footnotes
+
+ def visit_footnote(self, node):
+ raise nodes.SkipNode
+
+ def visit_collected_footnote(self, node):
+ self.in_footnote += 1
+ self.body.append('@footnote{')
+ def depart_collected_footnote(self, node):
+ self.body.append('}')
+ self.in_footnote -= 1
+
+ def visit_footnote_reference(self, node):
+ num = node.astext().strip()
+ try:
+ footnode, used = self.footnotestack[-1][num]
+ except (KeyError, IndexError):
+ raise nodes.SkipNode
+ # footnotes are repeated for each reference
+ footnode.walkabout(self)
+ raise nodes.SkipChildren
+
+ def visit_citation(self, node):
+ for id in node.get('ids'):
+ self.add_anchor(id, node)
+ def depart_citation(self, node):
+ pass
+
+ def visit_citation_reference(self, node):
+ self.body.append('@w{[')
+ def depart_citation_reference(self, node):
+ self.body.append(']}')
+
+ ## Lists
+
+ def visit_bullet_list(self, node):
+ bullet = node.get('bullet', '*')
+ self.body.append('\n\n@itemize %s\n' % bullet)
+ def depart_bullet_list(self, node):
+ self.ensure_eol()
+ self.body.append('@end itemize\n')
+
+ def visit_enumerated_list(self, node):
+ # doesn't support Roman numerals
+ enum = node.get('enumtype', 'arabic')
+ starters = {'arabic': '',
+ 'loweralpha': 'a',
+ 'upperalpha': 'A',}
+ start = node.get('start', starters.get(enum, ''))
+ self.body.append('\n\n@enumerate %s\n' % start)
+ def depart_enumerated_list(self, node):
+ self.ensure_eol()
+ self.body.append('@end enumerate\n')
+
+ def visit_list_item(self, node):
+ self.body.append('\n@item ')
+ def depart_list_item(self, node):
+ pass
+
+ ## Option List
+
+ def visit_option_list(self, node):
+ self.body.append('\n\n@table @option\n')
+ def depart_option_list(self, node):
+ self.ensure_eol()
+ self.body.append('@end table\n')
+
+ def visit_option_list_item(self, node):
+ pass
+ def depart_option_list_item(self, node):
+ pass
+
+ def visit_option_group(self, node):
+ self.at_item_x = '@item'
+ def depart_option_group(self, node):
+ pass
+
+ def visit_option(self, node):
+ self.body.append('\n%s ' % self.at_item_x)
+ self.at_item_x = '@itemx'
+ def depart_option(self, node):
+ pass
+
+ def visit_option_string(self, node):
+ pass
+ def depart_option_string(self, node):
+ pass
+
+ def visit_option_argument(self, node):
+ self.body.append(node.get('delimiter', ' '))
+ def depart_option_argument(self, node):
+ pass
+
+ def visit_description(self, node):
+ self.body.append('\n')
+ def depart_description(self, node):
+ pass
+
+ ## Definitions
+
+ def visit_definition_list(self, node):
+ self.body.append('\n\n@table @asis\n')
+ def depart_definition_list(self, node):
+ self.ensure_eol()
+ self.body.append('@end table\n')
+
+ def visit_definition_list_item(self, node):
+ self.at_item_x = '@item'
+ def depart_definition_list_item(self, node):
+ pass
+
+ def visit_term(self, node):
+ for id in node.get('ids'):
+ self.add_anchor(id, node)
+ # anchors and indexes need to go in front
+ for n in node[::]:
+ if isinstance(n, (addnodes.index, nodes.target)):
+ n.walkabout(self)
+ node.remove(n)
+ self.body.append('\n%s ' % self.at_item_x)
+ self.at_item_x = '@itemx'
+ def depart_term(self, node):
+ pass
+
+ def visit_termsep(self, node):
+ self.body.append('\n%s ' % self.at_item_x)
+ def depart_termsep(self, node):
+ pass
+
+ def visit_classifier(self, node):
+ self.body.append(' : ')
+ def depart_classifier(self, node):
+ pass
+
+ def visit_definition(self, node):
+ self.body.append('\n')
+ def depart_definition(self, node):
+ pass
+
+ ## Tables
+
+ def visit_table(self, node):
+ self.entry_sep = '@item'
+ def depart_table(self, node):
+ self.body.append('\n@end multitable\n\n')
+
+ def visit_tabular_col_spec(self, node):
+ pass
+ def depart_tabular_col_spec(self, node):
+ pass
+
+ def visit_colspec(self, node):
+ self.colwidths.append(node['colwidth'])
+ if len(self.colwidths) != self.n_cols:
+ return
+ self.body.append('\n\n@multitable ')
+ for i, n in enumerate(self.colwidths):
+ self.body.append('{%s} ' %('x' * (n+2)))
+ def depart_colspec(self, node):
+ pass
+
+ def visit_tgroup(self, node):
+ self.colwidths = []
+ self.n_cols = node['cols']
+ def depart_tgroup(self, node):
+ pass
+
+ def visit_thead(self, node):
+ self.entry_sep = '@headitem'
+ def depart_thead(self, node):
+ pass
+
+ def visit_tbody(self, node):
+ pass
+ def depart_tbody(self, node):
+ pass
+
+ def visit_row(self, node):
+ pass
+ def depart_row(self, node):
+ self.entry_sep = '@item'
+
+ def visit_entry(self, node):
+ self.body.append('\n%s\n' % self.entry_sep)
+ self.entry_sep = '@tab'
+ def depart_entry(self, node):
+ for i in xrange(node.get('morecols', 0)):
+ self.body.append('\n@tab\n')
+
+ ## Field Lists
+
+ def visit_field_list(self, node):
+ self.body.append('\n\n@itemize @w\n')
+ def depart_field_list(self, node):
+ self.ensure_eol()
+ self.body.append('@end itemize\n')
+
+ def visit_field(self, node):
+ if not isinstance(node.parent, nodes.field_list):
+ self.visit_field_list(node)
+ def depart_field(self, node):
+ if not isinstance(node.parent, nodes.field_list):
+ self.depart_field_list(node)
+
+ def visit_field_name(self, node):
+ self.body.append('\n@item ')
+ def depart_field_name(self, node):
+ self.body.append(': ')
+
+ def visit_field_body(self, node):
+ pass
+ def depart_field_body(self, node):
+ pass
+
+ ## Admonitions
+
+ def visit_admonition(self, node, name=''):
+ if not name:
+ name = self.escape(node[0].astext())
+ self.body.append('\n@cartouche\n'
+ '@quotation %s ' % name)
+ def depart_admonition(self, node):
+ self.ensure_eol()
+ self.body.append('@end quotation\n'
+ '@end cartouche\n')
+
+ def _make_visit_admonition(typ):
+ def visit(self, node):
+ self.visit_admonition(node, self.escape(_(typ)))
+ return visit
+
+ visit_attention = _make_visit_admonition('Attention')
+ depart_attention = depart_admonition
+ visit_caution = _make_visit_admonition('Caution')
+ depart_caution = depart_admonition
+ visit_danger = _make_visit_admonition('Danger')
+ depart_danger = depart_admonition
+ visit_error = _make_visit_admonition('Error')
+ depart_error = depart_admonition
+ visit_important = _make_visit_admonition('Important')
+ depart_important = depart_admonition
+ visit_note = _make_visit_admonition('Note')
+ depart_note = depart_admonition
+ visit_tip = _make_visit_admonition('Tip')
+ depart_tip = depart_admonition
+ visit_hint = _make_visit_admonition('Hint')
+ depart_hint = depart_admonition
+ visit_warning = _make_visit_admonition('Warning')
+ depart_warning = depart_admonition
+
+ ## Misc
+
+ def visit_docinfo(self, node):
+ raise nodes.SkipNode
+
+ def visit_generated(self, node):
+ raise nodes.SkipNode
+
+ def visit_header(self, node):
+ raise nodes.SkipNode
+
+ def visit_footer(self, node):
+ raise nodes.SkipNode
+
+ def visit_container(self, node):
+ pass
+ def depart_container(self, node):
+ pass
+
+ def visit_decoration(self, node):
+ pass
+ def depart_decoration(self, node):
+ pass
+
+ def visit_topic(self, node):
+ # ignore TOC's since we have to have a "menu" anyway
+ if 'contents' in node.get('classes', []):
+ raise nodes.SkipNode
+ title = node[0]
+ self.visit_rubric(title)
+ self.body.append('%s\n' % self.escape(title.astext()))
+ def depart_topic(self, node):
+ pass
+
+ def visit_transition(self, node):
+ self.body.append('\n\n@exdent @w{ %s}\n\n' % ('* ' * 30))
+ def depart_transition(self, node):
+ pass
+
+ def visit_attribution(self, node):
+ self.body.append('\n\n@center --- ')
+ def depart_attribution(self, node):
+ self.body.append('\n\n')
+
+ def visit_raw(self, node):
+ format = node.get('format', '').split()
+ if 'texinfo' in format or 'texi' in format:
+ self.body.append(node.astext())
+ raise nodes.SkipNode
+
+ def visit_figure(self, node):
+ self.body.append('\n\n@float Figure\n')
+ def depart_figure(self, node):
+ self.body.append('\n@end float\n\n')
+
+ def visit_caption(self, node):
+ if not isinstance(node.parent, nodes.figure):
+ self.builder.warn('caption not inside a figure.',
+ (self.curfilestack[-1], node.line))
+ return
+ self.body.append('\n@caption{')
+ def depart_caption(self, node):
+ if isinstance(node.parent, nodes.figure):
+ self.body.append('}\n')
+
+ def visit_image(self, node):
+ if node['uri'] in self.builder.images:
+ uri = self.builder.images[node['uri']]
+ else:
+ # missing image!
+ if self.ignore_missing_images:
+ return
+ uri = node['uri']
+ if uri.find('://') != -1:
+ # ignore remote images
+ return
+ name, ext = path.splitext(uri)
+ attrs = node.attributes
+ # width and height ignored in non-tex output
+ width = self.tex_image_length(attrs.get('width', ''))
+ height = self.tex_image_length(attrs.get('height', ''))
+ alt = self.escape_arg(attrs.get('alt', ''))
+ self.body.append('\n@image{%s,%s,%s,%s,%s}\n' %
+ (name, width, height, alt, ext[1:]))
+ def depart_image(self, node):
+ pass
+
+ def visit_compound(self, node):
+ pass
+ def depart_compound(self, node):
+ pass
+
+ def visit_sidebar(self, node):
+ self.visit_topic(node)
+ def depart_sidebar(self, node):
+ self.depart_topic(node)
+
+ def visit_label(self, node):
+ self.body.append('@w{(')
+ def depart_label(self, node):
+ self.body.append(')} ')
+
+ def visit_legend(self, node):
+ pass
+ def depart_legend(self, node):
+ pass
+
+ def visit_substitution_reference(self, node):
+ pass
+ def depart_substitution_reference(self, node):
+ pass
+
+ def visit_substitution_definition(self, node):
+ raise nodes.SkipNode
+
+ def visit_system_message(self, node):
+ self.body.append('\n@w{----------- System Message: %s/%s -----------} '
+ '(%s, line %s)\n' % (
+ node.get('type', '?'),
+ node.get('level', '?'),
+ self.escape(node.get('source', '?')),
+ node.get('line', '?')))
+ def depart_system_message(self, node):
+ pass
+
+ def visit_comment(self, node):
+ self.body.append('\n')
+ for line in node.astext().splitlines():
+ self.body.append('@c %s\n' % line)
+ raise nodes.SkipNode
+
+ def visit_problematic(self, node):
+ self.body.append('>')
+ def depart_problematic(self, node):
+ self.body.append('<')
+
+ def unimplemented_visit(self, node):
+ self.builder.warn("unimplemented node type: %r" % node,
+ (self.curfilestack[-1], node.line))
+
+ def unknown_visit(self, node):
+ self.builder.warn("unknown node type: %r" % node,
+ (self.curfilestack[-1], node.line))
+ def unknown_departure(self, node):
+ pass
+
+ ### Sphinx specific
+
+ def visit_productionlist(self, node):
+ self.visit_literal_block(None)
+ names = []
+ for production in node:
+ names.append(production['tokenname'])
+ maxlen = max(len(name) for name in names)
+ for production in node:
+ if production['tokenname']:
+ for id in production.get('ids'):
+ self.add_anchor(id, production)
+ s = production['tokenname'].ljust(maxlen) + ' ::='
+ lastname = production['tokenname']
+ else:
+ s = '%s ' % (' '*maxlen)
+ self.body.append(self.escape(s))
+ self.body.append(self.escape(production.astext() + '\n'))
+ self.depart_literal_block(None)
+ raise nodes.SkipNode
+
+ def visit_production(self, node):
+ pass
+ def depart_production(self, node):
+ pass
+
+ def visit_literal_emphasis(self, node):
+ self.body.append('@code{')
+ def depart_literal_emphasis(self, node):
+ self.body.append('}')
+
+ def visit_index(self, node):
+ # terminate the line but don't prevent paragraph breaks
+ if isinstance(node.parent, nodes.paragraph):
+ self.ensure_eol()
+ else:
+ self.body.append('\n')
+ for entry in node['entries']:
+ typ, text, tid, text2 = entry
+ text = self.escape_menu(text)
+ self.body.append('@geindex %s\n' % text)
+
+ def visit_refcount(self, node):
+ self.body.append('\n')
+ def depart_refcount(self, node):
+ self.body.append('\n')
+
+ def visit_versionmodified(self, node):
+ intro = versionlabels[node['type']] % node['version']
+ if node.children:
+ intro += ': '
+ else:
+ intro += '.'
+ self.body.append('\n%s' % self.escape(intro))
+ def depart_versionmodified(self, node):
+ self.body.append('\n')
+
+ def visit_start_of_file(self, node):
+ # add a document target
+ self.next_section_ids.add(':doc')
+ self.curfilestack.append(node['docname'])
+ self.footnotestack.append(self.collect_footnotes(node))
+ def depart_start_of_file(self, node):
+ self.curfilestack.pop()
+ self.footnotestack.pop()
+
+ def visit_centered(self, node):
+ txt = self.escape_arg(node.astext())
+ self.body.append('\n\n@center %s\n\n' % txt)
+ raise nodes.SkipNode
+
+ def visit_seealso(self, node):
+ self.visit_topic(node)
+ def depart_seealso(self, node):
+ self.depart_topic(node)
+
+ def visit_meta(self, node):
+ raise nodes.SkipNode
+
+ def visit_glossary(self, node):
+ pass
+ def depart_glossary(self, node):
+ pass
+
+ def visit_acks(self, node):
+ self.body.append('\n\n')
+ self.body.append(', '.join(n.astext()
+ for n in node.children[0].children) + '.')
+ self.body.append('\n\n')
+ raise nodes.SkipNode
+
+ def visit_highlightlang(self, node):
+ pass
+ def depart_highlightlang(self, node):
+ pass
+
+ ## Desc
+
+ def visit_desc(self, node):
+ self.at_deffnx = '@deffn'
+ def depart_desc(self, node):
+ self.ensure_eol()
+ self.body.append('@end deffn\n')
+
+ def visit_desc_signature(self, node):
+ objtype = node.parent['objtype']
+ if objtype != 'describe':
+ for id in node.get('ids'):
+ self.add_anchor(id, node)
+ # use the full name of the objtype for the category
+ try:
+ domain = self.builder.env.domains[node.parent['domain']]
+ primary = self.builder.config.primary_domain
+ name = domain.get_type_name(domain.object_types[objtype],
+ primary == domain.name)
+ except KeyError:
+ name = objtype
+ category = self.escape_arg(string.capwords(name))
+ self.body.append('\n%s {%s} ' % (self.at_deffnx, category))
+ self.at_deffnx = '@deffnx'
+ def depart_desc_signature(self, node):
+ self.body.append("\n")
+
+ def visit_desc_name(self, node):
+ pass
+ def depart_desc_name(self, node):
+ pass
+
+ def visit_desc_addname(self, node):
+ pass
+ def depart_desc_addname(self, node):
+ pass
+
+ def visit_desc_type(self, node):
+ pass
+ def depart_desc_type(self, node):
+ pass
+
+ def visit_desc_returns(self, node):
+ self.body.append(' -> ')
+ def depart_desc_returns(self, node):
+ pass
+
+ def visit_desc_parameterlist(self, node):
+ self.body.append(' (')
+ self.first_param = 1
+ def depart_desc_parameterlist(self, node):
+ self.body.append(')')
+
+ def visit_desc_parameter(self, node):
+ if not self.first_param:
+ self.body.append(', ')
+ else:
+ self.first_param = 0
+ text = self.escape(node.astext())
+ # replace no-break spaces with normal ones
+ text = text.replace(u' ', '@w{ }')
+ self.body.append(text)
+ raise nodes.SkipNode
+
+ def visit_desc_optional(self, node):
+ self.body.append('[')
+ def depart_desc_optional(self, node):
+ self.body.append(']')
+
+ def visit_desc_annotation(self, node):
+ raise nodes.SkipNode
+
+ def visit_desc_content(self, node):
+ pass
+ def depart_desc_content(self, node):
+ pass
+
+ def visit_inline(self, node):
+ pass
+ def depart_inline(self, node):
+ pass
+
+ def visit_abbreviation(self, node):
+ abbr = node.astext()
+ self.body.append('@abbr{')
+ if node.hasattr('explanation') and abbr not in self.handled_abbrs:
+ self.context.append(',%s}' % self.escape_arg(node['explanation']))
+ self.handled_abbrs.add(abbr)
+ else:
+ self.context.append('}')
+ def depart_abbreviation(self, node):
+ self.body.append(self.context.pop())
+
+ def visit_download_reference(self, node):
+ pass
+ def depart_download_reference(self, node):
+ pass
+
+ def visit_hlist(self, node):
+ self.visit_bullet_list(node)
+ def depart_hlist(self, node):
+ self.depart_bullet_list(node)
+
+ def visit_hlistcol(self, node):
+ pass
+ def depart_hlistcol(self, node):
+ pass
+
+ def visit_pending_xref(self, node):
+ pass
+ def depart_pending_xref(self, node):
+ pass
diff --git a/sphinx/writers/text.py b/sphinx/writers/text.py
index b82bfcdb..5d6f49ec 100644
--- a/sphinx/writers/text.py
+++ b/sphinx/writers/text.py
@@ -8,7 +8,7 @@
:copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
-
+import os
import re
import textwrap
@@ -59,6 +59,14 @@ class TextTranslator(nodes.NodeVisitor):
def __init__(self, document, builder):
nodes.NodeVisitor.__init__(self, document)
+ newlines = builder.config.text_newlines
+ if newlines == 'windows':
+ self.nl = '\r\n'
+ elif newlines == 'native':
+ self.nl = os.linesep
+ else:
+ self.nl = '\n'
+ self.sectionchars = builder.config.text_sectionchars
self.states = [[]]
self.stateindent = [0]
self.list_counter = []
@@ -105,9 +113,9 @@ class TextTranslator(nodes.NodeVisitor):
self.new_state(0)
def depart_document(self, node):
self.end_state()
- self.body = '\n'.join(line and (' '*indent + line)
- for indent, lines in self.states[0]
- for line in lines)
+ self.body = self.nl.join(line and (' '*indent + line)
+ for indent, lines in self.states[0]
+ for line in lines)
# XXX header/footer?
def visit_highlightlang(self, node):
@@ -232,7 +240,7 @@ class TextTranslator(nodes.NodeVisitor):
def visit_desc_content(self, node):
self.new_state()
- self.add_text('\n')
+ self.add_text(self.nl)
def depart_desc_content(self, node):
self.end_state()
@@ -258,7 +266,7 @@ class TextTranslator(nodes.NodeVisitor):
lastname = production['tokenname']
else:
self.add_text('%s ' % (' '*len(lastname)))
- self.add_text(production.astext() + '\n')
+ self.add_text(production.astext() + self.nl)
self.end_state(wrap=False)
raise nodes.SkipNode
@@ -358,7 +366,7 @@ class TextTranslator(nodes.NodeVisitor):
'not implemented.')
self.new_state(0)
def depart_entry(self, node):
- text = '\n'.join('\n'.join(x[1]) for x in self.states.pop())
+ text = self.nl.join(self.nl.join(x[1]) for x in self.states.pop())
self.stateindent.pop()
self.table[-1].append(text)
@@ -394,10 +402,10 @@ class TextTranslator(nodes.NodeVisitor):
for width in realwidths:
out.append(char * (width+2))
out.append('+')
- self.add_text(''.join(out) + '\n')
+ self.add_text(''.join(out) + self.nl)
def writerow(row):
- lines = map(None, *row)
+ lines = zip(*row)
for line in lines:
out = ['|']
for i, cell in enumerate(line):
@@ -406,7 +414,7 @@ class TextTranslator(nodes.NodeVisitor):
else:
out.append(' ' * (realwidths[i] + 2))
out.append('|')
- self.add_text(''.join(out) + '\n')
+ self.add_text(''.join(out) + self.nl)
for i, row in enumerate(fmted_rows):
if separator and i == separator:
@@ -482,6 +490,10 @@ class TextTranslator(nodes.NodeVisitor):
if not self._li_has_classifier:
self.end_state(end=None)
+ def visit_termsep(self, node):
+ self.add_text(', ')
+ raise nodes.SkipNode
+
def visit_classifier(self, node):
self.add_text(' : ')
def depart_classifier(self, node):
@@ -658,9 +670,9 @@ class TextTranslator(nodes.NodeVisitor):
self.add_text('*')
def visit_literal(self, node):
- self.add_text('``')
+ self.add_text('"')
def depart_literal(self, node):
- self.add_text('``')
+ self.add_text('"')
def visit_subscript(self, node):
self.add_text('_')
diff --git a/sphinx/writers/websupport.py b/sphinx/writers/websupport.py
new file mode 100644
index 00000000..f75cd47b
--- /dev/null
+++ b/sphinx/writers/websupport.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.writers.websupport
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ sphinx.websupport writer that adds comment-related annotations.
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from sphinx.writers.html import HTMLTranslator
+from sphinx.util.websupport import is_commentable
+
+
+class WebSupportTranslator(HTMLTranslator):
+ """
+ Our custom HTML translator.
+ """
+
+ def __init__(self, builder, *args, **kwargs):
+ HTMLTranslator.__init__(self, builder, *args, **kwargs)
+ self.comment_class = 'sphinx-has-comment'
+
+ def dispatch_visit(self, node):
+ if is_commentable(node):
+ self.handle_visit_commentable(node)
+ HTMLTranslator.dispatch_visit(self, node)
+
+ def handle_visit_commentable(self, node):
+ # We will place the node in the HTML id attribute. If the node
+ # already has an id (for indexing purposes) put an empty
+ # span with the existing id directly before this node's HTML.
+ self.add_db_node(node)
+ if node.attributes['ids']:
+ self.body.append('<span id="%s"></span>'
+ % node.attributes['ids'][0])
+ node.attributes['ids'] = ['s%s' % node.uid]
+ node.attributes['classes'].append(self.comment_class)
+
+ def add_db_node(self, node):
+ storage = self.builder.storage
+ if not storage.has_node(node.uid):
+ storage.add_node(id=node.uid,
+ document=self.builder.cur_docname,
+ source=node.rawsource or node.astext())