From 59336da8bd844daedcc058ce5fe0b148967a882b Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sun, 6 Oct 2019 23:31:07 +0900 Subject: [PATCH 1/4] Fix #6709: autodoc: mock object does not work as a class decorator --- CHANGES | 1 + sphinx/ext/autodoc/mock.py | 2 +- tests/test_ext_autodoc_mock.py | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 7a5c28d46..a02fb9bd0 100644 --- a/CHANGES +++ b/CHANGES @@ -24,6 +24,7 @@ Bugs fixed .. _latex3/latex2e#173: https://github.com/latex3/latex2e/issues/173 * #6618: LaTeX: Avoid section names at the end of a page +* #6709: autodoc: mock object does not work as a class decorator Testing -------- diff --git a/sphinx/ext/autodoc/mock.py b/sphinx/ext/autodoc/mock.py index 4f534a452..7fa4627a6 100644 --- a/sphinx/ext/autodoc/mock.py +++ b/sphinx/ext/autodoc/mock.py @@ -60,7 +60,7 @@ class _MockObject: return _make_subclass(key, self.__display_name__, self.__class__)() def __call__(self, *args, **kw) -> Any: - if args and type(args[0]) in [FunctionType, MethodType]: + if args and type(args[0]) in [type, FunctionType, MethodType]: # Appears to be a decorator, pass through unchanged return args[0] return self diff --git a/tests/test_ext_autodoc_mock.py b/tests/test_ext_autodoc_mock.py index 5562f47de..04bff11ae 100644 --- a/tests/test_ext_autodoc_mock.py +++ b/tests/test_ext_autodoc_mock.py @@ -96,3 +96,24 @@ def test_abc_MockObject(): assert isinstance(obj, Base) assert isinstance(obj, _MockObject) assert isinstance(obj.some_method(), Derived) + + +def test_mock_decorator(): + mock = _MockObject() + + @mock.function_deco + def func(): + """docstring""" + + class Foo: + @mock.method_deco + def meth(self): + """docstring""" + + @mock.class_deco + class Bar: + """docstring""" + + assert func.__doc__ == "docstring" + assert Foo.meth.__doc__ == "docstring" + assert Bar.__doc__ == "docstring" From 6b9e0cbd70a129f3ac10dec75d30479d13412862 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Thu, 10 Oct 2019 22:42:17 +0900 Subject: [PATCH 2/4] Close #267: html: Eliminate prompt characters of doctest block from copyable text --- CHANGES | 1 + sphinx/themes/basic/static/basic.css_t | 4 ++++ sphinx/transforms/__init__.py | 11 +++++++++++ 3 files changed, 16 insertions(+) diff --git a/CHANGES b/CHANGES index 846bee53a..87e63d561 100644 --- a/CHANGES +++ b/CHANGES @@ -17,6 +17,7 @@ Features added -------------- * #6707: C++, support bit-fields. +* #267: html: Eliminate prompt characters of doctest block from copyable text Bugs fixed ---------- diff --git a/sphinx/themes/basic/static/basic.css_t b/sphinx/themes/basic/static/basic.css_t index 1c278e88b..354267567 100644 --- a/sphinx/themes/basic/static/basic.css_t +++ b/sphinx/themes/basic/static/basic.css_t @@ -672,6 +672,10 @@ div.code-block-caption + div > div.highlight > pre { margin-top: 0; } +div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; +} + div.code-block-caption span.caption-number { padding: 0.1em 0.3em; font-style: italic; diff --git a/sphinx/transforms/__init__.py b/sphinx/transforms/__init__.py index a4e6e52bf..bd3b4eeab 100644 --- a/sphinx/transforms/__init__.py +++ b/sphinx/transforms/__init__.py @@ -283,6 +283,16 @@ class UnreferencedFootnotesDetector(SphinxTransform): location=node) +class DoctestTransform(SphinxTransform): + """Set "doctest" style to each doctest_block node""" + default_priority = 500 + + def apply(self, **kwargs): + # type: (Any) -> None + for node in self.document.traverse(nodes.doctest_block): + node['classes'].append('doctest') + + class FigureAligner(SphinxTransform): """ Align figures to center by default. @@ -425,6 +435,7 @@ def setup(app): app.add_transform(MoveModuleTargets) app.add_transform(HandleCodeBlocks) app.add_transform(SortIds) + app.add_transform(DoctestTransform) app.add_transform(FigureAligner) app.add_transform(AutoNumbering) app.add_transform(AutoIndexUpgrader) From 759797d658c85e24ebd3e953a4d256ae1cbd677f Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Mon, 7 Oct 2019 01:46:28 +0900 Subject: [PATCH 3/4] Fix #6708: mathbase: Some deprecated functions have removed --- CHANGES | 1 + sphinx/ext/mathbase.py | 73 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/CHANGES b/CHANGES index d3bed243a..3fc4b0d49 100644 --- a/CHANGES +++ b/CHANGES @@ -29,6 +29,7 @@ Bugs fixed * #6704: linkcheck: Be defensive and handle newly defined HTTP error code * #6655: image URLs containing ``data:`` causes gettext builder crashed * #6584: i18n: Error when compiling message catalogs on Hindi +* #6708: mathbase: Some deprecated functions have removed Testing -------- diff --git a/sphinx/ext/mathbase.py b/sphinx/ext/mathbase.py index 34e8cf0b2..d2e42bdea 100644 --- a/sphinx/ext/mathbase.py +++ b/sphinx/ext/mathbase.py @@ -23,6 +23,10 @@ from sphinx.directives.patches import MathDirective as MathDirectiveBase from sphinx.domains.math import MathDomain # NOQA # to keep compatibility from sphinx.domains.math import MathReferenceRole as EqXRefRole # NOQA # to keep compatibility from sphinx.writers.html import HTMLTranslator +from sphinx.writers.latex import LaTeXTranslator +from sphinx.writers.manpage import ManualPageTranslator +from sphinx.writers.texinfo import TexinfoTranslator +from sphinx.writers.text import TextTranslator class MathDirective(MathDirectiveBase): @@ -70,6 +74,75 @@ def is_in_section_title(node: Element) -> bool: return False +def latex_visit_math(self: LaTeXTranslator, node: Element) -> None: + warnings.warn('latex_visit_math() is deprecated. ' + 'Please use LaTeXTranslator.visit_math() instead.', + RemovedInSphinx30Warning, stacklevel=2) + self.visit_math(node) + + +def latex_visit_displaymath(self: LaTeXTranslator, node: Element) -> None: + warnings.warn('latex_visit_displaymath() is deprecated. ' + 'Please use LaTeXTranslator.visit_math_block() instead.', + RemovedInSphinx30Warning, stacklevel=2) + self.visit_math_block(node) + + +def man_visit_math(self: ManualPageTranslator, node: Element) -> None: + warnings.warn('man_visit_math() is deprecated. ' + 'Please use ManualPageTranslator.visit_math() instead.', + RemovedInSphinx30Warning, stacklevel=2) + self.visit_math(node) + + +def man_visit_displaymath(self: ManualPageTranslator, node: Element) -> None: + warnings.warn('man_visit_displaymath() is deprecated. ' + 'Please use ManualPageTranslator.visit_math_block() instead.', + RemovedInSphinx30Warning, stacklevel=2) + self.visit_math_block(node) + + +def man_depart_displaymath(self: ManualPageTranslator, node: Element) -> None: + warnings.warn('man_depart_displaymath() is deprecated. ' + 'Please use ManualPageTranslator.depart_math_block() instead.', + RemovedInSphinx30Warning, stacklevel=2) + self.depart_math_block(node) + + +def texinfo_visit_math(self: TexinfoTranslator, node: Element) -> None: + warnings.warn('texinfo_visit_math() is deprecated. ' + 'Please use TexinfoTranslator.visit_math() instead.', + RemovedInSphinx30Warning, stacklevel=2) + self.visit_math(node) + + +def texinfo_visit_displaymath(self: TexinfoTranslator, node: Element) -> None: + warnings.warn('texinfo_visit_displaymath() is deprecated. ' + 'Please use TexinfoTranslator.visit_math_block() instead.', + RemovedInSphinx30Warning, stacklevel=2) + self.visit_math_block(node) + + +def texinfo_depart_displaymath(self: TexinfoTranslator, node: Element) -> None: + warnings.warn('texinfo_depart_displaymath() is deprecated. ' + 'Please use TexinfoTranslator.depart_math_block() instead.', + RemovedInSphinx30Warning, stacklevel=2) + + +def text_visit_math(self: TextTranslator, node: Element) -> None: + warnings.warn('text_visit_math() is deprecated. ' + 'Please use TextTranslator.visit_math() instead.', + RemovedInSphinx30Warning, stacklevel=2) + self.visit_math(node) + + +def text_visit_displaymath(self: TextTranslator, node: Element) -> None: + warnings.warn('text_visit_displaymath() is deprecated. ' + 'Please use TextTranslator.visit_math_block() instead.', + RemovedInSphinx30Warning, stacklevel=2) + self.visit_math_block(node) + + def setup_math(app: Sphinx, htmlinlinevisitors: Tuple[Callable, Callable], htmldisplayvisitors: Tuple[Callable, Callable]) -> None: From a950df190895d46bce42c47c53e6bb16640cd82d Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sun, 13 Oct 2019 11:54:10 +0900 Subject: [PATCH 4/4] Close #6729: HTML theme: agogo theme now supports rightsidebar option --- CHANGES | 1 + doc/usage/theming.rst | 2 ++ sphinx/themes/agogo/layout.html | 29 ++++++++++++++++++-------- sphinx/themes/agogo/static/agogo.css_t | 8 +++++++ sphinx/themes/agogo/theme.conf | 1 + 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/CHANGES b/CHANGES index 28aec456c..2e5fd60ea 100644 --- a/CHANGES +++ b/CHANGES @@ -18,6 +18,7 @@ Features added * #6707: C++, support bit-fields. * #267: html: Eliminate prompt characters of doctest block from copyable text +* #6729: html theme: agogo theme now supports ``rightsidebar`` option Bugs fixed ---------- diff --git a/doc/usage/theming.rst b/doc/usage/theming.rst index e0d779b99..3b42bc4cb 100644 --- a/doc/usage/theming.rst +++ b/doc/usage/theming.rst @@ -237,6 +237,8 @@ These themes are: - **documentwidth** (CSS length): Width of the document (without sidebar), default 50em. - **sidebarwidth** (CSS length): Width of the sidebar, default 20em. + - **rightsidebar** (true or false): Put the sidebar on the right side. + Defaults to ``True``. - **bgcolor** (CSS color): Background color. - **headerbg** (CSS value for "background"): background for the header area, default a grayish gradient. diff --git a/sphinx/themes/agogo/layout.html b/sphinx/themes/agogo/layout.html index 1ab82f7f0..b46440203 100644 --- a/sphinx/themes/agogo/layout.html +++ b/sphinx/themes/agogo/layout.html @@ -33,15 +33,7 @@ {% endblock %} -{% block content %} -
-
-
- {%- block document %} - {{ super() }} - {%- endblock %} -
- {%- endblock %} +{% endmacro %} + +{% block content %} +
+
+ {%- if not theme_rightsidebar|tobool %} + + {%- endif %} +
+ {%- block document %} + {{ super() }} + {%- endblock %} +
+ {%- if theme_rightsidebar|tobool %} + + {%- endif %}
diff --git a/sphinx/themes/agogo/static/agogo.css_t b/sphinx/themes/agogo/static/agogo.css_t index f8951421e..f7b257719 100644 --- a/sphinx/themes/agogo/static/agogo.css_t +++ b/sphinx/themes/agogo/static/agogo.css_t @@ -175,7 +175,11 @@ div.document { } div.body { + {%- if theme_rightsidebar|tobool %} padding-right: 2em; + {%- else %} + padding-left: 2em; + {% endif %} text-align: {{ theme_textalign }}; } @@ -270,7 +274,11 @@ div.document ol { div.sidebar { width: {{ theme_sidebarwidth|todim }}; + {%- if theme_rightsidebar|tobool %} float: right; + {%- else %} + float: left; + {%- endif %} font-size: .9em; } diff --git a/sphinx/themes/agogo/theme.conf b/sphinx/themes/agogo/theme.conf index 28f6b040a..6a4457e95 100644 --- a/sphinx/themes/agogo/theme.conf +++ b/sphinx/themes/agogo/theme.conf @@ -8,6 +8,7 @@ bodyfont = "Verdana", Arial, sans-serif headerfont = "Georgia", "Times New Roman", serif pagewidth = 70em documentwidth = 50em +rightsidebar = true sidebarwidth = 20em bgcolor = #eeeeec headerbg = #555573 url(bgtop.png) top left repeat-x