AzLearn

تمرين إعادة البناء

محول Markdown إلى HTML

حوّل Markdown أساسي إلى HTML بسيط بالمكتبة القياسية.

python ~20 دقيقة متوسط
أعد بناء الكود Rebuild

هذا هو الكود. اكتبه بنفسك.

الكود المرجعي
import argparse
import html
import re
from pathlib import Path


def inline_markdown(text: str) -> str:
    escaped = html.escape(text)
    escaped = re.sub(r"`([^`]+)`", r"<code></code>", escaped)
    escaped = re.sub(r"\*\*([^*]+)\*\*", r"<strong></strong>", escaped)
    return escaped


def markdown_to_html(markdown: str) -> str:
    lines = []
    in_list = False
    for raw_line in markdown.splitlines():
        line = raw_line.strip()
        if not line:
            if in_list:
                lines.append("</ul>")
                in_list = False
            continue
        if line.startswith("# "):
            lines.append(f"<h1>{inline_markdown(line[2:])}</h1>")
        elif line.startswith("## "):
            lines.append(f"<h2>{inline_markdown(line[3:])}</h2>")
        elif line.startswith("- "):
            if not in_list:
                lines.append("<ul>")
                in_list = True
            lines.append(f"  <li>{inline_markdown(line[2:])}</li>")
        else:
            if in_list:
                lines.append("</ul>")
                in_list = False
            lines.append(f"<p>{inline_markdown(line)}</p>")
    if in_list:
        lines.append("</ul>")
    return "\n".join(lines) + "\n"


def main() -> None:
    parser = argparse.ArgumentParser(description="Convert basic Markdown to simple HTML.")
    parser.add_argument("input", type=Path)
    parser.add_argument("output", type=Path)
    args = parser.parse_args()

    html_text = markdown_to_html(args.input.read_text(encoding="utf-8"))
    args.output.write_text(html_text, encoding="utf-8")
    print(f"Wrote {args.output}")


if __name__ == "__main__":
    main()
اكتب هنا