summaryrefslogtreecommitdiff
path: root/sphinx
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2011-01-07 19:04:53 +0100
committerGeorg Brandl <georg@python.org>2011-01-07 19:04:53 +0100
commit272025df2e6e392dba2f535127ae41bf3ead6562 (patch)
tree64ab96a609f758025efa124c99ec4b63366676d0 /sphinx
parent75ae889c2da945ae3478c003ba7b58526150013d (diff)
parent554c7dd64f6aca38be6e1d26bb2cf4388f46083d (diff)
downloadsphinx-272025df2e6e392dba2f535127ae41bf3ead6562.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.py263
-rw-r--r--sphinx/application.py31
-rw-r--r--sphinx/builders/__init__.py47
-rw-r--r--sphinx/builders/changes.py3
-rw-r--r--sphinx/builders/devhelp.py1
-rw-r--r--sphinx/builders/epub.py86
-rw-r--r--sphinx/builders/html.py95
-rw-r--r--sphinx/builders/htmlhelp.py3
-rw-r--r--sphinx/builders/intl.py110
-rw-r--r--sphinx/builders/linkcheck.py179
-rw-r--r--sphinx/builders/qthelp.py14
-rw-r--r--sphinx/builders/texinfo.py239
-rw-r--r--sphinx/builders/versioning.py72
-rw-r--r--sphinx/builders/websupport.py160
-rw-r--r--sphinx/config.py67
-rw-r--r--sphinx/directives/code.py24
-rw-r--r--sphinx/directives/other.py66
-rw-r--r--sphinx/domains/__init__.py29
-rw-r--r--sphinx/domains/c.py2
-rw-r--r--sphinx/domains/cpp.py42
-rw-r--r--sphinx/domains/javascript.py4
-rw-r--r--sphinx/domains/python.py26
-rw-r--r--sphinx/domains/rst.py9
-rw-r--r--sphinx/domains/std.py122
-rw-r--r--sphinx/environment.py308
-rw-r--r--sphinx/ext/autodoc.py239
-rw-r--r--sphinx/ext/autosummary/__init__.py28
-rw-r--r--sphinx/ext/autosummary/generate.py15
-rw-r--r--sphinx/ext/coverage.py27
-rw-r--r--sphinx/ext/doctest.py87
-rw-r--r--sphinx/ext/graphviz.py59
-rw-r--r--sphinx/ext/inheritance_diagram.py19
-rw-r--r--sphinx/ext/intersphinx.py24
-rw-r--r--sphinx/ext/mathbase.py42
-rw-r--r--sphinx/ext/mathjax.py67
-rw-r--r--sphinx/ext/oldcmarkup.py1
-rw-r--r--sphinx/ext/pngmath.py6
-rw-r--r--sphinx/ext/todo.py3
-rw-r--r--sphinx/ext/viewcode.py6
-rw-r--r--sphinx/highlighting.py26
-rw-r--r--sphinx/jinja2glue.py6
-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 -> 13015 bytes
-rw-r--r--sphinx/locale/bn/LC_MESSAGES/sphinx.po702
-rw-r--r--sphinx/locale/ca/LC_MESSAGES/sphinx.mobin9378 -> 9378 bytes
-rw-r--r--sphinx/locale/ca/LC_MESSAGES/sphinx.po238
-rw-r--r--sphinx/locale/cs/LC_MESSAGES/sphinx.mobin9067 -> 9067 bytes
-rw-r--r--sphinx/locale/cs/LC_MESSAGES/sphinx.po238
-rw-r--r--sphinx/locale/da/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/da/LC_MESSAGES/sphinx.mobin8668 -> 9469 bytes
-rw-r--r--sphinx/locale/da/LC_MESSAGES/sphinx.po667
-rw-r--r--sphinx/locale/de/LC_MESSAGES/sphinx.mobin10037 -> 10037 bytes
-rw-r--r--sphinx/locale/de/LC_MESSAGES/sphinx.po238
-rw-r--r--sphinx/locale/es/LC_MESSAGES/sphinx.mobin8121 -> 8121 bytes
-rw-r--r--sphinx/locale/es/LC_MESSAGES/sphinx.po238
-rw-r--r--sphinx/locale/fa/LC_MESSAGES/sphinx.js1
-rw-r--r--sphinx/locale/fa/LC_MESSAGES/sphinx.mobin0 -> 9545 bytes
-rw-r--r--sphinx/locale/fa/LC_MESSAGES/sphinx.po596
-rw-r--r--sphinx/locale/fi/LC_MESSAGES/sphinx.mobin9102 -> 9144 bytes
-rw-r--r--sphinx/locale/fi/LC_MESSAGES/sphinx.po235
-rw-r--r--sphinx/locale/fr/LC_MESSAGES/sphinx.mobin8938 -> 8938 bytes
-rw-r--r--sphinx/locale/fr/LC_MESSAGES/sphinx.po249
-rw-r--r--sphinx/locale/hr/LC_MESSAGES/sphinx.mobin9195 -> 9195 bytes
-rw-r--r--sphinx/locale/hr/LC_MESSAGES/sphinx.po249
-rw-r--r--sphinx/locale/it/LC_MESSAGES/sphinx.mobin9461 -> 9461 bytes
-rw-r--r--sphinx/locale/it/LC_MESSAGES/sphinx.po238
-rw-r--r--sphinx/locale/ja/LC_MESSAGES/sphinx.js2
-rw-r--r--sphinx/locale/ja/LC_MESSAGES/sphinx.mobin9950 -> 10110 bytes
-rw-r--r--sphinx/locale/ja/LC_MESSAGES/sphinx.po284
-rw-r--r--sphinx/locale/lt/LC_MESSAGES/sphinx.mobin10244 -> 10287 bytes
-rw-r--r--sphinx/locale/lt/LC_MESSAGES/sphinx.po244
-rw-r--r--sphinx/locale/nl/LC_MESSAGES/sphinx.mobin9352 -> 9352 bytes
-rw-r--r--sphinx/locale/nl/LC_MESSAGES/sphinx.po322
-rw-r--r--sphinx/locale/pl/LC_MESSAGES/sphinx.mobin9370 -> 11024 bytes
-rw-r--r--sphinx/locale/pl/LC_MESSAGES/sphinx.po345
-rw-r--r--sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mobin10252 -> 10252 bytes
-rw-r--r--sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po317
-rw-r--r--sphinx/locale/ru/LC_MESSAGES/sphinx.mobin11308 -> 11308 bytes
-rw-r--r--sphinx/locale/ru/LC_MESSAGES/sphinx.po238
-rw-r--r--sphinx/locale/sl/LC_MESSAGES/sphinx.mobin9146 -> 9146 bytes
-rw-r--r--sphinx/locale/sl/LC_MESSAGES/sphinx.po238
-rw-r--r--sphinx/locale/sphinx.pot236
-rw-r--r--sphinx/locale/sv/LC_MESSAGES/sphinx.js1
-rw-r--r--sphinx/locale/sv/LC_MESSAGES/sphinx.mobin0 -> 9509 bytes
-rw-r--r--sphinx/locale/sv/LC_MESSAGES/sphinx.po780
-rw-r--r--sphinx/locale/tr/LC_MESSAGES/sphinx.mobin10111 -> 10111 bytes
-rw-r--r--sphinx/locale/tr/LC_MESSAGES/sphinx.po306
-rw-r--r--sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mobin10983 -> 10983 bytes
-rw-r--r--sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po239
-rw-r--r--sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mobin8755 -> 8755 bytes
-rw-r--r--sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po238
-rw-r--r--sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mobin8934 -> 8934 bytes
-rw-r--r--sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po241
-rw-r--r--sphinx/pycode/__init__.py6
-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.py146
-rw-r--r--sphinx/roles.py48
-rw-r--r--sphinx/search/__init__.py (renamed from sphinx/search.py)154
-rw-r--r--sphinx/search/en.py242
-rw-r--r--sphinx/search/ja.py273
-rw-r--r--sphinx/setup_command.py3
-rw-r--r--sphinx/texinputs/sphinx.sty17
-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/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)199
-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/default/static/sidebar.js3
-rw-r--r--sphinx/themes/epub/epub-cover.html24
-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/theming.py25
-rw-r--r--sphinx/util/__init__.py83
-rw-r--r--sphinx/util/docstrings.py32
-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.py66
-rw-r--r--sphinx/util/osutil.py16
-rw-r--r--sphinx/util/png.py14
-rw-r--r--sphinx/util/pycompat.py101
-rw-r--r--sphinx/util/websupport.py12
-rw-r--r--sphinx/versioning.py128
-rw-r--r--sphinx/websupport/__init__.py455
-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.py65
-rw-r--r--sphinx/writers/latex.py90
-rw-r--r--sphinx/writers/manpage.py17
-rw-r--r--sphinx/writers/texinfo.py1256
-rw-r--r--sphinx/writers/text.py36
-rw-r--r--sphinx/writers/websupport.py46
165 files changed, 12740 insertions, 4352 deletions
diff --git a/sphinx/__init__.py b/sphinx/__init__.py
index 699bafee..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.6+'
-__released__ = '1.0.6' # 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..ca142098
--- /dev/null
+++ b/sphinx/apidoc.py
@@ -0,0 +1,263 @@
+# -*- 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>).
+
+ :copyright: 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 (they 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.
+ """
+ # check if the base directory is a package and get is name
+ if INITPY in os.listdir(rootpath):
+ package_name = path.abspath(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):
+ """
+ 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..840fc46b 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
@@ -490,6 +490,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 +503,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 +514,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..33954033 100644
--- a/sphinx/builders/__init__.py
+++ b/sphinx/builders/__init__.py
@@ -55,16 +55,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 +70,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 +126,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 +193,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 +298,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 +326,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': ('intl', '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 366587b6..ddc6fb5c 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
@@ -229,12 +237,12 @@ class EpubBuilder(StandaloneHTMLBuilder):
})
def fix_fragment(self, prefix, fragment):
- """Return a href/id attribute with colons replaced by hyphens.
- """
+ """Return a href/id attribute with colons replaced by hyphens."""
return prefix + fragment.replace(':', '-')
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.
"""
@@ -253,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
@@ -268,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.
"""
@@ -276,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'])
@@ -388,7 +397,6 @@ class EpubBuilder(StandaloneHTMLBuilder):
'media_type': self.esc(_media_types[ext])
})
self.files.append(filename)
- projectfiles = '\n'.join(projectfiles)
# spine
spine = []
@@ -400,12 +408,38 @@ class EpubBuilder(StandaloneHTMLBuilder):
spine.append(_spine_template % {
'idref': self.esc(self.make_id(item['refuri']))
})
+
+ # 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()
@@ -422,6 +456,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)
@@ -431,8 +466,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 = []
@@ -472,8 +507,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
@@ -498,8 +533,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'] \
@@ -509,7 +544,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/html.py b/sphinx/builders/html.py
index 8ff628c9..6aa4fda4 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,
@@ -536,13 +544,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 +568,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 +602,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 +626,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 +753,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 +770,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 +784,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 +944,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 +969,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 +992,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 +1005,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 +1025,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 +1043,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 2c9fe530..9227a6e6 100644
--- a/sphinx/builders/htmlhelp.py
+++ b/sphinx/builders/htmlhelp.py
@@ -258,7 +258,8 @@ class HTMLHelpBuilder(StandaloneHTMLBuilder):
def write_index(title, refs, subitems):
def write_param(name, value):
item = ' <param name="%s" value="%s">\n' % (name, value)
- f.write(item.encode(self.encoding, 'xmlcharrefreplace'))
+ f.write(item.encode(self.encoding, 'xmlcharrefreplace')
+ .decode(self.encoding))
title = cgi.escape(title)
f.write('<LI> <OBJECT type="text/sitemap">\n')
write_param('Keyword', title)
diff --git a/sphinx/builders/intl.py b/sphinx/builders/intl.py
new file mode 100644
index 00000000..447a20cf
--- /dev/null
+++ b/sphinx/builders/intl.py
@@ -0,0 +1,110 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.builders.intl
+ ~~~~~~~~~~~~~~~~~~~~
+
+ 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 docutils import nodes
+
+from sphinx.builders import Builder
+from sphinx.builders.versioning import VersioningBuilderMixin
+from sphinx.util.nodes import extract_messages
+from sphinx.util.osutil import SEP, copyfile
+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 I18nBuilder(Builder, VersioningBuilderMixin):
+ """
+ General i18n builder.
+ """
+ name = 'i18n'
+
+ def init(self):
+ Builder.init(self)
+ VersioningBuilderMixin.init(self)
+ self.catalogs = defaultdict(dict)
+
+ 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]]
+
+ self.handle_versioning(docname, doctree, nodes.TextElement)
+
+ for node, msg in extract_messages(doctree):
+ catalog.setdefault(node.uid, msg)
+
+ def finish(self):
+ Builder.finish(self)
+ VersioningBuilderMixin.finish(self)
+
+
+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, messages 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 uid, message in messages.iteritems():
+ # message contains *one* line of text ready for translation
+ message = message.replace(u'\\', ur'\\'). \
+ replace(u'"', ur'\"')
+ pomsg = u'#%s\nmsgid "%s"\nmsgstr ""\n\n' % (uid, message)
+ pofile.write(pomsg)
+ finally:
+ pofile.close()
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..52e32362
--- /dev/null
+++ b/sphinx/builders/texinfo.py
@@ -0,0 +1,239 @@
+# -*- 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 = ['application/pdf', 'image/png',
+ 'image/gif', 'image/jpeg']
+
+ 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)
+
+ # Add an Index section
+ if self.config.texinfo_domain_indices:
+ doctree.append(
+ nodes.section('',
+ nodes.title(_("Index"),
+ nodes.Text(_('Index'),
+ _('Index'))),
+ nodes.raw('@printindex ge\n',
+ nodes.Text('@printindex ge\n',
+ '@printindex ge\n'),
+ format="texinfo")))
+ 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/versioning.py b/sphinx/builders/versioning.py
new file mode 100644
index 00000000..8c6438c7
--- /dev/null
+++ b/sphinx/builders/versioning.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.builders.versioning
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+import os
+import cPickle as pickle
+
+from docutils.utils import Reporter
+
+from sphinx.util.osutil import copyfile
+from sphinx.environment import WarningStream
+from sphinx.versioning import add_uids, merge_doctrees
+
+
+class VersioningBuilderMixin(object):
+ def walk_doctree_files(self):
+ for root, dirs, files in os.walk(self.doctreedir):
+ for fn in files:
+ yield os.path.join(root, fn)
+
+ def init(self):
+ for fp in self.walk_doctree_files():
+ if fp.endswith('.doctree'):
+ copyfile(fp, fp + '.old')
+
+ def get_old_doctree(self, docname):
+ fp = self.env.doc2path(docname, self.doctreedir, '.doctree.old')
+ try:
+ f = open(fp, 'rb')
+ try:
+ doctree = pickle.load(f)
+ finally:
+ f.close()
+ except IOError:
+ return None
+ doctree.settings.env = self.env
+ doctree.reporter = Reporter(self.env.doc2path(docname), 2, 5,
+ stream=WarningStream(self.env._warnfunc))
+ return doctree
+
+ def resave_doctree(self, docname, doctree):
+ reporter = doctree.reporter
+ doctree.reporter = None
+ doctree.settings.warning_stream = None
+ doctree.settings.env = None
+ doctree.settings.record_dependencies = None
+
+ fp = self.env.doc2path(docname, self.doctreedir, '.doctree')
+ f = open(fp, 'wb')
+ try:
+ pickle.dump(doctree, f, pickle.HIGHEST_PROTOCOL)
+ finally:
+ f.close()
+
+ doctree.reporter = reporter
+
+ def handle_versioning(self, docname, doctree, condition):
+ old_doctree = self.get_old_doctree(docname)
+ if old_doctree:
+ list(merge_doctrees(old_doctree, doctree, condition))
+ else:
+ list(add_uids(doctree, condition))
+ self.resave_doctree(docname, doctree)
+
+ def finish(self):
+ for fp in self.walk_doctree_files():
+ if fp.endswith('.doctree.old'):
+ os.remove(fp)
diff --git a/sphinx/builders/websupport.py b/sphinx/builders/websupport.py
new file mode 100644
index 00000000..5165bc19
--- /dev/null
+++ b/sphinx/builders/websupport.py
@@ -0,0 +1,160 @@
+# -*- 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.util.websupport import is_commentable
+from sphinx.builders.html import PickleHTMLBuilder
+from sphinx.builders.versioning import VersioningBuilderMixin
+from sphinx.writers.websupport import WebSupportTranslator
+
+
+class WebSupportBuilder(PickleHTMLBuilder, VersioningBuilderMixin):
+ """
+ Builds documents for the web support package.
+ """
+ name = 'websupport'
+
+ def init(self):
+ PickleHTMLBuilder.init(self)
+ VersioningBuilderMixin.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.handle_versioning(docname, doctree, is_commentable)
+
+ 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)
+ VersioningBuilderMixin.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/config.py b/sphinx/config.py
index 19e29919..90c4b562 100644
--- a/sphinx/config.py
+++ b/sphinx/config.py
@@ -11,16 +11,23 @@
import os
import re
+import sys
from os import path
from sphinx.errors import ConfigError
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)
@@ -69,7 +76,7 @@ class Config(object):
html_theme = ('default', 'html'),
html_theme_path = ([], 'html'),
html_theme_options = ({}, 'html'),
- html_title = (lambda self: '%s v%s documentation' %
+ html_title = (lambda self: '%s %s documentation' %
(self.project, self.release),
'html'),
html_short_title = (lambda self: self.html_title, 'html'),
@@ -85,7 +92,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 +106,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 +129,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 +143,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 +156,23 @@ 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),
+
+ # linkcheck options
+ linkcheck_ignore = ([], None),
+ linkcheck_timeout = (None, None),
+ linkcheck_workers = (5, None),
)
def __init__(self, dirname, filename, overrides, tags):
@@ -163,12 +185,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 +222,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 bfde48e5..99fb3502 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
@@ -94,23 +92,11 @@ class LiteralInclude(Directive):
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 +106,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 +123,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(
@@ -179,14 +165,14 @@ 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)
+ env.note_dependency(rel_filename)
return [retnode]
diff --git a/sphinx/directives/other.py b/sphinx/directives/other.py
index f59a29e1..246d6403 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,16 @@ 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
+ rel_filename, filename = env.relfn2path(self.arguments[0])
+ self.arguments[0] = filename
return BaseInclude.run(self)
@@ -400,7 +369,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 b16e6109..d6faa127 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
@@ -158,8 +157,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:
@@ -175,8 +173,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:
@@ -195,21 +192,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
@@ -225,8 +217,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
@@ -245,9 +236,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 c7074fb8..4e40dde7 100644
--- a/sphinx/domains/cpp.py
+++ b/sphinx/domains/cpp.py
@@ -28,6 +28,7 @@ _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*\]')
_operator_re = re.compile(r'''(?x)
\[\s*\]
| \(\s*\)
@@ -109,7 +110,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 +132,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 +159,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):
@@ -269,6 +274,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):
@@ -558,6 +579,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:
@@ -829,7 +852,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 +1000,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
diff --git a/sphinx/domains/javascript.py b/sphinx/domains/javascript.py
index 4ad84dd3..57cee8f9 100644
--- a/sphinx/domains/javascript.py
+++ b/sphinx/domains/javascript.py
@@ -96,7 +96,7 @@ class JSObject(ObjectDescription):
indextext = self.get_index_text(objectname, name_obj)
if indextext:
self.indexnode['entries'].append(('single', indextext,
- fullname, fullname))
+ fullname, ''))
def get_index_text(self, objectname, name_obj):
name, obj = name_obj
@@ -130,7 +130,7 @@ class JSCallable(JSObject):
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 d2242cdd..aa3375df 100644
--- a/sphinx/domains/python.py
+++ b/sphinx/domains/python.py
@@ -110,22 +110,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
@@ -195,9 +194,7 @@ class PyObject(ObjectDescription):
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 +221,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)
@@ -402,7 +399,7 @@ class PyModule(Directive):
if not noindex:
indextext = _('%s (module)') % modname
inode = addnodes.index(entries=[('single', indextext,
- 'module-' + modname, modname)])
+ 'module-' + modname, '')])
ret.append(inode)
return ret
@@ -576,9 +573,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 0625a451..7dcec616 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 (source, lineno, line) in self.content.xitems():
+ # 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 2c0dc99e..2236c53a 100644
--- a/sphinx/environment.py
+++ b/sphinx/environment.py
@@ -11,11 +11,13 @@
import re
import os
+import sys
import time
import types
import codecs
import imghdr
import string
+import posixpath
import unicodedata
import cPickle as pickle
from os import path
@@ -25,9 +27,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 +37,16 @@ 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.errors import SphinxError, ExtensionError
-from sphinx.locale import _
+from sphinx.locale import _, init as init_locale
+fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding()
orig_role_function = roles.role
orig_directive_function = directives.directive
@@ -81,7 +84,7 @@ class WarningStream(object):
self.warnfunc = warnfunc
def write(self, text):
if text.strip():
- self.warnfunc(text, None, '')
+ self.warnfunc(text.strip(), None, '')
class NoUri(Exception):
@@ -183,12 +186,50 @@ class CitationReferences(Transform):
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 = posixpath.splitext(source[len(env.srcdir):].lstrip('/'))[0]
+ section = docname.split(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 +293,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)
@@ -376,25 +417,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 +469,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 +519,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 +555,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 +659,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 +701,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 +724,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()
@@ -754,18 +820,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 +842,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 +868,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 +892,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 +904,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 +990,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 +1028,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'):
@@ -1087,7 +1135,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 +1162,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 +1183,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.
@@ -1395,46 +1445,54 @@ 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.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
@@ -1443,56 +1501,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
@@ -1535,8 +1587,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()
@@ -1595,7 +1648,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:
diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py
index d184342e..044a181f 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
@@ -28,15 +28,10 @@ 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.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 +86,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 +135,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 +161,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 +264,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 +274,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 +311,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 +340,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 +357,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 +418,15 @@ 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 +445,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 +481,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 +525,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,9 +553,13 @@ class Documenter(object):
# if isattr is True, the member is documented as an attribute
isattr = False
- if want_all and membername.startswith('_'):
+ if want_all and membername.startswith('__') and \
+ membername.endswith('__') and len(membername) > 4:
+ # special __methods__
+ skip = not self.options.special_members
+ elif want_all and membername.startswith('_'):
# ignore members whose name starts with _ by default
- skip = True
+ skip = not self.options.private_members
elif (namespace, membername) in attr_docs:
# keep documented attributes
skip = False
@@ -583,9 +587,10 @@ class Documenter(object):
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 +648,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 +732,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 +839,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,8 +899,8 @@ 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
- return None
+ # cannot introspect arguments of a C function or method
+ pass
try:
argspec = inspect.getargspec(self.object)
except TypeError:
@@ -881,11 +933,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)
@@ -937,7 +990,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 +1011,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 +1047,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)
@@ -1010,7 +1066,7 @@ class DataDocumenter(ModuleLevelDocumenter):
pass
-class MethodDocumenter(ClassLevelDocumenter):
+class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter):
"""
Specialized Documenter subclass for methods (normal, static and class).
"""
@@ -1023,24 +1079,38 @@ 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 \
@@ -1134,8 +1204,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
@@ -1225,6 +1297,7 @@ 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')
diff --git a/sphinx/ext/autosummary/__init__.py b/sphinx/ext/autosummary/__init__.py
index f75307e0..e0271697 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
@@ -135,8 +134,8 @@ except AttributeError:
isgetsetdescriptor = ismemberdescriptor
def get_documenter(obj):
- """
- Get an autodoc.Documenter class suitable for documenting the given object
+ """Get an autodoc.Documenter class suitable for documenting the given
+ object.
"""
import sphinx.ext.autodoc as autodoc
@@ -218,8 +217,7 @@ 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
@@ -287,8 +285,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`.
"""
@@ -351,8 +348,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*.
@@ -377,8 +373,7 @@ def limited_join(sep, items, max_chars=30, overflow_marker="..."):
# -- Importing items -----------------------------------------------------------
def import_by_name(name, prefixes=[None]):
- """
- Import a Python object that has the given *name*, under one of the
+ """Import a Python object that has the given *name*, under one of the
*prefixes*. The first name that succeeds is used.
"""
tried = []
@@ -435,8 +430,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*'.
@@ -487,12 +481,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 f8230216..389d55a5 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
diff --git a/sphinx/ext/coverage.py b/sphinx/ext/coverage.py
index 8d58b671..e3e3a65e 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:
@@ -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..5fd8d114 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,42 @@ 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
- 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
+
+ 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
+ # 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
+ 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 +407,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 +422,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 c83eaa21..0b8e050b 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
@@ -46,23 +47,45 @@ 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,
}
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']
+ node['inline'] = 'inline' in self.options
return [node]
@@ -76,6 +99,7 @@ class GraphvizSimple(Directive):
final_argument_whitespace = False
option_spec = {
'alt': directives.unchanged,
+ 'inline': directives.flag,
}
def run(self):
@@ -85,14 +109,14 @@ class GraphvizSimple(Directive):
node['options'] = []
if 'alt' in self.options:
node['alt'] = self.options['alt']
+ 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'):
@@ -193,7 +217,12 @@ 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'))
+ if node.get('inline', False):
+ 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:
@@ -220,7 +249,7 @@ def render_dot_html(self, node, code, options, prefix='graphviz',
(fname, alt, mapname, imgcss))
self.body.extend(imgmap)
- self.body.append('</p>\n')
+ self.body.append('</%s>\n' % wrapper)
raise nodes.SkipNode
@@ -235,8 +264,14 @@ def render_dot_latex(self, node, code, options, prefix='graphviz'):
self.builder.warn('dot code %r: ' % code + str(exc))
raise nodes.SkipNode
+ if node.get('inline', False):
+ para_separator = ''
+ else:
+ para_separator = '\n'
+
if fname is not None:
- self.body.append('\\includegraphics{%s}' % fname)
+ self.body.append('%s\\includegraphics{%s}%s' % (para_separator, fname,
+ para_separator))
raise nodes.SkipNode
diff --git a/sphinx/ext/inheritance_diagram.py b/sphinx/ext/inheritance_diagram.py
index ad0c253a..231b3762 100644
--- a/sphinx/ext/inheritance_diagram.py
+++ b/sphinx/ext/inheritance_diagram.py
@@ -67,8 +67,7 @@ class InheritanceGraph(object):
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.
+ """*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.
@@ -81,9 +80,7 @@ class InheritanceGraph(object):
'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 ValueError:
@@ -182,9 +179,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 +208,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.
@@ -363,7 +357,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=(skip, 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..709428a3 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)
diff --git a/sphinx/ext/mathbase.py b/sphinx/ext/mathbase.py
index e7258300..c9f993ae 100644
--- a/sphinx/ext/mathbase.py
+++ b/sphinx/ext/mathbase.py
@@ -12,6 +12,7 @@
from docutils import nodes, utils
from docutils.parsers.rst import directives
+from sphinx.writers import texinfo
from sphinx.util.compat import Directive
@@ -124,6 +125,20 @@ def man_visit_eqref(self, node):
raise nodes.SkipNode
+def texinfo_visit_math(self, node):
+ self.body.append('@math{' + texinfo.escape_arg(node['latex']) + '}')
+ raise nodes.SkipNode
+
+def texinfo_visit_displaymath(self, node):
+ self.visit_paragraph(node)
+def texinfo_depart_displaymath(self, node):
+ self.depart_paragraph(node)
+
+def texinfo_visit_eqref(self, node):
+ self.body.append(node['target'])
+ raise nodes.SkipNode
+
+
def html_visit_eqref(self, node):
self.body.append('<a href="#equation-%s">' % node['target'])
@@ -150,20 +165,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..e8d2d485
--- /dev/null
+++ b/sphinx/ext/mathjax.py
@@ -0,0 +1,67 @@
+# -*- 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', '', 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..015a4904 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
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..020db697 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
diff --git a/sphinx/highlighting.py b/sphinx/highlighting.py
index 8cbd647a..e84238e8 100644
--- a/sphinx/highlighting.py
+++ b/sphinx/highlighting.py
@@ -30,34 +30,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(),
@@ -156,7 +136,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
@@ -175,7 +155,7 @@ class PygmentsBridge(object):
return True
def highlight_block(self, source, lang, linenos=False, warn=None):
- if isinstance(source, str):
+ if not isinstance(source, unicode):
source = source.decode()
if not pygments:
return self.unhighlighted(source)
diff --git a/sphinx/jinja2glue.py b/sphinx/jinja2glue.py
index f3639867..1c5390dc 100644
--- a/sphinx/jinja2glue.py
+++ b/sphinx/jinja2glue.py
@@ -37,8 +37,10 @@ def accesskey(context, key):
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:
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..6ffd0c0b 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": {"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 ": ", -", "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", "Searching": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u099a\u09b2\u099b\u09c7", "Collapse sidebar": "", "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
diff --git a/sphinx/locale/bn/LC_MESSAGES/sphinx.mo b/sphinx/locale/bn/LC_MESSAGES/sphinx.mo
index 9b60397e..db568e1b 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..88aed5e4 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.
@@ -8,573 +8,654 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
-#: sphinx/environment.py:130
-#: sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
+#: sphinx/writers/manpage.py:67
#, 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:350
-#: sphinx/themes/basic/defindex.html:16
-msgid "Search Page"
-msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ পাতা"
-
-#: sphinx/roles.py:167
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "পাইথন উনà§à¦¨à§Ÿà¦¨ পরামরà§à¦¶!PEP %s"
-#: sphinx/builders/changes.py:70
+#: sphinx/builders/changes.py:72
msgid "Builtins"
msgstr "বিলà§à¦Ÿà¦‡à¦¨ সমূহ"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:74
msgid "Module level"
msgstr "মডিউল লেভেল"
-#: sphinx/builders/html.py:224
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "সাধারণ ইনডেকà§à¦¸"
-#: sphinx/builders/html.py:243
+#: sphinx/builders/html.py:279
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:339
msgid "next"
msgstr "পরবরà§à¦¤à§€"
-#: sphinx/builders/html.py:313
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "পূরà§à¦¬à¦¬à¦°à§à¦¤à§€"
-#: sphinx/builders/latex.py:162
+#: sphinx/builders/latex.py:145
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:135
msgid "Section author: "
msgstr "অনà§à¦šà§à¦›à§‡à¦¦ লেখক:"
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "মডিউল লেখক:"
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
+#, fuzzy
+msgid "Code author: "
+msgstr "মডিউল লেখক:"
+
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "লেখক:"
-#: sphinx/directives/other.py:233
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "আরও দেখà§à¦¨"
-#: sphinx/domains/c.py:124
+#: sphinx/domains/__init__.py:242
+#, python-format
+msgid "%s %s"
+msgstr ""
+
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:94
+msgid "Parameters"
+msgstr "পà§à¦¯à¦¾à¦°à¦¾à¦®à¦¿à¦Ÿà¦¾à¦°"
+
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127
+#: sphinx/domains/python.py:104
+msgid "Returns"
+msgstr "রিটারà§à¦¨à¦¸"
+
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
+msgid "Return type"
+msgstr "রিটারà§à¦¨ টাইপ"
+
+#: sphinx/domains/c.py:133
#, python-format
msgid "%s (C function)"
msgstr "%s (C ফাংশন)"
-#: sphinx/domains/c.py:126
+#: sphinx/domains/c.py:135
#, python-format
msgid "%s (C member)"
msgstr "%s (C মেমà§à¦¬à¦¾à¦°)"
-#: sphinx/domains/c.py:128
+#: sphinx/domains/c.py:137
#, python-format
msgid "%s (C macro)"
msgstr "%s (C মà§à¦¯à¦¾à¦•à§à¦°à§‡à¦¾)"
-#: sphinx/domains/c.py:130
+#: sphinx/domains/c.py:139
#, python-format
msgid "%s (C type)"
msgstr "%s (C টাইপ)"
-#: sphinx/domains/c.py:132
+#: sphinx/domains/c.py:141
#, python-format
msgid "%s (C variable)"
msgstr "%s (C ভà§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²)"
-#: sphinx/domains/c.py:162
-msgid "C function"
-msgstr "C ফাংশন"
+#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
+msgid "function"
+msgstr "ফাংশন"
-#: sphinx/domains/c.py:163
-msgid "C member"
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
+#, fuzzy
+msgid "member"
msgstr "C মেমà§à¦¬à¦¾à¦°"
-#: sphinx/domains/c.py:164
-msgid "C macro"
+#: sphinx/domains/c.py:173
+#, fuzzy
+msgid "macro"
msgstr "C মà§à¦¯à¦¾à¦•à§à¦°à§‡à¦¾"
-#: sphinx/domains/c.py:165
-msgid "C type"
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
+#, fuzzy
+msgid "type"
msgstr "C টাইপ"
-#: sphinx/domains/c.py:166
-msgid "C variable"
+#: sphinx/domains/c.py:175
+#, fuzzy
+msgid "variable"
msgstr "C ভà§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²"
-#: sphinx/domains/python.py:186
+#: sphinx/domains/cpp.py:883
+#, python-format
+msgid "%s (C++ class)"
+msgstr "%s (C++ কà§à¦²à¦¾à¦¸à§‡)"
+
+#: sphinx/domains/cpp.py:898
+#, python-format
+msgid "%s (C++ type)"
+msgstr "%s (C++ টাইপ)"
+
+#: sphinx/domains/cpp.py:917
+#, python-format
+msgid "%s (C++ member)"
+msgstr "%s (C++ মেমà§à¦¬à¦¾à¦°)"
+
+#: sphinx/domains/cpp.py:969
+#, python-format
+msgid "%s (C++ function)"
+msgstr "%s (C++ ফাংশন)"
+
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
+msgid "class"
+msgstr "কà§à¦²à¦¾à¦¸"
+
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
+#, python-format
+msgid "%s() (%s method)"
+msgstr "%s() (%s মেথড)"
+
+#: sphinx/domains/javascript.py:108
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (কà§à¦²à¦¾à¦¸à§‡)"
+
+#: sphinx/domains/javascript.py:110
+#, python-format
+msgid "%s (global variable or constant)"
+msgstr ""
+
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
+#, python-format
+msgid "%s (%s attribute)"
+msgstr "%s (%s à¦à§à¦¯à¦Ÿà§à¦°à¦¿à¦¬à¦¿à¦‰à¦Ÿ)"
+
+#: sphinx/domains/javascript.py:121
+#, fuzzy
+msgid "Arguments"
+msgstr "পà§à¦¯à¦¾à¦°à¦¾à¦®à¦¿à¦Ÿà¦¾à¦°"
+
+#: sphinx/domains/javascript.py:124
+msgid "Throws"
+msgstr ""
+
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
+msgid "data"
+msgstr "ডাটা"
+
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
+msgid "attribute"
+msgstr "à¦à§à¦¯à¦Ÿà§à¦°à¦¿à¦¬à¦¿à¦‰à¦Ÿ"
+
+#: sphinx/domains/python.py:98
+#, fuzzy
+msgid "Variables"
+msgstr "ভà§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²"
+
+#: sphinx/domains/python.py:101
+msgid "Raises"
+msgstr "রেইজেস"
+
+#: sphinx/domains/python.py:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (%s মডিউলে)"
-#: sphinx/domains/python.py:190
+#: sphinx/domains/python.py:248
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (বিলà§à¦Ÿ-ইন ভà§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²)"
-#: sphinx/domains/python.py:191
-#: sphinx/domains/python.py:282
+#: sphinx/domains/python.py:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (%s মডিউলে)"
-#: sphinx/domains/python.py:207
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (বিলà§à¦Ÿ-ইন কà§à¦²à¦¾à¦¸)"
-#: sphinx/domains/python.py:208
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (%s কà§à¦²à¦¾à¦¸à§‡)"
-#: sphinx/domains/python.py:248
+#: sphinx/domains/python.py:306
#, 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:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s (%s.%s সà§à¦Ÿà§à¦¯à¦¾à¦Ÿà¦¿à¦• মেথড)"
-#: sphinx/domains/python.py:263
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s সà§à¦Ÿà§à¦¯à¦¾à¦Ÿà¦¿à¦• মেথড)"
-#: sphinx/domains/python.py:273
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s কà§à¦²à¦¾à¦¸ মেথড)"
-#: sphinx/domains/python.py:276
+#: sphinx/domains/python.py:334
#, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s কà§à¦²à¦¾à¦¸ মেথড)"
-#: sphinx/domains/python.py:286
+#: sphinx/domains/python.py:344
#, 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
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "পà§à¦²à¦¾à¦Ÿà¦«à¦°à¦®:"
-#: sphinx/domains/python.py:340
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (মডিউল)"
-#: sphinx/domains/python.py:396
-msgid "function"
-msgstr "ফাংশন"
+#: sphinx/domains/python.py:455
+#, fuzzy
+msgid "Python Module Index"
+msgstr "মডিউল ইনডেকà§à¦¸"
-#: sphinx/domains/python.py:397
-msgid "data"
-msgstr "ডাটা"
+#: sphinx/domains/python.py:456
+msgid "modules"
+msgstr "মডিউল সমূহ"
-#: sphinx/domains/python.py:398
-msgid "class"
-msgstr "কà§à¦²à¦¾à¦¸"
+#: sphinx/domains/python.py:501
+msgid "Deprecated"
+msgstr "ডেপà§à¦°à¦¿à¦•েটেড"
-#: sphinx/domains/python.py:399
-#: sphinx/locale/__init__.py:161
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "à¦à¦•à§à¦¸à§‡à¦ªà¦¶à¦¨"
-#: sphinx/domains/python.py:400
+#: sphinx/domains/python.py:527
msgid "method"
msgstr "মেথড"
-#: sphinx/domains/python.py:401
-msgid "attribute"
-msgstr "à¦à§à¦¯à¦Ÿà§à¦°à¦¿à¦¬à¦¿à¦‰à¦Ÿ"
+#: sphinx/domains/python.py:528
+msgid "class method"
+msgstr "কà§à¦²à¦¾à¦¸ মেথড"
-#: sphinx/domains/python.py:402
-#: sphinx/locale/__init__.py:157
+#: sphinx/domains/python.py:529
+msgid "static method"
+msgstr "সà§à¦Ÿà§à¦¯à¦¾à¦Ÿà¦¿à¦• মেথড"
+
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "মডিউল"
-#: sphinx/domains/std.py:67
-#: sphinx/domains/std.py:83
+#: sphinx/domains/python.py:657
+#, 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:68 sphinx/domains/std.py:84
#, python-format
msgid "environment variable; %s"
msgstr "à¦à¦¨à¦­à¦¾à§Ÿà¦°à¦¨à¦®à§‡à¦¨à§à¦Ÿ ভà§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²; %s"
-#: sphinx/domains/std.py:156
+#: sphinx/domains/std.py:160
#, python-format
msgid "%scommand line option; %s"
msgstr "%sকমানà§à¦¡ লাইন অপশন; %s"
-#: sphinx/domains/std.py:324
+#: sphinx/domains/std.py:328
msgid "glossary term"
msgstr "শবà§à¦¦à¦•োষ"
-#: sphinx/domains/std.py:325
+#: sphinx/domains/std.py:329
msgid "grammar token"
msgstr "বà§à¦¯à¦•রণ টোকেন"
-#: sphinx/domains/std.py:326
+#: sphinx/domains/std.py:330
+msgid "reference label"
+msgstr ""
+
+#: sphinx/domains/std.py:331
msgid "environment variable"
msgstr "à¦à¦¨à¦­à¦¾à§Ÿà¦°à¦¨à¦®à§‡à¦¨à§à¦Ÿ ভà§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²"
-#: sphinx/domains/std.py:327
+#: sphinx/domains/std.py:332
msgid "program option"
msgstr "পà§à¦°à§‡à¦¾à¦—à§à¦°à¦¾à¦® অপশন"
-#: sphinx/ext/autodoc.py:892
+#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: 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:174
+msgid "Index"
+msgstr "ইনডেকà§à¦¸"
+
+#: sphinx/domains/std.py:361
+msgid "Module Index"
+msgstr "মডিউল ইনডেকà§à¦¸"
+
+#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+msgid "Search Page"
+msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ পাতা"
+
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr "বেস: %s"
-#: sphinx/ext/autodoc.py:925
+#: sphinx/ext/autodoc.py:959
#, 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/todo.py:104
-msgid "here"
-msgstr "à¦à¦–ানে"
+#: sphinx/ext/viewcode.py:164
+msgid "Overview: module code"
+msgstr ""
-#: sphinx/locale/__init__.py:138
+#: 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: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:175
msgid "keyword"
msgstr "কিওয়ারà§à¦¡"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "অপারেটর"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "অবজেকà§à¦Ÿ"
-#: sphinx/locale/__init__.py:162
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "সà§à¦Ÿà§à¦¯à¦¾à¦Ÿà¦®à§‡à¦¨à§à¦Ÿ"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
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:128
+#: 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:14
#, 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:46
+#: sphinx/themes/basic/genindex-split.html:24
+#: sphinx/themes/basic/genindex-split.html:38
+#: sphinx/themes/basic/genindex.html:56
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:23
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
+#: sphinx/themes/basic/layout.html:113
#, python-format
msgid "Search within %(docstitle)s"
msgstr "%(docstitle)s à¦à¦° মধà§à¦¯à§‡ খà§à¦à¦œà§à¦¨"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:122
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
+#: sphinx/themes/basic/layout.html:131
msgid "Copyright"
msgstr "কপিরাইট"
-#: sphinx/themes/basic/layout.html:187
-#: sphinx/themes/scrolls/layout.html:83
+#: sphinx/themes/basic/layout.html:180
#, 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:182
#, 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:186
#, 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:189
#, 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 +663,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 +671,33 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +726,89 @@ 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:491
+#: sphinx/writers/html.py:496
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:88
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
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ চলছে"
-#: sphinx/themes/basic/static/searchtools.js:279
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨à§‡à¦° পà§à¦°à¦¸à§à¦¤à§à¦¤à¦¿ চলছে..."
-#: sphinx/themes/basic/static/searchtools.js:352
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
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/basic/static/searchtools.js:506
+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:477
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ শেষ হয়েছে, ফলাফলে %s-টি পাতা পাওয়া গেছে।"
-#: sphinx/writers/latex.py:187
+#: sphinx/themes/default/static/sidebar.js:66
+msgid "Expand sidebar"
+msgstr ""
+
+#: sphinx/themes/default/static/sidebar.js:79
+#: sphinx/themes/default/static/sidebar.js:107
+msgid "Collapse sidebar"
+msgstr ""
+
+#: sphinx/themes/haiku/layout.html:26
+msgid "Contents"
+msgstr ""
+
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "রিলিজ"
-#: sphinx/writers/latex.py:579
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr "পাদটীকা"
-#: sphinx/writers/latex.py:647
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr "পূরà§à¦¬à¦¬à¦°à§à¦¤à§€ পাতা হতে চলমান"
-#: sphinx/writers/latex.py:652
+#: sphinx/writers/latex.py:654
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:422
msgid "[image]"
msgstr "[ছবি]"
+#~ msgid "Variable"
+#~ msgstr "ভà§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²"
+
+#~ msgid "Parameter"
+#~ msgstr "পà§à¦¯à¦¾à¦°à¦¾à¦®à¦¿à¦Ÿà¦¾à¦°"
+
+#~ msgid "C function"
+#~ msgstr "C ফাংশন"
+
+#~ msgid "here"
+#~ msgstr "à¦à¦–ানে"
+
+#~ msgid "Platform: %s"
+#~ msgstr "পà§à¦²à¦¾à¦Ÿà¦«à¦°à¦®: %s"
+
diff --git a/sphinx/locale/ca/LC_MESSAGES/sphinx.mo b/sphinx/locale/ca/LC_MESSAGES/sphinx.mo
index 339c787f..c6343149 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..a5fd94f4 100644
--- a/sphinx/locale/ca/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ca/LC_MESSAGES/sphinx.po
@@ -8,22 +8,22 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%d de %B de %Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -36,67 +36,67 @@ msgstr "Mòduls Interns"
msgid "Module level"
msgstr "Nivell de mòdul"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Ãndex General"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "índex"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "següent"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "anterior"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr " (a "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Autor de la secció:"
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Autor del mòdul: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "Autor del mòdul: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Autor: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Vegeu també"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Retorna"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "Tipus de retorn"
@@ -125,12 +125,12 @@ msgstr "%s (tipus de C)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "funció"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "membre"
@@ -138,7 +138,7 @@ msgstr "membre"
msgid "macro"
msgstr "macro"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "tipus"
@@ -147,190 +147,201 @@ msgstr "tipus"
msgid "variable"
msgstr "Variable"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr "%s (class de C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (tipus de C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (membre de C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, 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:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr "class"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (mètode %s)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (class de C++)"
+
+#: sphinx/domains/javascript.py:110
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (atribut %s)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
msgstr "Paràmetres"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "atribut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
msgstr "Variable"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (al mòdul %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (al mòdul %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (classe interna)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (class a %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (mètode %s.%s)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, 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:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (mètode estàtic %s)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (mètode %s.%s)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (mètode %s)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (atribut %s.%s)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Plataformes: "
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (mòdul)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "Ãndex de Mòduls"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "mòduls"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Obsolet"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "excepció"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
msgstr "%s() (mètode %s)"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "mètode estàtic"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "mòdul"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+msgid " (deprecated)"
+msgstr "Obsolet"
+
+#: 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òdul)"
-#: 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òdul"
@@ -370,7 +381,7 @@ msgstr ""
#: 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/writers/latex.py:174
msgid "Index"
msgstr "Ãndex"
@@ -382,12 +393,12 @@ msgstr "Ãndex de Mòduls"
msgid "Search Page"
msgstr "Pàgina de Cerca"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr " Bases: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr "àlies de :class:`%s`"
@@ -405,104 +416,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:175
msgid "keyword"
msgstr "paraula clau"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "operador"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "objecte"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "sentència"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "funció interna"
@@ -512,7 +523,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Cerca"
@@ -642,7 +653,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 +661,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 +673,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +722,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "Link permanent a aquesta definició"
@@ -724,19 +735,19 @@ msgstr "Link permanent a aquesta definició"
msgid "Hide Search Matches"
msgstr "Oculta Resultats de Cerca"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Cercant"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Preparant la cerca..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ", a "
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
msgid ""
"Your search did not match any documents. Please make sure that all words "
"are spelled correctly and that you've selected enough categories."
@@ -744,7 +755,7 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:508
#, 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."
@@ -754,7 +765,7 @@ msgid "Expand sidebar"
msgstr ""
#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:107
msgid "Collapse sidebar"
msgstr ""
@@ -762,22 +773,23 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "Versió"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr "ve de la pàgina anterior"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
msgid "Continued on next page"
msgstr "Continua a la pàgina següent"
#: sphinx/writers/text.py:422
msgid "[image]"
msgstr "[imatge]"
+
diff --git a/sphinx/locale/cs/LC_MESSAGES/sphinx.mo b/sphinx/locale/cs/LC_MESSAGES/sphinx.mo
index 8092a992..99db2eeb 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..eda1e9ab 100644
--- a/sphinx/locale/cs/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/cs/LC_MESSAGES/sphinx.po
@@ -8,7 +8,7 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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,15 +16,15 @@ 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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%d.%m.%Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -37,67 +37,67 @@ msgstr "Vestavěné funkce "
msgid "Module level"
msgstr "Úroveň modulů"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Rejstřík indexů"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "index"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "další"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "předchozí"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr "(v"
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Autor sekce: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Autor modulu: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "Autor modulu: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Autor: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Viz také"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Vrací"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "Typ navrácené hodnoty"
@@ -126,12 +126,12 @@ msgstr "%s (C typ)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "funkce"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "Älen"
@@ -139,7 +139,7 @@ msgstr "Älen"
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "typ"
@@ -148,190 +148,201 @@ msgstr "typ"
msgid "variable"
msgstr "Proměnná"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++ třída)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ typ)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (Älen C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ funkce)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr "třída"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (metoda %s)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (C++ třída)"
+
+#: sphinx/domains/javascript.py:110
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s() (atribut %s)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
msgstr "Parametry"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "atribut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
msgstr "Proměnná"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (v modulu %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s() (v modulu %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s () (vestavěná proměnná)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s() (třída v %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (metoda %s.%s)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (statická metoda %s.%s)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (statická metoda %s)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (metoda %s.%s)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (metoda %s)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s() (atribut %s.%s)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Platformy: "
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (module)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "Rejstřík modulů "
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "moduly"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Zastaralé"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "výjimka"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
msgstr "%s() (metoda %s)"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "statická metoda"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "modul"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+msgid " (deprecated)"
+msgstr "Zastaralé"
+
+#: 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)"
-#: 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 "modul"
@@ -371,7 +382,7 @@ msgstr ""
#: 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/writers/latex.py:174
msgid "Index"
msgstr "Index"
@@ -383,12 +394,12 @@ msgstr "Rejstřík modulů "
msgid "Search Page"
msgstr "Vyhledávací stránka"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -406,104 +417,104 @@ msgstr "(Původní záznam je v %s, řádka %d a lze jej nalézt"
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:175
msgid "keyword"
msgstr "klíÄové slovo"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "operátor"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "objekt"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "příkaz"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "vestavěná funkce"
@@ -513,7 +524,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Hledání"
@@ -644,13 +655,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 +673,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +722,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "Trvalý odkaz na tuto definici"
@@ -724,19 +735,19 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Hledám"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Připravuji vyhledávání...."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ", v"
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
msgid ""
"Your search did not match any documents. Please make sure that all words "
"are spelled correctly and that you've selected enough categories."
@@ -744,7 +755,7 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr "Vyhledávání skonÄilo, nalezeno %s stran."
@@ -754,7 +765,7 @@ msgid "Expand sidebar"
msgstr ""
#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:107
msgid "Collapse sidebar"
msgstr ""
@@ -762,19 +773,19 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "Vydání"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
#, fuzzy
msgid "Continued on next page"
msgstr "Plný index na jedné stránce"
@@ -782,3 +793,4 @@ msgstr "Plný index na jedné stránce"
#: sphinx/writers/text.py:422
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..9bb070cd 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": {"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 ", "Expand sidebar": "", "Permalink to this headline": "Permalink til denne overskrift", "Searching": "S\u00f8ger", "Collapse sidebar": "", "Permalink to this definition": "Permalink til denne definition", "Hide Search Matches": "Skjul s\u00f8geresultater"}}); \ 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..bc95a44f 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..f83c7c04 100644
--- a/sphinx/locale/da/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/da/LC_MESSAGES/sphinx.po
@@ -1,4 +1,4 @@
-# Translations template for Sphinx.
+# Danish translations for Sphinx.
# Copyright (C) 2009 The Sphinx Team
# This file is distributed under the same license as the Sphinx project.
#
@@ -8,553 +8,649 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\n"
"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\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.5\n"
-# 21. april, 2010
-#: sphinx/environment.py:130 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
+#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%d. %B, %Y"
-#: sphinx/environment.py:348 sphinx/themes/basic/genindex-single.html:2
-#: sphinx/themes/basic/genindex-split.html:2
-#: sphinx/themes/basic/genindex-split.html:5
-#: sphinx/themes/basic/genindex.html:2 sphinx/themes/basic/genindex.html:5
-#: sphinx/themes/basic/genindex.html:48 sphinx/themes/basic/layout.html:134
-#: sphinx/writers/latex.py:190
-msgid "Index"
-msgstr "Indeks"
-
-#: sphinx/environment.py:349 sphinx/writers/latex.py:189
-msgid "Module Index"
-msgstr "Modulindeks"
-
-# Ikke 'Søg på side'
-#: sphinx/environment.py:350 sphinx/themes/basic/defindex.html:16
-msgid "Search Page"
-msgstr "Søgeside"
-
-#: sphinx/roles.py:167
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
-#: sphinx/builders/changes.py:70
+#: sphinx/builders/changes.py:72
msgid "Builtins"
msgstr "Indbyggede"
-#: sphinx/builders/changes.py:72
+#: sphinx/builders/changes.py:74
msgid "Module level"
msgstr "Modulniveau"
-# Apr 21, 2010
-#: sphinx/builders/html.py:224
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Generelt indeks"
-#: sphinx/builders/html.py:243
+#: sphinx/builders/html.py:279
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:339
msgid "next"
msgstr "næste"
-#: sphinx/builders/html.py:313
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "forrige"
-#: sphinx/builders/latex.py:162
+#: sphinx/builders/latex.py:145
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:135
msgid "Section author: "
msgstr "Afsnitsforfatter: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Modulforfatter: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
+#, fuzzy
+msgid "Code author: "
+msgstr "Modulforfatter: "
+
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Forfatter: "
-#: sphinx/directives/other.py:233
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Se også"
-#: sphinx/domains/c.py:124
+#: sphinx/domains/__init__.py:242
+#, python-format
+msgid "%s %s"
+msgstr ""
+
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:94
+msgid "Parameters"
+msgstr "Parametre"
+
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127
+#: sphinx/domains/python.py:104
+msgid "Returns"
+msgstr "Returnerer"
+
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
+msgid "Return type"
+msgstr "Returtype"
+
+#: sphinx/domains/c.py:133
#, python-format
msgid "%s (C function)"
msgstr "%s (C-funktion)"
-#: sphinx/domains/c.py:126
+#: sphinx/domains/c.py:135
#, python-format
msgid "%s (C member)"
msgstr "%s (C-medlem)"
-#: sphinx/domains/c.py:128
+#: sphinx/domains/c.py:137
#, python-format
msgid "%s (C macro)"
msgstr "%s (C-makro)"
-#: sphinx/domains/c.py:130
+#: sphinx/domains/c.py:139
#, python-format
msgid "%s (C type)"
msgstr "%s (C-type)"
-#: sphinx/domains/c.py:132
+#: sphinx/domains/c.py:141
#, 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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
+msgid "function"
+msgstr "funktion"
+
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
+msgid "member"
+msgstr "medlem"
-#: sphinx/domains/c.py:163
-msgid "C member"
-msgstr "C-medlem"
+#: sphinx/domains/c.py:173
+msgid "macro"
+msgstr "makro"
-#: sphinx/domains/c.py:164
-msgid "C macro"
-msgstr "C-makro"
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
+msgid "type"
+msgstr "type"
-#: sphinx/domains/c.py:165
-msgid "C type"
-msgstr "C-type"
+#: sphinx/domains/c.py:175
+msgid "variable"
+msgstr "variabel"
-#: sphinx/domains/c.py:166
-msgid "C variable"
-msgstr "C-variabel"
+#: sphinx/domains/cpp.py:883
+#, python-format
+msgid "%s (C++ class)"
+msgstr "%s (C++-klasse)"
+
+#: sphinx/domains/cpp.py:898
+#, python-format
+msgid "%s (C++ type)"
+msgstr "%s (C++-type)"
+
+#: sphinx/domains/cpp.py:917
+#, python-format
+msgid "%s (C++ member)"
+msgstr "%s (C++-medlem)"
+
+#: sphinx/domains/cpp.py:969
+#, python-format
+msgid "%s (C++ function)"
+msgstr "%s (C++-funktion)"
+
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
+msgid "class"
+msgstr "klasse"
-#: sphinx/domains/python.py:186
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
+#, python-format
+msgid "%s() (%s method)"
+msgstr "%s() (metode i %s)"
+
+#: sphinx/domains/javascript.py:108
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (klasse)"
+
+#: sphinx/domains/javascript.py:110
+#, python-format
+msgid "%s (global variable or constant)"
+msgstr ""
+
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
+#, python-format
+msgid "%s (%s attribute)"
+msgstr "%s (attribut i %s)"
+
+#: sphinx/domains/javascript.py:121
+#, fuzzy
+msgid "Arguments"
+msgstr "Parametre"
+
+#: sphinx/domains/javascript.py:124
+msgid "Throws"
+msgstr ""
+
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
+msgid "data"
+msgstr "data"
+
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
+msgid "attribute"
+msgstr "attribut"
+
+#: sphinx/domains/python.py:98
+#, fuzzy
+msgid "Variables"
+msgstr "Variabel"
+
+#: sphinx/domains/python.py:101
+msgid "Raises"
+msgstr "Rejser"
+
+#: sphinx/domains/python.py:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (i modulet %s)"
-#: sphinx/domains/python.py:190
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (i modulet %s)"
-#: sphinx/domains/python.py:207
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (indbygget klasse)"
-#: sphinx/domains/python.py:208
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (klasse i %s)"
-#: sphinx/domains/python.py:248
+#: sphinx/domains/python.py:306
#, 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:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (statisk metode i %s.%s)"
-#: sphinx/domains/python.py:263
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (statisk metode i %s)"
-#: sphinx/domains/python.py:273
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (klassemetode i %s.%s)"
-#: sphinx/domains/python.py:276
+#: sphinx/domains/python.py:334
#, python-format
msgid "%s() (%s class method)"
msgstr "%s() (klassemetode i %s)"
-#: sphinx/domains/python.py:286
+#: sphinx/domains/python.py:344
#, 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
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Platforme: "
-#: sphinx/domains/python.py:340
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (modul)"
-#: sphinx/domains/python.py:396
-msgid "function"
-msgstr "funktion"
+#: sphinx/domains/python.py:455
+#, fuzzy
+msgid "Python Module Index"
+msgstr "Modulindeks"
-#: sphinx/domains/python.py:397
-msgid "data"
-msgstr "data"
+#: sphinx/domains/python.py:456
+msgid "modules"
+msgstr "moduler"
-#: sphinx/domains/python.py:398
-msgid "class"
-msgstr "klasse"
+#: sphinx/domains/python.py:501
+msgid "Deprecated"
+msgstr "Deprecieret"
-#: sphinx/domains/python.py:399 sphinx/locale/__init__.py:161
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "undtagelse"
-#: sphinx/domains/python.py:400
+#: sphinx/domains/python.py:527
msgid "method"
msgstr "metode"
-#: sphinx/domains/python.py:401
-msgid "attribute"
-msgstr "attribut"
+#: sphinx/domains/python.py:528
+msgid "class method"
+msgstr "klassemetode"
+
+#: sphinx/domains/python.py:529
+msgid "static method"
+msgstr "statisk metode"
-#: sphinx/domains/python.py:402 sphinx/locale/__init__.py:157
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "modul"
-#: sphinx/domains/std.py:67 sphinx/domains/std.py:83
+#: sphinx/domains/python.py:657
+#, fuzzy
+msgid " (deprecated)"
+msgstr " (deprecieret)"
+
+#: 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:68 sphinx/domains/std.py:84
#, python-format
msgid "environment variable; %s"
msgstr "miljøvariabel; %s"
-#: sphinx/domains/std.py:156
+#: sphinx/domains/std.py:160
#, python-format
msgid "%scommand line option; %s"
msgstr "%skommandolinjetilvalg; %s"
-#: sphinx/domains/std.py:324
+#: sphinx/domains/std.py:328
msgid "glossary term"
msgstr "begreb i ordliste"
-#: sphinx/domains/std.py:325
+#: sphinx/domains/std.py:329
msgid "grammar token"
msgstr "grammatisk element"
-#: sphinx/domains/std.py:326
+#: sphinx/domains/std.py:330
+msgid "reference label"
+msgstr ""
+
+#: sphinx/domains/std.py:331
msgid "environment variable"
msgstr "miljøvariabel"
-#: sphinx/domains/std.py:327
+#: sphinx/domains/std.py:332
msgid "program option"
msgstr "programtilvalg"
-#: sphinx/ext/autodoc.py:892
+#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: 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:174
+msgid "Index"
+msgstr "Indeks"
+
+#: sphinx/domains/std.py:361
+msgid "Module Index"
+msgstr "Modulindeks"
+
+#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+msgid "Search Page"
+msgstr "Søgeside"
+
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr " Baser: %s"
-#: sphinx/ext/autodoc.py:925
+#: sphinx/ext/autodoc.py:959
#, 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
+#, fuzzy, 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 ""
+
+#: 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 "modul"
+
+#: 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 ""
+
+#: sphinx/ext/viewcode.py:164
+msgid "Overview: module code"
+msgstr ""
-#: sphinx/ext/todo.py:104
-msgid "here"
-msgstr "her"
+#: 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 "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"
-#: sphinx/locale/__init__.py:158
+#: sphinx/locale/__init__.py:175
msgid "keyword"
msgstr "nøgleord"
-#: sphinx/locale/__init__.py:159
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "operator"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "objekt"
-#: sphinx/locale/__init__.py:162
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "erklæring"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:180
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:128
+#: 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:14
#, 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:46
+#: sphinx/themes/basic/genindex-split.html:24
+#: sphinx/themes/basic/genindex-split.html:38
+#: sphinx/themes/basic/genindex.html:56
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:23
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
+#: sphinx/themes/basic/layout.html:113
#, python-format
msgid "Search within %(docstitle)s"
msgstr "Søg i %(docstitle)s"
-#: sphinx/themes/basic/layout.html:131
+#: sphinx/themes/basic/layout.html:122
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
+#: sphinx/themes/basic/layout.html:131
msgid "Copyright"
msgstr "Ophavsret"
-#: sphinx/themes/basic/layout.html:187 sphinx/themes/scrolls/layout.html:83
+#: sphinx/themes/basic/layout.html:180
#, 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:182
#, 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:186
#, 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:189
#, 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 +658,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 +670,27 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +719,89 @@ 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:491
+#: sphinx/writers/html.py:496
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:88
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
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Søger"
-#: sphinx/themes/basic/static/searchtools.js:279
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Forbereder søgning..."
-#: sphinx/themes/basic/static/searchtools.js:352
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ", i "
-#: sphinx/themes/basic/static/searchtools.js:475
+#: sphinx/themes/basic/static/searchtools.js:506
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."
+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
+#: sphinx/themes/basic/static/searchtools.js:508
#, 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/themes/default/static/sidebar.js:66
+msgid "Expand sidebar"
+msgstr ""
+
+#: sphinx/themes/default/static/sidebar.js:79
+#: sphinx/themes/default/static/sidebar.js:107
+msgid "Collapse sidebar"
+msgstr ""
+
+#: sphinx/themes/haiku/layout.html:26
+msgid "Contents"
+msgstr ""
+
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "Udgave"
-#: sphinx/writers/latex.py:579
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr "Fodnoter"
-#: sphinx/writers/latex.py:647
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr "fortsat fra forrige side"
-#: sphinx/writers/latex.py:652
+#: sphinx/writers/latex.py:654
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:422
msgid "[image]"
msgstr "[billede]"
+#~ msgid "Variable"
+#~ msgstr "Variabel"
+
+#~ msgid "Parameter"
+#~ msgstr "Parameter"
+
+#~ msgid "C function"
+#~ msgstr "C-funktion"
+
+#~ msgid "here"
+#~ msgstr "her"
+
+#~ msgid "Platform: %s"
+#~ msgstr "Platform: %s"
+
diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.mo b/sphinx/locale/de/LC_MESSAGES/sphinx.mo
index 5657b0ab..de6b4082 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 f92ba23c..4d2aebc7 100644
--- a/sphinx/locale/de/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/de/LC_MESSAGES/sphinx.po
@@ -7,22 +7,22 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%d. %m. %Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -35,66 +35,66 @@ msgstr "Builtins"
msgid "Module level"
msgstr "Modulebene"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Allgemeiner Index"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "Index"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "weiter"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "zurück"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr " (in "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Autor des Abschnitts: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Autor des Moduls: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
msgid "Code author: "
msgstr "Autor des Quellcode: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Autor: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Siehe auch"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Rückgabe"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "Rückgabetyp"
@@ -123,12 +123,12 @@ msgstr "%s (C-Typ)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "Funktion"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "Member"
@@ -136,7 +136,7 @@ msgstr "Member"
msgid "macro"
msgstr "Makro"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "Typ"
@@ -144,188 +144,197 @@ msgstr "Typ"
msgid "variable"
msgstr "Variable"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++-Klasse)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++-Typ)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++-Member)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++-Funktion)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr "Klasse"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (Methode von %s)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (C++-Klasse)"
+
+#: sphinx/domains/javascript.py:110
#, 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:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (Attribut von %s)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
msgid "Arguments"
msgstr "Parameter"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr "Wirft"
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr "Daten"
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
-#, python-format
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "Attribut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
msgid "Variables"
msgstr "Variablen"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (in Modul %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (in Modul %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (Standard-Klasse)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (Klasse in %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (Methode von %s.%s)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (statische Methode von %s.%s)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (statische Methode von %s)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (Klassenmethode von %s.%s)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, python-format
msgid "%s() (%s class method)"
msgstr "%s() (Klassenmethode von %s)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (Attribut von %s.%s)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Plattformen: "
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (Modul)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
msgid "Python Module Index"
msgstr "Python-Modulindex"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "Module"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Veraltet"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "Exception"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr "Methode"
-#: sphinx/domains/python.py:502
-#, python-format
+#: sphinx/domains/python.py:528
msgid "class method"
msgstr "Klassenmethode"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "statische Methode"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "Module"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+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"
@@ -352,7 +361,6 @@ msgid "reference label"
msgstr "Referenz-Label"
#: sphinx/domains/std.py:331
-#, python-format
msgid "environment variable"
msgstr "Umgebungsvariable"
@@ -365,7 +373,7 @@ msgstr "Programmoption"
#: 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/writers/latex.py:174
msgid "Index"
msgstr "Stichwortverzeichnis"
@@ -377,12 +385,12 @@ msgstr "Modulindex"
msgid "Search Page"
msgstr "Suche"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr " Basisklassen: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr "Alias von :class:`%s`"
@@ -400,103 +408,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:175
msgid "keyword"
msgstr "Schlüsselwort"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "Operator"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "Objekt"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "Anweisung"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "Standard-Funktion"
@@ -506,7 +514,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Suche"
@@ -638,13 +646,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 +665,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +714,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "Permalink zu dieser Definition"
@@ -719,19 +727,19 @@ msgstr "Permalink zu dieser Definition"
msgid "Hide Search Matches"
msgstr "Suchergebnisse ausblenden"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Suche..."
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Suche wird vorbereitet..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ", in "
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
msgid ""
"Your search did not match any documents. Please make sure that all words "
"are spelled correctly and that you've selected enough categories."
@@ -739,7 +747,7 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr "Suche beendet, %s zutreffende Seite(n) gefunden."
@@ -749,7 +757,7 @@ 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:107
msgid "Collapse sidebar"
msgstr "Sidebar einklappen"
@@ -757,19 +765,19 @@ msgstr "Sidebar einklappen"
msgid "Contents"
msgstr "Inhalt"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "Release"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr "Fußnoten"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr "Fortsetzung der vorherigen Seite"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
msgid "Continued on next page"
msgstr "Fortsetzung auf der nächsten Seite"
diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.mo b/sphinx/locale/es/LC_MESSAGES/sphinx.mo
index c1ee0bfe..6115878f 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..b9698c9b 100644
--- a/sphinx/locale/es/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/es/LC_MESSAGES/sphinx.po
@@ -8,22 +8,22 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, fuzzy, python-format
msgid "%B %d, %Y"
msgstr "%d de %B de %Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -38,67 +38,67 @@ msgstr "Funciones de base"
msgid "Module level"
msgstr "Módulos"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Ãndice General"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "índice"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "siguiente"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "anterior"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Autor de la sección: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Autor del módulo: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "Autor del módulo: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Autor:"
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Ver también"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Devuelve"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
#, fuzzy
msgid "Return type"
msgstr "Tipo del argumento devuelto"
@@ -128,12 +128,12 @@ msgstr "%s (tipo C)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "función"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "miembro"
@@ -141,7 +141,7 @@ msgstr "miembro"
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "tipo"
@@ -150,190 +150,201 @@ msgstr "tipo"
msgid "variable"
msgstr "Variable"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr "%s (clase C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (tipo C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, fuzzy, python-format
msgid "%s (C++ member)"
msgstr "%s (miembro C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, 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:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr "clase"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s método)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (clase C++)"
+
+#: sphinx/domains/javascript.py:110
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s atributo)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
msgstr "Parámetros"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "atributo"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
msgstr "Variable"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (en el módulo %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (en el módulo %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, fuzzy, python-format
msgid "%s (built-in class)"
msgstr "%s (variable de base)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (clase en %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s método)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, 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:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s método estático)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s método)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s método)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s atributo)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Plataformas:"
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (módulo)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "Ãndice de Módulos"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "módulos"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Obsoleto"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "excepción"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
msgstr "%s() (%s método)"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "método estático"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "módulo"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, 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"
@@ -373,7 +384,7 @@ msgstr ""
#: 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/writers/latex.py:174
msgid "Index"
msgstr "Ãndice"
@@ -385,12 +396,12 @@ msgstr "Ãndice de Módulos"
msgid "Search Page"
msgstr "Página de Búsqueda"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -408,104 +419,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:175
msgid "keyword"
msgstr "palabra clave"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "operador"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "objeto"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "sentencia"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
#, fuzzy
msgid "built-in function"
msgstr "función de base"
@@ -516,7 +527,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Búsqueda"
@@ -647,13 +658,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 +677,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +726,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "Enlazar permanentemente con esta definición"
@@ -729,19 +740,19 @@ msgstr "Enlazar permanentemente con esta definición"
msgid "Hide Search Matches"
msgstr "Coincidencias de la búsqueda"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Buscando"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Preparando la búsqueda"
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ""
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
msgid ""
"Your search did not match any documents. Please make sure that all words "
"are spelled correctly and that you've selected enough categories."
@@ -750,7 +761,7 @@ msgstr ""
"todas las palabras correctamente y que ha seleccionado suficientes "
"categorías"
-#: sphinx/themes/basic/static/searchtools.js:493
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr ""
@@ -762,7 +773,7 @@ msgid "Expand sidebar"
msgstr ""
#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:107
msgid "Collapse sidebar"
msgstr ""
@@ -770,20 +781,20 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
#, fuzzy
msgid "Release"
msgstr "Versión"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
#, fuzzy
msgid "Continued on next page"
msgstr "Ãndice completo en una página"
@@ -791,3 +802,4 @@ msgstr "Ãndice completo en una página"
#: sphinx/writers/text.py:422
msgid "[image]"
msgstr "[imagen]"
+
diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.js b/sphinx/locale/fa/LC_MESSAGES/sphinx.js
new file mode 100644
index 00000000..c268479a
--- /dev/null
+++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.js
@@ -0,0 +1 @@
+Documentation.addTranslations({"locale": "fa", "plural_expr": "(n > 1)", "messages": {"module, in ": "\u0645\u0627\u0698\u0648\u0644, \u062f\u0631", "Preparing search...": "...\u0622\u0645\u0627\u062f\u0647 \u062c\u0633\u062a\u062c\u0648", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": ". \u0647\u06cc\u0686 \u0633\u0646\u062f\u06cc \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u06cc \u0634\u0645\u0627 \u06cc\u0627\u0641\u062a \u0646\u0634\u062f\u060c \u0644\u0637\u0641\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0646\u0645\u0627\u0626\u06cc\u062f \u06a9\u0647 \u0627\u0645\u0644\u0627\u06cc \u062a\u0645\u0627\u0645\u06cc \u06a9\u0644\u0645\u0627\u062a \u0635\u062d\u06cc\u062d \u0645\u06cc \u0628\u0627\u0634\u062f \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639\u0627\u062a \u06a9\u0627\u0641\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u062c\u0633\u062a\u062c\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0646\u0645\u0648\u062f\u0647 \u0627\u06cc\u062f", "Search finished, found %s page(s) matching the search query.": "\u062c\u0633\u062a\u062c\u0648 \u0627\u0646\u062c\u0627\u0645 \u0634\u062f \u060c %s \u0635\u0641\u062d\u0647 \u0645\u0637\u0627\u0628\u0642 \u0628\u0627 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u067e\u06cc\u062f\u0627 \u0634\u062f", ", in ": ", \u062f\u0631", "Permalink to this headline": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u0633\u0631 \u0645\u0642\u0627\u0644\u0647", "Searching": "\u062f\u0631 \u062d\u0627\u0644 \u062c\u0633\u062a\u062c\u0648", "Permalink to this definition": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0639\u0631\u06cc\u0641", "Hide Search Matches": "\u0639\u062f\u0645 \u0646\u0645\u0627\u06cc\u0634 \u0646\u062a\u0627\u06cc\u062c \u06cc\u0627\u0641\u062a \u0634\u062f\u0647", "Search Results": "\u0646\u062a\u0627\u06cc\u062c \u062c\u0633\u062a\u062c\u0648"}}); \ 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..c988b75c
--- /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..fe75951e
--- /dev/null
+++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.po
@@ -0,0 +1,596 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Sphinx 1.0.3\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2008-11-09 19:46+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Omid Raha <omidraha.com@gmail.com>\n"
+"Language-Team: Omid Raha <omidraha.com@gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"X-Poedit-Language: Persian\n"
+"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
+
+#: sphinx/builder.py:408
+#, python-format
+msgid "%b %d, %Y"
+msgstr ""
+
+#: sphinx/builder.py:427
+#: sphinx/templates/defindex.html:21
+msgid "General Index"
+msgstr "Ùهرست Ú©Ù„ÛŒ"
+
+#: sphinx/builder.py:427
+msgid "index"
+msgstr "Ùهرست"
+
+#: sphinx/builder.py:429
+#: sphinx/htmlhelp.py:155
+#: sphinx/templates/defindex.html:19
+#: sphinx/templates/modindex.html:2
+#: sphinx/templates/modindex.html:13
+msgid "Global Module Index"
+msgstr "Ùهرست Ú©Ù„ÛŒ ماژول ها"
+
+#: sphinx/builder.py:429
+msgid "modules"
+msgstr "ماژول ها"
+
+#: sphinx/builder.py:466
+msgid "next"
+msgstr "بعدی"
+
+#: sphinx/builder.py:473
+msgid "previous"
+msgstr "قبلی"
+
+#: sphinx/builder.py:1054
+msgid " (in "
+msgstr ""
+
+#: sphinx/builder.py:1129
+msgid "Builtins"
+msgstr "درونی سازی"
+
+#: sphinx/builder.py:1131
+msgid "Module level"
+msgstr "در سطح ماژول"
+
+#: sphinx/environment.py:102
+#: sphinx/latexwriter.py:164
+#, python-format
+msgid "%B %d, %Y"
+msgstr ""
+
+#: sphinx/environment.py:290
+#: sphinx/latexwriter.py:170
+#: sphinx/templates/genindex-single.html:2
+#: sphinx/templates/genindex-split.html:2
+#: sphinx/templates/genindex-split.html:5
+#: sphinx/templates/genindex.html:2
+#: sphinx/templates/genindex.html:5
+#: sphinx/templates/genindex.html:48
+#: sphinx/templates/layout.html:130
+msgid "Index"
+msgstr "Ùهرست"
+
+#: sphinx/environment.py:291
+#: sphinx/latexwriter.py:169
+msgid "Module Index"
+msgstr "Ùهرست ماژول ها"
+
+#: sphinx/environment.py:292
+#: sphinx/templates/defindex.html:16
+msgid "Search Page"
+msgstr "ØµÙØ­Ù‡ جستجو"
+
+#: sphinx/htmlwriter.py:79
+#: sphinx/static/doctools.js:145
+msgid "Permalink to this definition"
+msgstr "لینک ثابت به این تعریÙ"
+
+#: sphinx/htmlwriter.py:402
+#: sphinx/static/doctools.js:139
+msgid "Permalink to this headline"
+msgstr "لینک ثابت به این سر مقاله"
+
+#: sphinx/latexwriter.py:167
+msgid "Release"
+msgstr "انتشار"
+
+#: sphinx/roles.py:53
+#: sphinx/directives/desc.py:525
+#, python-format
+msgid "environment variable; %s"
+msgstr "%s متغیرهای عمومی؛"
+
+#: sphinx/roles.py:60
+#, python-format
+msgid "Python Enhancement Proposals!PEP %s"
+msgstr ""
+
+#: sphinx/textwriter.py:166
+#, python-format
+msgid "Platform: %s"
+msgstr "%s:Ù¾Ù„ØªÙØ±Ù…"
+
+#: sphinx/textwriter.py:422
+msgid "[image]"
+msgstr ""
+
+#: sphinx/directives/desc.py:25
+#, python-format
+msgid "%s() (built-in function)"
+msgstr "%s() (توابع درونی)"
+
+#: sphinx/directives/desc.py:26
+#: sphinx/directives/desc.py:42
+#: sphinx/directives/desc.py:54
+#, python-format
+msgid "%s() (in module %s)"
+msgstr "%s() (در ماژول %s)"
+
+#: sphinx/directives/desc.py:29
+#, python-format
+msgid "%s (built-in variable)"
+msgstr "%s (متغیر درونی)"
+
+#: sphinx/directives/desc.py:30
+#: sphinx/directives/desc.py:66
+#, python-format
+msgid "%s (in module %s)"
+msgstr "%s (در ماژول %s)"
+
+#: sphinx/directives/desc.py:33
+#, python-format
+msgid "%s (built-in class)"
+msgstr "%s (کلاس درونی)"
+
+#: sphinx/directives/desc.py:34
+#, python-format
+msgid "%s (class in %s)"
+msgstr "%s (کلاس در %s)"
+
+#: sphinx/directives/desc.py:46
+#, python-format
+msgid "%s() (%s.%s method)"
+msgstr "%s() (%s.%s متد)"
+
+#: sphinx/directives/desc.py:48
+#, python-format
+msgid "%s() (%s method)"
+msgstr "%s() (%s متد)"
+
+#: sphinx/directives/desc.py:58
+#, python-format
+msgid "%s() (%s.%s static method)"
+msgstr "%s() (%s.%s متد استاتیک)"
+
+#: sphinx/directives/desc.py:60
+#, python-format
+msgid "%s() (%s static method)"
+msgstr "%s() (%s متد استاتیک)"
+
+#: sphinx/directives/desc.py:70
+#, python-format
+msgid "%s (%s.%s attribute)"
+msgstr "%s (%s.%s مشخصه)"
+
+#: sphinx/directives/desc.py:72
+#, python-format
+msgid "%s (%s attribute)"
+msgstr "%s (%s مشخصه)"
+
+#: sphinx/directives/desc.py:74
+#, python-format
+msgid "%s (C function)"
+msgstr "%s (C تابع)"
+
+#: sphinx/directives/desc.py:76
+#, python-format
+msgid "%s (C member)"
+msgstr "%s (C عضو)"
+
+#: sphinx/directives/desc.py:78
+#, python-format
+msgid "%s (C macro)"
+msgstr "%s (C ماکرو)"
+
+#: sphinx/directives/desc.py:80
+#, python-format
+msgid "%s (C type)"
+msgstr "%s (C نوع)"
+
+#: sphinx/directives/desc.py:82
+#, python-format
+msgid "%s (C variable)"
+msgstr "%s (C متغیر)"
+
+#: sphinx/directives/desc.py:100
+msgid "Raises"
+msgstr "برانگیختن"
+
+#: sphinx/directives/desc.py:104
+msgid "Variable"
+msgstr "متغیر"
+
+#: sphinx/directives/desc.py:107
+msgid "Returns"
+msgstr ""
+
+#: sphinx/directives/desc.py:114
+msgid "Return type"
+msgstr "نوع برگشتی"
+
+#: sphinx/directives/desc.py:141
+msgid "Parameters"
+msgstr "پارامترها"
+
+#: sphinx/directives/desc.py:411
+#, python-format
+msgid "%scommand line option; %s"
+msgstr "%sگزینه خط ÙØ±Ù…ان; %s"
+
+#: sphinx/directives/other.py:101
+msgid "Platforms: "
+msgstr ":Ù¾Ù„ØªÙØ±Ù… ها"
+
+#: sphinx/directives/other.py:106
+#, python-format
+msgid "%s (module)"
+msgstr "%s (ماژول)"
+
+#: sphinx/directives/other.py:146
+msgid "Section author: "
+msgstr ":نویسنده این بخش"
+
+#: sphinx/directives/other.py:148
+msgid "Module author: "
+msgstr "نویسنده این ماژول:"
+
+#: sphinx/directives/other.py:150
+msgid "Author: "
+msgstr ":نویسنده"
+
+#: sphinx/directives/other.py:246
+msgid "See also"
+msgstr "همچنین ملاحظه نمائید"
+
+#: sphinx/ext/todo.py:32
+msgid "Todo"
+msgstr "در دست انجام"
+
+#: sphinx/ext/todo.py:78
+#, python-format
+msgid "(The original entry is located in %s, line %d and can be found "
+msgstr "( ورودی اصلی در %s ØŒ در خط %d واقع شده است Ùˆ Ù…ÛŒ تواند ÛŒØ§ÙØª بشود"
+
+#: sphinx/ext/todo.py:84
+msgid "here"
+msgstr "اینجا"
+
+#: sphinx/locale/__init__.py:15
+msgid "Attention"
+msgstr "دقت"
+
+#: sphinx/locale/__init__.py:16
+msgid "Caution"
+msgstr "ملاحظه"
+
+#: sphinx/locale/__init__.py:17
+msgid "Danger"
+msgstr "خطر"
+
+#: sphinx/locale/__init__.py:18
+msgid "Error"
+msgstr "خطا"
+
+#: sphinx/locale/__init__.py:19
+msgid "Hint"
+msgstr "تذکر"
+
+#: sphinx/locale/__init__.py:20
+msgid "Important"
+msgstr "مهم"
+
+#: sphinx/locale/__init__.py:21
+msgid "Note"
+msgstr "توجه"
+
+#: sphinx/locale/__init__.py:22
+msgid "See Also"
+msgstr "همچنین ملاحظه نمائید"
+
+#: sphinx/locale/__init__.py:23
+msgid "Tip"
+msgstr "نکته"
+
+#: sphinx/locale/__init__.py:24
+msgid "Warning"
+msgstr "هشدار"
+
+#: sphinx/locale/__init__.py:28
+#, python-format
+msgid "New in version %s"
+msgstr "جدید در نسخه %s"
+
+#: sphinx/locale/__init__.py:29
+#, python-format
+msgid "Changed in version %s"
+msgstr "تغییر داده شده در نسخه %s"
+
+#: sphinx/locale/__init__.py:30
+#, python-format
+msgid "Deprecated since version %s"
+msgstr "منسوخ شده از نسخه %s"
+
+#: sphinx/locale/__init__.py:34
+msgid "module"
+msgstr "ماژول"
+
+#: sphinx/locale/__init__.py:35
+msgid "keyword"
+msgstr "کلمه کلیدی"
+
+#: sphinx/locale/__init__.py:36
+msgid "operator"
+msgstr "عملگر"
+
+#: sphinx/locale/__init__.py:37
+msgid "object"
+msgstr "شیء"
+
+#: sphinx/locale/__init__.py:38
+msgid "exception"
+msgstr "استثناء"
+
+#: sphinx/locale/__init__.py:39
+msgid "statement"
+msgstr "گذاره"
+
+#: sphinx/locale/__init__.py:40
+msgid "built-in function"
+msgstr "توابع درونی"
+
+#: sphinx/static/doctools.js:174
+msgid "Hide Search Matches"
+msgstr "عدم نمایش نتایج ÛŒØ§ÙØª شده"
+
+#: sphinx/static/searchtools.js:274
+msgid "Searching"
+msgstr "در حال جستجو"
+
+#: sphinx/static/searchtools.js:279
+msgid "Preparing search..."
+msgstr "...آماده جستجو"
+
+#: sphinx/static/searchtools.js:338
+msgid "module, in "
+msgstr "ماژول, در"
+
+#: sphinx/static/searchtools.js:347
+msgid ", in "
+msgstr ", در"
+
+#: sphinx/static/searchtools.js:447
+#: sphinx/templates/search.html:18
+msgid "Search Results"
+msgstr "نتایج جستجو"
+
+#: sphinx/static/searchtools.js:449
+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/static/searchtools.js:451
+#, python-format
+msgid "Search finished, found %s page(s) matching the search query."
+msgstr "جستجو انجام شد ØŒ %s ØµÙØ­Ù‡ مطابق با پرس Ùˆ جو پیدا شد"
+
+#: sphinx/templates/defindex.html:2
+msgid "Overview"
+msgstr "بررسی اجمالی"
+
+#: sphinx/templates/defindex.html:11
+msgid "Indices and tables:"
+msgstr "ایندکس ها و جداول:"
+
+#: sphinx/templates/defindex.html:14
+msgid "Complete Table of Contents"
+msgstr "Ùهرست کامل مطالب"
+
+#: sphinx/templates/defindex.html:15
+msgid "lists all sections and subsections"
+msgstr "Ùهرست تمامی بخش ها Ùˆ زیر مجموعه ها"
+
+#: sphinx/templates/defindex.html:17
+msgid "search this documentation"
+msgstr "جستجو در این اسناد"
+
+#: sphinx/templates/defindex.html:20
+msgid "quick access to all modules"
+msgstr "دسترسی سریع به تمامی متدها"
+
+#: sphinx/templates/defindex.html:22
+msgid "all functions, classes, terms"
+msgstr "تمامی توابع ، کلاس ها ، اصطلاحات"
+
+#: sphinx/templates/genindex-single.html:5
+#, python-format
+msgid "Index &ndash; %(key)s"
+msgstr "Ùهرست &ndash; %(key)s"
+
+#: sphinx/templates/genindex-single.html:44
+#: sphinx/templates/genindex-split.html:14
+#: sphinx/templates/genindex-split.html:27
+#: sphinx/templates/genindex.html:54
+msgid "Full index on one page"
+msgstr "Ùهرست کامل در یک ØµÙØ­Ù‡"
+
+#: sphinx/templates/genindex-split.html:7
+msgid "Index pages by letter"
+msgstr "Ùهرست ØµÙØ­Ø§Øª بر اساس حروÙ"
+
+#: sphinx/templates/genindex-split.html:15
+msgid "can be huge"
+msgstr ""
+
+#: sphinx/templates/layout.html:9
+msgid "Navigation"
+msgstr "ناوبری"
+
+#: sphinx/templates/layout.html:40
+msgid "Table Of Contents"
+msgstr "Ùهرست عناوین"
+
+#: sphinx/templates/layout.html:46
+msgid "Previous topic"
+msgstr "موضوع قبلی"
+
+#: sphinx/templates/layout.html:47
+msgid "previous chapter"
+msgstr "ÙØµÙ„ قبلی"
+
+#: sphinx/templates/layout.html:50
+msgid "Next topic"
+msgstr "موضوع بعدی"
+
+#: sphinx/templates/layout.html:51
+msgid "next chapter"
+msgstr "ÙØµÙ„ بعدی"
+
+#: sphinx/templates/layout.html:55
+msgid "This Page"
+msgstr "ØµÙØ­Ù‡ ÙØ¹Ù„ÛŒ"
+
+#: sphinx/templates/layout.html:59
+msgid "Suggest Change"
+msgstr ""
+
+#: sphinx/templates/layout.html:60
+#: sphinx/templates/layout.html:62
+msgid "Show Source"
+msgstr "نمایش سورس"
+
+#: sphinx/templates/layout.html:71
+msgid "Quick search"
+msgstr "جستجو سریع"
+
+#: sphinx/templates/layout.html:71
+msgid "Keyword search"
+msgstr "جستجو کلید واژه"
+
+#: sphinx/templates/layout.html:73
+msgid "Go"
+msgstr "برو"
+
+#: sphinx/templates/layout.html:78
+msgid "Enter a module, class or function name."
+msgstr "نام یک ماژول ، کلاس و یا تابع را وارد نمائید"
+
+#: sphinx/templates/layout.html:119
+#, python-format
+msgid "Search within %(docstitle)s"
+msgstr "جستجو در %(docstitle)s"
+
+#: sphinx/templates/layout.html:128
+msgid "About these documents"
+msgstr "درباره این مستندات"
+
+#: sphinx/templates/layout.html:131
+#: sphinx/templates/search.html:2
+#: sphinx/templates/search.html:5
+msgid "Search"
+msgstr "جستجو"
+
+#: sphinx/templates/layout.html:133
+msgid "Copyright"
+msgstr "کپی رایت"
+
+#: sphinx/templates/layout.html:178
+#, python-format
+msgid "&copy; <a href=\"%(path)s\">Copyright</a> %(copyright)s."
+msgstr ""
+
+#: sphinx/templates/layout.html:180
+#, python-format
+msgid "&copy; Copyright %(copyright)s."
+msgstr ""
+
+#: sphinx/templates/layout.html:183
+#, python-format
+msgid "Last updated on %(last_updated)s."
+msgstr ". %(last_updated)s آخرین بروز رسانی در"
+
+#: sphinx/templates/layout.html:186
+#, 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/templates/modindex.html:15
+msgid "Most popular modules:"
+msgstr "متداول ترین ماژول ها:"
+
+#: sphinx/templates/modindex.html:24
+msgid "Show modules only available on these platforms"
+msgstr "تنها ماژول هایی Ú©Ù‡ در این Ù¾Ù„ØªÙØ±Ù… در دسترس هستند را نشان بده"
+
+#: sphinx/templates/modindex.html:56
+msgid "Deprecated"
+msgstr "منسوخ شده"
+
+#: sphinx/templates/opensearch.xml:4
+#, python-format
+msgid "Search %(docstitle)s"
+msgstr "جستجو %(docstitle)s"
+
+#: sphinx/templates/page.html:8
+msgid "<strong>Note:</strong> You requested an out-of-date URL from this server. We've tried to redirect you to the new location of this page, but it may not be the right one."
+msgstr ""
+
+#: sphinx/templates/search.html:7
+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 less words won't appear in the result list."
+msgstr "در اینجا شما Ù…ÛŒ توانید مستندات را جستجو نمائید ØŒ کلماتی را در کادر جستجو وارد کنید Ùˆ سپس بر روی دکمه جستجو کلیک نمائید ØŒ توجه کنید Ú©Ù‡ تابع جستجو گر امر جستجو را بطور خودکار برای تمامی کلمات دنبال خواهد کرد .ØµÙØ­Ø§ØªÛŒ Ú©Ù‡ شامل کلمات کمتری هستند ØŒ در لیست جستجو نمایش داده نخواهند شد."
+
+#: sphinx/templates/search.html:14
+msgid "search"
+msgstr "جستجو"
+
+#: sphinx/templates/search.html:20
+msgid "Your search did not match any results."
+msgstr ".جستجوی شما نتیجه ایی در بر نداشت"
+
+#: sphinx/templates/changes/frameset.html:5
+#: sphinx/templates/changes/versionchanges.html:12
+#, python-format
+msgid "Changes in Version %(version)s &mdash; %(docstitle)s"
+msgstr "تغییرات در نسخه %(version)s &mdash; %(docstitle)s"
+
+#: sphinx/templates/changes/rstsource.html:5
+#, python-format
+msgid "%(filename)s &mdash; %(docstitle)s"
+msgstr ""
+
+#: sphinx/templates/changes/versionchanges.html:17
+#, python-format
+msgid "Automatically generated list of changes in version %(version)s"
+msgstr "لیست تولید شده خودکار از تغییرات در نسخه %(version)s"
+
+#: sphinx/templates/changes/versionchanges.html:18
+msgid "Library changes"
+msgstr "تغییرات کتابخانه ایی"
+
+#: sphinx/templates/changes/versionchanges.html:23
+msgid "C API changes"
+msgstr "C API تغییرات"
+
+#: sphinx/templates/changes/versionchanges.html:25
+msgid "Other changes"
+msgstr "دگر تغییرات"
+
diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.mo b/sphinx/locale/fi/LC_MESSAGES/sphinx.mo
index 7c300006..0195b3dd 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 04839bba..8b649a26 100644
--- a/sphinx/locale/fi/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/fi/LC_MESSAGES/sphinx.po
@@ -8,22 +8,22 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%d.%m.%Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr ""
@@ -36,67 +36,67 @@ msgstr ""
msgid "Module level"
msgstr "Moduulitaso"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Yleinen sisällysluettelo"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "hakemisto"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr ">"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "<"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Luvun kirjoittaja: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Moduulin kirjoittaja: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "Moduulin kirjoittaja: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Tekijä: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Katso myös"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr ""
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr ""
@@ -125,13 +125,13 @@ msgstr ""
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
#, fuzzy
msgid "function"
msgstr "Varoitus"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr ""
@@ -139,7 +139,7 @@ msgstr ""
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr ""
@@ -147,187 +147,198 @@ msgstr ""
msgid "variable"
msgstr ""
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr ""
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr ""
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr ""
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr ""
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr ""
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, python-format
msgid "%s() (built-in function)"
msgstr ""
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr ""
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, python-format
+msgid "%s() (class)"
+msgstr ""
+
+#: sphinx/domains/javascript.py:110
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr ""
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
msgid "Arguments"
msgstr ""
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr ""
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
msgid "Variables"
msgstr ""
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr ""
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, python-format
msgid "%s (built-in variable)"
msgstr ""
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr ""
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr ""
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr ""
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr ""
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr ""
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr ""
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s.%s class method)"
msgstr ""
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, python-format
msgid "%s() (%s class method)"
msgstr ""
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr ""
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Ympäristö"
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (moduuli)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "Moduuli sisällysluettelo"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "moduulit"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Poistettu"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr ""
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
+#: sphinx/domains/python.py:528
msgid "class method"
msgstr ""
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr ""
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "moduuli"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+msgid " (deprecated)"
+msgstr "Poistettu"
+
+#: 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 (moduuli)"
-#: 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 "moduuli"
@@ -367,7 +378,7 @@ msgstr ""
#: 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/writers/latex.py:174
msgid "Index"
msgstr "Sisällysluettelo"
@@ -379,12 +390,12 @@ msgstr "Moduuli sisällysluettelo"
msgid "Search Page"
msgstr "Etsi sivu"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -402,104 +413,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:175
msgid "keyword"
msgstr ""
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr ""
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr ""
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr ""
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr ""
@@ -509,7 +520,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Etsi"
@@ -637,13 +648,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 +662,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +711,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr ""
@@ -713,25 +724,25 @@ msgstr ""
msgid "Hide Search Matches"
msgstr "Piilota löydetyt"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Etsitään"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Valmistellaan etsintää..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ""
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
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
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr "Etsintä tehty, löydetty %s sivu(a)."
@@ -741,7 +752,7 @@ msgid "Expand sidebar"
msgstr ""
#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:107
msgid "Collapse sidebar"
msgstr ""
@@ -749,19 +760,19 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr ""
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
#, fuzzy
msgid "Continued on next page"
msgstr ""
diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.mo b/sphinx/locale/fr/LC_MESSAGES/sphinx.mo
index bfa97b19..e17b5c78 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 8afcf435..24da5c39 100644
--- a/sphinx/locale/fr/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/fr/LC_MESSAGES/sphinx.po
@@ -11,22 +11,22 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%d %B %Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -39,67 +39,67 @@ msgstr "Fonctions de base"
msgid "Module level"
msgstr "Module"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Index général"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "index"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "suivant"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "précédent"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr "(dans"
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Auteur de la section : "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Auteur du module : "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "Auteur du module : "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Auteur : "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Voir aussi"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Retourne"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "Type retourné"
@@ -128,12 +128,12 @@ msgstr "%s (type C)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "fonction"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "membre"
@@ -141,7 +141,7 @@ msgstr "membre"
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "type"
@@ -150,190 +150,201 @@ msgstr "type"
msgid "variable"
msgstr "Variable"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr "%s (classe C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (type C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (membre C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (fonction C++)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr "classe"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (méthode %s)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (classe C++)"
+
+#: sphinx/domains/javascript.py:110
#, 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:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (attribut %s)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
msgstr "Paramètres"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr "Lance"
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr "données"
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "attribut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
msgstr "Variable"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (dans le module %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (dans le module %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (classe de base)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (classe dans %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (méthode %s.%s)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (méthode statique %s.%s)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (méthode statique %s)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (méthode %s.%s)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (méthode %s)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (attribut %s.%s)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Plateformes : "
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (module)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "Index du module"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "modules"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Obsolète"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "exception"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr "méthode"
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
msgstr "%s() (méthode %s)"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "méthode statique"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "module"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+msgid " (deprecated)"
+msgstr "Obsolète"
+
+#: 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)"
-#: 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"
@@ -373,7 +384,7 @@ msgstr "option du programme"
#: 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/writers/latex.py:174
msgid "Index"
msgstr "Index"
@@ -385,12 +396,12 @@ msgstr "Index du module"
msgid "Search Page"
msgstr "Page de recherche"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr "alias de :class:`%s`"
@@ -408,104 +419,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:175
msgid "keyword"
msgstr "mot-clé"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "opérateur"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "objet"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "état"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "fonction de base"
@@ -515,7 +526,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Recherche"
@@ -646,13 +657,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\n"
-#: 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 +679,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +728,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "Lien permanent vers cette définition"
@@ -730,19 +741,19 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "En cours de recherche"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Préparation de la recherche..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ", dans"
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
msgid ""
"Your search did not match any documents. Please make sure that all words "
"are spelled correctly and that you've selected enough categories."
@@ -751,7 +762,7 @@ msgstr ""
"des termes de recherche et que vous avez sélectionné suffisamment de "
"catégories."
-#: sphinx/themes/basic/static/searchtools.js:493
+#: sphinx/themes/basic/static/searchtools.js:508
#, 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."
@@ -761,7 +772,7 @@ 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:107
msgid "Collapse sidebar"
msgstr "Réduire le menu"
@@ -769,19 +780,19 @@ msgstr "Réduire le menu"
msgid "Contents"
msgstr "Contenu"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "Version"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr "Notes de bas de page"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr "Suite de la page précédente"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
#, fuzzy
msgid "Continued on next page"
msgstr "Suite sur la page suivante"
@@ -790,15 +801,3 @@ msgstr "Suite sur la page suivante"
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.mo b/sphinx/locale/hr/LC_MESSAGES/sphinx.mo
index e032adeb..c6b1b384 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..1b9f9c80 100644
--- a/sphinx/locale/hr/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/hr/LC_MESSAGES/sphinx.po
@@ -4,22 +4,22 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%d %B, %Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -32,67 +32,67 @@ msgstr "Ugrađeni dijelovi"
msgid "Module level"
msgstr "Nivo modula"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Opceniti abecedni indeks"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "abecedni indeks"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "naprijed"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "nazad"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr " (u "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Autor sekcije:"
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Autor modula:"
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "Autor modula:"
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Autor:"
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Pogledaj i"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Vraća"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "Vraća tip"
@@ -121,12 +121,12 @@ msgstr "%s (C tip)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "funkcija"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "Älan"
@@ -134,7 +134,7 @@ msgstr "Älan"
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "tip"
@@ -143,191 +143,202 @@ msgstr "tip"
msgid "variable"
msgstr "Varijabla"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++ razred)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ tip)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ Älan)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ funkcija)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
#, fuzzy
msgid "class"
msgstr "razred"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s metoda)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (C++ razred)"
+
+#: sphinx/domains/javascript.py:110
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s atribut)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
msgstr "Parametri"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "atribut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
msgstr "Varijabla"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (u modulu %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (u modulu %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (ugrađen razred)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (razred u %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s metoda)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s statiÄna metoda)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s statiÄna metoda)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s metoda)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s metoda)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s atribut)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Platforme:"
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (modul)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "Popis modula"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "Moduli"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Zastarjelo"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "izuzetak"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
msgstr "%s() (%s metoda)"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "statiÄna metoda"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "modul"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+msgid " (deprecated)"
+msgstr "Zastarjelo"
+
+#: 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 (modul)"
-#: 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 "modul"
@@ -367,7 +378,7 @@ msgstr ""
#: 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/writers/latex.py:174
msgid "Index"
msgstr "Abecedni popis"
@@ -379,12 +390,12 @@ msgstr "Popis modula"
msgid "Search Page"
msgstr "Tražilica"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr " Osnove: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr "nadimak za :class:`%s`"
@@ -402,104 +413,104 @@ msgstr "(Originalan unos se nalazi u %s, u retku %d, i može biti pronađen "
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:175
msgid "keyword"
msgstr "kljuÄna rijeÄ"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "operator"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "objekt"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "izjava"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "ugrađen funkcije"
@@ -509,7 +520,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Traži"
@@ -639,7 +650,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 +658,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 +670,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +719,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "Link na tu definiciju"
@@ -721,19 +732,19 @@ msgstr "Link na tu definiciju"
msgid "Hide Search Matches"
msgstr "Sakrij rezultate pretrage"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Tražim"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Pripremam pretraživanje..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ", u "
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
msgid ""
"Your search did not match any documents. Please make sure that all words "
"are spelled correctly and that you've selected enough categories."
@@ -741,7 +752,7 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr ""
@@ -753,7 +764,7 @@ msgid "Expand sidebar"
msgstr ""
#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:107
msgid "Collapse sidebar"
msgstr ""
@@ -761,19 +772,19 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "Distribucija"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr "nastavak sa prethodne stranice"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
msgid "Continued on next page"
msgstr "nastavak na slijedećoj stranici"
@@ -781,15 +792,3 @@ msgstr "nastavak na slijedećoj stranici"
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.mo b/sphinx/locale/it/LC_MESSAGES/sphinx.mo
index 10ca29a5..c07af572 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..590c5c86 100644
--- a/sphinx/locale/it/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/it/LC_MESSAGES/sphinx.po
@@ -7,22 +7,22 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%d %B %Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -35,67 +35,67 @@ msgstr "Builtin"
msgid "Module level"
msgstr "Modulo"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Indice generale"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "indice"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "successivo"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "precedente"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr " (in "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Autore della sezione: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Autore del modulo: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "Autore del modulo: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Autore: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Vedi anche"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Ritorna"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "Tipo di ritorno"
@@ -124,12 +124,12 @@ msgstr "%s (tipo C)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "funzione"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "membro"
@@ -137,7 +137,7 @@ msgstr "membro"
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "tipo"
@@ -146,190 +146,201 @@ msgstr "tipo"
msgid "variable"
msgstr "Variabile"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr "%s (classe C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (tipo C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (membro C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (funzione C++)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr ""
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s metodo)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (classe C++)"
+
+#: sphinx/domains/javascript.py:110
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s attributo)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
msgstr "Parametri"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "attributo"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
msgstr "Variabile"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (nel modulo %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (nel modulo %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (classe built-in)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (classe in %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s metodo)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s metodo statico)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s metodo statico)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s metodo)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s metodo)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s attributo)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Piattaforme:"
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (modulo)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "Indice dei Moduli"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "moduli"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Deprecato"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "eccezione"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
msgstr "%s() (%s metodo)"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "metodo statico"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "modulo"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+msgid " (deprecated)"
+msgstr "Deprecato"
+
+#: 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 (modulo)"
-#: 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 "modulo"
@@ -369,7 +380,7 @@ msgstr ""
#: 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/writers/latex.py:174
msgid "Index"
msgstr "Indice"
@@ -381,12 +392,12 @@ msgstr "Indice dei Moduli"
msgid "Search Page"
msgstr "Cerca"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr "alias per :class:`%s`"
@@ -404,104 +415,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:175
msgid "keyword"
msgstr "keyword"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "operatore"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "oggetto"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "statement"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "funzione built-in"
@@ -511,7 +522,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Cerca"
@@ -641,13 +652,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 +672,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +721,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "link permanente per questa definizione"
@@ -723,19 +734,19 @@ msgstr "link permanente per questa definizione"
msgid "Hide Search Matches"
msgstr "Nascondi i risultati della ricerca"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Ricerca in corso"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Preparazione della ricerca"
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ", in "
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
msgid ""
"Your search did not match any documents. Please make sure that all words "
"are spelled correctly and that you've selected enough categories."
@@ -744,7 +755,7 @@ msgstr ""
"dei termini di ricerca e di avere selezionato un numero sufficiente di "
"categorie"
-#: sphinx/themes/basic/static/searchtools.js:493
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr "Ricerca terminata, trovate %s pagine corrispondenti alla ricerca."
@@ -754,7 +765,7 @@ msgid "Expand sidebar"
msgstr ""
#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:107
msgid "Collapse sidebar"
msgstr ""
@@ -762,19 +773,19 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "Release"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
#, fuzzy
msgid "Continued on next page"
msgstr "Indice completo in una pagina"
@@ -782,3 +793,4 @@ msgstr "Indice completo in una pagina"
#: sphinx/writers/text.py:422
msgid "[image]"
msgstr "[immagine]"
+
diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.js b/sphinx/locale/ja/LC_MESSAGES/sphinx.js
index 6b63245e..0a135540 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": {"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": "\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", "Searching": "\u691c\u7d22\u4e2d", "Collapse sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u305f\u305f\u3080", "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
diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.mo b/sphinx/locale/ja/LC_MESSAGES/sphinx.mo
index b0284f91..d77e83a4 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..03e7123d 100644
--- a/sphinx/locale/ja/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ja/LC_MESSAGES/sphinx.po
@@ -8,22 +8,22 @@ msgstr ""
"Project-Id-Version: Sphinx 0.5\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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\n"
"Last-Translator: Yasushi MASUDA <whosaysni@gmail.com>\n"
"Language-Team: ja <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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%Y 年 %m 月 %d 日"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -36,67 +36,67 @@ msgstr "組ã¿è¾¼ã¿"
msgid "Module level"
msgstr "モジュールレベル"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "ç·åˆç´¢å¼•"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "索引"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "次ã¸"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "å‰ã¸"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "ã“ã®ç¯€ã®ä½œè€…: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "モジュールã®ä½œè€…: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "モジュールã®ä½œè€…: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "作者: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "å‚考"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "戻り値"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "戻り値ã®åž‹"
@@ -125,12 +125,12 @@ msgstr "%s (C ã®ãƒ‡ãƒ¼ã‚¿åž‹)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "ã®é–¢æ•°"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "ã®ãƒ¡ãƒ³ãƒå¤‰æ•°"
@@ -138,7 +138,7 @@ msgstr "ã®ãƒ¡ãƒ³ãƒå¤‰æ•°"
msgid "macro"
msgstr "ã®ãƒžã‚¯ãƒ­"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "ã®ãƒ‡ãƒ¼ã‚¿åž‹"
@@ -147,193 +147,204 @@ msgstr "ã®ãƒ‡ãƒ¼ã‚¿åž‹"
msgid "variable"
msgstr "変数"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, fuzzy, python-format
msgid "%s (C++ class)"
msgstr "%s (ã®ã‚¯ãƒ©ã‚¹)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ ã®ãƒ‡ãƒ¼ã‚¿åž‹)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ ã®ãƒ¡ãƒ³ãƒå¤‰æ•°)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ ã®é–¢æ•°)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
-msgstr ""
+msgstr "クラス"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (組ã¿è¾¼ã¿é–¢æ•°)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s ã®ãƒ¡ã‚½ãƒƒãƒ‰)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (ã®ã‚¯ãƒ©ã‚¹)"
+
+#: sphinx/domains/javascript.py:110
#, 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:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s ã®å±žæ€§)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
msgstr "パラメタ"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
-msgstr ""
+msgstr "例外"
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
-msgstr ""
+msgstr "データ"
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "ã®å±žæ€§"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
msgstr "変数"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (%s モジュール)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (組ã¿è¾¼ã¿å¤‰æ•°)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (%s モジュール)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (組ã¿è¾¼ã¿å¤‰æ•°)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (%s ã®ã‚¯ãƒ©ã‚¹)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s ã®ãƒ¡ã‚½ãƒƒãƒ‰)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s ã®é™çš„メソッド)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s ã®é™çš„メソッド)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s ã®ãƒ¡ã‚½ãƒƒãƒ‰)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s ã®ãƒ¡ã‚½ãƒƒãƒ‰)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s ã®å±žæ€§)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "プラットフォーム: "
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (モジュール)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "モジュール索引"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "モジュール"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "撤廃"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "例外"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
-msgstr ""
+msgstr "メソッド"
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
msgstr "%s() (%s ã®ãƒ¡ã‚½ãƒƒãƒ‰)"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "ã®é™çš„メソッド"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "モジュール"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+msgid " (deprecated)"
+msgstr "撤廃"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
-msgstr ""
+msgstr "%s (ディレクティブ)"
-#: 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 ""
+msgstr "ディレクティブ"
-#: sphinx/domains/rst.py:104
+#: sphinx/domains/rst.py:107
#, fuzzy
msgid "role"
-msgstr "モジュール"
+msgstr "ロール"
#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
#, python-format
@@ -347,15 +358,15 @@ msgstr "%sコマンドラインオプション; %s"
#: sphinx/domains/std.py:328
msgid "glossary term"
-msgstr ""
+msgstr "用語集ã®é …ç›®"
#: sphinx/domains/std.py:329
msgid "grammar token"
-msgstr ""
+msgstr "文法トークン"
#: sphinx/domains/std.py:330
msgid "reference label"
-msgstr ""
+msgstr "å‚照ラベル"
#: sphinx/domains/std.py:331
msgid "environment variable"
@@ -363,14 +374,14 @@ msgstr "環境変数"
#: sphinx/domains/std.py:332
msgid "program option"
-msgstr ""
+msgstr "プログラムオプション"
#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
#: 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/writers/latex.py:174
msgid "Index"
msgstr "索引"
@@ -382,12 +393,12 @@ msgstr "モジュール索引"
msgid "Search Page"
msgstr "検索ページ"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr " ベースクラス: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr ":class:`%s` ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹"
@@ -399,110 +410,110 @@ 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
+#: sphinx/ext/viewcode.py:131
#, fuzzy
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:175
msgid "keyword"
msgstr "キーワード"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "演算å­"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "オブジェクト"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "æ–‡"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "組ã¿è¾¼ã¿é–¢æ•°"
@@ -512,7 +523,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "検索"
@@ -642,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 "検索機能を使ã†ã«ã¯ 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 +667,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +716,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "ã“ã®å®šç¾©ã¸ã®ãƒ‘ーマリンク"
@@ -718,58 +729,59 @@ msgstr "ã“ã®å®šç¾©ã¸ã®ãƒ‘ーマリンク"
msgid "Hide Search Matches"
msgstr "æ¤œç´¢çµæžœã‚’éš ã™"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "検索中"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "æ¤œç´¢ã®æº–備中..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ""
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
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
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr "検索ãŒçµ‚了ã—ã€æ¡ä»¶ã«ä¸€è‡´ã™ã‚‹ãƒšãƒ¼ã‚¸ãŒ %s 個ã¿ã¤ã‹ã‚Šã¾ã—ãŸã€‚"
#: sphinx/themes/default/static/sidebar.js:66
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:107
msgid "Collapse sidebar"
-msgstr ""
+msgstr "サイドãƒãƒ¼ã‚’ãŸãŸã‚€"
#: sphinx/themes/haiku/layout.html:26
msgid "Contents"
-msgstr ""
+msgstr "コンテンツ"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "リリース"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr "注記"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr "å‰ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ã®ç¶šã"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
msgid "Continued on next page"
msgstr "ç·ç´¢å¼•"
#: sphinx/writers/text.py:422
msgid "[image]"
msgstr "[ç”»åƒ]"
+
diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.mo b/sphinx/locale/lt/LC_MESSAGES/sphinx.mo
index 794ae655..1ed94be5 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..081c4994 100644
--- a/sphinx/locale/lt/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/lt/LC_MESSAGES/sphinx.po
@@ -7,8 +7,9 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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"
@@ -16,13 +17,13 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%Y-%m-%d"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr ""
@@ -35,66 +36,66 @@ msgstr "Įtaisytieji"
msgid "Module level"
msgstr "Modulio lygis"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Bendras indeksas"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "indeksas"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "kitas"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "praeitas"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr " (kuris yra "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Skyriaus autorius: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Modulio autorius: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
msgid "Code author: "
msgstr "Kodo autorius: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Autorius: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Taip pat žiūrėkite"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
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:106
msgid "Return type"
msgstr "Grąžinamos reikšmės tipas"
@@ -123,12 +124,12 @@ msgstr "%s (C tipas)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "funkcija"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "narys"
@@ -136,7 +137,7 @@ msgstr "narys"
msgid "macro"
msgstr "makrokomanda"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "tipas"
@@ -144,186 +145,197 @@ msgstr "tipas"
msgid "variable"
msgstr "kintamasis"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr ""
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ tipas)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ narys)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ funkcija)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr "klasÄ—"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s metodas)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, python-format
+msgid "%s() (class)"
+msgstr "%s() (klasÄ—)"
+
+#: sphinx/domains/javascript.py:110
#, 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:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s atributas)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
msgid "Arguments"
msgstr "Argumentais"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr "Išmeta"
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr "duomenys"
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "atribudas"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
msgid "Variables"
msgstr "Kintamieji"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (modulyje %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (modulje %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (įtaisytoji klasė)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (klasė iš %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s metodas)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s statinis metodas)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s statinis metodas)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s klasÄ—s metodas)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s klasÄ—s metodas)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s atributas)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Platformos: "
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (modulis)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
msgid "Python Module Index"
msgstr ""
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "moduliai"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Atmestas"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "išimtis"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr "metodas"
-#: sphinx/domains/python.py:502
+#: sphinx/domains/python.py:528
msgid "class method"
msgstr "klasÄ—s metodas"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "statinis metodas"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "modulis"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+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Ä—"
@@ -362,7 +374,7 @@ msgstr "programos parinktis"
#: 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/writers/latex.py:174
msgid "Index"
msgstr "Indeksas"
@@ -374,12 +386,12 @@ msgstr "Modulio indeksas"
msgid "Search Page"
msgstr "Paieškos puslapis"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr " BazÄ—s: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr ":class:`%s` alternatyvus vardas"
@@ -397,103 +409,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:175
msgid "keyword"
msgstr "bazinis žodis"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "operatorius"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "objektas"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "sakinis"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "įtaisytoji funkcija"
@@ -503,7 +515,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Paieška"
@@ -633,7 +645,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 +653,29 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +715,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "Nuoroda į šį apibrėžimą"
@@ -712,25 +728,27 @@ msgstr "Nuoroda į šį apibrėžimą"
msgid "Hide Search Matches"
msgstr "Paslėpti paieškos rezultatus"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Ieškoma"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Ruošiama paieška..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ", kuris yra "
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
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ų."
+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
+#: sphinx/themes/basic/static/searchtools.js:508
#, 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ų)"
@@ -740,7 +758,7 @@ 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:107
msgid "Collapse sidebar"
msgstr "Paslėpti šoninę juostą"
@@ -748,19 +766,19 @@ msgstr "Paslėpti šoninę juostą"
msgid "Contents"
msgstr "Turinys"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "Leidimas"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr "Išnašos"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr "tęsinys iš praeito puslapio"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
msgid "Continued on next page"
msgstr "Tęsinys kitame puslapyje"
diff --git a/sphinx/locale/nl/LC_MESSAGES/sphinx.mo b/sphinx/locale/nl/LC_MESSAGES/sphinx.mo
index 2002607f..39f46af0 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..1e321591 100644
--- a/sphinx/locale/nl/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/nl/LC_MESSAGES/sphinx.po
@@ -7,23 +7,22 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
-#: sphinx/environment.py:106
-#: sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%d. %B %Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -36,71 +35,67 @@ msgstr "Builtins"
msgid "Module level"
msgstr "Moduleniveau"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Algemene index"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "Index"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "volgende"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "vorige"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Auteur van deze sectie: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Auteur van deze module: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "Auteur van deze module: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Auteur: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Zie ook"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Returns"
-#: sphinx/domains/c.py:56
-#: sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "Return type"
@@ -129,15 +124,12 @@ msgstr "%s (C type)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "functie"
-#: sphinx/domains/c.py:172
-#: sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "member"
@@ -145,8 +137,7 @@ msgstr "member"
msgid "macro"
msgstr "macro"
-#: sphinx/domains/c.py:174
-#: sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "type"
@@ -155,207 +146,206 @@ msgstr "type"
msgid "variable"
msgstr "variabele"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++ klasse)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ type)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ member)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ functie)"
-#: sphinx/domains/cpp.py:1030
-#: sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr "klasse"
-#: sphinx/domains/javascript.py:117
-#: sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s methode)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (C++ klasse)"
+
+#: sphinx/domains/javascript.py:110
#, 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:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s attribuut)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
msgstr "Parameters"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167
-#: sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168
-#: sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "attribuut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
msgstr "Variabele"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (in module %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (in module %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (geïntegreerde klasse)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (klasse in %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s methode)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s statische methode)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s statische methode)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s methode)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s methode)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s attribuut)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Platformen: "
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (module)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "Module-index"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "modules"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Verouderd"
-#: sphinx/domains/python.py:500
-#: sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "exceptie"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
msgstr "%s() (%s methode)"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "statische methode"
-#: sphinx/domains/python.py:505
-#: sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "module"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+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)"
-#: 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"
-#: sphinx/domains/std.py:68
-#: sphinx/domains/std.py:84
+#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
#, python-format
msgid "environment variable; %s"
msgstr "omgevingsvariabele; %s"
@@ -385,15 +375,12 @@ msgstr "omgevingsvariabele"
msgid "program option"
msgstr ""
-#: sphinx/domains/std.py:360
-#: sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
#: 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:11 sphinx/themes/basic/genindex.html:14
+#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
+#: sphinx/writers/latex.py:174
msgid "Index"
msgstr "Index"
@@ -401,17 +388,16 @@ msgstr "Index"
msgid "Module Index"
msgstr "Module-index"
-#: sphinx/domains/std.py:362
-#: sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Zoekpagina"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -429,132 +415,126 @@ 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
+#: 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 ""
-#: 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:175
msgid "keyword"
msgstr "trefwoord"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "operator"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "object"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "statement"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
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:128
+#: 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"
@@ -644,8 +624,12 @@ msgstr "Laatste aanpassing op %(last_updated)s."
#: sphinx/themes/basic/layout.html:189
#, 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 +652,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 +666,22 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +721,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "Permalink naar deze definitie"
@@ -750,23 +734,27 @@ msgstr "Permalink naar deze definitie"
msgid "Hide Search Matches"
msgstr "Zoekresultaten verbergen"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Zoeken"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Het zoeken wordt voorbereid..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
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:506
+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
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr "Zoeken voltooid, %s pagina(s) gevonden."
@@ -776,7 +764,7 @@ msgid "Expand sidebar"
msgstr ""
#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:107
msgid "Collapse sidebar"
msgstr ""
@@ -784,20 +772,19 @@ msgstr ""
msgid "Contents"
msgstr "Inhoud"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "Release"
-#: sphinx/writers/latex.py:572
-#: sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr "Voetnoten"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr "Vervolgd van vorige pagina"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
msgid "Continued on next page"
msgstr "Vervolgd op volgende pagina"
@@ -805,12 +792,3 @@ msgstr "Vervolgd op volgende pagina"
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.mo b/sphinx/locale/pl/LC_MESSAGES/sphinx.mo
index 3c6105cd..132e7da3 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..f5260f9e 100644
--- a/sphinx/locale/pl/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/pl/LC_MESSAGES/sphinx.po
@@ -4,23 +4,23 @@ 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"
+"PO-Revision-Date: 2010-12-17 13:36+0100\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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%B %d %Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -33,67 +33,67 @@ msgstr "Wbudowane"
msgid "Module level"
msgstr "Poziom modułu"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Indeks ogólny"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "indeks"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "dalej"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "wstecz"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr " (w "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Autor rozdziału: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Autor modułu: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
-msgstr "Autor modułu: "
+msgstr "Autor kodu: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Autor: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Zobacz także"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Zwraca"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "Typ zwracany"
@@ -122,215 +122,226 @@ msgstr "%s (typ C)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "funkcja"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "pole"
#: sphinx/domains/c.py:173
msgid "macro"
-msgstr ""
+msgstr "makro"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "typ"
#: sphinx/domains/c.py:175
#, fuzzy
msgid "variable"
-msgstr "Zmienna"
+msgstr "zmienna"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
-msgstr "%s (klasie C++)"
+msgstr "%s (klasa C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (typ C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (pole C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (funkcja C++)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
-msgstr "klasie"
+msgstr "klasa"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s metoda)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s() (klasa)"
+
+#: sphinx/domains/javascript.py:110
#, 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:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s atrybut)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
-msgstr "Parametry"
+msgstr "Argumenty"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
-msgstr ""
+msgstr "Wyrzuca"
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
-msgstr ""
+msgstr "dane"
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "atrybut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
-msgstr "Zmienna"
+msgstr "Zmienne"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (w module %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (w module %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (klasa wbudowana)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, 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:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s metoda)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, 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:321
#, python-format
msgid "%s() (%s static method)"
-msgstr "%s() (%s statyczna metoda)"
+msgstr "%s() (%s metoda statyczna)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
-msgstr "%s() (%s.%s metoda)"
+msgstr "%s() (%s.%s metoda klasy)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, 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:344
#, python-format
msgid "%s (%s.%s attribute)"
-msgstr "%s (%s.%s atrybut)"
+msgstr "%s (atrybut %s.%s)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Platformy: "
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (moduł)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
-msgstr "Indeks modułów"
+msgstr "Indeks modułów pythona"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "moduły"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Niezalecane"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "wyjÄ…tek"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
-msgstr ""
+msgstr "metoda"
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
-msgstr "%s() (%s metoda)"
+msgstr "metoda klasy"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "statyczna metoda"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "moduł"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+msgid " (deprecated)"
+msgstr " (niezalecane)"
+
+#: sphinx/domains/rst.py:55
#, python-format
msgid "%s (directive)"
-msgstr ""
+msgstr "%s (dyrektywa)"
-#: sphinx/domains/rst.py:55
+#: sphinx/domains/rst.py:57
#, fuzzy, 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
+#: sphinx/domains/rst.py:107
#, fuzzy
msgid "role"
-msgstr "moduł"
+msgstr "rola"
#: sphinx/domains/std.py:68 sphinx/domains/std.py:84
#, python-format
@@ -344,15 +355,15 @@ msgstr "%sopcja linii komend; %s"
#: sphinx/domains/std.py:328
msgid "glossary term"
-msgstr ""
+msgstr "termin glosariusza"
#: sphinx/domains/std.py:329
msgid "grammar token"
-msgstr ""
+msgstr "symbol gramatyki"
#: sphinx/domains/std.py:330
msgid "reference label"
-msgstr ""
+msgstr "etykieta odsyłacza"
#: sphinx/domains/std.py:331
msgid "environment variable"
@@ -360,14 +371,14 @@ msgstr "zmienna środowiskowa"
#: sphinx/domains/std.py:332
msgid "program option"
-msgstr ""
+msgstr "opcja programu"
#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
#: 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/writers/latex.py:174
msgid "Index"
msgstr "Indeks"
@@ -379,129 +390,127 @@ msgstr "Indeks modułów"
msgid "Search Page"
msgstr "Wyszukiwanie"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr " Klasy bazowe: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, 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
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
+#: sphinx/ext/viewcode.py:131
#, fuzzy
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:175
msgid "keyword"
msgstr "słowo kluczowe"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "operator"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "obiekt"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "instrukcja"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "funkcja wbudowana"
@@ -511,7 +520,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Szukaj"
@@ -541,15 +550,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"
@@ -641,13 +650,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 +670,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +719,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "Stały odnośnik do tej definicji"
@@ -723,73 +732,61 @@ msgstr "Stały odnośnik do tej definicji"
msgid "Hide Search Matches"
msgstr "Ukryj wyniki wyszukiwania"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Wyszukiwanie"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Przygotowanie wyszukiwania..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ", w "
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
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."
+"słowa są poprawnie wpisane i że wybrałeś wystarczającą liczbę kategorii."
-#: sphinx/themes/basic/static/searchtools.js:493
+#: sphinx/themes/basic/static/searchtools.js:508
#, 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
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:107
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:172
msgid "Release"
msgstr "Wydanie"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr "Przypisy"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr "kontynuacja poprzedniej strony"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
msgid "Continued on next page"
msgstr "Kontynuacja na następnej stronie"
#: sphinx/writers/text.py:422
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.mo b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo
index 67c1ce54..31558971 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..75770ee9 100644
--- a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po
@@ -8,23 +8,22 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
-#: sphinx/environment.py:106
-#: sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%d/%m/%Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -37,70 +36,66 @@ msgstr "Internos"
msgid "Module level"
msgstr "Módulo"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Ãndice Geral"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "índice"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "próximo"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "anterior"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr " (em "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Autor da seção: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Autor do módulo: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
msgid "Code author: "
msgstr "Autor do código: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Autor: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Veja também"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Retorna"
-#: sphinx/domains/c.py:56
-#: sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "Tipo de retorno"
@@ -129,15 +124,12 @@ msgstr "%s (tipo C)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "função"
-#: sphinx/domains/c.py:172
-#: sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "membro"
@@ -145,8 +137,7 @@ msgstr "membro"
msgid "macro"
msgstr "macro"
-#: sphinx/domains/c.py:174
-#: sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "tipo"
@@ -154,203 +145,201 @@ msgstr "tipo"
msgid "variable"
msgstr "variável"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr "%s (classe C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (tipo C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (membro C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, 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:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr "classe"
-#: sphinx/domains/javascript.py:117
-#: sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (método %s)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (classe C++)"
+
+#: sphinx/domains/javascript.py:110
#, 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:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (atributo %s)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
msgid "Arguments"
msgstr "Parâmetros"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr "Gera"
-#: sphinx/domains/javascript.py:167
-#: sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr "dado"
-#: sphinx/domains/javascript.py:168
-#: sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "atributo"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
msgid "Variables"
msgstr "Variáveis"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (no módulo %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (no módulo %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (classe interna)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (classe em %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (método %s.%s)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, 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:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (método estático %s)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, 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:334
#, python-format
msgid "%s() (%s class method)"
msgstr "%s() (método de classe %s)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (atributo %s.%s)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Plataformas: "
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (módulo)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
msgid "Python Module Index"
msgstr "Ãndice de Módulos do Python"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "módulos"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Obsoleto"
-#: sphinx/domains/python.py:500
-#: sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "exceção"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr "método"
-#: sphinx/domains/python.py:502
-#, python-format
+#: sphinx/domains/python.py:528
msgid "class method"
msgstr "método de classe"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "método estático"
-#: sphinx/domains/python.py:505
-#: sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "módulo"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+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:68 sphinx/domains/std.py:84
#, python-format
msgid "environment variable; %s"
msgstr "váriavel de ambiente; %s"
@@ -380,15 +369,12 @@ msgstr "váriavel de ambiente"
msgid "program option"
msgstr "opção de programa"
-#: sphinx/domains/std.py:360
-#: sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
#: 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:11 sphinx/themes/basic/genindex.html:14
+#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
+#: sphinx/writers/latex.py:174
msgid "Index"
msgstr "Ãndice"
@@ -396,17 +382,16 @@ msgstr "Ãndice"
msgid "Module Index"
msgstr "Ãndice do Módulo"
-#: sphinx/domains/std.py:362
-#: sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Página de Pesquisa"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr " Bases: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr "apelido de :class:`%s`"
@@ -424,131 +409,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:175
msgid "keyword"
msgstr "palavra-chave"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "operador"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "objeto"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "comando"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
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:128
+#: 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"
@@ -638,8 +617,12 @@ msgstr "Última atualização em %(last_updated)s."
#: sphinx/themes/basic/layout.html:189
#, 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 +645,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 +659,22 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +714,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "Link permanente para esta definição"
@@ -744,33 +727,40 @@ msgstr "Link permanente para esta definição"
msgid "Hide Search Matches"
msgstr "Esconder Resultados da Pesquisa"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Pesquisando"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Preparando pesquisa..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
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:506
+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
+#: sphinx/themes/basic/static/searchtools.js:508
#, 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."
+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
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:107
msgid "Collapse sidebar"
msgstr "Recolher painel lateral"
@@ -778,20 +768,19 @@ msgstr "Recolher painel lateral"
msgid "Contents"
msgstr "Conteúdo"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "Versão"
-#: sphinx/writers/latex.py:572
-#: sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr "Notas de rodapé"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr "continuação da página anterior"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
msgid "Continued on next page"
msgstr "Continua na próxima página"
diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.mo b/sphinx/locale/ru/LC_MESSAGES/sphinx.mo
index ecdc6860..a7d7b641 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..acd409a4 100644
--- a/sphinx/locale/ru/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.po
@@ -7,7 +7,7 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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,15 +15,15 @@ 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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%d %B %Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -36,67 +36,67 @@ msgstr "Ð’Ñтроенные функции"
msgid "Module level"
msgstr "Модуль"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Словарь-указатель"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "Ñловарь"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "Ñледующий"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "предыдущий"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr " (в "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Ðвтор Ñекции: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Ðвтор модулÑ: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "Ðвтор модулÑ: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Ðвтор: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "См.также"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Результат"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "Тип результата"
@@ -125,12 +125,12 @@ msgstr "%s (тип C)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "функциÑ"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "поле"
@@ -138,7 +138,7 @@ msgstr "поле"
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "тип"
@@ -147,190 +147,201 @@ msgstr "тип"
msgid "variable"
msgstr "ПеременнаÑ"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr "%s (клаÑÑ C++)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (тип C++)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (поле C++)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ C++)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr "клаÑÑ"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (вÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (метод %s)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (клаÑÑ C++)"
+
+#: sphinx/domains/javascript.py:110
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (атрибут %s)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
msgstr "Параметры"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "атрибут"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
msgstr "ПеременнаÑ"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (в модуле %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (вÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (в модуле %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (вÑтроенный клаÑÑ)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (клаÑÑ Ð² %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (метод %s.%s)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (ÑтатичеÑкий метод %s.%s)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (ÑтатичеÑкий метод %s)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (метод %s.%s)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (метод %s)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (атрибут %s.%s)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Платформы: "
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (модуль)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "СоÑтав модулÑ"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "модули"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Ðе рекомендуетÑÑ"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "иÑключение"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
msgstr "%s() (метод %s)"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "ÑтатичеÑкий метод"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "модуль"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, 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 "модуль"
@@ -370,7 +381,7 @@ msgstr ""
#: 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/writers/latex.py:174
msgid "Index"
msgstr "Ðлфавитный указатель"
@@ -382,12 +393,12 @@ msgstr "СоÑтав модулÑ"
msgid "Search Page"
msgstr "ПоиÑк"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr " Базовые клаÑÑÑ‹: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr "пÑевдоним клаÑÑа :class:`%s`"
@@ -405,104 +416,104 @@ msgstr "(ИÑходный Ñлемент находитÑÑ Ð² %s, в Ñтрок
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:175
msgid "keyword"
msgstr "ключевое Ñлово"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "оператор"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "объект"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "команда"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "Ð±Ð°Ð·Ð¾Ð²Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ"
@@ -512,7 +523,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "ПоиÑк"
@@ -642,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 "Ð”Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¸Ñка необходима поддержка 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,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +721,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "СÑылка на Ñто определение"
@@ -723,19 +734,19 @@ msgstr "СÑылка на Ñто определение"
msgid "Hide Search Matches"
msgstr "СнÑть выделение"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "ПоиÑк"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Подготовка к поиÑку..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ", в "
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
msgid ""
"Your search did not match any documents. Please make sure that all words "
"are spelled correctly and that you've selected enough categories."
@@ -743,7 +754,7 @@ msgstr ""
"Ðет документов, ÑоответÑтвующих вашему запроÑу. Проверьте, правильно ли "
"выбраны категории и нет ли опечаток в запроÑе."
-#: sphinx/themes/basic/static/searchtools.js:493
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr "ПоиÑк окончен, найдено Ñтраниц: %s."
@@ -753,7 +764,7 @@ msgid "Expand sidebar"
msgstr ""
#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:107
msgid "Collapse sidebar"
msgstr ""
@@ -761,19 +772,19 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "ВыпуÑк"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
#, fuzzy
msgid "Continued on next page"
msgstr "Полный алфавитный указатель на одной Ñтранице"
@@ -781,3 +792,4 @@ msgstr "Полный алфавитный указатель на одной ÑÑ
#: sphinx/writers/text.py:422
msgid "[image]"
msgstr "[риÑунок]"
+
diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.mo b/sphinx/locale/sl/LC_MESSAGES/sphinx.mo
index 21e64ffd..ad2b8aa8 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..f47aa3d3 100644
--- a/sphinx/locale/sl/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/sl/LC_MESSAGES/sphinx.po
@@ -4,22 +4,22 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%d %B, %Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -32,67 +32,67 @@ msgstr "Vgrajeni deli"
msgid "Module level"
msgstr "Nivo modula"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Splošni abecedni seznam"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "abecedni seznam"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "naprej"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "nazaj"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr " (v "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Avtor sekcije: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Avtor modula: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "Avtor modula: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Avtor: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Poglej Tudi"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Vrne"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "Vrne tip"
@@ -121,12 +121,12 @@ msgstr "%s (C tip)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "funkcija"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "Älan"
@@ -134,7 +134,7 @@ msgstr "Älan"
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "tip"
@@ -143,190 +143,201 @@ msgstr "tip"
msgid "variable"
msgstr "Spremenljivka"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++ razred)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ tip)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ Älan)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ funkcija)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr "razred"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s metoda)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (C++ razred)"
+
+#: sphinx/domains/javascript.py:110
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s atribut)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
msgstr "Parametri"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "atribut"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
msgstr "Spremenljivka"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (v modulu %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (v modulu %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (vgrajen razred)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (razred v %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s metoda)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s statiÄna metoda)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s statiÄna metoda)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s metoda)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s metoda)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s atribut)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Platforme:"
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (modul)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "Seznam modulov"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "Moduli"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Zastarelo"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "izjema"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
msgstr "%s() (%s metoda)"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "statiÄna metoda"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "modul"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+msgid " (deprecated)"
+msgstr "Zastarelo"
+
+#: 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 (modul)"
-#: 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 "modul"
@@ -366,7 +377,7 @@ msgstr ""
#: 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/writers/latex.py:174
msgid "Index"
msgstr "Abecedni seznam"
@@ -378,12 +389,12 @@ msgstr "Seznam modulov"
msgid "Search Page"
msgstr "Iskalnik"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr " Baza: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr "vzdevek za :class:`%s`"
@@ -401,104 +412,104 @@ msgstr "(Originalen vnos se nahaja v %s, v vrstici %d, in ga je moÄ poiskati "
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:175
msgid "keyword"
msgstr "kljuÄna beseda"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "operator"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "objekt"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "izjava"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "vgrajene funkcije"
@@ -508,7 +519,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "IÅ¡Äi"
@@ -638,7 +649,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 +657,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 +669,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +718,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "Povezava na to definicijo"
@@ -720,19 +731,19 @@ msgstr "Povezava na to definicijo"
msgid "Hide Search Matches"
msgstr "Skrij resultate iskanja"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "IÅ¡Äem"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Pripravljam iskanje..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ", v "
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
msgid ""
"Your search did not match any documents. Please make sure that all words "
"are spelled correctly and that you've selected enough categories."
@@ -740,7 +751,7 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr "Iskanje konÄano, najdeno %s strani, ki ustrezajo iskalnemu nizu."
@@ -750,7 +761,7 @@ msgid "Expand sidebar"
msgstr ""
#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:107
msgid "Collapse sidebar"
msgstr ""
@@ -758,22 +769,23 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "Izdaja"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr "Opombe"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr "nadaljevanje iz prejšnje strani"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
msgid "Continued on next page"
msgstr "Nadaljevanje na naslednji strani"
#: sphinx/writers/text.py:422
msgid "[image]"
msgstr "[slika]"
+
diff --git a/sphinx/locale/sphinx.pot b/sphinx/locale/sphinx.pot
index 955663aa..5d60cd4e 100644
--- a/sphinx/locale/sphinx.pot
+++ b/sphinx/locale/sphinx.pot
@@ -6,24 +6,24 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: Sphinx 1.0pre/8b971dbc7d36\n"
+"Project-Id-Version: Sphinx 1.1pre/dd630cbbda23\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2010-05-24 23:53+0200\n"
+"POT-Creation-Date: 2010-08-26 11:44+0000\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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr ""
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr ""
@@ -36,66 +36,66 @@ msgstr ""
msgid "Module level"
msgstr ""
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, python-format
msgid "%b %d, %Y"
msgstr ""
-#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30
+#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr ""
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr ""
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr ""
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr ""
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr ""
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr ""
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
msgid "Code author: "
msgstr ""
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr ""
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr ""
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr ""
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr ""
@@ -124,12 +124,12 @@ msgstr ""
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr ""
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr ""
@@ -137,7 +137,7 @@ msgstr ""
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr ""
@@ -145,186 +145,196 @@ msgstr ""
msgid "variable"
msgstr ""
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr ""
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr ""
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr ""
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr ""
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr ""
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, python-format
msgid "%s() (built-in function)"
msgstr ""
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr ""
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, python-format
+msgid "%s() (class)"
+msgstr ""
+
+#: sphinx/domains/javascript.py:110
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr ""
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
msgid "Arguments"
msgstr ""
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr ""
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
msgid "Variables"
msgstr ""
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr ""
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, python-format
msgid "%s (built-in variable)"
msgstr ""
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr ""
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr ""
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr ""
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr ""
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr ""
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr ""
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, python-format
msgid "%s() (%s.%s class method)"
msgstr ""
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, python-format
msgid "%s() (%s class method)"
msgstr ""
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr ""
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr ""
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr ""
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
msgid "Python Module Index"
msgstr ""
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr ""
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr ""
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr ""
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
+#: sphinx/domains/python.py:528
msgid "class method"
msgstr ""
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr ""
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr ""
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+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 ""
@@ -363,7 +373,7 @@ msgstr ""
#: 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/writers/latex.py:174
msgid "Index"
msgstr ""
@@ -375,12 +385,12 @@ msgstr ""
msgid "Search Page"
msgstr ""
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -398,103 +408,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:175
msgid "keyword"
msgstr ""
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr ""
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr ""
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr ""
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr ""
@@ -504,7 +514,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr ""
@@ -632,13 +642,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 +656,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +705,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr ""
@@ -708,25 +718,25 @@ msgstr ""
msgid "Hide Search Matches"
msgstr ""
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr ""
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr ""
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ""
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
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
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr ""
@@ -736,7 +746,7 @@ msgid "Expand sidebar"
msgstr ""
#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:107
msgid "Collapse sidebar"
msgstr ""
@@ -744,19 +754,19 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr ""
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
msgid "Continued on next page"
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..0cedfb45
--- /dev/null
+++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.js
@@ -0,0 +1 @@
+Documentation.addTranslations({"locale": "sv", "plural_expr": "(n != 1)", "messages": {"Search Results": "S\u00f6kresultat", "Preparing search...": "F\u00f6rbereder s\u00f6kning...", "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\u00f6kning gav inga resultat. Kolla stavning och att du valt tillr\u00e4ckligt med kategorier.", "Search finished, found %s page(s) matching the search query.": "S\u00f6kning f\u00e4rdig, hittade %s tr\u00e4ffar.", ", in ": ", i ", "Expand sidebar": "Expandera sidolist", "Permalink to this headline": "Permalink till denna rubrik", "Searching": "S\u00f6ker", "Collapse sidebar": "D\u00f6lj sidolist", "Permalink to this definition": "Permalink till denna definition", "Hide Search Matches": "D\u00f6lj S\u00f6kresultat"}}); \ 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..40e059e2
--- /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..33127180
--- /dev/null
+++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.po
@@ -0,0 +1,780 @@
+
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2010-05-24 23:53+0200\n"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
+
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
+#: sphinx/writers/manpage.py:67
+#, python-format
+msgid "%B %d, %Y"
+msgstr "%B %d, %Y"
+
+#: sphinx/roles.py:173
+#, python-format
+msgid "Python Enhancement Proposals!PEP %s"
+msgstr "Python Enhancement Proposals!PEP %s"
+
+#: sphinx/builders/changes.py:72
+msgid "Builtins"
+msgstr "Inbyggda"
+
+#: sphinx/builders/changes.py:74
+msgid "Module level"
+msgstr "Modulnivå"
+
+#: sphinx/builders/html.py:260
+#, python-format
+msgid "%b %d, %Y"
+msgstr "%b %d, %Y"
+
+#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30
+msgid "General Index"
+msgstr "Huvudindex"
+
+#: sphinx/builders/html.py:279
+msgid "index"
+msgstr "index"
+
+#: sphinx/builders/html.py:339
+msgid "next"
+msgstr "nästa"
+
+#: sphinx/builders/html.py:348
+msgid "previous"
+msgstr "föregående"
+
+#: sphinx/builders/latex.py:145
+msgid " (in "
+msgstr "(i "
+
+#: sphinx/directives/other.py:135
+msgid "Section author: "
+msgstr "Sektionsförfattare"
+
+#: sphinx/directives/other.py:137
+msgid "Module author: "
+msgstr "Modulförfattare"
+
+#: sphinx/directives/other.py:139
+msgid "Code author: "
+msgstr "Källkodsförfattare"
+
+#: sphinx/directives/other.py:141
+msgid "Author: "
+msgstr "Upphovsman:"
+
+#: sphinx/directives/other.py:213
+msgid "See also"
+msgstr "Se även"
+
+#: sphinx/domains/__init__.py:242
+#, python-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: sphinx/domains/c.py:51 sphinx/domains/python.py:94
+msgid "Parameters"
+msgstr "Parametrar"
+
+#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127
+#: sphinx/domains/python.py:104
+msgid "Returns"
+msgstr "Returnerar"
+
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
+msgid "Return type"
+msgstr "Returtyp"
+
+#: sphinx/domains/c.py:133
+#, python-format
+msgid "%s (C function)"
+msgstr "%s (C-funktion)"
+
+#: sphinx/domains/c.py:135
+#, python-format
+msgid "%s (C member)"
+msgstr "%s (C-medlem)"
+
+#: sphinx/domains/c.py:137
+#, python-format
+msgid "%s (C macro)"
+msgstr "%s (C-makro)"
+
+#: sphinx/domains/c.py:139
+#, python-format
+msgid "%s (C type)"
+msgstr "%s (C-typ)"
+
+#: sphinx/domains/c.py:141
+#, python-format
+msgid "%s (C variable)"
+msgstr "%s (C-variabel)"
+
+#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
+msgid "function"
+msgstr "funktion"
+
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
+msgid "member"
+msgstr "medlem"
+
+#: sphinx/domains/c.py:173
+msgid "macro"
+msgstr "makro"
+
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
+msgid "type"
+msgstr "typ"
+
+#: sphinx/domains/c.py:175
+msgid "variable"
+msgstr "variabel"
+
+#: sphinx/domains/cpp.py:883
+#, python-format
+msgid "%s (C++ class)"
+msgstr "%s (C++-klass)"
+
+#: sphinx/domains/cpp.py:898
+#, python-format
+msgid "%s (C++ type)"
+msgstr "%s (C++-typ)"
+
+#: sphinx/domains/cpp.py:917
+#, python-format
+msgid "%s (C++ member)"
+msgstr "%s (C++-medlem)"
+
+#: sphinx/domains/cpp.py:969
+#, python-format
+msgid "%s (C++ function)"
+msgstr "%s (C++-funktion)"
+
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
+msgid "class"
+msgstr "klass"
+
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
+#, python-format
+msgid "%s() (built-in function)"
+msgstr "%s() (inbyggd funktion)"
+
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308
+#, python-format
+msgid "%s() (%s method)"
+msgstr "%s() (%s metod)"
+
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (C++-klass)"
+
+#: sphinx/domains/javascript.py:110
+#, python-format
+msgid "%s (global variable or constant)"
+msgstr "%s (global variabel eller konstant)"
+
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
+#, python-format
+msgid "%s (%s attribute)"
+msgstr "%s (%s attribut)"
+
+#: sphinx/domains/javascript.py:121
+msgid "Arguments"
+msgstr "Argument"
+
+#: sphinx/domains/javascript.py:124
+msgid "Throws"
+msgstr "Kastar"
+
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
+msgid "data"
+msgstr "data"
+
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
+msgid "attribute"
+msgstr "attribut"
+
+#: sphinx/domains/python.py:98
+msgid "Variables"
+msgstr "Variabler"
+
+#: sphinx/domains/python.py:101
+msgid "Raises"
+msgstr "Väcker"
+
+#: sphinx/domains/python.py:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
+#, python-format
+msgid "%s() (in module %s)"
+msgstr "%s() (i modul %s)"
+
+#: sphinx/domains/python.py:248
+#, python-format
+msgid "%s (built-in variable)"
+msgstr "%s (inbyggd variabel)"
+
+#: sphinx/domains/python.py:249 sphinx/domains/python.py:340
+#, python-format
+msgid "%s (in module %s)"
+msgstr "%s (i modul %s)"
+
+#: sphinx/domains/python.py:265
+#, python-format
+msgid "%s (built-in class)"
+msgstr "%s (inbyggd klass)"
+
+#: sphinx/domains/python.py:266
+#, python-format
+msgid "%s (class in %s)"
+msgstr "%s (klass i %s)"
+
+#: sphinx/domains/python.py:306
+#, python-format
+msgid "%s() (%s.%s method)"
+msgstr "%s() (%s.%s metod)"
+
+#: sphinx/domains/python.py:318
+#, python-format
+msgid "%s() (%s.%s static method)"
+msgstr "%s() (%s.%s statisk metod)"
+
+#: sphinx/domains/python.py:321
+#, python-format
+msgid "%s() (%s static method)"
+msgstr "%s() (%s statisk metod)"
+
+#: sphinx/domains/python.py:331
+#, python-format
+msgid "%s() (%s.%s class method)"
+msgstr "%s() (%s.%s klassmetod)"
+
+#: sphinx/domains/python.py:334
+#, python-format
+msgid "%s() (%s class method)"
+msgstr "%s() (%s klassmetod)"
+
+#: sphinx/domains/python.py:344
+#, python-format
+msgid "%s (%s.%s attribute)"
+msgstr "%s (%s.%s attribut)"
+
+#: sphinx/domains/python.py:392
+msgid "Platforms: "
+msgstr "Plattformar:"
+
+#: sphinx/domains/python.py:398
+#, python-format
+msgid "%s (module)"
+msgstr "%s (modul)"
+
+#: sphinx/domains/python.py:455
+msgid "Python Module Index"
+msgstr "Python Modulindex"
+
+#: sphinx/domains/python.py:456
+msgid "modules"
+msgstr "moduler"
+
+#: sphinx/domains/python.py:501
+msgid "Deprecated"
+msgstr "Ersatt"
+
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
+msgid "exception"
+msgstr "undantag"
+
+#: sphinx/domains/python.py:527
+msgid "method"
+msgstr "metod"
+
+#: sphinx/domains/python.py:528
+msgid "class method"
+msgstr "klassmetod"
+
+#: sphinx/domains/python.py:529
+msgid "static method"
+msgstr "statisk metod"
+
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
+msgid "module"
+msgstr "modul"
+
+#: sphinx/domains/python.py:657
+#, 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:68 sphinx/domains/std.py:84
+#, python-format
+msgid "environment variable; %s"
+msgstr "miljövariabel; %s"
+
+#: sphinx/domains/std.py:160
+#, python-format
+msgid "%scommand line option; %s"
+msgstr "%skommandorad växel; %s"
+
+#: sphinx/domains/std.py:328
+msgid "glossary term"
+msgstr "ordlista"
+
+#: sphinx/domains/std.py:329
+msgid "grammar token"
+msgstr "grammatisk token"
+
+#: sphinx/domains/std.py:330
+msgid "reference label"
+msgstr "referensetikett"
+
+#: sphinx/domains/std.py:331
+msgid "environment variable"
+msgstr "miljövariabel"
+
+#: sphinx/domains/std.py:332
+msgid "program option"
+msgstr "programväxel"
+
+#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
+#: 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:174
+msgid "Index"
+msgstr "Index"
+
+#: sphinx/domains/std.py:361
+msgid "Module Index"
+msgstr "Modulindex"
+
+#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
+msgid "Search Page"
+msgstr "Söksida"
+
+#: sphinx/ext/autodoc.py:923
+#, python-format
+msgid " Bases: %s"
+msgstr " Baserad: %s"
+
+#: sphinx/ext/autodoc.py:959
+#, 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:175
+msgid "keyword"
+msgstr "nyckelord"
+
+#: sphinx/locale/__init__.py:176
+msgid "operator"
+msgstr "operator"
+
+#: sphinx/locale/__init__.py:177
+msgid "object"
+msgstr "objekt"
+
+#: sphinx/locale/__init__.py:179
+msgid "statement"
+msgstr "uttryck"
+
+#: sphinx/locale/__init__.py:180
+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:128
+#: 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:14
+#, python-format
+msgid "Index &ndash; %(key)s"
+msgstr "Index &ndash; %(key)s"
+
+#: sphinx/themes/basic/genindex-single.html:46
+#: sphinx/themes/basic/genindex-split.html:24
+#: sphinx/themes/basic/genindex-split.html:38
+#: sphinx/themes/basic/genindex.html:56
+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:23
+msgid "Navigation"
+msgstr "Navigation"
+
+#: sphinx/themes/basic/layout.html:113
+#, python-format
+msgid "Search within %(docstitle)s"
+msgstr "Sök bland %(docstitle)s"
+
+#: sphinx/themes/basic/layout.html:122
+msgid "About these documents"
+msgstr "Om dessa dokument"
+
+#: sphinx/themes/basic/layout.html:131
+msgid "Copyright"
+msgstr "Copyright"
+
+#: sphinx/themes/basic/layout.html:180
+#, 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
+#, python-format
+msgid "&copy; Copyright %(copyright)s."
+msgstr "&copy; Copyright %(copyright)s."
+
+#: sphinx/themes/basic/layout.html:186
+#, python-format
+msgid "Last updated on %(last_updated)s."
+msgstr "Senast uppdaterad %(last_updated)s."
+
+#: sphinx/themes/basic/layout.html:189
+#, 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
+#: sphinx/themes/basic/static/searchtools.js:504
+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:491
+#: sphinx/writers/html.py:496
+msgid "Permalink to this headline"
+msgstr "Permalink till denna rubrik"
+
+#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88
+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/basic/static/searchtools.js:287
+msgid "Searching"
+msgstr "Söker"
+
+#: sphinx/themes/basic/static/searchtools.js:292
+msgid "Preparing search..."
+msgstr "Förbereder sökning..."
+
+#: sphinx/themes/basic/static/searchtools.js:366
+msgid ", in "
+msgstr ", i "
+
+#: sphinx/themes/basic/static/searchtools.js:506
+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ökning gav inga resultat. Kolla stavning och att du valt "
+"tillräckligt med kategorier."
+
+#: sphinx/themes/basic/static/searchtools.js:508
+#, python-format
+msgid "Search finished, found %s page(s) matching the search query."
+msgstr "Sökning färdig, hittade %s träffar."
+
+#: sphinx/themes/default/static/sidebar.js:66
+msgid "Expand sidebar"
+msgstr "Expandera sidolist"
+
+#: sphinx/themes/default/static/sidebar.js:79
+#: sphinx/themes/default/static/sidebar.js:107
+msgid "Collapse sidebar"
+msgstr "Dölj sidolist"
+
+#: sphinx/themes/haiku/layout.html:26
+msgid "Contents"
+msgstr "Innehåll"
+
+#: sphinx/writers/latex.py:172
+msgid "Release"
+msgstr "Utgåva"
+
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
+msgid "Footnotes"
+msgstr "Fotnoter"
+
+#: sphinx/writers/latex.py:649
+msgid "continued from previous page"
+msgstr "fortsättning från föregående sida"
+
+#: sphinx/writers/latex.py:654
+msgid "Continued on next page"
+msgstr "Fortsätter på nästa sida"
+
+#: sphinx/writers/text.py:422
+msgid "[image]"
+msgstr "[image]"
+
diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.mo b/sphinx/locale/tr/LC_MESSAGES/sphinx.mo
index 5054199c..746669eb 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..030097bf 100644
--- a/sphinx/locale/tr/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/tr/LC_MESSAGES/sphinx.po
@@ -8,23 +8,22 @@ msgstr ""
"Project-Id-Version: Sphinx 0.6.2+/6b02a19ccf31\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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\n"
"Last-Translator: Firat Ozgul <ozgulfirat@gmail.com>\n"
"Language-Team: Turkish <kistihza@yahoo.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.5\n"
-#: sphinx/environment.py:106
-#: sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%d %B %Y"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python'u İyileştirme Önerileri!PEP %s"
@@ -37,70 +36,66 @@ msgstr "Gömülüler"
msgid "Module level"
msgstr "Modül düzeyi"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Genel Dizin"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "dizin"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "sonraki"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "önceki"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr " (şunun içinde: "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Bölümü yazan: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Modülü yazan: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
msgid "Code author: "
msgstr "Kodu yazan: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Yazan: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "Ayrıca bkz."
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Şunu döndürür:"
-#: sphinx/domains/c.py:56
-#: sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "Dönüş tipi"
@@ -129,15 +124,12 @@ msgstr "%s (C tipi)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "fonksiyonu"
-#: sphinx/domains/c.py:172
-#: sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "öğesi"
@@ -145,8 +137,7 @@ msgstr "öğesi"
msgid "macro"
msgstr "makrosu"
-#: sphinx/domains/c.py:174
-#: sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "tipi"
@@ -154,203 +145,201 @@ msgstr "tipi"
msgid "variable"
msgstr "deÄŸiÅŸkeni"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++ sınıfı)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ tipi)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ öğesi)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ fonksiyonu)"
-#: sphinx/domains/cpp.py:1030
-#: sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr "sınıfı"
-#: sphinx/domains/javascript.py:117
-#: sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, 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:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s metodu)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (C++ sınıfı)"
+
+#: sphinx/domains/javascript.py:110
#, 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:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s niteliÄŸi)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
msgid "Arguments"
msgstr "Argümanlar"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr "Åžunu verir: "
-#: sphinx/domains/javascript.py:167
-#: sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr "verisi"
-#: sphinx/domains/javascript.py:168
-#: sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "niteliÄŸi"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
msgid "Variables"
msgstr "DeÄŸiÅŸkenler"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (%s modülü içinde)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, 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:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (%s modülü içinde)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (gömülü sınıf)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, 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:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s metodu)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s statik metodu)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s statik metodu)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, 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:334
#, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s sınıf metodu)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s niteliÄŸi)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Platformlar:"
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (modül)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
msgid "Python Module Index"
msgstr "Python Modül Dizini"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "modüller"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "Önerilmiyor"
-#: sphinx/domains/python.py:500
-#: sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "istisnası"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr "metodu"
-#: sphinx/domains/python.py:502
-#, python-format
+#: sphinx/domains/python.py:528
msgid "class method"
msgstr "sınıf metodu"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "statik metodu"
-#: sphinx/domains/python.py:505
-#: sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "modülü"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, fuzzy
+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:68 sphinx/domains/std.py:84
#, python-format
msgid "environment variable; %s"
msgstr "çevre değişkeni; %s"
@@ -380,15 +369,12 @@ msgstr "çevre değişkeni"
msgid "program option"
msgstr "program seçeneği"
-#: sphinx/domains/std.py:360
-#: sphinx/themes/basic/genindex-single.html:11
+#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11
#: 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:11 sphinx/themes/basic/genindex.html:14
+#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125
+#: sphinx/writers/latex.py:174
msgid "Index"
msgstr "Dizin"
@@ -396,17 +382,16 @@ msgstr "Dizin"
msgid "Module Index"
msgstr "Modül Dizini"
-#: sphinx/domains/std.py:362
-#: sphinx/themes/basic/defindex.html:25
+#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25
msgid "Search Page"
msgstr "Arama Sayfası"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr " Taban: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr "şunun takma adı: :class:`%s`"
@@ -424,131 +409,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:175
msgid "keyword"
msgstr "anahtar kelime"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "işleç"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "nesne"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "deyim"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
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:128
+#: 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"
@@ -638,8 +617,12 @@ msgstr "Son güncelleme: %(last_updated)s."
#: sphinx/themes/basic/layout.html:189
#, 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 +645,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 +653,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 +665,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +714,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "Bu tanımın kalıcı bağlantısı"
@@ -746,23 +727,27 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Arıyor"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Aramaya hazırlanıyor..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
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:506
+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
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr "Arama sonuçlandı, aramayla eşleşen %s sayfa bulundu."
@@ -772,7 +757,7 @@ 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:107
msgid "Collapse sidebar"
msgstr "Yan çubuğu daralt"
@@ -780,20 +765,19 @@ msgstr "Yan çubuğu daralt"
msgid "Contents"
msgstr "İçindekiler"
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "Sürüm"
-#: sphinx/writers/latex.py:572
-#: sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr "Dipnotları"
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr "önceki sayfadan devam"
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
msgid "Continued on next page"
msgstr "Devamı sonraki sayfada"
diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo
index cfa0b8e0..18f4d8d6 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 a85eaebe..81c21d78 100644
--- a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po
@@ -8,7 +8,7 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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,15 +16,15 @@ 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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr ""
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python Enhancement Proposals!PEP %s"
@@ -37,67 +37,67 @@ msgstr "Вбудовані елементи"
msgid "Module level"
msgstr "Рівень модулÑ"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "Загальний індекÑ"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "індекÑ"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "наÑтупний"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "попередній"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr " (в "
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Ðвтор Ñекції: "
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "Ðвтор модулÑ: "
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "Ðвтор модулÑ: "
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "Ðвтор: "
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "ДивиÑÑŒ також"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "Повертає"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "Тип поверненнÑ"
@@ -126,12 +126,12 @@ msgstr "%s (C тип)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "функціÑ"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "член"
@@ -139,7 +139,7 @@ msgstr "член"
msgid "macro"
msgstr "макроÑ"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "тип"
@@ -148,191 +148,201 @@ msgstr "тип"
msgid "variable"
msgstr "Змінна"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, python-format
msgid "%s (C++ class)"
msgstr "%s (C++ клаÑ)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ тип)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ член)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ функціÑ)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr "клаÑ"
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (вбудована функціÑ)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s метод)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (C++ клаÑ)"
+
+#: sphinx/domains/javascript.py:110
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s атрибут)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
msgstr "Параметри"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
-#, python-format
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "атрибут"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
msgstr "Змінна"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (в модулі %s)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (вбудована змінна)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s (в модулі %s)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (вбудований клаÑ)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr "%s (ÐºÐ»Ð°Ñ Ð² %s)"
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s метод)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s Ñтатичний метод)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s Ñтатичний метод)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s метод)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s метод)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s атрибут)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "Платформи: "
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (модуль)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "Ð†Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "модулі"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "ЗаÑтарілий"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "винÑткова ÑитуаціÑ"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
msgstr "%s() (%s метод)"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "Ñтатичний метод"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "модуль"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, 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 "модуль"
@@ -372,7 +382,7 @@ msgstr ""
#: 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/writers/latex.py:174
msgid "Index"
msgstr "ІндекÑ"
@@ -384,12 +394,12 @@ msgstr "Ð†Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²"
msgid "Search Page"
msgstr "Сторінка пошуку"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr " Базовий: %s"
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr "Ñинонім :class:`%s`"
@@ -407,104 +417,104 @@ msgstr "(Початкове Ð²Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒÑÑ Ð² %s, Ñ€Ñ
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:175
msgid "keyword"
msgstr "ключове Ñлово"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "оператор"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "об'єкт"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "вираз"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "вбудована функціÑ"
@@ -514,7 +524,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "Пошук"
@@ -644,7 +654,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 +663,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 +675,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +724,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "ПоÑтійне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° це визначеннÑ"
@@ -727,19 +737,19 @@ msgstr "ПоÑтійне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° це визначеннÑ"
msgid "Hide Search Matches"
msgstr "Приховати ÑÐ¿Ñ–Ð²Ð¿Ð°Ð´Ñ–Ð½Ð½Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "Шукаю"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "Підготовка до пошуку..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ", в "
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
msgid ""
"Your search did not match any documents. Please make sure that all words "
"are spelled correctly and that you've selected enough categories."
@@ -747,7 +757,7 @@ msgstr ""
"Ваш пошук не виÑвив жодного ÑпівпадіннÑ. Будь-лаÑка переконайтеÑÑ Ñ‰Ð¾ вÑÑ– "
"Ñлова набрані правильно Ñ– ви обрали доÑтатньо категорій."
-#: sphinx/themes/basic/static/searchtools.js:493
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr "Пошук закінчено, знайдено %s Ñторінок Ñкі Ñпівпали з пошуковим запитом."
@@ -757,7 +767,7 @@ msgid "Expand sidebar"
msgstr ""
#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:107
msgid "Collapse sidebar"
msgstr ""
@@ -765,19 +775,19 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "Реліз"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
#, fuzzy
msgid "Continued on next page"
msgstr "Повний Ñ–Ð½Ð´ÐµÐºÑ Ð½Ð° одній Ñторінці"
@@ -785,3 +795,4 @@ msgstr "Повний Ñ–Ð½Ð´ÐµÐºÑ Ð½Ð° одній Ñторінці"
#: sphinx/writers/text.py:422
msgid "[image]"
msgstr ""
+
diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo
index b62c4c5b..11818de5 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 c1762043..b9dce085 100644
--- a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po
@@ -9,22 +9,22 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%Y 年 %m 月 %d 日"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python 建议文件!PEP %s"
@@ -37,67 +37,67 @@ msgstr "内置"
msgid "Module level"
msgstr "模å—级别"
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "总目录"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "索引"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "下一页"
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "上一页"
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Section 作者:"
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "模å—作者:"
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "模å—作者:"
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "作者:"
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr "也å¯ä»¥å‚考"
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "返回"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "返回类型"
@@ -126,12 +126,12 @@ msgstr "%s (C 类型)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "函数"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "æˆå‘˜"
@@ -139,7 +139,7 @@ msgstr "æˆå‘˜"
msgid "macro"
msgstr ""
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr ""
@@ -148,190 +148,201 @@ msgstr ""
msgid "variable"
msgstr "å˜é‡"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, fuzzy, python-format
msgid "%s (C++ class)"
msgstr "%s (內置类)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ 类型)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ æˆå‘˜)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ 函数)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr ""
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (內置函数)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s 方法)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (內置类)"
+
+#: sphinx/domains/javascript.py:110
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s 属性)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
msgstr "傿•°"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "属性"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
msgstr "å˜é‡"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (在 %s 模å—中)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (å…§ç½®å˜é‡)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s() (在 %s 模å—中)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (內置类)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr ""
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s 方法)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s 陿€æ–¹æ³•)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s 陿€æ–¹æ³•)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s 方法)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s 方法)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s 属性)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "å¹³å°"
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (模å—)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "模å—索引"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "模å—"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "已移除"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "例外"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
msgstr "%s() (%s 方法)"
-#: sphinx/domains/python.py:503
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "陿€æ–¹æ³•"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "模å—"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, 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 "模å—"
@@ -371,7 +382,7 @@ msgstr ""
#: 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/writers/latex.py:174
msgid "Index"
msgstr "索引"
@@ -383,12 +394,12 @@ msgstr "模å—索引"
msgid "Search Page"
msgstr "æœç´¢é¡µé¢"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -406,104 +417,104 @@ msgstr "(最åˆçš„å…¥å£ä½äºŽ%s 的第%d行"
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:175
msgid "keyword"
msgstr "关键字"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "æ“作数"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "对象"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr "语å¥"
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "內置函数"
@@ -513,7 +524,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "æœç´¢"
@@ -641,13 +652,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 +666,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +715,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr "永久链接至目标"
@@ -717,25 +728,25 @@ msgstr "永久链接至目标"
msgid "Hide Search Matches"
msgstr "éšè—æœç´¢ç»“æžœ"
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "æœç´¢ä¸­"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "准备æœç´¢..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ", ä½äºŽ"
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
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
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr "æœç´¢å®Œæˆï¼Œ 找到了 %s é¡µåŒ¹é…æ‰€æœç´¢çš„关键字"
@@ -745,7 +756,7 @@ msgid "Expand sidebar"
msgstr ""
#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:107
msgid "Collapse sidebar"
msgstr ""
@@ -753,19 +764,19 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "å‘布"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
#, fuzzy
msgid "Continued on next page"
msgstr "一页的全部索引"
@@ -773,3 +784,4 @@ msgstr "一页的全部索引"
#: sphinx/writers/text.py:422
msgid "[image]"
msgstr "[图片]"
+
diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo
index 008ecec0..d58c16ff 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..cb2646ce 100644
--- a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po
+++ b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po
@@ -8,22 +8,22 @@ 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"
+"PO-Revision-Date: 2010-08-26 11:45+0000\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.5\n"
-#: sphinx/environment.py:106 sphinx/writers/latex.py:184
+#: sphinx/environment.py:111 sphinx/writers/latex.py:185
#: sphinx/writers/manpage.py:67
#, python-format
msgid "%B %d, %Y"
msgstr "%Y 年 %m 月 %d 日"
-#: sphinx/roles.py:174
+#: sphinx/roles.py:173
#, python-format
msgid "Python Enhancement Proposals!PEP %s"
msgstr "Python 建議文件!PEP %s"
@@ -36,67 +36,67 @@ msgstr ""
msgid "Module level"
msgstr ""
-#: sphinx/builders/html.py:266
+#: sphinx/builders/html.py:260
#, 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:279 sphinx/themes/basic/defindex.html:30
msgid "General Index"
msgstr "總索引"
-#: sphinx/builders/html.py:285
+#: sphinx/builders/html.py:279
msgid "index"
msgstr "索引"
-#: sphinx/builders/html.py:345
+#: sphinx/builders/html.py:339
msgid "next"
msgstr "下一é "
-#: sphinx/builders/html.py:354
+#: sphinx/builders/html.py:348
msgid "previous"
msgstr "上一é "
-#: sphinx/builders/latex.py:151
+#: sphinx/builders/latex.py:145
msgid " (in "
msgstr ""
-#: sphinx/directives/other.py:127
+#: sphinx/directives/other.py:135
msgid "Section author: "
msgstr "Section 作者:"
-#: sphinx/directives/other.py:129
+#: sphinx/directives/other.py:137
msgid "Module author: "
msgstr "模組作者:"
-#: sphinx/directives/other.py:131
+#: sphinx/directives/other.py:139
#, fuzzy
msgid "Code author: "
msgstr "模組作者:"
-#: sphinx/directives/other.py:133
+#: sphinx/directives/other.py:141
msgid "Author: "
msgstr "作者:"
-#: sphinx/directives/other.py:238
+#: sphinx/directives/other.py:213
msgid "See also"
msgstr ""
-#: sphinx/domains/__init__.py:253
+#: sphinx/domains/__init__.py:242
#, 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:94
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:127
+#: sphinx/domains/python.py:104
msgid "Returns"
msgstr "返回"
-#: sphinx/domains/c.py:56 sphinx/domains/python.py:61
+#: sphinx/domains/c.py:56 sphinx/domains/python.py:106
msgid "Return type"
msgstr "返回類別"
@@ -125,13 +125,12 @@ msgstr "%s (C 類別)"
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:171 sphinx/domains/cpp.py:1039
+#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523
msgid "function"
msgstr "函å¼"
-#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032
+#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040
msgid "member"
msgstr "æˆå“¡"
@@ -139,7 +138,7 @@ msgstr "æˆå“¡"
msgid "macro"
msgstr "巨集"
-#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033
+#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041
msgid "type"
msgstr "類別"
@@ -148,192 +147,201 @@ msgstr "類別"
msgid "variable"
msgstr "變數"
-#: sphinx/domains/cpp.py:876
+#: sphinx/domains/cpp.py:883
#, fuzzy, python-format
msgid "%s (C++ class)"
msgstr "%s (內建類別)"
-#: sphinx/domains/cpp.py:891
+#: sphinx/domains/cpp.py:898
#, python-format
msgid "%s (C++ type)"
msgstr "%s (C++ 類別)"
-#: sphinx/domains/cpp.py:910
+#: sphinx/domains/cpp.py:917
#, python-format
msgid "%s (C++ member)"
msgstr "%s (C++ æˆå“¡)"
-#: sphinx/domains/cpp.py:962
+#: sphinx/domains/cpp.py:969
#, python-format
msgid "%s (C++ function)"
msgstr "%s (C++ 函å¼)"
-#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499
+#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162
+#: sphinx/domains/python.py:525
msgid "class"
msgstr ""
-#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221
+#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244
#, python-format
msgid "%s() (built-in function)"
msgstr "%s() (內建函å¼)"
-#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285
+#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308
#, python-format
msgid "%s() (%s method)"
msgstr "%s() (%s 方法)"
-#: sphinx/domains/javascript.py:120
+#: sphinx/domains/javascript.py:108
+#, fuzzy, python-format
+msgid "%s() (class)"
+msgstr "%s (內建類別)"
+
+#: sphinx/domains/javascript.py:110
#, python-format
msgid "%s (global variable or constant)"
msgstr ""
-#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323
+#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346
#, python-format
msgid "%s (%s attribute)"
msgstr "%s (%s 屬性)"
-#: sphinx/domains/javascript.py:131
+#: sphinx/domains/javascript.py:121
#, fuzzy
msgid "Arguments"
msgstr "åƒæ•¸"
-#: sphinx/domains/javascript.py:134
+#: sphinx/domains/javascript.py:124
msgid "Throws"
msgstr ""
-#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498
+#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524
msgid "data"
msgstr ""
-#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504
-#, python-format
+#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530
msgid "attribute"
msgstr "屬性"
-#: sphinx/domains/python.py:53
+#: sphinx/domains/python.py:98
#, fuzzy
msgid "Variables"
msgstr "變數"
-#: sphinx/domains/python.py:56
+#: sphinx/domains/python.py:101
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:245 sphinx/domains/python.py:302
+#: sphinx/domains/python.py:314 sphinx/domains/python.py:327
#, python-format
msgid "%s() (in module %s)"
msgstr "%s() (在 %s 模組中)"
-#: sphinx/domains/python.py:225
+#: sphinx/domains/python.py:248
#, python-format
msgid "%s (built-in variable)"
msgstr "%s (內建變數)"
-#: sphinx/domains/python.py:226 sphinx/domains/python.py:317
+#: sphinx/domains/python.py:249 sphinx/domains/python.py:340
#, python-format
msgid "%s (in module %s)"
msgstr "%s() (在 %s 模組中)"
-#: sphinx/domains/python.py:242
+#: sphinx/domains/python.py:265
#, python-format
msgid "%s (built-in class)"
msgstr "%s (內建類別)"
-#: sphinx/domains/python.py:243
+#: sphinx/domains/python.py:266
#, python-format
msgid "%s (class in %s)"
msgstr ""
-#: sphinx/domains/python.py:283
+#: sphinx/domains/python.py:306
#, python-format
msgid "%s() (%s.%s method)"
msgstr "%s() (%s.%s 方法)"
-#: sphinx/domains/python.py:295
+#: sphinx/domains/python.py:318
#, python-format
msgid "%s() (%s.%s static method)"
msgstr "%s() (%s.%s éœæ…‹æ–¹æ³•)"
-#: sphinx/domains/python.py:298
+#: sphinx/domains/python.py:321
#, python-format
msgid "%s() (%s static method)"
msgstr "%s() (%s éœæ…‹æ–¹æ³•)"
-#: sphinx/domains/python.py:308
+#: sphinx/domains/python.py:331
#, fuzzy, python-format
msgid "%s() (%s.%s class method)"
msgstr "%s() (%s.%s 方法)"
-#: sphinx/domains/python.py:311
+#: sphinx/domains/python.py:334
#, fuzzy, python-format
msgid "%s() (%s class method)"
msgstr "%s() (%s 方法)"
-#: sphinx/domains/python.py:321
+#: sphinx/domains/python.py:344
#, python-format
msgid "%s (%s.%s attribute)"
msgstr "%s (%s.%s 屬性)"
-#: sphinx/domains/python.py:366
+#: sphinx/domains/python.py:392
msgid "Platforms: "
msgstr "å¹³å°"
-#: sphinx/domains/python.py:372
+#: sphinx/domains/python.py:398
#, python-format
msgid "%s (module)"
msgstr "%s (模組)"
-#: sphinx/domains/python.py:429
+#: sphinx/domains/python.py:455
#, fuzzy
msgid "Python Module Index"
msgstr "模組索引"
-#: sphinx/domains/python.py:430
+#: sphinx/domains/python.py:456
msgid "modules"
msgstr "模組"
-#: sphinx/domains/python.py:475
+#: sphinx/domains/python.py:501
msgid "Deprecated"
msgstr "已移除"
-#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162
+#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178
msgid "exception"
msgstr "例外"
-#: sphinx/domains/python.py:501
+#: sphinx/domains/python.py:527
msgid "method"
msgstr ""
-#: sphinx/domains/python.py:502
-#, fuzzy, python-format
+#: sphinx/domains/python.py:528
+#, fuzzy
msgid "class method"
msgstr "%s() (%s 方法)"
-#: sphinx/domains/python.py:503
-#, python-format
+#: sphinx/domains/python.py:529
msgid "static method"
msgstr "éœæ…‹æ–¹æ³•"
-#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158
+#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174
msgid "module"
msgstr "模組"
-#: sphinx/domains/rst.py:53
+#: sphinx/domains/python.py:657
+#, 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 "模組"
@@ -373,7 +381,7 @@ msgstr ""
#: 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/writers/latex.py:174
msgid "Index"
msgstr "索引"
@@ -385,12 +393,12 @@ msgstr "模組索引"
msgid "Search Page"
msgstr "æœå°‹é é¢"
-#: sphinx/ext/autodoc.py:917
+#: sphinx/ext/autodoc.py:923
#, python-format
msgid " Bases: %s"
msgstr ""
-#: sphinx/ext/autodoc.py:950
+#: sphinx/ext/autodoc.py:959
#, python-format
msgid "alias of :class:`%s`"
msgstr ""
@@ -408,104 +416,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:175
msgid "keyword"
msgstr "é—œéµå­—"
-#: sphinx/locale/__init__.py:160
+#: sphinx/locale/__init__.py:176
msgid "operator"
msgstr "é‹ç®—å­"
-#: sphinx/locale/__init__.py:161
+#: sphinx/locale/__init__.py:177
msgid "object"
msgstr "物件"
-#: sphinx/locale/__init__.py:163
+#: sphinx/locale/__init__.py:179
msgid "statement"
msgstr ""
-#: sphinx/locale/__init__.py:164
+#: sphinx/locale/__init__.py:180
msgid "built-in function"
msgstr "內建函å¼"
@@ -515,7 +523,7 @@ 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/basic/search.html:11 sphinx/themes/basic/search.html:20
msgid "Search"
msgstr "æœå°‹"
@@ -644,13 +652,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 +666,16 @@ 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
+#: sphinx/themes/basic/static/searchtools.js:504
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 +715,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:491
+#: sphinx/writers/html.py:496
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:88
msgid "Permalink to this definition"
msgstr ""
@@ -720,25 +728,25 @@ msgstr ""
msgid "Hide Search Matches"
msgstr ""
-#: sphinx/themes/basic/static/searchtools.js:285
+#: sphinx/themes/basic/static/searchtools.js:287
msgid "Searching"
msgstr "æœå°‹ä¸­"
-#: sphinx/themes/basic/static/searchtools.js:290
+#: sphinx/themes/basic/static/searchtools.js:292
msgid "Preparing search..."
msgstr "準備æœå°‹..."
-#: sphinx/themes/basic/static/searchtools.js:364
+#: sphinx/themes/basic/static/searchtools.js:366
msgid ", in "
msgstr ""
-#: sphinx/themes/basic/static/searchtools.js:491
+#: sphinx/themes/basic/static/searchtools.js:506
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
+#: sphinx/themes/basic/static/searchtools.js:508
#, python-format
msgid "Search finished, found %s page(s) matching the search query."
msgstr ""
@@ -748,7 +756,7 @@ msgid "Expand sidebar"
msgstr ""
#: sphinx/themes/default/static/sidebar.js:79
-#: sphinx/themes/default/static/sidebar.js:106
+#: sphinx/themes/default/static/sidebar.js:107
msgid "Collapse sidebar"
msgstr ""
@@ -756,22 +764,23 @@ msgstr ""
msgid "Contents"
msgstr ""
-#: sphinx/writers/latex.py:171
+#: sphinx/writers/latex.py:172
msgid "Release"
msgstr "釋出"
-#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178
+#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178
msgid "Footnotes"
msgstr ""
-#: sphinx/writers/latex.py:641
+#: sphinx/writers/latex.py:649
msgid "continued from previous page"
msgstr ""
-#: sphinx/writers/latex.py:646
+#: sphinx/writers/latex.py:654
msgid "Continued on next page"
msgstr ""
#: sphinx/writers/text.py:422
msgid "[image]"
msgstr "[圖片]"
+
diff --git a/sphinx/pycode/__init__.py b/sphinx/pycode/__init__.py
index 2d58ffd2..e4758835 100644
--- a/sphinx/pycode/__init__.py
+++ b/sphinx/pycode/__init__.py
@@ -18,6 +18,7 @@ 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
+from sphinx.util.pycompat import next
from sphinx.util.docstrings import prepare_docstring, prepare_commentdoc
@@ -98,7 +99,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)
@@ -278,7 +280,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 c825e9be..4d7e2db3 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
@@ -240,6 +254,22 @@ man_pages = [
('%(master_str)s', '%(project_manpage)s', u'%(project_doc)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)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 = []
'''
EPUB_CONFIG = '''
@@ -266,6 +296,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 = []
@@ -330,7 +363,7 @@ ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(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 +380,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 +469,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 $(ALLSPHINXOPTS) $(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
@@ -481,6 +535,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 +650,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 %%ALLSPHINXOPTS%% %%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 +743,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 +768,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 +787,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')):
@@ -849,28 +945,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
diff --git a/sphinx/roles.py b/sphinx/roles.py
index fd3da416..1d791f6d 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 = {
@@ -139,16 +139,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).
@@ -171,8 +170,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:
@@ -191,8 +190,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:
@@ -269,6 +267,33 @@ 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),
@@ -282,6 +307,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..16e93e89
--- /dev/null
+++ b/sphinx/search/en.py
@@ -0,0 +1,242 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.search_languages.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..18d21bf0
--- /dev/null
+++ b/sphinx/search/ja.py
@@ -0,0 +1,273 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.search_languages.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-Zï½-zA-Z]': u'A',
+ u'[0-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 5c705584..4cae738d 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 ae7ba372..be0a0284 100644
--- a/sphinx/texinputs/sphinx.sty
+++ b/sphinx/texinputs/sphinx.sty
@@ -175,23 +175,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/basic/genindex-single.html b/sphinx/themes/basic/genindex-single.html
index 225abfa8..b6fa6a85 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 width="100%" class="indextable"><tr>
{%- for column in entries|slice(2) if column %}
<td 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 4af47252..536f0963 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 width="100%" class="indextable genindextable"><tr>
{%- for column in entries|slice(2) if column %}
<td 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/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 dae92b5e..6be7489f 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,14 +119,10 @@ 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 = [];
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/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/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..283a96ff
--- /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 230px;
+}
+
+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: 240px;
+}
+
+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/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 f4e08fbc..8218c04a 100644
--- a/sphinx/util/__init__.py
+++ b/sphinx/util/__init__.py
@@ -18,6 +18,8 @@ import tempfile
import posixpath
import traceback
from os import path
+from codecs import open
+from collections import deque
import docutils
from docutils.utils import relative_path
@@ -48,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*.
"""
@@ -75,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*.
"""
@@ -140,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()
@@ -162,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
@@ -227,8 +232,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()
@@ -281,10 +285,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 = []
@@ -292,3 +302,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/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..a241f574 100644
--- a/sphinx/util/nodes.py
+++ b/sphinx/util/nodes.py
@@ -10,11 +10,12 @@
"""
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
@@ -22,7 +23,28 @@ explicit_title_re = re.compile(r'^(.+?)\s*(?<!\x00)<(.*?)>$', re.DOTALL)
caption_ref_re = explicit_title_re # b/w compat alias
+def extract_messages(doctree):
+ """Extract translatable messages from a document tree."""
+ for node in doctree.traverse(nodes.TextElement):
+ if isinstance(node, (nodes.Invisible, nodes.Inline)):
+ 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 +73,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 +177,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..487a5afc 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
@@ -58,8 +59,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 +125,10 @@ no_fn_re = re.compile(r'[^a-zA-Z0-9_-]')
def make_filename(string):
return no_fn_re.sub('', string)
-
-def ustrftime(format, *args):
- # strftime for unicode strings
- return time.strftime(unicode(format).encode('utf-8'), *args).decode('utf-8')
+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
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..a95c9332 100644
--- a/sphinx/util/pycompat.py
+++ b/sphinx/util/pycompat.py
@@ -13,11 +13,104 @@ 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 = ''
+ # 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'
+ # no need to refactor on 2.x versions
+ convert_with_2to3 = None
+
+
+# ------------------------------------------------------------------------------
+# 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 +123,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..f50f80b0
--- /dev/null
+++ b/sphinx/versioning.py
@@ -0,0 +1,128 @@
+# -*- 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 collections import defaultdict
+
+from sphinx.util.pycompat import product, zip_longest
+
+
+# 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 = defaultdict(list)
+ 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..15c619af
--- /dev/null
+++ b/sphinx/websupport/__init__.py
@@ -0,0 +1,455 @@
+# -*- 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,
+ '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..9410973c
--- /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(['...' if context_start > 0 else '',
+ text[context_start:context_end],
+ '...' if context_end < len(text) else ''])
+
+ 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..cd57bae8
--- /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 = 'ins' if prefix == '+' else 'del'
+ text = self._highlight_text(text, next, tag)
+ css_class = 'prop-added' if prefix == '+' else '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..b2efe82b
--- /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 True if node else False
+
+ 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 f1c4d596..5719aca2 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):
@@ -180,7 +185,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'])))
@@ -202,14 +207,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)
@@ -246,9 +251,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
@@ -481,24 +483,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 3bed28ff..c557101b 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
@@ -330,7 +331,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
@@ -718,7 +719,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.table.rowcount += 1
def visit_entry(self, node):
- if node.has_key('morerows') or node.has_key('morecols'):
+ if 'morerows' in node or 'morecols' in node:
raise UnsupportedError('%s:%s: column or row spanning cells are '
'not yet implemented.' %
(self.curfilestack[-1], node.line or ''))
@@ -781,13 +782,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 +874,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 +932,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'
@@ -1059,29 +1064,36 @@ 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}\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):
@@ -1099,11 +1111,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('#'):
@@ -1212,7 +1230,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.no_contractions -= 1
if self.in_title:
self.body.append(r'\texttt{%s}' % content)
- elif node.has_key('role') and node['role'] == 'samp':
+ elif node.get('role') == 'samp':
self.body.append(r'\samp{%s}' % content)
else:
self.body.append(r'\code{%s}' % content)
@@ -1245,10 +1263,10 @@ 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']
def warner(msg):
self.builder.warn(msg, (self.curfilestack[-1], node.line))
diff --git a/sphinx/writers/manpage.py b/sphinx/writers/manpage.py
index 5377ee58..e6bccca7 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
@@ -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..c5c3aabe
--- /dev/null
+++ b/sphinx/writers/texinfo.py
@@ -0,0 +1,1256 @@
+# -*- 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
+from os import path
+
+from docutils import nodes, writers
+
+from sphinx import addnodes
+from sphinx.locale import versionlabels
+
+
+TEMPLATE = """\
+\\input texinfo @c -*-texinfo-*-
+@c %%**start of header
+@setfilename %(filename)s
+@documentencoding UTF-8
+@copying
+Generated by Sphinx
+@end copying
+@settitle %(title)s
+@defindex ge
+@paragraphindent %(paragraphindent)s
+@exampleindent %(exampleindent)s
+@afourlatex
+%(direntry)s
+@c %%**end of header
+
+@titlepage
+@title %(title)s
+@author %(author)s
+@end titlepage
+@contents
+
+@c %%** start of user preamble
+%(preamble)s
+@c %%** end of user preamble
+
+@ifnottex
+@node Top
+@top %(title)s
+@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
+
+
+## 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(s):
+ """Return a string with Texinfo command characters escaped."""
+ s = s.replace('@', '@@')
+ s = s.replace('{', '@{')
+ s = s.replace('}', '@}')
+ # Prevent "--" from being converted to an "em dash"
+ # s = s.replace('-', '@w{-}')
+ return s
+
+def escape_arg(s):
+ """Return an escaped string suitable for use as an argument
+ to a Texinfo command."""
+ s = escape(s)
+ # Commas are the argument delimeters
+ s = s.replace(',', '@comma{}')
+ # Normalize white space
+ s = ' '.join(s.split()).strip()
+ return s
+
+def escape_id(s):
+ """Return an escaped string suitable for node names, menu entries,
+ and xrefs anchors."""
+ bad_chars = ',:.()@{}'
+ for bc in bad_chars:
+ s = s.replace(bc, ' ')
+ s = ' '.join(s.split()).strip()
+ return s
+
+class TexinfoWriter(writers.Writer):
+ """Texinfo writer for generating Texinfo documents."""
+ supported = ('texinfo', 'texi')
+
+ settings_spec = (
+ 'Texinfo Specific Options',
+ None,
+ (
+ ("Name of the resulting Info file to be created by 'makeinfo'. "
+ "Should probably end with '.info'.",
+ ['--texinfo-filename'],
+ {'default': '', 'metavar': '<file>'}),
+
+ ('Specify the Info dir entry category.',
+ ['--texinfo-dir-category'],
+ {'default': 'Miscellaneous', 'metavar': '<name>'}),
+
+ ('The name to use for the Info dir entry. '
+ 'If not provided, no entry will be created.',
+ ['--texinfo-dir-entry'],
+ {'default': '', 'metavar': '<name>'}),
+
+ ('A brief description (one or two lines) to use for the '
+ 'Info dir entry.',
+ ['--texinfo-dir-description'],
+ {'default': '', 'metavar': '<desc>'}),
+ )
+ )
+
+ settings_defaults = {}
+ settings_default_overrides = {'docinfo_xform': 0}
+
+ 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 = {
+ 'filename': '',
+ 'title': '',
+ 'paragraphindent': 2,
+ 'exampleindent': 4,
+ 'direntry': '',
+ 'preamble': '',
+ 'body': '',
+ }
+
+ 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.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_node_names()
+ self.collect_node_menus()
+ self.collect_rellinks()
+
+ self.short_ids = {}
+ self.body = []
+ self.context = []
+ self.previous_section = None
+ self.section_level = 0
+ self.seen_title = False
+ self.next_section_targets = []
+ self.escape_newlines = 0
+ self.curfilestack = []
+
+ def finish(self):
+ while self.referenced_ids:
+ # Handle xrefs with missing anchors
+ r = self.referenced_ids.pop()
+ if r not in self.written_ids:
+ self.document.reporter.info(
+ "Unknown cross-reference target: `%s'" % r)
+ self.add_text('@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': escape_arg(settings.author),
+ # if empty, use basename of input file
+ 'filename': settings.texinfo_filename,
+ })
+ # Title
+ title = elements['title']
+ if not title:
+ title = self.document.next_node(nodes.title)
+ title = (title and title.astext()) or '<untitled>'
+ elements['title'] = 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:
+ elements['direntry'] = ('@dircategory %s\n'
+ '@direntry\n'
+ '* %s: (%s). %s\n'
+ '@end direntry\n') % (
+ escape_id(settings.texinfo_dir_category),
+ escape_id(settings.texinfo_dir_entry),
+ elements['filename'],
+ escape_arg(settings.texinfo_dir_description))
+ # 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."""
+ self.document['node_name'] = 'Top'
+ self.node_names['Top'] = 'Top'
+ self.written_ids.update(('Top', 'top'))
+
+ for section in self.document.traverse(nodes.section):
+ title = section.next_node(nodes.Titular)
+ name = (title and title.astext()) or '<untitled>'
+ node_id = name = escape_id(name) or '<untitled>'
+ assert node_id and name
+ nth, suffix = 1, ''
+ while (node_id + suffix).lower() 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
+ assert node_id.lower() not in self.written_ids
+ section['node_name'] = node_id
+ self.node_names[node_id] = name
+ self.written_ids.update((node_id, node_id.lower()))
+
+ 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 = tuple(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'
+
+ 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'
+
+ def add_text(self, text, fresh=False):
+ """Add some text to the output.
+
+ Optional argument ``fresh`` means to insert a newline before
+ the text if the last character out was not a newline."""
+ if fresh:
+ if self.body and not self.body[-1].endswith('\n'):
+ self.body.append('\n')
+ self.body.append(text)
+
+ def rstrip(self):
+ """Strip trailing whitespace from the current output."""
+ while self.body and not self.body[-1].strip():
+ del self.body[-1]
+ if not self.body:
+ return
+ self.body[-1] = self.body[-1].rstrip()
+
+ def add_menu_entries(self, entries):
+ for entry in entries:
+ name = self.node_names[entry]
+ if name == entry:
+ self.add_text('* %s::\n' % name, fresh=1)
+ else:
+ self.add_text('* %s: %s.\n' % (name, entry), fresh=1)
+
+ def add_menu(self, section, master=False):
+ entries = self.node_menus[section['node_name']]
+ if not entries:
+ return
+ self.add_text('\n@menu\n')
+ self.add_menu_entries(entries)
+ if master:
+ # Write the "detailed menu"
+ started_detail = False
+ for entry in entries:
+ subentries = self.node_menus[entry]
+ if not subentries:
+ continue
+ if not started_detail:
+ started_detail = True
+ self.add_text('\n@detailmenu\n'
+ ' --- The Detailed Node Listing ---\n')
+ self.add_text('\n%s\n\n' % self.node_names[entry])
+ self.add_menu_entries(subentries)
+ if started_detail:
+ self.rstrip()
+ self.add_text('\n@end detailmenu\n')
+ self.rstrip()
+ self.add_text('\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
+
+ ## 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, msg_node=None):
+ # Anchors can be referenced by their original id
+ # or by the generated shortened id
+ id = escape_id(id).lower()
+ ids = (self.get_short_id(id), id)
+ for id in ids:
+ if id not in self.written_ids:
+ self.add_text('@anchor{%s}' % id)
+ self.written_ids.add(id)
+
+ def add_xref(self, ref, name, node):
+ ref = self.get_short_id(escape_id(ref).lower())
+ name = ' '.join(name.split()).strip()
+ if not name or ref == name:
+ self.add_text('@pxref{%s}' % ref)
+ else:
+ self.add_text('@pxref{%s,,%s}' % (ref, name))
+ self.referenced_ids.add(ref)
+
+ ## Visiting
+
+ def visit_document(self, node):
+ pass
+ def depart_document(self, node):
+ pass
+
+ def visit_Text(self, node):
+ s = escape(node.astext())
+ if self.escape_newlines:
+ s = s.replace('\n', ' ')
+ self.add_text(s)
+ def depart_Text(self, node):
+ pass
+
+ def visit_section(self, node):
+ self.next_section_targets.extend(node.get('ids', []))
+ if not self.seen_title:
+ return
+ if self.previous_section:
+ self.add_menu(self.previous_section)
+ else:
+ self.add_menu(self.document, master=True)
+
+ node_name = node['node_name']
+ pointers = tuple([node_name] + self.rellinks[node_name])
+ self.add_text('\n@node %s,%s,%s,%s\n' % pointers)
+ if node_name != node_name.lower():
+ self.add_text('@anchor{%s}' % node_name.lower())
+ for id in self.next_section_targets:
+ self.add_anchor(id, node)
+
+ self.next_section_targets = []
+ 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):
+ raise nodes.SkipNode
+ elif isinstance(parent, nodes.sidebar):
+ self.visit_rubric(node)
+ elif isinstance(parent, nodes.topic):
+ raise nodes.SkipNode
+ elif not isinstance(parent, nodes.section):
+ self.document.reporter.warning(
+ 'encountered title node not in section, topic, table, '
+ 'admonition or sidebar', base_node=node)
+ self.visit_rubric(node)
+ else:
+ try:
+ heading = self.headings[self.section_level]
+ except IndexError:
+ heading = self.headings[-1]
+ self.add_text('%s ' % heading, fresh=1)
+
+ def depart_title(self, node):
+ self.add_text('', fresh=1)
+
+ def visit_rubric(self, node):
+ try:
+ rubric = self.rubrics[self.section_level]
+ except IndexError:
+ rubric = self.rubrics[-1]
+ self.add_text('%s ' % rubric, fresh=1)
+ def depart_rubric(self, node):
+ self.add_text('', fresh=1)
+
+ def visit_subtitle(self, node):
+ self.add_text('\n\n@noindent\n')
+ def depart_subtitle(self, node):
+ self.add_text('\n\n')
+
+ ## References
+
+ def visit_target(self, node):
+ if node.get('ids'):
+ self.add_anchor(node['ids'][0], node)
+ elif node.get('refid'):
+ # Section targets need to go after the start of the section.
+ next = node.next_node(ascend=1, siblings=1)
+ while isinstance(next, nodes.target):
+ next = next.next_node(ascend=1, siblings=1)
+ if isinstance(next, nodes.section):
+ self.next_section_targets.append(node['refid'])
+ return
+ self.add_anchor(node['refid'], node)
+ elif node.get('refuri'):
+ pass
+ else:
+ self.document.reporter.error("Unknown target type: %r" % node)
+
+ def visit_reference(self, node):
+ if isinstance(node.parent, nodes.title):
+ return
+ if isinstance(node[0], nodes.image):
+ return
+ if isinstance(node.parent, addnodes.desc_type):
+ return
+ name = node.get('name', node.astext()).strip()
+ if node.get('refid'):
+ self.add_xref(escape_id(node['refid']),
+ escape_id(name), node)
+ raise nodes.SkipNode
+ if not node.get('refuri'):
+ self.document.reporter.error("Unknown reference type: %s" % node)
+ return
+ uri = node['refuri']
+ if uri.startswith('#'):
+ self.add_xref(escape_id(uri[1:]), escape_id(name), node)
+ elif uri.startswith('%'):
+ id = uri[1:]
+ if '#' in id:
+ src, id = uri[1:].split('#', 1)
+ assert '#' not in id
+ self.add_xref(escape_id(id), escape_id(name), node)
+ elif uri.startswith('mailto:'):
+ uri = escape_arg(uri[7:])
+ name = escape_arg(name)
+ if not name or name == uri:
+ self.add_text('@email{%s}' % uri)
+ else:
+ self.add_text('@email{%s,%s}' % (uri, name))
+ elif uri.startswith('info:'):
+ uri = uri[5:].replace('_', ' ')
+ uri = escape_arg(uri)
+ id = 'Top'
+ if '#' in uri:
+ uri, id = uri.split('#', 1)
+ id = escape_id(id)
+ name = escape_id(name)
+ if name == id:
+ self.add_text('@pxref{%s,,,%s}' % (id, uri))
+ else:
+ self.add_text('@pxref{%s,,%s,%s}' % (id, name, uri))
+ else:
+ uri = escape_arg(uri)
+ name = escape_arg(name)
+ if not name or uri == name:
+ self.add_text('@indicateurl{%s}' % uri)
+ else:
+ self.add_text('@uref{%s,%s}' % (uri, name))
+ raise nodes.SkipNode
+
+ def depart_reference(self, node):
+ pass
+
+ def visit_title_reference(self, node):
+ text = node.astext()
+ self.add_text('@cite{%s}' % escape_arg(text))
+ raise nodes.SkipNode
+ def depart_title_reference(self, node):
+ pass
+
+ ## Blocks
+
+ def visit_paragraph(self, node):
+ if 'continued' in node or isinstance(node.parent, nodes.compound):
+ self.add_text('@noindent\n', fresh=1)
+ def depart_paragraph(self, node):
+ self.add_text('\n\n')
+
+ def visit_block_quote(self, node):
+ self.rstrip()
+ self.add_text('\n\n@quotation\n')
+ def depart_block_quote(self, node):
+ self.rstrip()
+ self.add_text('\n@end quotation\n\n')
+
+ def visit_literal_block(self, node):
+ self.rstrip()
+ self.add_text('\n\n@example\n')
+ def depart_literal_block(self, node):
+ self.rstrip()
+ self.add_text('\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):
+ self.add_text('@display\n', fresh=1)
+ def depart_line_block(self, node):
+ self.add_text('@end display\n', fresh=1)
+
+ def visit_line(self, node):
+ self.rstrip()
+ self.add_text('\n')
+ self.escape_newlines += 1
+ def depart_line(self, node):
+ self.add_text('@w{ }\n')
+ self.escape_newlines -= 1
+
+ ## Inline
+
+ def visit_strong(self, node):
+ self.add_text('@strong{')
+ def depart_strong(self, node):
+ self.add_text('}')
+
+ def visit_emphasis(self, node):
+ self.add_text('@emph{')
+ def depart_emphasis(self, node):
+ self.add_text('}')
+
+ def visit_literal(self, node):
+ self.add_text('@code{')
+ def depart_literal(self, node):
+ self.add_text('}')
+
+ def visit_superscript(self, node):
+ self.add_text('@w{^')
+ def depart_superscript(self, node):
+ self.add_text('}')
+
+ def visit_subscript(self, node):
+ self.add_text('@w{[')
+ def depart_subscript(self, node):
+ self.add_text(']}')
+
+ ## Footnotes
+
+ def visit_footnote(self, node):
+ self.visit_block_quote(node)
+ def depart_footnote(self, node):
+ self.depart_block_quote(node)
+
+ def visit_footnote_reference(self, node):
+ self.add_text('@w{(')
+ def depart_footnote_reference(self, node):
+ self.add_text(')}')
+
+ visit_citation = visit_footnote
+ depart_citation = depart_footnote
+
+ def visit_citation_reference(self, node):
+ self.add_text('@w{[')
+ def depart_citation_reference(self, node):
+ self.add_text(']}')
+
+ ## Lists
+
+ def visit_bullet_list(self, node):
+ bullet = node.get('bullet', '*')
+ self.rstrip()
+ self.add_text('\n\n@itemize %s\n' % bullet)
+ def depart_bullet_list(self, node):
+ self.rstrip()
+ self.add_text('\n@end itemize\n\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.rstrip()
+ self.add_text('\n\n@enumerate %s\n' % start)
+ def depart_enumerated_list(self, node):
+ self.rstrip()
+ self.add_text('\n@end enumerate\n\n')
+
+ def visit_list_item(self, node):
+ self.rstrip()
+ self.add_text('\n@item\n')
+ def depart_list_item(self, node):
+ pass
+
+ ## Option List
+
+ def visit_option_list(self, node):
+ self.add_text('\n@table @option\n')
+ def depart_option_list(self, node):
+ self.rstrip()
+ self.add_text('\n@end table\n\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.add_text(self.at_item_x + ' ', fresh=1)
+ 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.add_text(node.get('delimiter', ' '))
+ def depart_option_argument(self, node):
+ pass
+
+ def visit_description(self, node):
+ self.add_text('', fresh=1)
+ def depart_description(self, node):
+ pass
+
+ ## Definitions
+
+ def visit_definition_list(self, node):
+ self.add_text('\n@table @asis\n')
+ def depart_definition_list(self, node):
+ self.rstrip()
+ self.add_text('\n@end table\n\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):
+ if node.get('ids') and node['ids'][0]:
+ self.add_anchor(node['ids'][0], node)
+ self.add_text(self.at_item_x + ' ', fresh=1)
+ self.at_item_x = '@itemx'
+ def depart_term(self, node):
+ pass
+
+ def visit_termsep(self, node):
+ self.add_text(self.at_item_x + ' ', fresh=1)
+
+ def visit_classifier(self, node):
+ self.add_text(' : ')
+ def depart_classifier(self, node):
+ pass
+
+ def visit_definition(self, node):
+ self.add_text('', fresh=1)
+ def depart_definition(self, node):
+ pass
+
+ ## Tables
+
+ def visit_table(self, node):
+ self.entry_sep = '@item'
+ def depart_table(self, node):
+ self.rstrip()
+ self.add_text('\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.add_text('@multitable ', fresh=1)
+ for i, n in enumerate(self.colwidths):
+ self.add_text('{%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.rstrip()
+ self.add_text('\n%s ' % self.entry_sep)
+ self.entry_sep = '@tab'
+ def depart_entry(self, node):
+ for i in xrange(node.get('morecols', 0)):
+ self.add_text('@tab\n', fresh=1)
+ self.add_text('', fresh=1)
+
+ ## Field Lists
+
+ def visit_field_list(self, node):
+ self.add_text('\n@itemize @w\n')
+ def depart_field_list(self, node):
+ self.rstrip()
+ self.add_text('\n@end itemize\n\n')
+
+ def visit_field(self, node):
+ if not isinstance(node.parent, nodes.field_list):
+ self.visit_field_list(None)
+ def depart_field(self, node):
+ if not isinstance(node.parent, nodes.field_list):
+ self.depart_field_list(None)
+
+ def visit_field_name(self, node):
+ self.add_text('@item ', fresh=1)
+ def depart_field_name(self, node):
+ self.add_text(':')
+
+ def visit_field_body(self, node):
+ self.add_text('', fresh=1)
+ def depart_field_body(self, node):
+ pass
+
+ ## Admonitions
+
+ def visit_admonition(self, node):
+ title = escape(node[0].astext())
+ self.add_text('\n@cartouche\n'
+ '@quotation %s\n' % title)
+ def depart_admonition(self, node):
+ self.rstrip()
+ self.add_text('\n@end quotation\n'
+ '@end cartouche\n\n')
+
+ def _make_visit_admonition(typ):
+ def visit(self, node):
+ title = escape(typ)
+ self.add_text('\n@cartouche\n'
+ '@quotation %s\n' % title)
+ return visit
+
+ visit_attention = _make_visit_admonition('Attention')
+ visit_caution = _make_visit_admonition('Caution')
+ visit_danger = _make_visit_admonition('Danger')
+ visit_error = _make_visit_admonition('Error')
+ visit_important = _make_visit_admonition('Important')
+ visit_note = _make_visit_admonition('Note')
+ visit_tip = _make_visit_admonition('Tip')
+ visit_hint = _make_visit_admonition('Hint')
+ visit_warning = _make_visit_admonition('Warning')
+
+ depart_attention = depart_admonition
+ depart_caution = depart_admonition
+ depart_danger = depart_admonition
+ depart_error = depart_admonition
+ depart_important = depart_admonition
+ depart_note = depart_admonition
+ depart_tip = depart_admonition
+ depart_hint = depart_admonition
+ depart_warning = depart_admonition
+
+ ## Misc
+
+ def visit_docinfo(self, node):
+ # No 'docinfo_xform'
+ raise nodes.SkipNode
+
+ 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.add_text('%s\n' % escape(title.astext()))
+ self.visit_block_quote(node)
+ def depart_topic(self, node):
+ self.depart_block_quote(node)
+
+ def visit_generated(self, node):
+ raise nodes.SkipNode
+ def depart_generated(self, node):
+ pass
+
+ def visit_transition(self, node):
+ self.add_text('\n\n@noindent\n'
+ '@exdent @w{%s}\n\n'
+ '@noindent\n' % ('_' * 70))
+ def depart_transition(self, node):
+ pass
+
+ def visit_attribution(self, node):
+ self.add_text('@flushright\n', fresh=1)
+ def depart_attribution(self, node):
+ self.add_text('@end flushright\n', fresh=1)
+
+ def visit_raw(self, node):
+ format = node.get('format', '').split()
+ if 'texinfo' in format or 'texi' in format:
+ self.add_text(node.astext())
+ raise nodes.SkipNode
+ def depart_raw(self, node):
+ pass
+
+ def visit_figure(self, node):
+ self.add_text('\n@float Figure\n')
+ def depart_figure(self, node):
+ self.rstrip()
+ self.add_text('\n@end float\n\n')
+
+ def visit_caption(self, node):
+ if not isinstance(node.parent, nodes.figure):
+ self.document.reporter.warning('Caption not inside a figure.',
+ base_node=node)
+ return
+ self.add_text('@caption{', fresh=1)
+ def depart_caption(self, node):
+ if isinstance(node.parent, nodes.figure):
+ self.rstrip()
+ self.add_text('}\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
+ # ignored in non-tex output
+ width = self.tex_image_length(attrs.get('width', ''))
+ height = self.tex_image_length(attrs.get('height', ''))
+ alt = escape_arg(attrs.get('alt', ''))
+ self.add_text('\n\n@image{%s,%s,%s,%s,%s}\n\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):
+ pass
+ def depart_sidebar(self, node):
+ pass
+
+ def visit_label(self, node):
+ self.add_text('@w{(')
+ def depart_label(self, node):
+ self.add_text(')} ')
+
+ 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 depart_substitution_definition(self, node):
+ pass
+
+ def visit_system_message(self, node):
+ self.add_text('\n@format\n'
+ '---------- SYSTEM MESSAGE -----------\n')
+ def depart_system_message(self, node):
+ self.rstrip()
+ self.add_text('\n------------------------------------\n'
+ '@end format\n')
+
+ def visit_comment(self, node):
+ for line in node.astext().splitlines():
+ self.add_text('@c %s\n' % line, fresh=1)
+ raise nodes.SkipNode
+
+ def visit_problematic(self, node):
+ self.add_text('>')
+ def depart_problematic(self, node):
+ self.add_text('<')
+
+ def unimplemented_visit(self, node):
+ self.document.reporter.error("Unimplemented node type: `%s'"
+ % node.__class__.__name__, base_node=node)
+
+ def unknown_visit(self, node):
+ self.document.reporter.error("Unknown node type: `%s'"
+ % node.__class__.__name__, base_node=node)
+ 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']:
+ s = production['tokenname'].ljust(maxlen) + ' ::='
+ lastname = production['tokenname']
+ else:
+ s = '%s ' % (' '*len(lastname))
+ self.add_text(escape(s))
+ self.add_text(escape(production.astext() + '\n'))
+ self.depart_literal_block(None)
+ raise nodes.SkipNode
+ def depart_productionlist(self, node):
+ pass
+
+ def visit_literal_emphasis(self, node):
+ self.add_text('@code{')
+ def depart_literal_emphasis(self, node):
+ self.add_text('}')
+
+ def visit_module(self, node):
+ modname = escape_id(node['modname'])
+ self.add_anchor(modname, node)
+
+ def visit_index(self, node):
+ # Throws off table alignment
+ if isinstance(node.parent, nodes.term):
+ return
+ for entry in node['entries']:
+ typ, text, tid, text2 = entry
+ text = text.replace('!', ' ').replace(';', ' ')
+ text = escape_id(text)
+ self.add_text('@geindex %s\n' % text, fresh=1)
+
+ def visit_autosummary_table(self, node):
+ pass
+ def depart_autosummary_table(self, node):
+ pass
+
+ def visit_todo_node(self, node):
+ self.visit_transition(node)
+ self.visit_admonition(node)
+ def depart_todo_node(self, node):
+ self.depart_admonition(node)
+ self.visit_transition(node)
+
+ def visit_refcount(self, node):
+ self.add_text('\n')
+ def depart_refcount(self, node):
+ self.add_text('\n\n')
+
+ def visit_versionmodified(self, node):
+ intro = versionlabels[node['type']] % node['version']
+ if node.children:
+ intro += ': '
+ else:
+ intro += '.'
+ self.add_text('%s' % escape(intro), fresh=1)
+ def depart_versionmodified(self, node):
+ self.rstrip()
+ self.add_text('\n\n', fresh=1)
+
+ def visit_start_of_file(self, node):
+ self.curfilestack.append(node.get('docname', ''))
+ if node.get('docname'):
+ self.next_section_targets.append(node['docname'])
+ def depart_start_of_file(self, node):
+ self.curfilestack.pop()
+
+ def visit_centered(self, node):
+ txt = escape_arg(node.astext())
+ self.add_text('@center %s\n' % txt, fresh=1)
+ raise nodes.SkipNode
+ def depart_centered(self, node):
+ pass
+
+ def visit_seealso(self, node):
+ pass
+ def depart_seealso(self, node):
+ pass
+
+ def visit_meta(self, node):
+ raise nodes.SkipNode
+ def depart_meta(self, node):
+ pass
+
+ def visit_glossary(self, node):
+ pass
+ def depart_glossary(self, node):
+ pass
+
+ def visit_acks(self, node):
+ pass
+ def depart_acks(self, node):
+ pass
+
+ def visit_highlightlang(self, node):
+ pass
+ def depart_highlightlang(self, node):
+ pass
+
+ ## Desc
+
+ desc_map = {
+ 'function' : 'Function',
+ 'class': 'Class',
+ 'method': 'Method',
+ 'classmethod': 'Class Method',
+ 'staticmethod': 'Static Method',
+ 'exception': 'Exception',
+ 'data': 'Data',
+ 'attribute': 'Attribute',
+ 'opcode': 'Opcode',
+ 'cfunction': 'C Function',
+ 'cmember': 'C Member',
+ 'cmacro': 'C Macro',
+ 'ctype': 'C Type',
+ 'cvar': 'C Variable',
+ 'cmdoption': 'Option',
+ 'describe': 'Description',
+ }
+
+ def visit_desc(self, node):
+ self.at_deffnx = '@deffn'
+ def depart_desc(self, node):
+ self.rstrip()
+ self.add_text('@end deffn\n\n', fresh=1)
+ def visit_desc_signature(self, node):
+ self.desctype = node.parent['desctype'].strip()
+ if self.desctype != 'describe' and node['ids']:
+ self.add_anchor(node['ids'][0], node)
+ typ = self.desc_map.get(self.desctype, self.desctype)
+ self.add_text('%s {%s} ' % (self.at_deffnx, escape_arg(typ)), fresh=1)
+ self.at_deffnx = '@deffnx'
+ def depart_desc_signature(self, node):
+ self.add_text("", fresh=1)
+
+ 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.add_text(' -> ')
+ def depart_desc_returns(self, node):
+ pass
+
+ def visit_desc_parameterlist(self, node):
+ self.add_text(' (')
+ self.first_param = 1
+ def depart_desc_parameterlist(self, node):
+ self.add_text(')')
+
+ def visit_desc_parameter(self, node):
+ if not self.first_param:
+ self.add_text(', ')
+ else:
+ self.first_param = 0
+ self.add_text(escape(node.astext()))
+ raise nodes.SkipNode
+ def depart_desc_parameter(self, node):
+ pass
+
+ def visit_desc_optional(self, node):
+ self.add_text('[')
+ def depart_desc_optional(self, node):
+ self.add_text(']')
+
+ def visit_desc_annotation(self, node):
+ raise nodes.SkipNode
+ def depart_desc_annotation(self, node):
+ pass
+
+ def visit_desc_content(self, node):
+ self.add_text("", fresh=1)
+ def depart_desc_content(self, node):
+ pass
+
+ def visit_inline(self, node):
+ # stub
+ pass
+ def depart_inline(self, node):
+ pass
+
+ def visit_abbreviation(self, node):
+ self.add_text('@abbr{')
+ if node.hasattr('explanation'):
+ self.context.append(', %s}' % escape_arg(node['explanation']))
+ 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):
+ # stub
+ 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
diff --git a/sphinx/writers/text.py b/sphinx/writers/text.py
index 1d6ad648..1a7d2a7d 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
@@ -52,6 +52,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 = []
@@ -98,9 +106,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):
@@ -225,7 +233,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()
@@ -251,7 +259,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
@@ -351,7 +359,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)
@@ -387,10 +395,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):
@@ -399,7 +407,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:
@@ -475,6 +483,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):
@@ -651,9 +663,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())