For consistency, the `<object>` tag for the SVG output of a
inheritance-diagram should have the same `class="inheritance"` attribute
that the corresponding `<img>` tag for the PNG format has. This allows
to define the CSS attribute
object.inheritance {
max-width: 100%;
}
which for SVG (unlike PNG) actually works and makes sense.
Added a test for inheritance-diagrams in SVG.
The graphviz extension is modified to wrap the `<img>` and `<object>`
tags it creates for diagrams in the png and svg formats in an additional
`<div class="graphviz">...</div>` tag. This allows to apply additional
CSS styling to the the diagrams that cannot be applied to `<img>` and
`<object>` directly. Most notably,
div.graphviz {
overflow: auto;
}
would be a useful style that the standard themes might consider.
In any case, it would allow users to add custom CSS code to their
project that gets around the problems with inheritance-diagrams
discussed in https://github.com/sphinx-doc/sphinx/issues/4865
The tests for the `grahviz` and `inheritance_diagram` have been modified
to test for the presence of the additional `<div>` tag.
Closes#4865
Whilst working on the Reproducible Builds effort [0], we noticed
that sphinx could generate output that is not reproducible.
In particular, the rendering of `set` objects in default arguments
and elsewhere is currently non-determinstic. For example:
class A_Class(object):
a_set = {'a', 'b', 'c'}
Might be rendered as any of:
{'a', 'b', 'c'}
{'a', 'c', 'b'}
{'b', 'a', 'c'}
{'b', 'c', 'a'}
{'c', 'a', 'b'}
{'c', 'b', 'a'}
Patch attached that sorts the contents of sets whilst rendering.
This is parallel to the `dict` key sorting.
This was originally filed in Debian as #895553 [1].
[0] https://reproducible-builds.org/
[1] https://bugs.debian.org/895553
Signed-off-by: Chris Lamb <lamby@debian.org>