1
0
mirror of https://github.com/j178/prek.git synced 2026-04-03 17:34:03 +02:00
Files
prek/docs/hooks.py
2025-10-19 21:34:56 +08:00

48 lines
1.4 KiB
Python

import re
def on_config(config, **kwargs):
"""Read raw `site_url` from mkdocs.yml and store in `config._prek_docs`.
This is needed because Mkdocs https://prek.j178.dev to http://127.0.0.1:8000
when serving locally.
"""
mkdocs_file_path = config['config_file_path']
with open(mkdocs_file_path, 'r') as f:
for line in f:
if line.startswith('site_url:'):
config._prek_docs = {
'site_url': line.split('site_url:')[1].strip()
}
break
return config
def on_page_markdown(markdown, **kwargs):
"""Convert absolute URLs like https://prek.j178.dev/installation into
relative paths like installation.md for local serving to avoid duplication
of content.
"""
site_url = kwargs['config']._prek_docs['site_url']
def replacement(match):
url = match.group(0)
path = url.replace(site_url, '', 1)
# Strip any query string and separate fragment identifiers.
path = path.split('?', 1)[0]
path, *fragment = path.split('#', 1)
path = path.lstrip('/').rstrip('/')
if not path:
path = 'index'
last_segment = path.rsplit('/', 1)[-1]
if '.' not in last_segment:
path = f"{path}.md"
if fragment:
return f"{path}#{fragment[0]}"
return path
return re.sub(rf'{re.escape(site_url)}([^)\s]+)', replacement, markdown)