algo/pour enfants/apply_edits.py
2026-03-15 02:05:55 +01:00

248 lines
18 KiB
Python

# -*- coding: utf-8 -*-
"""Apply editorial edits to livre_enfant.md (v0.5 -> v0.6)"""
import re
APO = r"['\u2019]" # apostrophe flexible
with open("livre_enfant.md", "r", encoding="utf-8") as f:
c = f.read()
edits = []
# Ch.1: already done in previous run
# Ch.2: already has "Il pouvait fabriquer un chemin" - skip
# Ch.4: Barnabé ondulation + moins fatigué
old4a = "Barnabé détendit progressivement sa prise et posa une ventouse sur la liane la plus proche."
new4a = "Barnabé se mit à onduler au même rythme que les lianes, comme s'il dansait avec le vent. Il détendit progressivement sa prise et posa une ventouse sur la liane la plus proche."
if new4a not in c and old4a in c:
c = c.replace(old4a, new4a)
edits.append("Ch4a OK")
elif new4a in c:
edits.append("Ch4a skip (done)")
else:
edits.append("Ch4a FAIL")
old4b = "Arrivé au centre de la colline, il s'arrêta un instant. Le vent continuait de circuler, mais il n'éprouvait plus la même instabilité."
new4b = "Arrivé au centre de la colline, il s'arrêta un instant. Il se sentait moins fatigué dès qu'il suivait le rythme. Le vent continuait de circuler, mais il n'éprouvait plus la même instabilité."
if "moins fatigué dès qu'il suivait le rythme" not in c and old4b in c:
c = c.replace(old4b, new4b)
edits.append("Ch4b OK")
elif "moins fatigué" in c:
edits.append("Ch4b skip")
else:
edits.append("Ch4b FAIL")
# Ch.5: métaphore cahier + adoucir inquiétude
old5a = "— Le sol se charge trop vite. Si tout reste, plus rien ne circule. On efface pour que le sol reste lisible. Mais quand on nous en demande trop, on fatigue."
new5a = "— Le sol se charge trop vite, comme un cahier trop plein. Si tout reste, plus rien ne circule. On efface pour que le sol reste lisible. Mais quand on nous en demande trop, on fatigue."
if "cahier trop plein" not in c and old5a in c:
c = c.replace(old5a, new5a)
edits.append("Ch5a OK")
else:
edits.append("Ch5a skip/fail")
old5b = "Il eut un mouvement d'inquiétude."
new5b = "Une inquiétude le traversa."
if "mouvement d'inquiétude" in c:
c = c.replace(old5b, new5b)
edits.append("Ch5b OK")
else:
edits.append("Ch5b skip")
# Ch.6: "Pour la première fois" + simplifier "Nous apprenons" + Barnabé adhérence
old6a = "— Nous apprenons la surface qui tient."
new6a = "— Nous copions ce qui tient."
if "Nous apprenons la surface qui tient" in c:
c = c.replace(old6a, new6a)
edits.append("Ch6a OK")
else:
edits.append("Ch6a skip")
old6b = "Éon posa la main contre le tronc le plus proche, sentant les irrégularités sous ses doigts, puis regarda Barnabé qui conservait encore l'aspect de l'écorce. Il orienta ses doigts sur les creux de l'écorce ; la prise s'améliora aussitôt."
new6b = "Éon posa la main contre le tronc le plus proche, sentant les irrégularités sous ses doigts, puis regarda Barnabé qui conservait encore l'aspect de l'écorce. Il orienta ses doigts sur les creux de l'écorce ; la prise s'améliora aussitôt. Pour la première fois, Éon comprit que son propre corps pouvait apprendre à tenir."
if "Pour la première fois, Éon comprit que son propre corps" not in c and old6b in c:
c = c.replace(old6b, new6b)
edits.append("Ch6b OK")
elif "son propre corps pouvait apprendre" in c:
edits.append("Ch6b skip")
else:
edits.append("Ch6b FAIL")
# Ch.7: fusionner deux premiers paragraphes + expliciter cumul
old7 = "En avançant plus loin dans le bois, le sol changea à nouveau. La terre n'était plus molle comme dans la cuvette ni lisse comme les lignes de verre ; sous ses pas, il sentait des couches superposées, compactées par des passages répétés. Il marcha quelques minutes avant de distinguer un mouvement lent entre les troncs. De grandes silhouettes se déplaçaient avec régularité, chacune laissant derrière elle une fine poudre claire. Là où elles passaient, le sol tenait mieux."
new7 = "En avançant plus loin dans le bois, le sol changea à nouveau. La terre n'était plus molle comme dans la cuvette ni lisse comme les lignes de verre ; sous ses pas, il sentait des couches superposées. De grandes silhouettes se déplaçaient avec régularité entre les troncs, chacune laissant derrière elle une fine poudre claire. La poussière venait des passages répétés ; plus on empruntait le même chemin, plus il se consolidait. Là où elles passaient, le sol tenait mieux."
if "La poussière venait des passages répétés" not in c and "Il marcha quelques minutes avant de distinguer" in c:
c = c.replace(
"En avançant plus loin dans le bois, le sol changea à nouveau. La terre n'était plus molle comme dans la cuvette ni lisse comme les lignes de verre ; sous ses pas, il sentait des couches superposées, compactées par des passages répétés. Il marcha quelques minutes avant de distinguer un mouvement lent entre les troncs. De grandes silhouettes se déplaçaient avec régularité, chacune laissant derrière elle une fine poudre claire. Là où elles passaient, le sol tenait mieux.",
new7
)
edits.append("Ch7 OK")
else:
edits.append("Ch7 skip/fail")
# Ch.8: ajouts + condenser
old8a = "Éon fit quelques pas. Lorsqu'il suivait l'orientation de la poussée, son corps avançait plus facilement ; en changeant d'axe, la résistance augmentait et sa marche devenait plus lente."
new8a = "Pour la première fois, l'espace lui-même lui disait quelle direction prendre. Éon fit quelques pas. Lorsqu'il suivait l'orientation de la poussée, son corps avançait plus facilement ; en changeant d'axe, la résistance augmentait et sa marche devenait plus lente."
if "l'espace lui-même lui disait quelle direction" not in c and "Éon fit quelques pas. Lorsqu'il suivait l'orientation" in c:
c = c.replace(
"Éon fit quelques pas. Lorsqu'il suivait l'orientation de la poussée, son corps avançait plus facilement ; en changeant d'axe, la résistance augmentait et sa marche devenait plus lente.",
new8a
)
edits.append("Ch8a OK")
else:
edits.append("Ch8a skip")
old8b = "En quittant la zone rocheuse, Éon se sentit plus attentif à la manière dont l'espace lui-même orientait les choix."
new8b = "En quittant la zone rocheuse, Éon avait appris à sentir les trajets qui coûtaient trop cher."
if "trajets qui coûtaient trop cher" not in c and old8b in c:
c = c.replace(old8b, new8b)
edits.append("Ch8b OK")
else:
edits.append("Ch8b skip")
# Ch.9: fusionner les deux chutes en une
old9 = "Un peu plus loin, Barnabé avait tenu trois secondes sur une plaque plus claire ; Éon s'y engagea en confiance. La terre céda d'un coup. Il s'enfonça jusqu'au mollet et dut s'agripper au bord pour se dégager. Barnabé se fixa sur un point dur et étendit deux bras vers lui. Éon reprit son souffle. Plus loin, voulant aller plus vite, il posa le pied sans vérifier. La terre s'affaissa brusquement ; il s'enfonça jusqu'à la cuisse et resta coincé."
new9 = "Un peu plus loin, Barnabé avait tenu trois secondes sur une plaque plus claire ; Éon s'y engagea en confiance. La terre céda d'un coup. Il s'enfonça jusqu'à la cuisse et resta coincé. Barnabé avait bondi vers une plaque solide à quelques pas. Éon tendit le bras ; trop loin. Son cœur cogna. Il appela. Barnabé revint en glissant sur la terre molle, posa une ventouse sur le bord du trou, puis une autre, et tendit deux bras. Éon s'agrippa. La traction fut lente ; la terre résistait. Quand il sortit enfin, il resta assis un moment, le souffle court."
if "jusqu'au mollet" in c and "jusqu'à la cuisse" in c:
# Replace the whole block
c = c.replace(
"Un peu plus loin, Barnabé avait tenu trois secondes sur une plaque plus claire ; Éon s'y engagea en confiance. La terre céda d'un coup. Il s'enfonça jusqu'au mollet et dut s'agripper au bord pour se dégager. Barnabé se fixa sur un point dur et étendit deux bras vers lui. Éon reprit son souffle. Plus loin, voulant aller plus vite, il posa le pied sans vérifier. La terre s'affaissa brusquement ; il s'enfonça jusqu'à la cuisse et resta coincé. Barnabé avait bondi vers une plaque solide à quelques pas. Éon tendit le bras ; trop loin. Son cœur cogna. Il appela. Barnabé revint en glissant sur la terre molle, posa une ventouse sur le bord du trou, puis une autre, et tendit deux bras. Éon s'agrippa. La traction fut lente ; la terre résistait. Quand il sortit enfin, il resta assis un moment, le souffle court. Barnabé se recolla à son poignet sans tapoter.",
new9 + " Barnabé se recolla à son poignet sans tapoter."
)
edits.append("Ch9 OK")
else:
edits.append("Ch9 skip/fail")
# Ch.9 bis: Barnabé crispa + reconnaissance silhouette
old9b_a = "Un pas lourd fit craquer une branche derrière lui. Éon se retourna. Une silhouette rouge sortit des arbres — l'une de celles qui lissaient les traces dans la vallée — et s'arrêta à quelques pas. Le souffle d'Éon se bloqua. La même forme. Ici."
new9b_a = "Un pas lourd fit craquer une branche derrière lui. Éon se retourna. Une silhouette rouge sortit des arbres et s'arrêta à quelques pas. Barnabé se crispa si fort qu'Éon sentit ses ventouses traverser le tissu. C'était la même que celle de la vallée efface. Le souffle d'Éon se bloqua."
if "Barnabé se crispa si fort" not in c and "Une silhouette rouge sortit des arbres" in c:
c = c.replace(
"Un pas lourd fit craquer une branche derrière lui. Éon se retourna. Une silhouette rouge sortit des arbres — l'une de celles qui lissaient les traces dans la vallée — et s'arrêta à quelques pas. Le souffle d'Éon se bloqua. La même forme. Ici.",
new9b_a
)
edits.append("Ch9bis OK")
else:
edits.append("Ch9bis skip")
# Ch.10: trois tours + phrase centre
old10a = "Éon décida d'expérimenter. Il fit quelques pas autour de la pierre en gardant toujours la même distance. Le mouvement circulaire s'accordait avec sa trajectoire et il revenait régulièrement à son point de départ. Il répéta ce tour plusieurs fois."
new10a = "Éon décida d'expérimenter. Il fit trois tours autour de la pierre, comme pour remercier le centre, en gardant toujours la même distance. Le mouvement circulaire s'accordait avec sa trajectoire et il revenait régulièrement à son point de départ. Revenir au centre l'aidait à ne pas se perdre. Il répéta ce tour plusieurs fois."
if "comme pour remercier le centre" not in c and "Il fit quelques pas autour de la pierre" in c:
c = c.replace(
"Éon décida d'expérimenter. Il fit quelques pas autour de la pierre en gardant toujours la même distance. Le mouvement circulaire s'accordait avec sa trajectoire et il revenait régulièrement à son point de départ. Il répéta ce tour plusieurs fois.",
new10a
)
edits.append("Ch10 OK")
else:
edits.append("Ch10 skip")
# Ch.11: joli vs utile
old11 = "Il observa alors les reflets autour de lui avec plus de distance. Certains disparaissaient rapidement, d'autres restaient visibles mais ne modifiaient pas la structure du lieu."
new11 = "Il observa alors les reflets autour de lui avec plus de distance. Certains étaient jolis mais trompeurs ; d'autres, moins brillants, restaient utiles pour avancer."
if "jolis mais trompeurs" not in c and "Certains disparaissaient rapidement" in c:
c = c.replace(old11, new11)
edits.append("Ch11 OK")
else:
edits.append("Ch11 skip")
# Ch.12: simplifier armure invisible
old12 = "L'air ne crépitait pas seulement, il devenait dur contre sa peau, comme si le son tissait une armure invisible."
new12 = "L'air ne crépitait pas seulement, il devenait dur contre sa peau, comme si le bruit devenait dur."
if "armure invisible" in c:
c = c.replace(old12, new12)
edits.append("Ch12 OK")
else:
edits.append("Ch12 skip")
# Ch.13: lien horaires/classe
old13 = "— Les points où les fils se rejoignent, ce sont eux qui comptent. Si celui-ci lâche, dit-elle calmement, plusieurs lignes perdent leur direction."
new13 = "— Les points où les fils se rejoignent, ce sont eux qui comptent. Certains points comptent plus que d'autres — comme les horaires à l'école, ou l'heure de la sonnerie. Si celui-ci lâche, dit-elle calmement, plusieurs lignes perdent leur direction."
if "Certains points comptent plus" not in c and "Les points où les fils se rejoignent" in c:
c = c.replace(old13, new13)
edits.append("Ch13 OK")
else:
edits.append("Ch13 skip")
# Ch.13 bis: trône vide + centre passages
old13b_a = "Au sommet, il trouva une forme creusée dans une racine géante, un creux lisse, poli par le frottement de milliers de pas et de corps. Le creux avait la taille d'un siège, et sa stabilité était immédiate : en posant la main dessus, le creux resta presque immobile."
new13b_a = "Au sommet, il trouva une forme creusée dans une racine géante, un creux lisse, poli par le frottement de milliers de pas et de corps. Le creux avait la taille d'un siège. Le trône était vide parce qu'il appartenait à tout le monde. En posant la main dessus, le creux resta presque immobile."
if "Le trône était vide" not in c and "Au sommet, il trouva une forme creusée" in c:
c = c.replace(
"Au sommet, il trouva une forme creusée dans une racine géante, un creux lisse, poli par le frottement de milliers de pas et de corps. Le creux avait la taille d'un siège, et sa stabilité était immédiate : en posant la main dessus, le creux resta presque immobile.",
new13b_a
)
edits.append("Ch13bis_a OK")
else:
edits.append("Ch13bis_a skip")
old13b_b = "Depuis ce point, les directions se dessinaient par l'usage, par le fait que certaines voies étaient prises plus souvent, donc devenaient plus faciles à reprendre. Le centre servait à répartir et à relier."
new13b_b = "Depuis ce point, les directions se dessinaient par l'usage. Le centre servait aux passages, pas à commander."
if "pas à commander" not in c and old13b_b in c:
c = c.replace(old13b_b, new13b_b)
edits.append("Ch13bis_b OK")
else:
edits.append("Ch13bis_b skip")
# Ch.14: KRUOIN sonnait comme la forêt
old14 = "Le mot n'évoquait rien de familier. Il le répéta à voix basse — « Kruoin » — pour en fixer le son, puis releva la tête."
new14 = "Le mot n'évoquait rien de familier, mais il sonnait comme la forêt elle-même. Il le répéta à voix basse — « Kruoin » — pour en fixer le son, puis releva la tête."
if "sonnait comme la forêt" not in c and "Le mot n'évoquait rien de familier" in c:
c = c.replace(old14, new14)
edits.append("Ch14 OK")
else:
edits.append("Ch14 skip")
# Ch.15: Chaque objet racine + un jour je
old15a = "Chacun représentait une étape, une règle comprise, un geste appris."
new15a = "Chaque objet était une racine qu'il avait gardée."
if "Chaque objet était une racine" not in c and "Chacun représentait une étape" in c:
c = c.replace(old15a, new15a)
edits.append("Ch15a OK")
else:
edits.append("Ch15a skip")
old15b = "Éon observa la régularité de son pas. La charge ne ralentissait pas la silhouette ; elle faisait partie de son équilibre. Il reprit son propre rythme."
new15b = "Éon observa la régularité de son pas. La charge ne ralentissait pas la silhouette ; elle faisait partie de son équilibre. Un jour, je porterai comme ça, pensa-t-il. Il reprit son propre rythme."
if "Un jour, je porterai" not in c and "Éon observa la régularité de son pas" in c:
c = c.replace(old15b, new15b)
edits.append("Ch15b OK")
else:
edits.append("Ch15b skip")
# Ch.16: Éon sourit, Barnabé tapote, KRUOIN, écho Flou
old16a = "Éon posa deux doigts sur le bord net du trottoir, là où la pierre faisait un angle sûr. Il inspira, puis reprit sa marche."
new16a = "Éon sourit et posa deux doigts sur le bord net du trottoir, là où la pierre faisait un angle sûr. Barnabé tapota une dernière fois sous la manche. Il inspira, puis reprit sa marche."
if "Éon sourit et posa deux doigts" not in c and "Éon posa deux doigts sur le bord net" in c:
c = c.replace(old16a, new16a)
edits.append("Ch16a OK")
else:
edits.append("Ch16a skip")
old16b = "Il repensa au mot sur le mur, KRUOIN, puis à la plaque dans la rue, KRU_IN. Les gestes qu'il avait faits depuis — les traces, les nœuds, les quatre marques — lui donnaient maintenant une façon de tenir les choses à leur place."
new16b = "Il repensa au mot sur le mur, KRUOIN, puis à la plaque dans la rue, KRU_IN. Les gestes qu'il avait faits depuis — les traces, les nœuds, les quatre marques — lui donnaient maintenant une façon de tenir les choses à leur place. Il écrivit KRUOIN en haut de la page, correctement, lettre après lettre."
if "Il écrivit KRUOIN en haut" not in c and "Il repensa au mot sur le mur" in c:
c = c.replace(old16b, new16b)
edits.append("Ch16b OK")
else:
edits.append("Ch16b skip")
old16c = "À la fin de l'exercice, il releva la tête. La cloche résonna. Barnabé tapota une fois sous la manche. Éon rangea son crayon, ferma le cahier, et posa deux doigts sur le bord de la table. Le sol tint."
new16c = "À la fin de l'exercice, il releva la tête. La cloche résonna. Barnabé tapota une fois sous la manche. Éon rangea son crayon, ferma le cahier, et posa deux doigts sur le bord de la table. Le sol tint. Ici aussi, ça aurait pu trembler, mais il avait appris à chercher un point qui tient."
if "Ici aussi, ça aurait pu trembler" not in c and "Le sol tint." in c and "À la fin de l'exercice" in c:
c = c.replace(old16c, new16c)
edits.append("Ch16c OK")
else:
edits.append("Ch16c skip")
# Version
c = c.replace("Version: v0.5", "Version: v0.6")
edits.append("Version v0.6")
with open("livre_enfant.md", "w", encoding="utf-8") as f:
f.write(c)
for e in edits:
print(e)