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