You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
3.0 KiB

#!/usr/bin/env python3
"""
Script per ripulire le traduzioni da intestazioni ripetute, piè di pagina e numeri di pagina.
"""
import re
import sys
import os
from pathlib import Path
def clean_translation(content):
"""
Rimuove intestazioni ripetute, numeri di pagina e elementi paratestuali.
Args:
content: il contenuto del file da pulire
Returns:
contenuto pulito
"""
lines = content.split('\n')
cleaned_lines = []
skip_next_empty = False
for i, line in enumerate(lines):
# Salta intestazioni ripetute "### La Liberazione del Mondo"
if line.strip() == "### La Liberazione del Mondo":
skip_next_empty = True
continue
# Salta numeri di pagina standalone
if line.strip().isdigit():
skip_next_empty = True
continue
# Salta righe vuote subito dopo elementi rimossi
if skip_next_empty and line.strip() == "":
skip_next_empty = False
continue
skip_next_empty = False
cleaned_lines.append(line)
# Rimuovi righe vuote multiple consecutive alla fine di paragrafi
result = '\n'.join(cleaned_lines)
# Rimuovi spazi multipli consecutivi
result = re.sub(r'\n\n\n+', '\n\n', result)
# Assicurati che il file termini con una sola newline
result = result.rstrip() + '\n'
return result
def clean_file(file_path):
"""
Pulisce un singolo file di traduzione.
Args:
file_path: path del file da pulire
"""
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
cleaned = clean_translation(content)
# Salva solo se ci sono modifiche
if cleaned != content:
with open(file_path, 'w', encoding='utf-8') as f:
f.write(cleaned)
print(f"✓ Pulito: {file_path}")
return True
else:
print(f"○ Già pulito: {file_path}")
return False
def clean_directory(directory):
"""
Pulisce tutti i file .md in una directory.
Args:
directory: path della directory contenente i file da pulire
"""
files = sorted(Path(directory).glob("*.md"))
if not files:
print(f"Nessun file .md trovato in {directory}")
return
print(f"\nTrovati {len(files)} file da verificare:\n")
modified_count = 0
for file_path in files:
if clean_file(str(file_path)):
modified_count += 1
print(f"\n{'='*60}")
print(f"File modificati: {modified_count}/{len(files)}")
print(f"{'='*60}\n")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Uso: python clean_translations.py <directory>")
print("Esempio: python clean_translations.py 'The World set Free_chapter02_IT'")
sys.exit(1)
directory = sys.argv[1]
if not os.path.exists(directory):
print(f"Errore: Directory {directory} non trovata")
sys.exit(1)
clean_directory(directory)