from __future__ import annotations
import json
import re
import sys
from pathlib import Path
REPO = "h1994st/rllvm"
BRANCH = "main"
ROOT = Path(__file__).resolve().parent.parent
README = ROOT / "README.md"
RELEASE_MANIFEST = ROOT / ".release-please-manifest.json"
OUTPUT = Path(__file__).resolve().parent / "index.md"
LINK = re.compile(r"(?<=\]\()([^)\s]+)(?=[)\s])")
ABSOLUTE = ("http://", "https://", "#", "mailto:", "//")
def rewrite(target: str) -> str:
if target.startswith(ABSOLUTE):
return target
kind = "tree" if target.endswith("/") else "blob"
return f"https://github.com/{REPO}/{kind}/{BRANCH}/{target.lstrip('./')}"
def crate_version() -> str:
released = json.loads(RELEASE_MANIFEST.read_text(encoding="utf-8"))
version = released.get(".")
if not isinstance(version, str):
raise SystemExit(f'no "." version string in {RELEASE_MANIFEST.name}')
return version
def split_front(markdown: str) -> tuple[str, str, str, str]:
lines = markdown.splitlines()
title = "rllvm"
if lines and lines[0].startswith("# "):
title = lines[0][2:].strip()
lines = lines[1:]
body_start = next(
(i for i, line in enumerate(lines) if line.startswith("## ")), len(lines)
)
intro, body = lines[:body_start], lines[body_start:]
paragraphs = [
" ".join(block.split())
for block in "\n".join(
line for line in intro if not line.startswith("[![")
).split("\n\n")
if block.strip()
]
tagline = paragraphs[0] if paragraphs else ""
lead = paragraphs[1] if len(paragraphs) > 1 else ""
return title, tagline, lead, "\n".join(body).strip()
def yaml_quote(value: str) -> str:
return '"' + value.replace("\\", "\\\\").replace('"', '\\"') + '"'
def main() -> int:
title, tagline, lead, body = split_front(README.read_text(encoding="utf-8"))
if not tagline:
print("README has no tagline paragraph under the title", file=sys.stderr)
return 1
body = LINK.sub(lambda match: rewrite(match.group(0)), body)
leftover = [t for t in LINK.findall(body) if not t.startswith(ABSOLUTE)]
if leftover:
print(f"unrewritten relative links: {leftover}", file=sys.stderr)
return 1
front = "\n".join(
[
"---",
"layout: default",
f"title: {yaml_quote(title)}",
f"tagline: {yaml_quote(tagline)}",
f"lead: {yaml_quote(lead)}",
f"version: {yaml_quote(crate_version())}",
"---",
"",
]
)
OUTPUT.write_text(f"{front}\n{body}\n", encoding="utf-8")
print(f"wrote {OUTPUT.relative_to(ROOT)} from README.md")
return 0
if __name__ == "__main__":
raise SystemExit(main())