feat: freeform palier 4 - derives de tokens, shapes, alpha, rotation, full_bleed (C6)
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
patch_render_engine_c6b.py — Finition C6 (ombres parasites des shapes)
|
||||
======================================================================
|
||||
Les blocs freeform « shape » (add_shape) portent un élément <p:style>
|
||||
implicite que LibreOffice/PowerPoint interprètent avec une ombre par
|
||||
défaut — shadow.inherit=False ne suffit pas. Ce patch retire l'élément
|
||||
de style à la création : rendu strictement plat, conforme à la charte.
|
||||
|
||||
Usage (dossier du pipeline, single-line) :
|
||||
python3 patch_render_engine_c6b.py
|
||||
Prérequis : C6 appliqué. Vérifie l'ancre, écrit .bak-c6b, compile,
|
||||
idempotent.
|
||||
"""
|
||||
|
||||
import py_compile
|
||||
import shutil
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
TARGET = Path("render_engine_v2.py")
|
||||
|
||||
PATCHES = [
|
||||
(
|
||||
' sh.line.fill.background()\n'
|
||||
' sh.shadow.inherit = False\n'
|
||||
' if blk.get("text"):\n',
|
||||
' sh.line.fill.background()\n'
|
||||
' sh.shadow.inherit = False\n'
|
||||
' _st = sh._element.find(qn("p:style"))\n'
|
||||
' if _st is not None: # style implicite = '
|
||||
'ombre\n'
|
||||
' sh._element.remove(_st)\n'
|
||||
' if blk.get("text"):\n',
|
||||
),
|
||||
(
|
||||
' if blk.get("dash"):\n'
|
||||
' sh.line.dash_style = MSO_LINE.DASH\n'
|
||||
' sh.shadow.inherit = False\n'
|
||||
' sh = None # pas de décoration fill sur '
|
||||
'ligne\n',
|
||||
' if blk.get("dash"):\n'
|
||||
' sh.line.dash_style = MSO_LINE.DASH\n'
|
||||
' sh.shadow.inherit = False\n'
|
||||
' _st = sh._element.find(qn("p:style"))\n'
|
||||
' if _st is not None:\n'
|
||||
' sh._element.remove(_st)\n'
|
||||
' sh = None # pas de décoration fill sur '
|
||||
'ligne\n',
|
||||
),
|
||||
]
|
||||
|
||||
MARKER = 'sh._element.remove(_st)'
|
||||
|
||||
|
||||
def fail(msg):
|
||||
print(" ! %s" % msg)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def main():
|
||||
if not TARGET.exists():
|
||||
fail("%s introuvable — lancer depuis le dossier du pipeline."
|
||||
% TARGET)
|
||||
content = TARGET.read_text(encoding="utf-8")
|
||||
if MARKER in content:
|
||||
fail("Déjà patché — rien à faire.")
|
||||
for i, (old, _) in enumerate(PATCHES, 1):
|
||||
n = content.count(old)
|
||||
if n == 0:
|
||||
fail("Ancre %d introuvable — le patch C6 est-il appliqué ?"
|
||||
% i)
|
||||
if n > 1:
|
||||
fail("Ancre %d non unique (%d occurrences)." % (i, n))
|
||||
|
||||
shutil.copy2(TARGET, str(TARGET) + ".bak-c6b")
|
||||
for old, new in PATCHES:
|
||||
content = content.replace(old, new)
|
||||
TARGET.write_text(content, encoding="utf-8")
|
||||
print(" + Style implicite retiré des shapes et lignes freeform.")
|
||||
try:
|
||||
py_compile.compile(str(TARGET), doraise=True)
|
||||
print(" + Compilation OK.")
|
||||
except py_compile.PyCompileError as e:
|
||||
shutil.copy2(str(TARGET) + ".bak-c6b", TARGET)
|
||||
fail("Erreur de compilation — fichier restauré :\n%s" % e)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user