comparison 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
comparison
equal deleted inserted replaced
184:5113d7fbae9e 185:b27557f6d393
9 import io 9 import io
10 import os 10 import os
11 import sys 11 import sys
12 import re 12 import re
13 13
14 import pygments.lexers
15 import pygments.filters
16 import sphinx.util.logging
17
14 sys.path.insert(0, os.path.dirname(os.path.abspath('.'))) 18 sys.path.insert(0, os.path.dirname(os.path.abspath('.')))
15 19
16 from pygments_lexer_pseudocode2.lexers.algpseudocode import AlgPseudocodeLexer 20 from pygments_lexer_pseudocode2.lexers.algpseudocode import (
21 AlgPseudocodeLexer, AlgPseudocodeLexer_DE, AlgPseudocodeLexer_FR)
22 from pygments_lexer_pseudocode2.lexers.fr_pseudocode import FrPseudocodeLexer
23 from pygments_lexer_pseudocode2.filters import (
24 TokenReplaceFilter, ErrorToGenericErrorTokenFilter)
17 25
18 26
19 needs_sphinx = '2.1' 27 needs_sphinx = '2.1'
20 """This is the theory: 28 """This is the theory:
21 29
178 # Token.Error to Token.Generic.Error 186 # Token.Error to Token.Generic.Error
179 # 187 #
180 app.add_lexer("genericerror-algpseudocode", 188 app.add_lexer("genericerror-algpseudocode",
181 functools.partial(AlgPseudocodeLexer, 189 functools.partial(AlgPseudocodeLexer,
182 filters=["errortogenericerror"])) 190 filters=["errortogenericerror"]))
191
192 #
193 # Prepare for building docs while the package is not installed:
194 # Install by "hand" into pygments!
195 # This is an ugly *HACK*!
196 #
197 # IMPORTANT: Synchronize names with pyproject.toml!
198 #
199 try:
200 if not pygments.lexers.find_lexer_class("AlgPseudocode"):
201 sphinx.util.logging.getLogger("conf-setup").info(
202 "%s","Installing lexer `AlgPseudocode' and language variants")
203 for clsname, lexer in (
204 ("AlgPseudocodeLexer", AlgPseudocodeLexer),
205 ("AlgPseudocodeLexer_DE", AlgPseudocodeLexer_DE),
206 ("AlgPseudocodeLexer_FR", AlgPseudocodeLexer_FR)):
207 pygments.lexers.LEXERS[clsname] = (
208 "pygments_lexer_pseudocode2.lexers.algpseudocode",
209 lexer.name,
210 tuple(lexer.aliases),
211 tuple(lexer.filenames),
212 tuple(lexer.mimetypes))
213 if not pygments.lexers.find_lexer_class("FrPseudocode"):
214 sphinx.util.logging.getLogger("conf-setup").info(
215 "%s","Installing lexer `FrPseudocode'")
216 for clsname, lexer in (
217 ("FrPseudocodeLexer", FrPseudocodeLexer),):
218 pygments.lexers.LEXERS[clsname] = (
219 "pygments_lexer_pseudocode2.lexers.fr_pseudocode",
220 lexer.name,
221 tuple(lexer.aliases),
222 tuple(lexer.filenames),
223 tuple(lexer.mimetypes))
224 if not pygments.filters.find_filter_class("tokenreplace"):
225 sphinx.util.logging.getLogger("conf-setup").info(
226 "%s","Installing filter `tokenreplace'")
227 pygments.filters.FILTERS["tokenreplace"] = TokenReplaceFilter
228 if not pygments.filters.find_filter_class("errortogenericerror"):
229 sphinx.util.logging.getLogger("conf-setup").info(
230 "%s","Installing filter `errortogenericerror'")
231 pygments.filters.FILTERS["errortogenericerror"] = \
232 ErrorToGenericErrorTokenFilter
233 except Exception as ex:
234 sphinx.util.logging.getLogger("conf-setup").error("%s", str(ex))
235 sphinx.util.logging.getLogger("conf-setup").error(
236 "%s",
237 "No lexers/filters from pygments_lexer_pseudocode2 available;"
238 " please install or call `pip install -e .' .")