make_rootlist.py: секционный подзаголовок v2 — 2 строки с явными лейблами: 'N книг (все NEW / X NEW + Y cross-ref)' + 'RU-издание: ✅.. найдено · 🔶.. частично · ❌.. нет — EN-оригинал скачан: a/b — RU-перевод скачан: c/d — файлов: N (EN/RU/other)'. Xref-детект по карточке -xref.md (раньше не работал — все секции показывались 'all NEW' в метриках). RU-перевод скачан = NEW-items с ≥1 RU-файлом из найденных (✅+🔶); EN = NEW-items с ≥1 EN-файлом из всех NEW.

This commit is contained in:
Dmitry Kokorin 2026-10-01 09:36:34 +03:00
parent 2432fa1180
commit a6886652dd
2 changed files with 47 additions and 18 deletions

View file

@ -39,7 +39,7 @@ def parse_index(sec):
m = re.match(r'^\|\s*(\d{2})\s*\|\s*([^|]*)\|\s*([^|]*)\s*\|\s*([^|]*)\s*\|\s*([^|]+?)\s*\|\s*([^|]+)\|', line)
if m:
num, grp, title, author, status, card = m.groups()
is_xref = status.strip().startswith("xref")
is_xref = status.strip().startswith("xref") or card.strip().endswith("-xref.md")
em = re.search(r'[✅🔶❌⬜]', status)
items[num] = dict(title=title.strip(), author=author.strip(),
status=(em.group(0) if em else status.strip()),
@ -206,15 +206,32 @@ def main():
mf = manifs[sec]
ddir = dldir(sec)
n = int(sec[:2])
dfiles_n = len([f for f in os.listdir(os.path.join(BASE, "downloads", ddir)) if f != "MANIFEST.md"])
dfiles = [f for f in os.listdir(os.path.join(BASE, "downloads", ddir)) if f != "MANIFEST.md"]
dfiles_n = len(dfiles)
f_en = sum(1 for f in dfiles if "-en-" in f)
f_ru = sum(1 for f in dfiles if "-ru-" in f)
f_other = dfiles_n - f_en - f_ru
stat = {e: 0 for e in "✅🔶❌"}
for it in items.values():
if it.get("is_xref"):
continue # xref items are counted in their canonical section
new_items = [it for it in items.values() if not it.get("is_xref")]
for it in new_items:
stat[it["status"]] = stat.get(it["status"], 0) + 1
en_dl = ru_dl = 0
for num, it in items.items():
if it.get("is_xref"):
continue
fns = [f[0] for f in mf.get(num, {"files": []}).get("files", [])]
if any("-en-" in f for f in fns): en_dl += 1
if any("-ru-" in f for f in fns): ru_dl += 1
xref_n = len(items) - len(new_items)
comp = " (все NEW)" if xref_n == 0 else f": {len(new_items)} NEW + {xref_n} cross-ref"
ru_found = stat["✅"] + stat["🔶"]
ru_dl_s = f"{ru_dl} из {ru_found}" if ru_found else "—"
out.append(f"## {n}. {name}")
out.append("")
out.append(f"_{len(items)} items — ✅ {stat.get('✅',0)} / 🔶 {stat.get('🔶',0)} / ❌ {stat.get('❌',0)} · файлов в секции: {dfiles_n}_")
out.append(f"_{len(items)} книг{comp}_")
out.append(f"_RU-издание: ✅ {stat['✅']} найдено · 🔶 {stat['🔶']} частично · ❌ {stat['❌']} нет — "
f"EN-оригинал скачан: {en_dl} из {len(new_items)} — RU-перевод скачан: {ru_dl_s} — "
f"файлов: {dfiles_n} (EN {f_en} / RU {f_ru} / other {f_other})_")
out.append("")
out.append("| # | Book | Author | RU edition | Files |")
out.append("|---|------|--------|------------|-------|")