diff --git a/_doc/sphinxdoc/source/blog/2015/2015-12-12_sphinx_extensions.rst b/_doc/sphinxdoc/source/blog/2015/2015-12-12_sphinx_extensions.rst index d1e1db08..10c5b5dc 100644 --- a/_doc/sphinxdoc/source/blog/2015/2015-12-12_sphinx_extensions.rst +++ b/_doc/sphinxdoc/source/blog/2015/2015-12-12_sphinx_extensions.rst @@ -12,7 +12,6 @@ `Sphinx `_ documentation: * `imagesvg `_: to include svg figures - * `jsdemo `_: to demo javascript and HTML .. demo:: diff --git a/_unittests/ut_sphinxext/test_style_doc.py b/_unittests/ut_sphinxext/test_style_doc.py index 1af14be2..57322e92 100644 --- a/_unittests/ut_sphinxext/test_style_doc.py +++ b/_unittests/ut_sphinxext/test_style_doc.py @@ -26,7 +26,6 @@ def test_docstyle(self): extensions = [_ for _ in extensions if "matplotlib" not in _ and "images" not in _ and "IPython" not in _ and "nbsphinx" not in _ and "jupyter" not in _ and - "jsdemo" not in _ and "inheritance_diagram" not in _] external_docnames = [ "_modules/src/pyquickhelper/helpgen/_fake_function_to_documentation"] diff --git a/requirements.txt b/requirements.txt index 6377dbc5..3c64a2c3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -46,10 +46,9 @@ PyYAML scipy semantic_version setuptools -Sphinx>=3.0,<4.0 +Sphinx>=3.0 sphinx-gallery sphinxcontrib-imagesvg -sphinxcontrib-jsdemo sphinx_rtd_theme tabulate tqdm diff --git a/setup.py b/setup.py index e090ac05..4261c9d1 100644 --- a/setup.py +++ b/setup.py @@ -136,7 +136,7 @@ 'pysftp', "requests", "semantic_version", - "sphinx>=3.0,<4.0", + "sphinx>=3.0", "sphinx-gallery", "sphinxcontrib-imagesvg", "traitlets>=5.0", diff --git a/src/pyquickhelper/helpgen/default_conf.py b/src/pyquickhelper/helpgen/default_conf.py index 49c0041d..9c03e511 100644 --- a/src/pyquickhelper/helpgen/default_conf.py +++ b/src/pyquickhelper/helpgen/default_conf.py @@ -569,14 +569,6 @@ def set_sphinx_variables(fileconf, module_name, author, year, theme, theme_path, # matplotlib is not installed. pass - try: - import sphinxcontrib.jsdemo - assert sphinxcontrib.jsdemo is not None - extensions.append('sphinxcontrib.jsdemo') - except ImportError: # pragma: no cover - # No module sphinxcontrib.jsdemo. - pass - if use_lunrsearch: # pragma: no cover extensions.append('sphinxcontrib.lunrsearch') diff --git a/src/pyquickhelper/helpgen/sphinxm_convert_doc_sphinx_helper.py b/src/pyquickhelper/helpgen/sphinxm_convert_doc_sphinx_helper.py index 45c62ef9..9594693b 100644 --- a/src/pyquickhelper/helpgen/sphinxm_convert_doc_sphinx_helper.py +++ b/src/pyquickhelper/helpgen/sphinxm_convert_doc_sphinx_helper.py @@ -26,9 +26,11 @@ from sphinx.project import Project from sphinx.errors import ApplicationError from sphinx.util.logging import getLogger -from ..sphinxext.sphinx_doctree_builder import DocTreeBuilder, DocTreeWriter, DocTreeTranslator +from ..sphinxext.sphinx_doctree_builder import ( + DocTreeBuilder, DocTreeWriter, DocTreeTranslator) from ..sphinxext.sphinx_md_builder import MdBuilder, MdWriter, MdTranslator -from ..sphinxext.sphinx_latex_builder import EnhancedLaTeXBuilder, EnhancedLaTeXWriter, EnhancedLaTeXTranslator +from ..sphinxext.sphinx_latex_builder import ( + EnhancedLaTeXBuilder, EnhancedLaTeXWriter, EnhancedLaTeXTranslator) from ..sphinxext.sphinx_rst_builder import RstBuilder, RstWriter, RstTranslator from ._single_file_html_builder import CustomSingleFileHTMLBuilder @@ -171,8 +173,8 @@ class HTMLTranslatorWithCustomDirectives(_AdditionalVisitDepart, HTMLTranslator) See @see cl HTMLWriterWithCustomDirectives. """ - def __init__(self, builder, *args, **kwds): - HTMLTranslator.__init__(self, builder, *args, **kwds) + def __init__(self, document, builder, *args, **kwds): + HTMLTranslator.__init__(self, document, builder, *args, **kwds) _AdditionalVisitDepart.__init__(self, 'html') nodes_list = getattr(builder, '_function_node', None) if nodes_list is not None: @@ -201,11 +203,11 @@ class RSTTranslatorWithCustomDirectives(_AdditionalVisitDepart, RstTranslator): See @see cl HTMLWriterWithCustomDirectives. """ - def __init__(self, builder, *args, **kwds): + def __init__(self, document, builder, *args, **kwds): """ constructor """ - RstTranslator.__init__(self, builder, *args, **kwds) + RstTranslator.__init__(self, document, builder, *args, **kwds) _AdditionalVisitDepart.__init__(self, 'rst') for name, f1, f2 in builder._function_node: setattr(self.__class__, "visit_" + name, f1) @@ -218,11 +220,11 @@ class MDTranslatorWithCustomDirectives(_AdditionalVisitDepart, MdTranslator): See @see cl HTMLWriterWithCustomDirectives. """ - def __init__(self, builder, *args, **kwds): + def __init__(self, document, builder, *args, **kwds): """ constructor """ - MdTranslator.__init__(self, builder, *args, **kwds) + MdTranslator.__init__(self, document, builder, *args, **kwds) _AdditionalVisitDepart.__init__(self, 'md') for name, f1, f2 in builder._function_node: setattr(self.__class__, "visit_" + name, f1) @@ -235,11 +237,11 @@ class DocTreeTranslatorWithCustomDirectives(DocTreeTranslator): See @see cl HTMLWriterWithCustomDirectives. """ - def __init__(self, builder, *args, **kwds): + def __init__(self, document, builder, *args, **kwds): """ constructor """ - DocTreeTranslator.__init__(self, builder, *args, **kwds) + DocTreeTranslator.__init__(self, document, builder, *args, **kwds) self.base_class = DocTreeTranslator @@ -248,7 +250,7 @@ class LatexTranslatorWithCustomDirectives(_AdditionalVisitDepart, EnhancedLaTeXT See @see cl LatexWriterWithCustomDirectives. """ - def __init__(self, builder, document, *args, **kwds): + def __init__(self, document, builder, *args, **kwds): """ constructor """ @@ -258,7 +260,7 @@ def __init__(self, builder, document, *args, **kwds): raise TypeError( # pragma: no cover "Builder has no config: {} - {}".format(type(builder), type(document))) EnhancedLaTeXTranslator.__init__( - self, builder, document, *args, **kwds) + self, document, builder, *args, **kwds) _AdditionalVisitDepart.__init__(self, 'md') for name, f1, f2 in builder._function_node: setattr(self.__class__, "visit_" + name, f1) @@ -319,9 +321,6 @@ def write(self, document, destination): Normally not overridden or extended in subclasses. """ - # trans = self.builder.create_translator(self.builder, document) - # if not isinstance(trans, HTMLTranslatorWithCustomDirectives): - # raise TypeError("The translator is not of a known type but '{0}'".format(type(trans))) self.base_class.write(self, document, destination) @@ -347,7 +346,7 @@ def __init__(self, builder=None, app=None): # pylint: disable=W0231 def translate(self): self.visitor = visitor = self.translator_class( - self.builder, self.document) + self.document, self.builder) self.document.walkabout(visitor) self.output = visitor.astext() for attr in ('head_prefix', 'stylesheet', 'head', 'body_prefix', @@ -374,7 +373,7 @@ def __init__(self, builder=None, app=None): # pylint: disable=W0231 self, RstWriter, RSTTranslatorWithCustomDirectives, app) def translate(self): - visitor = self.translator_class(self.builder, self.document) + visitor = self.translator_class(self.document, self.builder) self.document.walkabout(visitor) self.output = visitor.body @@ -394,7 +393,7 @@ def __init__(self, builder=None, app=None): # pylint: disable=W0231 self, MdWriter, MDTranslatorWithCustomDirectives, app) def translate(self): - visitor = self.translator_class(self.builder, self.document) + visitor = self.translator_class(self.document, self.builder) self.document.walkabout(visitor) self.output = visitor.body @@ -414,7 +413,7 @@ def __init__(self, builder=None, app=None): # pylint: disable=W0231 self, DocTreeWriter, DocTreeTranslatorWithCustomDirectives, app) def translate(self): - visitor = self.translator_class(self.builder, self.document) + visitor = self.translator_class(self.document, self.builder) self.document.walkabout(visitor) self.output = visitor.body @@ -441,10 +440,10 @@ def translate(self): raise TypeError( # pragma: no cover "Builder has no config: {}".format(type(self.builder))) # The instruction - # visitor = self.builder.create_translator(self.builder, self.document) + # visitor = self.builder.create_translator(self.document, self.builder) # automatically adds methods visit_ and depart_ for translator # based on the list of registered extensions. Might be worth using it. - visitor = self.translator_class(self.builder, self.document) + visitor = self.translator_class(self.document, self.builder) self.document.walkabout(visitor) self.output = visitor.body @@ -1208,7 +1207,7 @@ def _citems(): # create the project self.project = Project(self.srcdir, self.config.source_suffix) - # create the builder + # create the builder, initializes _MemoryBuilder self.builder = self.create_builder(buildername) # set up the build environment self._init_env(freshenv) @@ -1221,9 +1220,17 @@ def _citems(): # addition self._extended_init_() + + # verification + self._check_init_() + + def _check_init_(self): + pass def _init_env(self, freshenv): - if freshenv: + ENV_PICKLE_FILENAME = 'environment.pickle' + filename = os.path.join(self.doctreedir, ENV_PICKLE_FILENAME) + if freshenv or not os.path.exists(filename): self.env = _CustomBuildEnvironment(self) self.env.setup(self) if self.srcdir is not None and self.srcdir != "IMPOSSIBLE:TOFIND": diff --git a/src/pyquickhelper/sphinxext/__init__.py b/src/pyquickhelper/sphinxext/__init__.py index b914ddf5..83106205 100644 --- a/src/pyquickhelper/sphinxext/__init__.py +++ b/src/pyquickhelper/sphinxext/__init__.py @@ -158,12 +158,4 @@ def get_default_standard_extensions(use_mathjax=False): 'matplotlib.sphinxext.plot_directive', ] - try: - import sphinxcontrib.jsdemo - assert sphinxcontrib.jsdemo is not None - extensions.append('sphinxcontrib.jsdemo') - except ImportError: # pragma: no cover - # No module sphinxcontrib.jsdemo. - pass - return extensions diff --git a/src/pyquickhelper/sphinxext/sphinx_doctree_builder.py b/src/pyquickhelper/sphinxext/sphinx_doctree_builder.py index 6387d7fa..f790c188 100644 --- a/src/pyquickhelper/sphinxext/sphinx_doctree_builder.py +++ b/src/pyquickhelper/sphinxext/sphinx_doctree_builder.py @@ -20,7 +20,7 @@ class DocTreeTranslator(nodes.NodeVisitor, CommonSphinxWriterHelpers): Defines a translator for doctree """ - def __init__(self, builder, document): + def __init__(self, document, builder): if not hasattr(builder, 'config'): raise TypeError( # pragma: no cover "Unexpected type for builder {0}".format(type(builder))) @@ -262,7 +262,7 @@ def __init__(self, builder): self.builder = builder def translate(self): - visitor = self.builder.create_translator(self.builder, self.document) + visitor = self.builder.create_translator(self.document, self.builder) self.document.walkabout(visitor) self.output = visitor.body diff --git a/src/pyquickhelper/sphinxext/sphinx_latex_builder.py b/src/pyquickhelper/sphinxext/sphinx_latex_builder.py index 4e243a65..dc5a1611 100644 --- a/src/pyquickhelper/sphinxext/sphinx_latex_builder.py +++ b/src/pyquickhelper/sphinxext/sphinx_latex_builder.py @@ -35,7 +35,7 @@ class EnhancedLaTeXTranslator(LaTeXTranslator): and modifies a few functions. """ - def __init__(self, builder, document): + def __init__(self, document, builder): if not hasattr(builder, 'config'): raise TypeError( "Unexpected type for builder {0}".format(type(builder))) @@ -183,7 +183,7 @@ def __init__(self, builder): LaTeXWriter.__init__(self, builder) def translate(self): - visitor = self.builder.create_translator(self.builder, self.document) + visitor = self.builder.create_translator(self.document, self.builder) self.document.walkabout(visitor) self.output = visitor.astext() @@ -259,8 +259,8 @@ def write(self, *ignored): docname, toctree_only, appendices=((docclass != 'howto') and self.config.latex_appendices or [])) doctree['tocdepth'] = tocdepth - self.apply_transforms(doctree) self.post_process_images(doctree) + self.logger.info(__("writing... "), nonl=1) doctree.settings = docsettings doctree.settings.author = author diff --git a/src/pyquickhelper/sphinxext/sphinx_md_builder.py b/src/pyquickhelper/sphinxext/sphinx_md_builder.py index 094387c9..65afe269 100644 --- a/src/pyquickhelper/sphinxext/sphinx_md_builder.py +++ b/src/pyquickhelper/sphinxext/sphinx_md_builder.py @@ -54,7 +54,7 @@ class MdTranslator(TextTranslator, CommonSphinxWriterHelpers): Defines a :epkg:`MD` translator. """ - def __init__(self, builder, document): + def __init__(self, document, builder): if not hasattr(builder, "config"): raise TypeError( # pragma: no cover "Builder has no config: {}".format(type(builder))) @@ -1101,7 +1101,7 @@ def __init__(self, builder): self.builder = builder def translate(self): - visitor = self.builder.create_translator(self.builder, self.document) + visitor = self.builder.create_translator(self.document, self.builder) self.document.walkabout(visitor) self.output = visitor.body diff --git a/src/pyquickhelper/sphinxext/sphinx_rst_builder.py b/src/pyquickhelper/sphinxext/sphinx_rst_builder.py index aa4a85fd..e416b998 100644 --- a/src/pyquickhelper/sphinxext/sphinx_rst_builder.py +++ b/src/pyquickhelper/sphinxext/sphinx_rst_builder.py @@ -65,7 +65,7 @@ class RstTranslator(TextTranslator, CommonSphinxWriterHelpers): """ sectionchars = '*=-~"+`' - def __init__(self, builder, document): + def __init__(self, document, builder): if not hasattr(builder, "config"): raise TypeError("Builder has no config: {}".format(type(builder))) TextTranslator.__init__(self, document, builder) @@ -1254,7 +1254,7 @@ def __init__(self, builder): self.builder = builder def translate(self): - visitor = self.builder.create_translator(self.builder, self.document) + visitor = self.builder.create_translator(self.document, self.builder) self.document.walkabout(visitor) self.output = visitor.body