litos13planetes/X_main.py
Max HeadRoom 41cefd5846 Add X_main.py
funcional bucle while x50  a PDF
2025-03-11 18:54:52 +00:00

112 lines
4.4 KiB
Python

#
# (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 <tspan>
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 <tspan>, parem
# DESA el nou fitxer svg
tree.write(nom_nou, encoding="utf-8", xml_declaration=True)
print(f"PERFECTE: arxiu DESAT COM ---> {nom_nou}")