#!/usr/bin/env python3 """ sync-docs.py — Salin chapters/ ke docs/ untuk MkDocs ===================================================== Bersihkan: - metadata block (```metainfo ... ```) - HTML comment () - mermaid block → ganti dengan blockquote keterangan - baris kosong berlebih (maks 2) Buat docs/index.md dan docs/rps-sim.md otomatis. """ import re import argparse import shutil from pathlib import Path ROOT = Path(__file__).parent.parent CHAPTERS = ROOT / "chapters" BACKMATTER = ROOT / "backmatter" FOUNDATION = ROOT / "foundation" DOCS = ROOT / "docs" def clean(text: str) -> str: # 1. Hapus metadata block text = re.sub(r"^```metainfo\s*\n.*?```\s*\n?", "", text, flags=re.DOTALL | re.MULTILINE) # 2. Hapus HTML comment text = re.sub(r"", "", text, flags=re.DOTALL) # 3. Ganti mermaid dengan keterangan def mermaid_sub(m: re.Match) -> str: first = m.group(1).strip().splitlines()[0] if m.group(1).strip() else "Diagram" return f"\n> **[Diagram]** *{first}* — lihat versi cetak.\n" text = re.sub(r"```mermaid\s*\n(.*?)```", mermaid_sub, text, flags=re.DOTALL) # 4. Normalisasi baris kosong text = re.sub(r"\n{3,}", "\n\n", text) return text.strip() + "\n" def write(dst: Path, content: str) -> None: dst.write_text(content, encoding="utf-8") def sync(verbose: bool) -> None: if verbose: print(f"docs/ → {DOCS}") DOCS.mkdir(parents=True, exist_ok=True) # Chapters for src in sorted(CHAPTERS.glob("bab-*.md")): write(DOCS / src.name, clean(src.read_text("utf-8"))) if verbose: print(f" ✓ {src.name}") # Backmatter for name in ["kata-pengantar.md", "references.md", "glosarium.md", "indeks.md", "tentang-penulis.md"]: src = BACKMATTER / name if src.exists(): write(DOCS / name, clean(src.read_text("utf-8"))) if verbose: print(f" ✓ {name}") # RPS rps = FOUNDATION / "RPS-SIM.md" if rps.exists(): write(DOCS / "rps-sim.md", clean(rps.read_text("utf-8"))) if verbose: print(" ✓ rps-sim.md") # index.md index = """\ # Sistem Informasi Manajemen di Era AI **Perspektif Strategis dan Pengambilan Keputusan** *Helmi Bahar Alim, S.Kom., M.Kom.* — Universitas Putra Bangsa, Kebumen · Edisi 2025/2026 --- ## Tentang Buku Ini Buku ajar mata kuliah **Sistem Informasi Manajemen (SIM)** yang dirancang untuk era kecerdasan buatan. Buku ini membekali mahasiswa dengan kerangka berpikir manajerial untuk menggunakan SI sebagai senjata pengambilan keputusan. ## Struktur Buku | Bagian | Topik | Bab | |--------|-------|-----| | I | Konteks Strategis | 1–2 | | II | Fondasi Berpikir Manajerial | 3–5 | | III | SI dalam Proses Bisnis & Keputusan | 6–9 | | IV | Perancangan Solusi SI | 10–12 | | V | Implementasi, Evaluasi & Risiko | 13–15 | | VI | Transformasi Digital, AI & Masa Depan | 16–18 | ## Navigasi Cepat - [Kata Pengantar](kata-pengantar.md) - [BAB 1 — Mulai dari sini →](bab-01.md) - [Glosarium](glosarium.md) - [Referensi](references.md) - [RPS Mata Kuliah](rps-sim.md) """ write(DOCS / "index.md", index) if verbose: print(" ✓ index.md") print("✅ Sync selesai → docs/") if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--verbose", "-v", action="store_true") parser.add_argument("--clean", action="store_true", help="Hapus docs/ dulu sebelum sync") args = parser.parse_args() if args.clean and DOCS.exists(): shutil.rmtree(DOCS) sync(args.verbose)