mirror of
https://github.com/nlohmann/json.git
synced 2026-10-10 16:37:14 +00:00
- version history: json_base_class_t (3.11.3), JSON_HAS_CPP_11 (3.10.0), JSON_HAS_RANGES exclusions, define-type macros, ABI tags - releases: 3.12.0 raised the minimum CMake version - from_*: the (ptr, len) overloads are deleted, not removed, in 4.0.0 - contains/count/find: document the deleted integral overloads - add JSON_HAS_RANGE_VIEW_CONVERSION and list the JSON_HAS_* macros in the macro overview - mention BON8 and error_handler where binary formats are listed - broken links, outdated URLs, warning count, Hunter v0.26.12 - copy_markdown_source hook: expand snippets in the Markdown copies Signed-off-by: Niels Lohmann <mail@nlohmann.me>
51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
"""Copy each documentation page's Markdown source into the built site."""
|
|
|
|
# Creates a `<path>.md` sibling of each HTML output (for example,
|
|
# `features/comments/` becomes `features/comments.md`) so agents and tools can
|
|
# fetch the raw Markdown directly instead of parsing rendered HTML. The
|
|
# `--8<-- "path"` lines of pymdownx.snippets are expanded with the extension's
|
|
# own preprocessor and the settings from mkdocs.yml, so the copies contain the
|
|
# included example code and files instead of the include directives.
|
|
|
|
import io
|
|
import os
|
|
|
|
import markdown
|
|
from pymdownx.snippets import SnippetMissingError
|
|
|
|
_pages = []
|
|
_snippets = None
|
|
|
|
|
|
def on_config(config):
|
|
global _snippets
|
|
md = markdown.Markdown(
|
|
extensions=["pymdownx.snippets"],
|
|
extension_configs={"pymdownx.snippets": config["mdx_configs"].get("pymdownx.snippets", {})},
|
|
)
|
|
_snippets = md.preprocessors["snippet"]
|
|
_snippets.auto_append = [] # the glossary is only needed to render abbreviations
|
|
return config
|
|
|
|
|
|
def on_files(files, config):
|
|
global _pages
|
|
_pages = [f for f in files if f.is_documentation_page()]
|
|
return files
|
|
|
|
|
|
def on_post_build(config):
|
|
site_dir = config["site_dir"]
|
|
for file in _pages:
|
|
url = file.url.rstrip("/")
|
|
target = os.path.join(site_dir, (url or "index") + ".md")
|
|
os.makedirs(os.path.dirname(target), exist_ok=True)
|
|
with io.open(file.abs_src_path, encoding="utf-8", newline="") as source:
|
|
text = source.read()
|
|
try:
|
|
text = "\n".join(_snippets.run(text.split("\n")))
|
|
except (SnippetMissingError, OSError):
|
|
pass # keep the include directives; the regular build reports the missing file
|
|
with io.open(target, "w", encoding="utf-8", newline="") as copy:
|
|
copy.write(text)
|