# HG changeset patch # User Franz Glasner # Date 1778607828 -7200 # Node ID b27557f6d3934d4d6a94c5354c3fcd197c941d3f # Parent 5113d7fbae9ec63b7e7f7ac4e81376495a444e7b Allow to build the documentation when the project is not installed diff -r 5113d7fbae9e -r b27557f6d393 Makefile --- a/Makefile Tue May 12 15:54:07 2026 +0200 +++ b/Makefile Tue May 12 19:43:48 2026 +0200 @@ -57,4 +57,5 @@ install-doc: python -m pip install -r requirements-docs.txt - python -m pip install --editable . + # Not needed any more because handled in docs/conf.py as hack + #python -m pip install --editable . diff -r 5113d7fbae9e -r b27557f6d393 docs/conf.py --- 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 .' .") diff -r 5113d7fbae9e -r b27557f6d393 pyproject.toml --- a/pyproject.toml Tue May 12 15:54:07 2026 +0200 +++ b/pyproject.toml Tue May 12 19:43:48 2026 +0200 @@ -44,19 +44,6 @@ # The original homepage of the Pseudo code (fr) lexer homepage = "https://github.com/svvac/pseudocode-pygments-lexer" -[project.entry-points.'pygments.lexers'] -# The key is not significant here -# The mostly original and somewhat extended Pseudocode lexer (fr) -fr_pseudocodelexer = "pygments_lexer_pseudocode2.lexers.fr_pseudocode:FrPseudocodeLexer" -algpseudocodelexer = "pygments_lexer_pseudocode2.lexers.algpseudocode:AlgPseudocodeLexer" -algpseudocodelexer_de = "pygments_lexer_pseudocode2.lexers.algpseudocode:AlgPseudocodeLexer_DE" -algpseudocodelexer_fr = "pygments_lexer_pseudocode2.lexers.algpseudocode:AlgPseudocodeLexer_FR" - -[project.entry-points."pygments.filters"] -# The key *is* significant: it is the name the filter will be recognized as. -tokenreplace = "pygments_lexer_pseudocode2.filters:TokenReplaceFilter" -errortogenericerror = "pygments_lexer_pseudocode2.filters:ErrorToGenericErrorTokenFilter" - [tool.setuptools] packages = [ "pygments_lexer_pseudocode2", @@ -70,3 +57,21 @@ [tool.setuptools.dynamic] version = {attr = "pygments_lexer_pseudocode2.__version__"} readme = {file = ["README.rst"], content-type = "text/x-rst"} + +# +# IMPORTANT: +# Synchronize lexers and filters with docs/conf.py! +# + +[project.entry-points.'pygments.lexers'] +# The key is not significant here +# The mostly original and somewhat extended Pseudocode lexer (fr) +fr_pseudocodelexer = "pygments_lexer_pseudocode2.lexers.fr_pseudocode:FrPseudocodeLexer" +algpseudocodelexer = "pygments_lexer_pseudocode2.lexers.algpseudocode:AlgPseudocodeLexer" +algpseudocodelexer_de = "pygments_lexer_pseudocode2.lexers.algpseudocode:AlgPseudocodeLexer_DE" +algpseudocodelexer_fr = "pygments_lexer_pseudocode2.lexers.algpseudocode:AlgPseudocodeLexer_FR" + +[project.entry-points."pygments.filters"] +# The key *is* significant: it is the name the filter will be recognized as. +tokenreplace = "pygments_lexer_pseudocode2.filters:TokenReplaceFilter" +errortogenericerror = "pygments_lexer_pseudocode2.filters:ErrorToGenericErrorTokenFilter"