# Configuration file for the Sphinx documentation builder. # # This file only contains a selection of the most common options. For a full # list see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html # -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # from glob import glob import os # import sys # sys.path.insert(0, os.path.abspath('.')) # -- Project information ----------------------------------------------------- project = "markdown-it-py" copyright = "2020, executable book project" author = "executable book project" # -- General configuration --------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ "sphinx.ext.autodoc", "sphinx.ext.viewcode", "sphinx.ext.intersphinx", "myst_parser", "sphinx_copybutton", "sphinx_design", ] # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] nitpicky = True nitpick_ignore = [ ("py:class", "Match"), ("py:class", "Path"), ("py:class", "x in the interval [0, 1)."), ("py:class", "markdown_it.helpers.parse_link_destination._Result"), ("py:class", "markdown_it.helpers.parse_link_title._Result"), ("py:class", "MarkdownIt"), ("py:class", "RuleFunc"), ("py:class", "_NodeType"), ("py:class", "typing_extensions.Protocol"), ] # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_title = "markdown-it-py" html_theme = "sphinx_book_theme" html_theme_options = { "use_edit_page_button": True, "repository_url": "https://github.com/executablebooks/markdown-it-py", "repository_branch": "master", "path_to_docs": "docs", } html_static_path = ["_static"] html_css_files = ["custom.css"] # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". # html_static_path = ["_static"] intersphinx_mapping = { "python": ("https://docs.python.org/3.7", None), "mdit-py-plugins": ("https://mdit-py-plugins.readthedocs.io/en/latest/", None), } def run_apidoc(app): """generate apidoc See: https://github.com/rtfd/readthedocs.org/issues/1139 """ import os import shutil import sphinx from sphinx.ext import apidoc logger = sphinx.util.logging.getLogger(__name__) logger.info("running apidoc") # get correct paths this_folder = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) api_folder = os.path.join(this_folder, "api") module_path = os.path.normpath(os.path.join(this_folder, "../")) ignore_paths = ["../profiler.py", "../conftest.py", "../tests", "../benchmarking"] ignore_paths = [ os.path.normpath(os.path.join(this_folder, p)) for p in ignore_paths ] # functions from these modules are all imported in the __init__.py with __all__ for rule in ("block", "core", "inline"): for path in glob( os.path.normpath( os.path.join(this_folder, f"../markdown_it/rules_{rule}/*.py") ) ): if os.path.basename(path) not in ("__init__.py", f"state_{rule}.py"): ignore_paths.append(path) if os.path.exists(api_folder): shutil.rmtree(api_folder) os.mkdir(api_folder) argv = ["-M", "--separate", "-o", api_folder, module_path] + ignore_paths apidoc.OPTIONS.append("ignore-module-all") apidoc.main(argv) # we don't use this if os.path.exists(os.path.join(api_folder, "modules.rst")): os.remove(os.path.join(api_folder, "modules.rst")) def setup(app): """Add functions to the Sphinx setup.""" if os.environ.get("SKIP_APIDOC", None) is None: app.connect("builder-inited", run_apidoc) from sphinx.directives.code import CodeBlock class CodeCell(CodeBlock): """Custom code block directive.""" def run(self): """Run the directive.""" self.options["class"] = ["code-cell"] return super().run() # note, these could be run by myst-nb, # but currently this causes a circular dependency issue app.add_directive("code-cell", CodeCell)