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

@ -8,7 +8,8 @@
## 1. Fundamentals
_55 items — ✅ 38 / 🔶 2 / ❌ 15 · файлов в секции: 118_
_55 книг (все NEW)_
_RU-издание: ✅ 38 найдено · 🔶 2 частично · ❌ 15 нет — EN-оригинал скачан: 45 из 55 — RU-перевод скачан: 26 из 40 — файлов: 118 (EN 67 / RU 42 / other 9)_
| # | Book | Author | RU edition | Files |
|---|------|--------|------------|-------|
@ -70,7 +71,8 @@ _55 items — ✅ 38 / 🔶 2 / ❌ 15 · файлов в секции: 118_
## 2. Dreams
_57 items — ✅ 23 / 🔶 5 / ❌ 29 · файлов в секции: 60_
_57 книг (все NEW)_
_RU-издание: ✅ 23 найдено · 🔶 5 частично · ❌ 29 нет — EN-оригинал скачан: 38 из 57 — RU-перевод скачан: 9 из 28 — файлов: 60 (EN 42 / RU 18 / other 0)_
| # | Book | Author | RU edition | Files |
|---|------|--------|------------|-------|
@ -134,7 +136,8 @@ _57 items — ✅ 23 / 🔶 5 / ❌ 29 · файлов в секции: 60_
## 3. Myths & Fairy Tales
_68 items — ✅ 40 / 🔶 0 / ❌ 28 · файлов в секции: 155_
_68 книг (все NEW)_
_RU-издание: ✅ 40 найдено · 🔶 0 частично · ❌ 28 нет — EN-оригинал скачан: 55 из 68 — RU-перевод скачан: 28 из 40 — файлов: 155 (EN 92 / RU 50 / other 13)_
| # | Book | Author | RU edition | Files |
|---|------|--------|------------|-------|
@ -209,7 +212,8 @@ _68 items — ✅ 40 / 🔶 0 / ❌ 28 · файлов в секции: 155_
## 4. Pictures
_39 items — ✅ 12 / 🔶 1 / ❌ 26 · файлов в секции: 43_
_39 книг (все NEW)_
_RU-издание: ✅ 12 найдено · 🔶 1 частично · ❌ 26 нет — EN-оригинал скачан: 21 из 39 — RU-перевод скачан: 8 из 13 — файлов: 43 (EN 28 / RU 14 / other 1)_
| # | Book | Author | RU edition | Files |
|---|------|--------|------------|-------|
@ -255,7 +259,8 @@ _39 items — ✅ 12 / 🔶 1 / ❌ 26 · файлов в секции: 43_
## 5. Ethnology & Psychology
_29 items — ✅ 17 / 🔶 0 / ❌ 12 · файлов в секции: 37_
_29 книг (все NEW)_
_RU-издание: ✅ 17 найдено · 🔶 0 частично · ❌ 12 нет — EN-оригинал скачан: 18 из 29 — RU-перевод скачан: 7 из 17 — файлов: 37 (EN 25 / RU 7 / other 5)_
| # | Book | Author | RU edition | Files |
|---|------|--------|------------|-------|
@ -291,7 +296,8 @@ _29 items — ✅ 17 / 🔶 0 / ❌ 12 · файлов в секции: 37_
## 6. Religion & Psychology
_28 items — ✅ 19 / 🔶 1 / ❌ 8 · файлов в секции: 40_
_28 книг (все NEW)_
_RU-издание: ✅ 19 найдено · 🔶 1 частично · ❌ 8 нет — EN-оригинал скачан: 15 из 28 — RU-перевод скачан: 12 из 20 — файлов: 40 (EN 22 / RU 12 / other 6)_
| # | Book | Author | RU edition | Files |
|---|------|--------|------------|-------|
@ -326,7 +332,8 @@ _28 items — ✅ 19 / 🔶 1 / ❌ 8 · файлов в секции: 40_
## 7. Theory of Complexes & the Association Experiment
_27 items — ✅ 4 / 🔶 0 / ❌ 23 · файлов в секции: 21_
_27 книг (все NEW)_
_RU-издание: ✅ 4 найдено · 🔶 0 частично · ❌ 23 нет — EN-оригинал скачан: 16 из 27 — RU-перевод скачан: 1 из 4 — файлов: 21 (EN 19 / RU 1 / other 1)_
| # | Book | Author | RU edition | Files |
|---|------|--------|------------|-------|
@ -360,7 +367,8 @@ _27 items — ✅ 4 / 🔶 0 / ❌ 23 · файлов в секции: 21_
## 8. Developmental Psychology
_48 items — ✅ 20 / 🔶 1 / ❌ 27 · файлов в секции: 44_
_48 книг: 43 NEW + 5 cross-ref_
_RU-издание: ✅ 15 найдено · 🔶 1 частично · ❌ 27 нет — EN-оригинал скачан: 30 из 43 — RU-перевод скачан: 13 из 16 — файлов: 44 (EN 30 / RU 13 / other 1)_
| # | Book | Author | RU edition | Files |
|---|------|--------|------------|-------|
@ -415,7 +423,8 @@ _48 items — ✅ 20 / 🔶 1 / ❌ 27 · файлов в секции: 44_
## 9. Comparison of Psychodynamic Concepts
_38 items — ✅ 22 / 🔶 1 / ❌ 15 · файлов в секции: 43_
_38 книг: 20 NEW + 18 cross-ref_
_RU-издание: ✅ 11 найдено · 🔶 1 частично · ❌ 8 нет — EN-оригинал скачан: 20 из 20 — RU-перевод скачан: 10 из 12 — файлов: 43 (EN 27 / RU 16 / other 0)_
| # | Book | Author | RU edition | Files |
|---|------|--------|------------|-------|
@ -460,7 +469,8 @@ _38 items — ✅ 22 / 🔶 1 / ❌ 15 · файлов в секции: 43_
## 10. Psychopathology & Psychiatry
_37 items — ✅ 5 / 🔶 0 / ❌ 27 · файлов в секции: 30_
_37 книг: 32 NEW + 5 cross-ref_
_RU-издание: ✅ 5 найдено · 🔶 0 частично · ❌ 27 нет — EN-оригинал скачан: 20 из 32 — RU-перевод скачан: 3 из 5 — файлов: 30 (EN 24 / RU 6 / other 0)_
| # | Book | Author | RU edition | Files |
|---|------|--------|------------|-------|
@ -504,7 +514,8 @@ _37 items — ✅ 5 / 🔶 0 / ❌ 27 · файлов в секции: 30_
## 11. The Individuation Process
_22 items — ✅ 6 / 🔶 1 / ❌ 0 · файлов в секции: 10_
_22 книг: 7 NEW + 15 cross-ref_
_RU-издание: ✅ 6 найдено · 🔶 1 частично · ❌ 0 нет — EN-оригинал скачан: 4 из 7 — RU-перевод скачан: 3 из 7 — файлов: 10 (EN 6 / RU 4 / other 0)_
| # | Book | Author | RU edition | Files |
|---|------|--------|------------|-------|
@ -533,7 +544,8 @@ _22 items — ✅ 6 / 🔶 1 / ❌ 0 · файлов в секции: 10_
## 12. Practical Case
_35 items — ✅ 14 / 🔶 1 / ❌ 20 · файлов в секции: 35_
_35 книг: 23 NEW + 12 cross-ref_
_RU-издание: ✅ 6 найдено · 🔶 1 частично · ❌ 16 нет — EN-оригинал скачан: 17 из 23 — RU-перевод скачан: 7 из 7 — файлов: 35 (EN 27 / RU 7 / other 1)_
| # | Book | Author | RU edition | Files |
|---|------|--------|------------|-------|

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("|---|------|--------|------------|-------|")