Some checks failed
Deploy Buku Online → helmibahara.my.id/book/sim/ / Build MkDocs & Deploy ke vm-edge (push) Has been cancelled
124 lines
3.6 KiB
Python
124 lines
3.6 KiB
Python
#!/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)
|