mirror of
https://github.com/j178/prek.git
synced 2026-04-03 17:34:03 +02:00
48 lines
1.4 KiB
Python
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)
|