Skip to content

Commit c2dbcb9

Browse files
committed
ENH: Support configurable markdown extensions
1 parent 641e7a8 commit c2dbcb9

File tree

4 files changed

+29
-2
lines changed

4 files changed

+29
-2
lines changed

pdoc/cli.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,16 @@ def docfilter(obj, _filters=args.filter.strip().split(',')):
537537
for module in args.modules]
538538
pdoc.link_inheritance()
539539

540+
# Loading is done. Output stage ...
541+
config = pdoc._get_config(**template_config)
542+
543+
# Load global markdown extensions
544+
if config.get('md_extensions'):
545+
from .html_helpers import _md
546+
_kwargs = dict(extensions=[], configs={})
547+
_kwargs.update(config.get('md_extensions', {}))
548+
_md.registerExtensions(**_kwargs)
549+
540550
if args.pdf:
541551
_print_pdf(modules, **template_config)
542552
import textwrap
@@ -583,7 +593,7 @@ def docfilter(obj, _filters=args.filter.strip().split(',')):
583593
sys.stdout.write(os.linesep * (1 + 2 * int(module != modules[-1])))
584594

585595
if args.html:
586-
lunr_config = pdoc._get_config(**template_config).get('lunr_search')
596+
lunr_config = config.get('lunr_search')
587597
if lunr_config is not None:
588598
_generate_lunr_search(
589599
modules, lunr_config.get("index_docstrings", True), template_config)

pdoc/html_helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@ def glimpse(text: str, max_length=153, *, paragraph=True,
7373
output_format='html5', # type: ignore[arg-type]
7474
extensions=[
7575
"markdown.extensions.abbr",
76+
"markdown.extensions.admonition",
7677
"markdown.extensions.attr_list",
7778
"markdown.extensions.def_list",
7879
"markdown.extensions.fenced_code",
7980
"markdown.extensions.footnotes",
8081
"markdown.extensions.tables",
81-
"markdown.extensions.admonition",
8282
"markdown.extensions.smarty",
8383
"markdown.extensions.toc",
8484
],

pdoc/templates/config.mako

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,10 @@
6161
# Note: in Python docstrings, either all backslashes need to be escaped (\\)
6262
# or you need to use raw r-strings.
6363
latex_math = False
64+
65+
# Additional markdown extensions to enable. See:
66+
# https://python-markdown.github.io/extensions/
67+
# https://python-markdown.github.io/reference/#extensions
68+
# https://github.com/Python-Markdown/markdown/wiki/Third-Party-Extensions
69+
md_extensions = {'extensions': [], 'configs': {}}
6470
%>

pdoc/test/__init__.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from glob import glob
1919
from io import StringIO
2020
from itertools import chain
21+
from pathlib import Path
2122
from random import randint
2223
from tempfile import TemporaryDirectory
2324
from time import sleep
@@ -468,6 +469,16 @@ def test_resolve_typing_forwardrefs(self):
468469
out = out.getvalue()
469470
self.assertIn('Set[Bar]', out)
470471

472+
def test_md_extensions(self):
473+
with temp_dir() as path, \
474+
chdir(path):
475+
Path('foo.py').write_text('"""secret: meta data\n\nOnly this comment expected."""')
476+
with redirect_streams() as (stdout, _), \
477+
run_html('foo.py', html_no_source=None,
478+
config="md_extensions={'extensions': ['markdown.extensions.meta']}",):
479+
self._check_files(include_patterns=['comment expected'],
480+
exclude_patterns=['<p>secret: meta data</p>'])
481+
471482

472483
class ApiTest(unittest.TestCase):
473484
"""

0 commit comments

Comments
 (0)