From 41cefd5846c63ffc8e5086ae15a441621d0211d1 Mon Sep 17 00:00:00 2001 From: Max HeadRoom Date: Tue, 11 Mar 2025 18:54:52 +0000 Subject: [PATCH] Add X_main.py funcional bucle while x50 a PDF --- X_main.py | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 X_main.py diff --git a/X_main.py b/X_main.py new file mode 100644 index 0000000..f97b925 --- /dev/null +++ b/X_main.py @@ -0,0 +1,111 @@ +# +# (entorn_A3) GNUstavo:~/codi/targeta_visita$ for i in {1..50}; do python3 X_main.py && sleep 3 ; done +# # inspirat en targeta de visita del carlos + # +# # NOM del Programa: LITOS 13 Planetes .PY + # + # WEB dissenyador https://carlosmxercavinsportafoli.wordpress.com/sobre-mi/ +# +# ALGO AIXÍ, +# PROGRAMA QUE sobre catifa de caràcters base64 (emulant el clàssic joc de la sopa de lletres) +# AGAFA strings per pantalla o fitxer per defecte +# 3 VARIABLES: HOST, e-correu, telefon +# 13 paraules_clau, sintagmes que sintetitzin allò que hi vulguis camuflar, més base64? ;) +# +# buscar a la carpeta on s'executa una template.svg creada prèviament en InkScape després de posar text ràndom (README.md per a exemples, etc) +# +# escupir la template modificada_YYYYMMDD_.svg +# + +import argparse +import os +import random +import datetime +import shutil +import xml.etree.ElementTree as ET + +# definir aguments de línia de comandes +parser = argparse.ArgumentParser(description="transforma svg de template substituint variables i camuflant strings") +parser.add_argument("-t", "--template", type=str, default="template_base64.svg", help="necessites plantilla d'svg") +parser.add_argument("-p", "--pile", type=str, default="cadenes_usuari.txt", help="txt on poses paraules_clau, sintagmes, etc") +args = parser.parse_args() + +# el fitxer de pila de paraules +cadenes_fitxer = args.pile +cadenes_usuari = [] +if os.path.exists(cadenes_fitxer): + with open(cadenes_fitxer, "r", encoding="utf-8") as f: + cadenes_usuari = [line.strip().replace(" ", "_") for line in f.readlines() if line.strip()] + if len(cadenes_usuari) == 16: + print(f"carregades correctament 16 cadenes des de '{cadenes_fitxer}' MAKING MOVIES !!!!") + host, correu, telefon, *resta_cadenes = cadenes_usuari + cadenes_usuari = resta_cadenes + else: + print(f"'{cadenes_fitxer}' existeix, PERÒ només té {len(cadenes_usuari)} vàlides: es demanaran interactivament les cadenes que falten") + +# si no hi ha 16 línies vàlides, demana les cadenes manualment +while len(cadenes_usuari) < 13: + entrada = input(f"POSA / proporciona 2nDsy+_Paraula_Clau_+B1biB {len(cadenes_usuari) + 1}/13: ").strip().replace(" ", "_") + if entrada: + cadenes_usuari.append(entrada) + +# dades bàsiques complementàries si no s'han obtingut del fitxer +if len(cadenes_usuari) < 13: + host = input("quin nom de HOST ").strip().replace(" ", "_") + correu = input("quin correu de contacte ").strip().replace(" ", "_") + telefon = input("quin telèfon ").strip().replace(" ", "_") + +# test si el fitxer de plantilla existeix +if not os.path.exists(args.template): + print(f"ERROR -- no s'ha trobat arxiu de plantilla '{args.template}'") + exit(1) + +# crear marca de temps per al nom del nou fitxer +now = datetime.datetime.now() +nom_nou = f"{now.strftime('%H%M%S_%Y%m%d')}_{os.path.basename(args.template).replace('.svg', '_modificada.svg')}" +shutil.copy(args.template, nom_nou) + +# processar el fitxer SVG +tree = ET.parse(nom_nou) +root = tree.getroot() + +# localitzar etiquetes +tspans = root.findall(".//{http://www.w3.org/2000/svg}tspan") + +# CANVIAR la primera línia HOST / e-correu +if len(tspans) > 0: + text_inicial = tspans[0].text + if text_inicial: + tspans[0].text = text_inicial.replace("{HOST}", host).replace("{e-correu}", correu) + +# INSERT a la segona línia : telèfon +if len(tspans) > 1: + text_segona = tspans[1].text if tspans[1].text else "" + tspans[1].text = text_segona.replace("{telefon}", telefon) + +# INSERT la resta de paraules en les següents línies +index_tspan = 2 # INIT - -- INSERT a partir de la tercera línia +for cadena in cadenes_usuari: + if index_tspan < len(tspans): + text_actual = tspans[index_tspan].text if tspans[index_tspan].text else "" + max_posicio = min(48 - len(cadena), len(text_actual)) # ajust caràcters INSERT x encaixar + if max_posicio < 1: + continue + posicio = random.randint(1, max_posicio) + + # dividir el text actual en tres parts: abans, la inserció, després + text_abans = text_actual[:posicio] + text_despres = text_actual[posicio:] + + # inserir la +_cadena_+ al MIG + tspans[index_tspan].text = text_abans + f'+_{cadena}_+' + text_despres + + index_tspan += 1 + else: + break # si no hi ha més , parem + +# DESA el nou fitxer svg +tree.write(nom_nou, encoding="utf-8", xml_declaration=True) + +print(f"PERFECTE: arxiu DESAT COM ---> {nom_nou}") +