mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Merge branch '1.7-release'
This commit is contained in:
@@ -14,6 +14,9 @@ install:
|
||||
- C:\Python%PYTHON%\python.exe -m pip install -U pip setuptools
|
||||
- C:\Python%PYTHON%\python.exe -m pip install .[test,websupport]
|
||||
|
||||
cache:
|
||||
- '%LOCALAPPDATA%\pip\Cache'
|
||||
|
||||
# No automatic build, just run python tests
|
||||
build: off
|
||||
|
||||
@@ -39,3 +42,17 @@ test_script:
|
||||
|
||||
after_test:
|
||||
- ps: (New-Object System.Net.WebClient).UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path (Join-Path tests .junit.xml)))
|
||||
|
||||
after_build:
|
||||
# Remove old or huge cache files to hopefully not exceed the 1GB cache limit.
|
||||
#
|
||||
# If the cache limit is reached, the cache will not be updated (of not even
|
||||
# created in the first run). So this is a trade of between keeping the cache
|
||||
# current and having a cache at all.
|
||||
# NB: This is done only `on_success` since the cache in uploaded only on
|
||||
# success anyway.
|
||||
- C:\cygwin\bin\find "%LOCALAPPDATA%\pip" -type f -mtime +360 -delete
|
||||
- C:\cygwin\bin\find "%LOCALAPPDATA%\pip" -type f -size +10M -delete
|
||||
- C:\cygwin\bin\find "%LOCALAPPDATA%\pip" -empty -delete
|
||||
# Show size of cache
|
||||
- C:\cygwin\bin\du -hs "%LOCALAPPDATA%\pip\Cache"
|
||||
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -11,8 +11,9 @@
|
||||
.ropeproject/
|
||||
TAGS
|
||||
.tags
|
||||
.tox
|
||||
.venv
|
||||
.tox/
|
||||
.tx/
|
||||
.venv/
|
||||
.coverage
|
||||
htmlcov
|
||||
.DS_Store
|
||||
|
||||
@@ -33,12 +33,6 @@ matrix:
|
||||
- python: '2.7'
|
||||
env: TOXENV=flake8
|
||||
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- graphviz
|
||||
- imagemagick
|
||||
|
||||
install:
|
||||
- pip install -U tox codecov
|
||||
|
||||
|
||||
1
AUTHORS
1
AUTHORS
@@ -34,6 +34,7 @@ Other contributors, listed alphabetically, are:
|
||||
* Hernan Grecco -- search improvements
|
||||
* Horst Gutmann -- internationalization support
|
||||
* Martin Hans -- autodoc improvements
|
||||
* Zac Hatfield-Dodds -- doctest reporting improvements
|
||||
* Doug Hellmann -- graphviz improvements
|
||||
* Tim Hoffmann -- theme improvements
|
||||
* Timotheus Kampik - JS theme & search enhancements
|
||||
|
||||
21
CHANGES
21
CHANGES
@@ -64,6 +64,9 @@ Bugs fixed
|
||||
* #4531: autosummary: methods are not treated as attributes
|
||||
* #4538: autodoc: ``sphinx.ext.autodoc.Options`` has been moved
|
||||
* #4539: autodoc emits warnings for partialmethods
|
||||
* #4223: doctest: failing tests reported in wrong file, at wrong line
|
||||
* i18n: message catalogs are not compiled if specific filenames are given for
|
||||
``sphinx-build`` as arguments (refs: #4560)
|
||||
|
||||
Testing
|
||||
--------
|
||||
@@ -234,7 +237,7 @@ Bugs fixed
|
||||
* #3962: sphinx-apidoc does not recognize implicit namespace packages correctly
|
||||
* #4094: C++, allow empty template argument lists.
|
||||
* C++, also hyperlink types in the name of declarations with qualified names.
|
||||
* C++, do not add index entries for declarations inside concepts.
|
||||
* C++, do not add index entries for declarations inside concepts.
|
||||
* C++, support the template disambiguator for dependent names.
|
||||
* #4314: For PDF 'howto' documents, numbering of code-blocks differs from the
|
||||
one of figures and tables
|
||||
@@ -251,7 +254,7 @@ Testing
|
||||
* Add support for docutils 0.14
|
||||
* Add tests for the ``sphinx.ext.inheritance_diagram`` extension.
|
||||
|
||||
Release 1.6.7 (in development)
|
||||
Release 1.6.8 (in development)
|
||||
==============================
|
||||
|
||||
Dependencies
|
||||
@@ -269,6 +272,15 @@ Features added
|
||||
Bugs fixed
|
||||
----------
|
||||
|
||||
Testing
|
||||
--------
|
||||
|
||||
Release 1.6.7 (released Feb 04, 2018)
|
||||
=====================================
|
||||
|
||||
Bugs fixed
|
||||
----------
|
||||
|
||||
* #1922: html search: Upper characters problem in French
|
||||
* #4412: Updated jQuery version from 3.1.0 to 3.2.1
|
||||
* #4438: math: math with labels with whitespace cause html error
|
||||
@@ -285,9 +297,6 @@ Bugs fixed
|
||||
* #2372: autosummary: invalid signatures are shown for type annotated functions
|
||||
* #3942: html: table is not aligned to center even if ``:align: center``
|
||||
|
||||
Testing
|
||||
--------
|
||||
|
||||
Release 1.6.6 (released Jan 08, 2018)
|
||||
=====================================
|
||||
|
||||
@@ -322,7 +331,7 @@ Bugs fixed
|
||||
* #1421: Respect the quiet flag in sphinx-quickstart
|
||||
* #4281: Race conditions when creating output directory
|
||||
* #4315: For PDF 'howto' documents, ``latex_toplevel_sectioning='part'`` generates
|
||||
``\chapter`` commands
|
||||
``\chapter`` commands
|
||||
* #4214: Two todolist directives break sphinx-1.6.5
|
||||
* Fix links to external option docs with intersphinx (refs: #3769)
|
||||
* #4091: Private members not documented without :undoc-members:
|
||||
|
||||
@@ -61,8 +61,8 @@ of the core developers before it is merged into the main repository.
|
||||
#. If you feel uncomfortable or uncertain about an issue or your changes, feel
|
||||
free to email the *sphinx-dev* mailing list.
|
||||
#. Fork `the repository`_ on GitHub to start making your changes to the
|
||||
**master** branch for next major version, or **stable** branch for next
|
||||
minor version.
|
||||
``master`` branch for next major version, or ``X.Y`` branch for next
|
||||
minor version (see `Branch Model`_).
|
||||
#. Write a test which shows that the bug was fixed or that the feature works
|
||||
as expected.
|
||||
#. Send a pull request and bug the maintainer until it gets merged and
|
||||
@@ -92,12 +92,13 @@ These are the basic steps needed to start developing on Sphinx.
|
||||
#. Checkout the appropriate branch.
|
||||
|
||||
For changes that should be included in the next minor release (namely bug
|
||||
fixes), use the ``stable`` branch. ::
|
||||
fixes), use the ``X.Y`` branch. ::
|
||||
|
||||
git checkout stable
|
||||
git checkout X.Y
|
||||
|
||||
For new features or other substantial changes that should wait until the
|
||||
next major release, use the ``master`` branch.
|
||||
next major release, use the ``master`` branch (see `Branch Model`_ for
|
||||
detail).
|
||||
|
||||
#. Setup a virtual environment.
|
||||
|
||||
@@ -187,7 +188,7 @@ These are the basic steps needed to start developing on Sphinx.
|
||||
git push origin feature-xyz
|
||||
|
||||
#. Submit a pull request from your branch to the respective branch (``master``
|
||||
or ``stable``) on ``sphinx-doc/sphinx`` using the GitHub interface.
|
||||
or ``X.Y``).
|
||||
|
||||
#. Wait for a core developer to review your changes.
|
||||
|
||||
@@ -304,6 +305,24 @@ Debugging Tips
|
||||
$ npm install
|
||||
$ node_modules/.bin/grunt build # -> dest/*.global.js
|
||||
|
||||
|
||||
Branch Model
|
||||
------------
|
||||
|
||||
Sphinx project uses following branches for developing.
|
||||
|
||||
``master``
|
||||
Used for main development. All improvement and refactoring, bug fixes
|
||||
are allowed.
|
||||
|
||||
``X.Y``
|
||||
Where ``X.Y`` is the ``MAJOR.MINOR`` release. Used to maintain current
|
||||
stable release. Only bug fixes and stable changes are allowed. Only the
|
||||
most recent stable release is currently retained. When a new version is
|
||||
released, the old release branch will be deleted and replaced by an
|
||||
equivalent tag.
|
||||
|
||||
|
||||
Deprecating a feature
|
||||
---------------------
|
||||
|
||||
|
||||
3
EXAMPLES
3
EXAMPLES
@@ -141,7 +141,6 @@ Documentation using the nature theme
|
||||
Documentation using another builtin theme
|
||||
-----------------------------------------
|
||||
|
||||
* Arcade: http://arcade.academy/ (sphinx_rtd_theme)
|
||||
* Breathe: https://breathe.readthedocs.io/ (haiku)
|
||||
* MPipe: https://vmlaker.github.io/mpipe/ (sphinx13)
|
||||
* NLTK: http://www.nltk.org/ (agogo)
|
||||
@@ -159,6 +158,8 @@ Documentation using sphinx_rtd_theme
|
||||
|
||||
* Annotator: http://docs.annotatorjs.org/
|
||||
* Ansible: https://docs.ansible.com/ (customized)
|
||||
* Arcade: http://arcade.academy/
|
||||
* aria2: https://aria2.github.io/manual/en/html/
|
||||
* ASE: https://wiki.fysik.dtu.dk/ase/
|
||||
* Autofac: http://docs.autofac.org/
|
||||
* BigchainDB: https://docs.bigchaindb.com/
|
||||
|
||||
@@ -1141,18 +1141,23 @@ class Sphinx(object):
|
||||
"""
|
||||
if typ == 'read':
|
||||
attrname = 'parallel_read_safe'
|
||||
message = __("the %s extension does not declare if it is safe "
|
||||
"for parallel reading, assuming it isn't - please "
|
||||
"ask the extension author to check and make it "
|
||||
"explicit")
|
||||
elif typ == 'write':
|
||||
attrname = 'parallel_write_safe'
|
||||
message = __("the %s extension does not declare if it is safe "
|
||||
"for parallel writing, assuming it isn't - please "
|
||||
"ask the extension author to check and make it "
|
||||
"explicit")
|
||||
else:
|
||||
raise ValueError('parallel type %s is not supported' % typ)
|
||||
|
||||
for ext in itervalues(self.extensions):
|
||||
allowed = getattr(ext, attrname, None)
|
||||
if allowed is None:
|
||||
logger.warning(__("the %s extension does not declare if it is safe "
|
||||
"for parallel %sing, assuming it isn't - please "
|
||||
"ask the extension author to check and make it "
|
||||
"explicit"), ext.name, typ)
|
||||
logger.warning(message, ext.name)
|
||||
logger.warning('doing serial %s', typ)
|
||||
return False
|
||||
elif not allowed:
|
||||
|
||||
@@ -16,7 +16,7 @@ from docutils import nodes
|
||||
|
||||
from sphinx.deprecation import RemovedInSphinx20Warning
|
||||
from sphinx.environment.adapters.asset import ImageAdapter
|
||||
from sphinx.util import i18n, import_object, path_stabilize, logging, status_iterator
|
||||
from sphinx.util import i18n, import_object, logging, status_iterator
|
||||
from sphinx.util.console import bold # type: ignore
|
||||
from sphinx.util.i18n import find_catalog
|
||||
from sphinx.util.osutil import SEP, ensuredir, relative_uri
|
||||
@@ -257,11 +257,14 @@ class Builder(object):
|
||||
# type: (List[unicode]) -> None
|
||||
def to_domain(fpath):
|
||||
# type: (unicode) -> unicode
|
||||
docname, _ = path.splitext(path_stabilize(fpath))
|
||||
dom = find_catalog(docname, self.config.gettext_compact)
|
||||
return dom
|
||||
docname = self.env.path2doc(path.abspath(fpath))
|
||||
if docname:
|
||||
return find_catalog(docname, self.config.gettext_compact)
|
||||
else:
|
||||
return None
|
||||
|
||||
specified_domains = set(map(to_domain, specified_files))
|
||||
specified_domains.discard(None)
|
||||
catalogs = i18n.find_catalog_source_files(
|
||||
[path.join(self.srcdir, x) for x in self.config.locale_dirs],
|
||||
self.config.language,
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
:license: BSD, see LICENSE for details.
|
||||
"""
|
||||
|
||||
import fnmatch
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
@@ -45,7 +44,7 @@ from sphinx.util.websupport import is_commentable
|
||||
|
||||
if False:
|
||||
# For type annotation
|
||||
from typing import Any, Callable, Dict, IO, Iterator, List, Pattern, Set, Tuple, Type, Union, Generator # NOQA
|
||||
from typing import Any, Callable, Dict, IO, Iterator, List, Optional, Pattern, Set, Tuple, Type, Union, Generator # NOQA
|
||||
from docutils import nodes # NOQA
|
||||
from sphinx.application import Sphinx # NOQA
|
||||
from sphinx.builders import Builder # NOQA
|
||||
@@ -350,17 +349,16 @@ class BuildEnvironment(object):
|
||||
app.emit('env-merge-info', self, docnames, other)
|
||||
|
||||
def path2doc(self, filename):
|
||||
# type: (unicode) -> unicode
|
||||
# type: (unicode) -> Optional[unicode]
|
||||
"""Return the docname for the filename if the file is document.
|
||||
|
||||
*filename* should be absolute or relative to the source directory.
|
||||
"""
|
||||
if filename.startswith(self.srcdir):
|
||||
filename = filename[len(self.srcdir) + 1:]
|
||||
filename = os.path.relpath(filename, self.srcdir)
|
||||
for suffix in self.config.source_suffix:
|
||||
if fnmatch.fnmatch(filename, '*' + suffix):
|
||||
if filename.endswith(suffix):
|
||||
return filename[:-len(suffix)]
|
||||
# the file does not have docname
|
||||
return None
|
||||
|
||||
def doc2path(self, docname, base=True, suffix=None):
|
||||
@@ -374,15 +372,13 @@ class BuildEnvironment(object):
|
||||
"""
|
||||
docname = docname.replace(SEP, path.sep)
|
||||
if suffix is None:
|
||||
candidate_suffix = None # type: unicode
|
||||
# Use first candidate if there is not a file for any suffix
|
||||
suffix = next(iter(self.config.source_suffix))
|
||||
for candidate_suffix in self.config.source_suffix:
|
||||
if path.isfile(path.join(self.srcdir, docname) +
|
||||
candidate_suffix):
|
||||
suffix = candidate_suffix
|
||||
break
|
||||
else:
|
||||
# document does not exist
|
||||
suffix = list(self.config.source_suffix)[0]
|
||||
if base is True:
|
||||
return path.join(self.srcdir, docname) + suffix
|
||||
elif base is None:
|
||||
|
||||
@@ -34,7 +34,7 @@ from sphinx.util.osutil import fs_encoding
|
||||
|
||||
if False:
|
||||
# For type annotation
|
||||
from typing import Any, Callable, Dict, IO, Iterable, List, Sequence, Set, Tuple # NOQA
|
||||
from typing import Any, Callable, Dict, IO, Iterable, List, Optional, Sequence, Set, Tuple # NOQA
|
||||
from sphinx.application import Sphinx # NOQA
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -223,17 +223,18 @@ class TestGroup(object):
|
||||
|
||||
|
||||
class TestCode(object):
|
||||
def __init__(self, code, type, lineno, options=None):
|
||||
# type: (unicode, unicode, int, Dict) -> None
|
||||
def __init__(self, code, type, filename, lineno, options=None):
|
||||
# type: (unicode, unicode, Optional[str], int, Optional[Dict]) -> None
|
||||
self.code = code
|
||||
self.type = type
|
||||
self.filename = filename
|
||||
self.lineno = lineno
|
||||
self.options = options or {}
|
||||
|
||||
def __repr__(self): # type: ignore
|
||||
# type: () -> unicode
|
||||
return 'TestCode(%r, %r, %r, options=%r)' % (
|
||||
self.code, self.type, self.lineno, self.options)
|
||||
return 'TestCode(%r, %r, filename=%r, lineno=%r, options=%r)' % (
|
||||
self.code, self.type, self.filename, self.lineno, self.options)
|
||||
|
||||
|
||||
class SphinxDocTestRunner(doctest.DocTestRunner):
|
||||
@@ -366,6 +367,36 @@ Doctest summary
|
||||
doctree = self.env.get_doctree(docname)
|
||||
self.test_doc(docname, doctree)
|
||||
|
||||
def get_filename_for_node(self, node, docname):
|
||||
# type: (nodes.Node, unicode) -> str
|
||||
"""Try to get the file which actually contains the doctest, not the
|
||||
filename of the document it's included in."""
|
||||
try:
|
||||
filename = path.relpath(node.source, self.env.srcdir)\
|
||||
.rsplit(':docstring of ', maxsplit=1)[0]
|
||||
except Exception:
|
||||
filename = self.env.doc2path(docname, base=None)
|
||||
if PY2:
|
||||
return filename.encode(fs_encoding)
|
||||
return filename
|
||||
|
||||
@staticmethod
|
||||
def get_line_number(node):
|
||||
# type: (nodes.Node) -> Optional[int]
|
||||
"""Get the real line number or admit we don't know."""
|
||||
# TODO: Work out how to store or calculate real (file-relative)
|
||||
# line numbers for doctest blocks in docstrings.
|
||||
if ':docstring of ' in path.basename(node.source or ''):
|
||||
# The line number is given relative to the stripped docstring,
|
||||
# not the file. This is correct where it is set, in
|
||||
# `docutils.nodes.Node.setup_child`, but Sphinx should report
|
||||
# relative to the file, not the docstring.
|
||||
return None
|
||||
if node.line is not None:
|
||||
# TODO: find the root cause of this off by one error.
|
||||
return node.line - 1
|
||||
return None
|
||||
|
||||
def test_doc(self, docname, doctree):
|
||||
# type: (unicode, nodes.Node) -> None
|
||||
groups = {} # type: Dict[unicode, TestGroup]
|
||||
@@ -392,13 +423,16 @@ Doctest summary
|
||||
return isinstance(node, (nodes.literal_block, nodes.comment)) \
|
||||
and 'testnodetype' in node
|
||||
for node in doctree.traverse(condition):
|
||||
source = 'test' in node and node['test'] or node.astext()
|
||||
source = node['test'] if 'test' in node else node.astext()
|
||||
filename = self.get_filename_for_node(node, docname)
|
||||
line_number = self.get_line_number(node)
|
||||
if not source:
|
||||
logger.warning('no code/output in %s block at %s:%s',
|
||||
node.get('testnodetype', 'doctest'),
|
||||
self.env.doc2path(docname), node.line)
|
||||
filename, line_number)
|
||||
code = TestCode(source, type=node.get('testnodetype', 'doctest'),
|
||||
lineno=node.line, options=node.get('options'))
|
||||
filename=filename, lineno=line_number,
|
||||
options=node.get('options'))
|
||||
node_groups = node.get('groups', ['default'])
|
||||
if '*' in node_groups:
|
||||
add_to_all_groups.append(code)
|
||||
@@ -412,12 +446,12 @@ Doctest summary
|
||||
group.add_code(code)
|
||||
if self.config.doctest_global_setup:
|
||||
code = TestCode(self.config.doctest_global_setup,
|
||||
'testsetup', lineno=0)
|
||||
'testsetup', filename=None, lineno=0)
|
||||
for group in itervalues(groups):
|
||||
group.add_code(code, prepend=True)
|
||||
if self.config.doctest_global_cleanup:
|
||||
code = TestCode(self.config.doctest_global_cleanup,
|
||||
'testcleanup', lineno=0)
|
||||
'testcleanup', filename=None, lineno=0)
|
||||
for group in itervalues(groups):
|
||||
group.add_code(code)
|
||||
if not groups:
|
||||
@@ -426,7 +460,7 @@ Doctest summary
|
||||
self._out('\nDocument: %s\n----------%s\n' %
|
||||
(docname, '-' * len(docname)))
|
||||
for group in itervalues(groups):
|
||||
self.test_group(group, self.env.doc2path(docname, base=None))
|
||||
self.test_group(group)
|
||||
# Separately count results from setup code
|
||||
res_f, res_t = self.setup_runner.summarize(self._out, verbose=False)
|
||||
self.setup_failures += res_f
|
||||
@@ -445,13 +479,8 @@ Doctest summary
|
||||
# type: (unicode, unicode, unicode, Any, bool) -> Any
|
||||
return compile(code, name, self.type, flags, dont_inherit)
|
||||
|
||||
def test_group(self, group, filename):
|
||||
# type: (TestGroup, unicode) -> None
|
||||
if PY2:
|
||||
filename_str = filename.encode(fs_encoding)
|
||||
else:
|
||||
filename_str = filename
|
||||
|
||||
def test_group(self, group):
|
||||
# type: (TestGroup) -> None
|
||||
ns = {} # type: Dict
|
||||
|
||||
def run_setup_cleanup(runner, testcodes, what):
|
||||
@@ -466,7 +495,7 @@ Doctest summary
|
||||
# simulate a doctest with the code
|
||||
sim_doctest = doctest.DocTest(examples, {},
|
||||
'%s (%s code)' % (group.name, what),
|
||||
filename_str, 0, None)
|
||||
testcodes[0].filename, 0, None)
|
||||
sim_doctest.globs = ns
|
||||
old_f = runner.failures
|
||||
self.type = 'exec' # the snippet may contain multiple statements
|
||||
@@ -487,10 +516,10 @@ Doctest summary
|
||||
try:
|
||||
test = parser.get_doctest( # type: ignore
|
||||
doctest_encode(code[0].code, self.env.config.source_encoding), {}, # type: ignore # NOQA
|
||||
group.name, filename_str, code[0].lineno)
|
||||
group.name, code[0].filename, code[0].lineno)
|
||||
except Exception:
|
||||
logger.warning('ignoring invalid doctest code: %r', code[0].code,
|
||||
location=(filename, code[0].lineno))
|
||||
location=(code[0].filename, code[0].lineno))
|
||||
continue
|
||||
if not test.examples:
|
||||
continue
|
||||
@@ -518,7 +547,7 @@ Doctest summary
|
||||
lineno=code[0].lineno,
|
||||
options=options)
|
||||
test = doctest.DocTest([example], {}, group.name, # type: ignore
|
||||
filename_str, code[0].lineno, None)
|
||||
code[0].filename, code[0].lineno, None)
|
||||
self.type = 'exec' # multiple statements again
|
||||
# DocTest.__init__ copies the globs namespace, which we don't want
|
||||
test.globs = ns
|
||||
|
||||
@@ -52,7 +52,7 @@ def verify_needs_extensions(app, config):
|
||||
for extname, reqversion in iteritems(config.needs_extensions):
|
||||
extension = app.extensions.get(extname)
|
||||
if extension is None:
|
||||
logger.warning(__('The %s extension is required by needs_extensions settings,'
|
||||
logger.warning(__('The %s extension is required by needs_extensions settings, '
|
||||
'but it is not loaded.'), extname)
|
||||
continue
|
||||
|
||||
|
||||
@@ -6,110 +6,118 @@
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Sphinx 1.7\n"
|
||||
"Project-Id-Version: Sphinx 1.7.0\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2018-01-15 21:58+0900\n"
|
||||
"POT-Creation-Date: 2018-02-07 09:08+0900\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 2.5.1\n"
|
||||
"Generated-By: Babel 2.5.3\n"
|
||||
|
||||
#: sphinx/application.py:177
|
||||
#: sphinx/application.py:176
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This project needs at least Sphinx v%s and therefore cannot be built with"
|
||||
" this version."
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:208
|
||||
#: sphinx/application.py:207
|
||||
msgid ""
|
||||
"'setup' as currently defined in conf.py isn't a Python callable. Please "
|
||||
"modify its definition to make it a callable function. This is needed for "
|
||||
"conf.py to behave as a Sphinx extension."
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:222
|
||||
#: sphinx/application.py:221
|
||||
#, python-format
|
||||
msgid "primary_domain %r not found, ignored."
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:259 sphinx/application.py:287
|
||||
#: sphinx/application.py:258 sphinx/application.py:286
|
||||
msgid "done"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:280
|
||||
#: sphinx/application.py:279
|
||||
msgid "loading pickled environment... "
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:290
|
||||
#: sphinx/application.py:289
|
||||
msgid "not yet created"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:292
|
||||
#: sphinx/application.py:291
|
||||
#, python-format
|
||||
msgid "failed: %s"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:302
|
||||
#: sphinx/application.py:301
|
||||
msgid "No builder selected, using default: html"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:334
|
||||
#: sphinx/application.py:333
|
||||
msgid "succeeded"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:334
|
||||
#: sphinx/application.py:333
|
||||
msgid "finished with problems"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:336
|
||||
#: sphinx/application.py:335
|
||||
#, python-format
|
||||
msgid "build %s, %s warning."
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:340
|
||||
#: sphinx/application.py:339
|
||||
#, python-format
|
||||
msgid "build %s."
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:461
|
||||
#: sphinx/application.py:460
|
||||
#, python-format
|
||||
msgid "Config value %r already present"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:480
|
||||
#: sphinx/application.py:479
|
||||
#, python-format
|
||||
msgid ""
|
||||
"while setting up extension %s: node class %r is already registered, its "
|
||||
"visitors will be overridden"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:489
|
||||
#: sphinx/application.py:488
|
||||
#, python-format
|
||||
msgid "Value for key %r must be a (visit, depart) function tuple"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:529
|
||||
#: sphinx/application.py:528
|
||||
#, python-format
|
||||
msgid ""
|
||||
"while setting up extension %s: directive %r is already registered, it "
|
||||
"will be overridden"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:540 sphinx/application.py:552
|
||||
#: sphinx/application.py:539 sphinx/application.py:551
|
||||
#, python-format
|
||||
msgid ""
|
||||
"while setting up extension %s: role %r is already registered, it will be "
|
||||
"overridden"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:699
|
||||
#: sphinx/application.py:690
|
||||
#, python-format
|
||||
msgid ""
|
||||
"the %s extension does not declare if it is safe for parallel %sing, "
|
||||
"the %s extension does not declare if it is safe for parallel reading, "
|
||||
"assuming it isn't - please ask the extension author to check and make it "
|
||||
"explicit"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/application.py:696
|
||||
#, python-format
|
||||
msgid ""
|
||||
"the %s extension does not declare if it is safe for parallel writing, "
|
||||
"assuming it isn't - please ask the extension author to check and make it "
|
||||
"explicit"
|
||||
msgstr ""
|
||||
@@ -337,35 +345,35 @@ msgstr ""
|
||||
msgid "Module level"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/builders/html.py:399 sphinx/transforms/__init__.py:126
|
||||
#: sphinx/builders/html.py:443 sphinx/transforms/__init__.py:127
|
||||
#: sphinx/writers/latex.py:583 sphinx/writers/manpage.py:110
|
||||
#: sphinx/writers/texinfo.py:241
|
||||
#: sphinx/writers/texinfo.py:240
|
||||
#, python-format
|
||||
msgid "%b %d, %Y"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/builders/html.py:417 sphinx/themes/basic/defindex.html:30
|
||||
#: sphinx/builders/html.py:461 sphinx/themes/basic/defindex.html:30
|
||||
msgid "General Index"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/builders/html.py:417
|
||||
#: sphinx/builders/html.py:461
|
||||
msgid "index"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/builders/html.py:481
|
||||
#: sphinx/builders/html.py:525
|
||||
msgid "next"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/builders/html.py:490
|
||||
#: sphinx/builders/html.py:534
|
||||
msgid "previous"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/builders/html.py:1386
|
||||
#: sphinx/builders/html.py:1424
|
||||
#, python-format
|
||||
msgid "%s %s documentation"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/builders/latex.py:205 sphinx/builders/texinfo.py:224
|
||||
#: sphinx/builders/latex.py:204 sphinx/builders/texinfo.py:224
|
||||
msgid " (in "
|
||||
msgstr ""
|
||||
|
||||
@@ -409,19 +417,19 @@ msgstr ""
|
||||
msgid "Line spec %r: no lines pulled from include file %r"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/directives/other.py:158
|
||||
#: sphinx/directives/other.py:157
|
||||
msgid "Section author: "
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/directives/other.py:160
|
||||
#: sphinx/directives/other.py:159
|
||||
msgid "Module author: "
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/directives/other.py:162
|
||||
#: sphinx/directives/other.py:161
|
||||
msgid "Code author: "
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/directives/other.py:164
|
||||
#: sphinx/directives/other.py:163
|
||||
msgid "Author: "
|
||||
msgstr ""
|
||||
|
||||
@@ -430,18 +438,18 @@ msgstr ""
|
||||
msgid "%s %s"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/c.py:65 sphinx/domains/cpp.py:5441
|
||||
#: sphinx/domains/python.py:177
|
||||
#: sphinx/domains/c.py:65 sphinx/domains/cpp.py:5440
|
||||
#: sphinx/domains/python.py:176
|
||||
msgid "Parameters"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/c.py:68 sphinx/domains/cpp.py:5450
|
||||
#: sphinx/domains/javascript.py:210 sphinx/domains/python.py:189
|
||||
#: sphinx/domains/c.py:68 sphinx/domains/cpp.py:5449
|
||||
#: sphinx/domains/javascript.py:210 sphinx/domains/python.py:188
|
||||
msgid "Returns"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/c.py:70 sphinx/domains/javascript.py:212
|
||||
#: sphinx/domains/python.py:191
|
||||
#: sphinx/domains/python.py:190
|
||||
msgid "Return type"
|
||||
msgstr ""
|
||||
|
||||
@@ -470,12 +478,12 @@ msgstr ""
|
||||
msgid "%s (C variable)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/c.py:257 sphinx/domains/cpp.py:5864
|
||||
#: sphinx/domains/javascript.py:299 sphinx/domains/python.py:706
|
||||
#: sphinx/domains/c.py:257 sphinx/domains/cpp.py:5863
|
||||
#: sphinx/domains/javascript.py:299 sphinx/domains/python.py:705
|
||||
msgid "function"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/c.py:258 sphinx/domains/cpp.py:5865
|
||||
#: sphinx/domains/c.py:258 sphinx/domains/cpp.py:5864
|
||||
msgid "member"
|
||||
msgstr ""
|
||||
|
||||
@@ -483,7 +491,7 @@ msgstr ""
|
||||
msgid "macro"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/c.py:260 sphinx/domains/cpp.py:5866
|
||||
#: sphinx/domains/c.py:260 sphinx/domains/cpp.py:5865
|
||||
msgid "type"
|
||||
msgstr ""
|
||||
|
||||
@@ -491,72 +499,72 @@ msgstr ""
|
||||
msgid "variable"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/cpp.py:5444
|
||||
#: sphinx/domains/cpp.py:5443
|
||||
msgid "Template Parameters"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/cpp.py:5447 sphinx/domains/javascript.py:207
|
||||
#: sphinx/domains/cpp.py:5446 sphinx/domains/javascript.py:207
|
||||
msgid "Throws"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/cpp.py:5629
|
||||
#: sphinx/domains/cpp.py:5628
|
||||
#, python-format
|
||||
msgid "%s (C++ type)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/cpp.py:5639
|
||||
#: sphinx/domains/cpp.py:5638
|
||||
#, python-format
|
||||
msgid "%s (C++ concept)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/cpp.py:5649
|
||||
#: sphinx/domains/cpp.py:5648
|
||||
#, python-format
|
||||
msgid "%s (C++ member)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/cpp.py:5659
|
||||
#: sphinx/domains/cpp.py:5658
|
||||
#, python-format
|
||||
msgid "%s (C++ function)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/cpp.py:5669
|
||||
#: sphinx/domains/cpp.py:5668
|
||||
#, python-format
|
||||
msgid "%s (C++ class)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/cpp.py:5679
|
||||
#: sphinx/domains/cpp.py:5678
|
||||
#, python-format
|
||||
msgid "%s (C++ enum)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/cpp.py:5699
|
||||
#: sphinx/domains/cpp.py:5698
|
||||
#, python-format
|
||||
msgid "%s (C++ enumerator)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/cpp.py:5863 sphinx/domains/javascript.py:301
|
||||
#: sphinx/domains/python.py:708
|
||||
#: sphinx/domains/cpp.py:5862 sphinx/domains/javascript.py:301
|
||||
#: sphinx/domains/python.py:707
|
||||
msgid "class"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/cpp.py:5867
|
||||
#: sphinx/domains/cpp.py:5866
|
||||
msgid "concept"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/cpp.py:5868
|
||||
#: sphinx/domains/cpp.py:5867
|
||||
msgid "enum"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/cpp.py:5869
|
||||
#: sphinx/domains/cpp.py:5868
|
||||
msgid "enumerator"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/javascript.py:131 sphinx/domains/python.py:396
|
||||
#: sphinx/domains/javascript.py:131 sphinx/domains/python.py:395
|
||||
#, python-format
|
||||
msgid "%s() (built-in function)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/javascript.py:132 sphinx/domains/python.py:461
|
||||
#: sphinx/domains/javascript.py:132 sphinx/domains/python.py:460
|
||||
#, python-format
|
||||
msgid "%s() (%s method)"
|
||||
msgstr ""
|
||||
@@ -571,7 +579,7 @@ msgstr ""
|
||||
msgid "%s (global variable or constant)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/javascript.py:138 sphinx/domains/python.py:499
|
||||
#: sphinx/domains/javascript.py:138 sphinx/domains/python.py:498
|
||||
#, python-format
|
||||
msgid "%s (%s attribute)"
|
||||
msgstr ""
|
||||
@@ -580,117 +588,117 @@ msgstr ""
|
||||
msgid "Arguments"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/javascript.py:266 sphinx/domains/python.py:576
|
||||
#: sphinx/domains/javascript.py:266 sphinx/domains/python.py:575
|
||||
#, python-format
|
||||
msgid "%s (module)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/javascript.py:300 sphinx/domains/python.py:710
|
||||
#: sphinx/domains/javascript.py:300 sphinx/domains/python.py:709
|
||||
msgid "method"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/javascript.py:302 sphinx/domains/python.py:707
|
||||
#: sphinx/domains/javascript.py:302 sphinx/domains/python.py:706
|
||||
msgid "data"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/javascript.py:303 sphinx/domains/python.py:713
|
||||
#: sphinx/domains/javascript.py:303 sphinx/domains/python.py:712
|
||||
msgid "attribute"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/javascript.py:304 sphinx/domains/python.py:714
|
||||
#: sphinx/domains/javascript.py:304 sphinx/domains/python.py:713
|
||||
#: sphinx/locale/__init__.py:218
|
||||
msgid "module"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:182
|
||||
#: sphinx/domains/python.py:181
|
||||
msgid "Variables"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:186
|
||||
#: sphinx/domains/python.py:185
|
||||
msgid "Raises"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:397 sphinx/domains/python.py:455
|
||||
#: sphinx/domains/python.py:467 sphinx/domains/python.py:480
|
||||
#: sphinx/domains/python.py:396 sphinx/domains/python.py:454
|
||||
#: sphinx/domains/python.py:466 sphinx/domains/python.py:479
|
||||
#, python-format
|
||||
msgid "%s() (in module %s)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:400
|
||||
#: sphinx/domains/python.py:399
|
||||
#, python-format
|
||||
msgid "%s (built-in variable)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:401 sphinx/domains/python.py:493
|
||||
#: sphinx/domains/python.py:400 sphinx/domains/python.py:492
|
||||
#, python-format
|
||||
msgid "%s (in module %s)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:421
|
||||
#: sphinx/domains/python.py:420
|
||||
#, python-format
|
||||
msgid "%s (built-in class)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:422
|
||||
#: sphinx/domains/python.py:421
|
||||
#, python-format
|
||||
msgid "%s (class in %s)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:459
|
||||
#: sphinx/domains/python.py:458
|
||||
#, python-format
|
||||
msgid "%s() (%s.%s method)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:471
|
||||
#: sphinx/domains/python.py:470
|
||||
#, python-format
|
||||
msgid "%s() (%s.%s static method)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:474
|
||||
#: sphinx/domains/python.py:473
|
||||
#, python-format
|
||||
msgid "%s() (%s static method)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:484
|
||||
#: sphinx/domains/python.py:483
|
||||
#, python-format
|
||||
msgid "%s() (%s.%s class method)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:487
|
||||
#: sphinx/domains/python.py:486
|
||||
#, python-format
|
||||
msgid "%s() (%s class method)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:497
|
||||
#: sphinx/domains/python.py:496
|
||||
#, python-format
|
||||
msgid "%s (%s.%s attribute)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:635
|
||||
#: sphinx/domains/python.py:634
|
||||
msgid "Python Module Index"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:636
|
||||
#: sphinx/domains/python.py:635
|
||||
msgid "modules"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:684
|
||||
#: sphinx/domains/python.py:683
|
||||
msgid "Deprecated"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:709 sphinx/locale/__init__.py:222
|
||||
#: sphinx/domains/python.py:708 sphinx/locale/__init__.py:222
|
||||
msgid "exception"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:711
|
||||
#: sphinx/domains/python.py:710
|
||||
msgid "class method"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:712
|
||||
#: sphinx/domains/python.py:711
|
||||
msgid "static method"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/python.py:884
|
||||
#: sphinx/domains/python.py:883
|
||||
msgid " (deprecated)"
|
||||
msgstr ""
|
||||
|
||||
@@ -712,55 +720,55 @@ msgstr ""
|
||||
msgid "role"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/std.py:84 sphinx/domains/std.py:101
|
||||
#: sphinx/domains/std.py:83 sphinx/domains/std.py:100
|
||||
#, python-format
|
||||
msgid "environment variable; %s"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/std.py:200
|
||||
#: sphinx/domains/std.py:199
|
||||
#, python-format
|
||||
msgid "%scommand line option; %s"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/std.py:455
|
||||
#: sphinx/domains/std.py:454
|
||||
msgid "glossary term"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/std.py:456
|
||||
#: sphinx/domains/std.py:455
|
||||
msgid "grammar token"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/std.py:457
|
||||
#: sphinx/domains/std.py:456
|
||||
msgid "reference label"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/std.py:459
|
||||
#: sphinx/domains/std.py:458
|
||||
msgid "environment variable"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/std.py:460
|
||||
#: sphinx/domains/std.py:459
|
||||
msgid "program option"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/std.py:461
|
||||
#: sphinx/domains/std.py:460
|
||||
msgid "document"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/std.py:498 sphinx/themes/basic/genindex-single.html:30
|
||||
#: sphinx/domains/std.py:497 sphinx/themes/basic/genindex-single.html:30
|
||||
#: sphinx/themes/basic/genindex-single.html:55
|
||||
#: sphinx/themes/basic/genindex-split.html:11
|
||||
#: sphinx/themes/basic/genindex-split.html:14
|
||||
#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33
|
||||
#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:147
|
||||
#: sphinx/writers/latex.py:550 sphinx/writers/texinfo.py:517
|
||||
#: sphinx/writers/latex.py:550 sphinx/writers/texinfo.py:516
|
||||
msgid "Index"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/std.py:499
|
||||
#: sphinx/domains/std.py:498
|
||||
msgid "Module Index"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/domains/std.py:500 sphinx/themes/basic/defindex.html:25
|
||||
#: sphinx/domains/std.py:499 sphinx/themes/basic/defindex.html:25
|
||||
msgid "Search Page"
|
||||
msgstr ""
|
||||
|
||||
@@ -778,42 +786,42 @@ msgstr ""
|
||||
msgid "Symbols"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/doctest.py:134
|
||||
#: sphinx/ext/doctest.py:132
|
||||
#, python-format
|
||||
msgid "missing '+' or '-' in '%s' option."
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/doctest.py:139
|
||||
#: sphinx/ext/doctest.py:137
|
||||
#, python-format
|
||||
msgid "'%s' is not a valid option."
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/doctest.py:152
|
||||
#: sphinx/ext/doctest.py:151
|
||||
#, python-format
|
||||
msgid "'%s' is not a valid pyversion option"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/graphviz.py:96
|
||||
#: sphinx/ext/graphviz.py:136
|
||||
msgid "Graphviz directive cannot have both content and a filename argument"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/graphviz.py:107
|
||||
#: sphinx/ext/graphviz.py:147
|
||||
#, python-format
|
||||
msgid "External Graphviz file %r not found or reading it failed"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/graphviz.py:113
|
||||
#: sphinx/ext/graphviz.py:153
|
||||
msgid "Ignoring \"graphviz\" directive without content."
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/graphviz.py:204
|
||||
#: sphinx/ext/graphviz.py:244
|
||||
#, python-format
|
||||
msgid ""
|
||||
"dot command %r cannot be run (needed for graphviz output), check the "
|
||||
"graphviz_dot setting"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/graphviz.py:222
|
||||
#: sphinx/ext/graphviz.py:262
|
||||
#, python-format
|
||||
msgid ""
|
||||
"dot exited with error:\n"
|
||||
@@ -823,7 +831,7 @@ msgid ""
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/graphviz.py:225
|
||||
#: sphinx/ext/graphviz.py:265
|
||||
#, python-format
|
||||
msgid ""
|
||||
"dot did not produce an output file:\n"
|
||||
@@ -833,17 +841,17 @@ msgid ""
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/graphviz.py:236
|
||||
#: sphinx/ext/graphviz.py:276
|
||||
#, python-format
|
||||
msgid "graphviz_output_format must be one of 'png', 'svg', but is %r"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/graphviz.py:338 sphinx/ext/graphviz.py:347
|
||||
#: sphinx/ext/graphviz.py:377 sphinx/ext/graphviz.py:386
|
||||
#, python-format
|
||||
msgid "[graph: %s]"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/graphviz.py:340 sphinx/ext/graphviz.py:349
|
||||
#: sphinx/ext/graphviz.py:379 sphinx/ext/graphviz.py:388
|
||||
msgid "[graph]"
|
||||
msgstr ""
|
||||
|
||||
@@ -862,20 +870,25 @@ msgid ""
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/imgmath.py:339 sphinx/ext/jsmath.py:41 sphinx/ext/mathjax.py:42
|
||||
#: sphinx/ext/imgmath.py:338 sphinx/ext/jsmath.py:41 sphinx/ext/mathjax.py:42
|
||||
msgid "Permalink to this equation"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/intersphinx.py:320
|
||||
#: sphinx/ext/intersphinx.py:339
|
||||
#, python-format
|
||||
msgid "(in %s v%s)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/linkcode.py:75 sphinx/ext/viewcode.py:112
|
||||
#: sphinx/ext/intersphinx.py:341
|
||||
#, python-format
|
||||
msgid "(in %s)"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/linkcode.py:75 sphinx/ext/viewcode.py:111
|
||||
msgid "[source]"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/mathbase.py:123
|
||||
#: sphinx/ext/mathbase.py:124
|
||||
#, python-format
|
||||
msgid "duplicate label of equation %s, other instance in %s"
|
||||
msgstr ""
|
||||
@@ -897,33 +910,33 @@ msgstr ""
|
||||
msgid "original entry"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/viewcode.py:180
|
||||
#: sphinx/ext/viewcode.py:179
|
||||
msgid "[docs]"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/viewcode.py:194
|
||||
#: sphinx/ext/viewcode.py:193
|
||||
msgid "Module code"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/viewcode.py:200
|
||||
#: sphinx/ext/viewcode.py:199
|
||||
#, python-format
|
||||
msgid "<h1>Source code for %s</h1>"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/viewcode.py:226
|
||||
#: sphinx/ext/viewcode.py:225
|
||||
msgid "Overview: module code"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/viewcode.py:227
|
||||
#: sphinx/ext/viewcode.py:226
|
||||
msgid "<h1>All modules for which code is available</h1>"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/autodoc/__init__.py:1109
|
||||
#: sphinx/ext/autodoc/__init__.py:1120
|
||||
#, python-format
|
||||
msgid "Bases: %s"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/ext/autodoc/__init__.py:1164
|
||||
#: sphinx/ext/autodoc/__init__.py:1181
|
||||
#, python-format
|
||||
msgid "alias of :class:`%s`"
|
||||
msgstr ""
|
||||
@@ -1285,7 +1298,7 @@ msgstr ""
|
||||
msgid "%r reference target not found: %%(target)s"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/util/docutils.py:217
|
||||
#: sphinx/util/docutils.py:202
|
||||
msgid "when adding directive classes, no additional arguments may be given"
|
||||
msgstr ""
|
||||
|
||||
@@ -1323,16 +1336,16 @@ msgid "Unknown configure key: latex_elements[%r] is ignored."
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/writers/latex.py:1317 sphinx/writers/manpage.py:275
|
||||
#: sphinx/writers/texinfo.py:670
|
||||
#: sphinx/writers/texinfo.py:669
|
||||
msgid "Footnotes"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/writers/manpage.py:331 sphinx/writers/text.py:714
|
||||
#: sphinx/writers/manpage.py:331 sphinx/writers/text.py:713
|
||||
#, python-format
|
||||
msgid "[image: %s]"
|
||||
msgstr ""
|
||||
|
||||
#: sphinx/writers/manpage.py:332 sphinx/writers/text.py:715
|
||||
#: sphinx/writers/manpage.py:332 sphinx/writers/text.py:714
|
||||
msgid "[image]"
|
||||
msgstr ""
|
||||
|
||||
|
||||
8
tests/roots/test-ext-doctest-with-autodoc/conf.py
Normal file
8
tests/roots/test-ext-doctest-with-autodoc/conf.py
Normal file
@@ -0,0 +1,8 @@
|
||||
from os import path
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, path.abspath(path.dirname(__file__)))
|
||||
|
||||
project = 'test project for doctest + autodoc reporting'
|
||||
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest']
|
||||
master_doc = 'index'
|
||||
4
tests/roots/test-ext-doctest-with-autodoc/dir/bar.py
Normal file
4
tests/roots/test-ext-doctest-with-autodoc/dir/bar.py
Normal file
@@ -0,0 +1,4 @@
|
||||
"""
|
||||
>>> 'dir/bar.py:2'
|
||||
|
||||
"""
|
||||
4
tests/roots/test-ext-doctest-with-autodoc/dir/inner.rst
Normal file
4
tests/roots/test-ext-doctest-with-autodoc/dir/inner.rst
Normal file
@@ -0,0 +1,4 @@
|
||||
>>> 'dir/inner.rst:1'
|
||||
|
||||
.. automodule:: dir.bar
|
||||
:members:
|
||||
5
tests/roots/test-ext-doctest-with-autodoc/foo.py
Normal file
5
tests/roots/test-ext-doctest-with-autodoc/foo.py
Normal file
@@ -0,0 +1,5 @@
|
||||
"""
|
||||
|
||||
>>> 'foo.py:3'
|
||||
|
||||
"""
|
||||
4
tests/roots/test-ext-doctest-with-autodoc/index.rst
Normal file
4
tests/roots/test-ext-doctest-with-autodoc/index.rst
Normal file
@@ -0,0 +1,4 @@
|
||||
.. automodule:: foo
|
||||
:members:
|
||||
|
||||
>>> 'index.rst:4'
|
||||
@@ -108,7 +108,8 @@ def test_add_is_parallel_allowed(app, status, warning):
|
||||
app.setup_extension('write_parallel')
|
||||
assert app.is_parallel_allowed('read') is False
|
||||
assert app.is_parallel_allowed('write') is True
|
||||
assert 'the write_parallel extension does not declare' in warning.getvalue()
|
||||
assert ("the write_parallel extension does not declare if it is safe "
|
||||
"for parallel reading, assuming it isn't - please ") in warning.getvalue()
|
||||
app.extensions.pop('write_parallel')
|
||||
warning.truncate(0) # reset warnings
|
||||
|
||||
@@ -121,6 +122,7 @@ def test_add_is_parallel_allowed(app, status, warning):
|
||||
app.setup_extension('write_serial')
|
||||
assert app.is_parallel_allowed('read') is False
|
||||
assert app.is_parallel_allowed('write') is False
|
||||
assert 'the write_serial extension does not declare' in warning.getvalue()
|
||||
assert ("the write_serial extension does not declare if it is safe "
|
||||
"for parallel reading, assuming it isn't - please ") in warning.getvalue()
|
||||
app.extensions.pop('write_serial')
|
||||
warning.truncate(0) # reset warnings
|
||||
|
||||
@@ -65,7 +65,7 @@ def test_compile_specific_catalogs(app, status, warning):
|
||||
return set(find_files(catalog_dir, '.mo'))
|
||||
|
||||
actual_on_boot = get_actual() # sphinx.mo might be included
|
||||
app.builder.compile_specific_catalogs(['admonitions'])
|
||||
app.builder.compile_specific_catalogs([app.srcdir / 'admonitions.txt'])
|
||||
actual = get_actual() - actual_on_boot
|
||||
assert actual == set(['admonitions.mo'])
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
:license: BSD, see LICENSE for details.
|
||||
"""
|
||||
import pytest
|
||||
from six import PY2
|
||||
from sphinx.ext.doctest import is_allowed_version
|
||||
from packaging.version import InvalidVersion
|
||||
from packaging.specifiers import InvalidSpecifier
|
||||
@@ -55,3 +56,24 @@ def test_is_allowed_version():
|
||||
def cleanup_call():
|
||||
global cleanup_called
|
||||
cleanup_called += 1
|
||||
|
||||
|
||||
@pytest.mark.xfail(
|
||||
PY2, reason='node.source points to document instead of filename',
|
||||
)
|
||||
@pytest.mark.sphinx('doctest', testroot='ext-doctest-with-autodoc')
|
||||
def test_reporting_with_autodoc(app, status, warning, capfd):
|
||||
# Patch builder to get a copy of the output
|
||||
written = []
|
||||
app.builder._warn_out = written.append
|
||||
app.builder.build_all()
|
||||
lines = '\n'.join(written).split('\n')
|
||||
failures = [l for l in lines if l.startswith('File')]
|
||||
expected = [
|
||||
'File "dir/inner.rst", line 1, in default',
|
||||
'File "dir/bar.py", line ?, in default',
|
||||
'File "foo.py", line ?, in default',
|
||||
'File "index.rst", line 4, in default',
|
||||
]
|
||||
for location in expected:
|
||||
assert location in failures
|
||||
|
||||
Reference in New Issue
Block a user