mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Merge branch '1.8' into 2.0
This commit is contained in:
commit
ac9e9c0745
4
CHANGES
4
CHANGES
@ -287,8 +287,12 @@ Bugs fixed
|
||||
* LaTeX: Remove extraneous space after author names on PDF title page (refs: #6004)
|
||||
* #6026: LaTeX: A cross reference to definition list does not work
|
||||
* #6046: LaTeX: ``TypeError`` is raised when invalid latex_elements given
|
||||
* #6067: LaTeX: images having a target are concatenated to next line
|
||||
* #6067: LaTeX: images having a target are not aligned even if specified
|
||||
* #6019: imgconverter: Including multipage PDF fails
|
||||
* #6047: autodoc: ``autofunction`` emits a warning for method objects
|
||||
* #6028: graphviz: Ensure the graphviz filenames are reproducible
|
||||
* #6068: doctest: ``skipif`` option may remove the code block from documentation
|
||||
|
||||
Testing
|
||||
--------
|
||||
|
@ -83,16 +83,6 @@ class TestDirective(SphinxDirective):
|
||||
|
||||
def run(self):
|
||||
# type: () -> List[nodes.Node]
|
||||
if 'skipif' in self.options:
|
||||
condition = self.options['skipif']
|
||||
context = {} # type: Dict[str, Any]
|
||||
if self.config.doctest_global_setup:
|
||||
exec(self.config.doctest_global_setup, context)
|
||||
should_skip = eval(condition, context)
|
||||
if self.config.doctest_global_cleanup:
|
||||
exec(self.config.doctest_global_cleanup, context)
|
||||
if should_skip:
|
||||
return []
|
||||
# use ordinary docutils nodes for test code: they get special attributes
|
||||
# so that our builder recognizes them, and the other builders are happy.
|
||||
code = '\n'.join(self.content)
|
||||
@ -160,6 +150,8 @@ class TestDirective(SphinxDirective):
|
||||
self.state.document.reporter.warning(
|
||||
__("'%s' is not a valid pyversion option") % spec,
|
||||
line=self.lineno)
|
||||
if 'skipif' in self.options:
|
||||
node['skipif'] = self.options['skipif']
|
||||
return [node]
|
||||
|
||||
|
||||
@ -404,6 +396,20 @@ Doctest summary
|
||||
return node.line - 1
|
||||
return None
|
||||
|
||||
def skipped(self, node):
|
||||
# type: (nodes.Element) -> bool
|
||||
if 'skipif' not in node:
|
||||
return False
|
||||
else:
|
||||
condition = node['skipif']
|
||||
context = {} # type: Dict[str, Any]
|
||||
if self.config.doctest_global_setup:
|
||||
exec(self.config.doctest_global_setup, context)
|
||||
should_skip = eval(condition, context)
|
||||
if self.config.doctest_global_cleanup:
|
||||
exec(self.config.doctest_global_cleanup, context)
|
||||
return should_skip
|
||||
|
||||
def test_doc(self, docname, doctree):
|
||||
# type: (str, nodes.Node) -> None
|
||||
groups = {} # type: Dict[str, TestGroup]
|
||||
@ -429,8 +435,10 @@ Doctest summary
|
||||
# type: (nodes.Node) -> bool
|
||||
return isinstance(node, (nodes.literal_block, nodes.comment)) \
|
||||
and 'testnodetype' in node
|
||||
|
||||
for node in doctree.traverse(condition): # type: nodes.Element
|
||||
if self.skipped(node):
|
||||
continue
|
||||
|
||||
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)
|
||||
|
@ -196,9 +196,7 @@ class GraphvizSimple(SphinxDirective):
|
||||
node = graphviz()
|
||||
node['code'] = '%s %s {\n%s\n}\n' % \
|
||||
(self.name, self.arguments[0], '\n'.join(self.content))
|
||||
node['options'] = {
|
||||
'docname': path.splitext(self.state.document.current_source)[0],
|
||||
}
|
||||
node['options'] = {'docname': self.env.docname}
|
||||
if 'graphviz_dot' in self.options:
|
||||
node['options']['graphviz_dot'] = self.options['graphviz_dot']
|
||||
if 'alt' in self.options:
|
||||
|
@ -1533,7 +1533,11 @@ class LaTeXTranslator(SphinxTranslator):
|
||||
# in reverse order
|
||||
post = [] # type: List[str]
|
||||
include_graphics_options = []
|
||||
is_inline = self.is_inline(node)
|
||||
has_hyperlink = isinstance(node.parent, nodes.reference)
|
||||
if has_hyperlink:
|
||||
is_inline = self.is_inline(node.parent)
|
||||
else:
|
||||
is_inline = self.is_inline(node)
|
||||
if 'width' in attrs:
|
||||
if 'scale' in attrs:
|
||||
w = self.latex_image_length(attrs['width'], attrs['scale'])
|
||||
@ -1575,7 +1579,7 @@ class LaTeXTranslator(SphinxTranslator):
|
||||
if self.in_parsed_literal:
|
||||
pre.append('{\\sphinxunactivateextrasandspace ')
|
||||
post.append('}')
|
||||
if not is_inline:
|
||||
if not is_inline and not has_hyperlink:
|
||||
pre.append('\n\\noindent')
|
||||
post.append('\n')
|
||||
pre.reverse()
|
||||
@ -1863,6 +1867,8 @@ class LaTeXTranslator(SphinxTranslator):
|
||||
for id in node.get('ids'):
|
||||
anchor = not self.in_caption
|
||||
self.body += self.hypertarget(id, anchor=anchor)
|
||||
if not self.is_inline(node):
|
||||
self.body.append('\n')
|
||||
uri = node.get('refuri', '')
|
||||
if not uri and node.get('refid'):
|
||||
uri = '%' + self.curfilestack[-1] + '#' + node['refid']
|
||||
@ -1916,6 +1922,8 @@ class LaTeXTranslator(SphinxTranslator):
|
||||
def depart_reference(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
self.body.append(self.context.pop())
|
||||
if not self.is_inline(node):
|
||||
self.body.append('\n')
|
||||
|
||||
def visit_number_reference(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
|
@ -15,6 +15,13 @@ test-image
|
||||
|
||||
.. image:: testimäge.png
|
||||
|
||||
.. image:: rimg.png
|
||||
:target: https://www.sphinx-doc.org/
|
||||
|
||||
.. image:: rimg.png
|
||||
:align: center
|
||||
:target: https://www.python.org/
|
||||
|
||||
.. a remote image
|
||||
.. image:: https://www.python.org/static/img/python-logo.png
|
||||
|
||||
|
@ -1220,16 +1220,28 @@ def test_latex_raw_directive(app, status, warning):
|
||||
|
||||
|
||||
@pytest.mark.sphinx('latex', testroot='images')
|
||||
def test_latex_remote_images(app, status, warning):
|
||||
def test_latex_images(app, status, warning):
|
||||
app.builder.build_all()
|
||||
|
||||
result = (app.outdir / 'python.tex').text(encoding='utf8')
|
||||
|
||||
# images are copied
|
||||
assert '\\sphinxincludegraphics{{python-logo}.png}' in result
|
||||
assert (app.outdir / 'python-logo.png').exists()
|
||||
|
||||
# not found images
|
||||
assert '\\sphinxincludegraphics{{NOT_EXIST}.PNG}' not in result
|
||||
assert ('WARNING: Could not fetch remote image: '
|
||||
'http://example.com/NOT_EXIST.PNG [404]' in warning.getvalue())
|
||||
|
||||
# an image having target
|
||||
assert ('\\sphinxhref{https://www.sphinx-doc.org/}'
|
||||
'{\\sphinxincludegraphics{{rimg}.png}}\n\n' in result)
|
||||
|
||||
# a centerized image having target
|
||||
assert ('\\sphinxhref{https://www.python.org/}{{\\hspace*{\\fill}'
|
||||
'\\sphinxincludegraphics{{rimg}.png}\\hspace*{\\fill}}}\n\n' in result)
|
||||
|
||||
|
||||
@pytest.mark.sphinx('latex', testroot='latex-index')
|
||||
def test_latex_index(app, status, warning):
|
||||
|
Loading…
Reference in New Issue
Block a user