تمرين إعادة البناء
محول 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()اكتب هنا