From a0bd4a6812f1fa7842dd98183a2cac58f507bb6d Mon Sep 17 00:00:00 2001 From: Laurens Valk Date: Tue, 27 Jul 2021 15:43:03 +0200 Subject: [PATCH] doc/common/extensions: Show compatibility on hub. This simplifies the table and reduces its size. Also copy assets manually since Sphinx does not automatically copy images to _images when used for custom directives. --- doc/common/extensions/requirements.py | 34 +++++++++++++++++---------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/doc/common/extensions/requirements.py b/doc/common/extensions/requirements.py index 48b2252..34c1eb0 100644 --- a/doc/common/extensions/requirements.py +++ b/doc/common/extensions/requirements.py @@ -1,6 +1,9 @@ +from os import path, makedirs + from docutils import nodes from docutils.parsers.rst import Directive +from sphinx.util.osutil import copyfile # Base feature set. FEATURES_SMALL = set() @@ -32,25 +35,35 @@ class PybricksRequirementsDirective(Directive): optional_arguments = 10 def run(self): + + # Copy required resources to static + # CC BY-SA 4.0 via https://stackoverflow.com/a/63728208 + env = self.state.document.settings.env + + destdir = path.join(env.app.builder.outdir, '_images') + if not path.exists(destdir): + makedirs(destdir) + + for hub in HUB_FEATURES: + for compat in ("true", "false"): + uri = 'compat_{0}_{1}_label.png'.format(hub, compat) + src_uri = path.join(env.app.builder.srcdir, 'images', uri) + build_uri = path.join(env.app.builder.outdir, '_images', uri) + copyfile(src_uri, build_uri) + # Get requirements from sphinx-directive. requirements = set(self.arguments) # Cell with image of a hub. hub_cell = """
- +
""" # Table row with hub images. - hub_row = "".join([hub_cell.format(hub) for hub in HUB_FEATURES]) - - # Cell with checkmark or cross. - compat_cell = """
{0}
""" - - # Table row with checkmark or cross. compat_row = "".join([ - compat_cell.format("✔️" if requirements <= features else "❌") + hub_cell.format(hub, "true" if requirements <= features else "false") for hub, features in HUB_FEATURES.items() ]) @@ -62,13 +75,10 @@ class PybricksRequirementsDirective(Directive): {0} - - {1} - - """.format(hub_row, compat_row) + """.format(compat_row) # Return the node. node = nodes.raw('', html, format="html")