diff docs/conf.py @ 185:b27557f6d393

Allow to build the documentation when the project is not installed
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 12 May 2026 19:43:48 +0200
parents e3523930294a
children 95754197f5b3
line wrap: on
line diff
--- a/docs/conf.py	Tue May 12 15:54:07 2026 +0200
+++ b/docs/conf.py	Tue May 12 19:43:48 2026 +0200
@@ -11,9 +11,17 @@
 import sys
 import re
 
+import pygments.lexers
+import pygments.filters
+import sphinx.util.logging
+
 sys.path.insert(0, os.path.dirname(os.path.abspath('.')))
 
-from pygments_lexer_pseudocode2.lexers.algpseudocode import AlgPseudocodeLexer
+from pygments_lexer_pseudocode2.lexers.algpseudocode import (
+    AlgPseudocodeLexer, AlgPseudocodeLexer_DE, AlgPseudocodeLexer_FR)
+from pygments_lexer_pseudocode2.lexers.fr_pseudocode import FrPseudocodeLexer
+from pygments_lexer_pseudocode2.filters import (
+    TokenReplaceFilter, ErrorToGenericErrorTokenFilter)
 
 
 needs_sphinx = '2.1'
@@ -180,3 +188,51 @@
     app.add_lexer("genericerror-algpseudocode",
                   functools.partial(AlgPseudocodeLexer,
                                     filters=["errortogenericerror"]))
+
+    #
+    # Prepare for building docs while the package is not installed:
+    # Install by "hand" into pygments!
+    # This is an ugly *HACK*!
+    #
+    # IMPORTANT: Synchronize names with pyproject.toml!
+    #
+    try:
+        if not pygments.lexers.find_lexer_class("AlgPseudocode"):
+            sphinx.util.logging.getLogger("conf-setup").info(
+                "%s","Installing lexer `AlgPseudocode' and language variants")
+            for clsname, lexer in (
+                    ("AlgPseudocodeLexer", AlgPseudocodeLexer),
+                    ("AlgPseudocodeLexer_DE", AlgPseudocodeLexer_DE),
+                    ("AlgPseudocodeLexer_FR", AlgPseudocodeLexer_FR)):
+                pygments.lexers.LEXERS[clsname] = (
+                "pygments_lexer_pseudocode2.lexers.algpseudocode",
+                lexer.name,
+                tuple(lexer.aliases),
+                tuple(lexer.filenames),
+                tuple(lexer.mimetypes))
+        if not pygments.lexers.find_lexer_class("FrPseudocode"):
+            sphinx.util.logging.getLogger("conf-setup").info(
+                "%s","Installing lexer `FrPseudocode'")
+            for clsname, lexer in (
+                    ("FrPseudocodeLexer", FrPseudocodeLexer),):
+                pygments.lexers.LEXERS[clsname] = (
+                "pygments_lexer_pseudocode2.lexers.fr_pseudocode",
+                lexer.name,
+                tuple(lexer.aliases),
+                tuple(lexer.filenames),
+                tuple(lexer.mimetypes))
+        if not pygments.filters.find_filter_class("tokenreplace"):
+            sphinx.util.logging.getLogger("conf-setup").info(
+                "%s","Installing filter `tokenreplace'")
+            pygments.filters.FILTERS["tokenreplace"] = TokenReplaceFilter
+        if not pygments.filters.find_filter_class("errortogenericerror"):
+            sphinx.util.logging.getLogger("conf-setup").info(
+                "%s","Installing filter `errortogenericerror'")
+            pygments.filters.FILTERS["errortogenericerror"]  = \
+                ErrorToGenericErrorTokenFilter
+    except Exception as ex:
+        sphinx.util.logging.getLogger("conf-setup").error("%s", str(ex))
+        sphinx.util.logging.getLogger("conf-setup").error(
+            "%s",
+            "No lexers/filters from pygments_lexer_pseudocode2 available;"
+            " please install or call `pip install -e .' .")