88 lines
3.9 KiB
Python
Executable File
88 lines
3.9 KiB
Python
Executable File
import os
|
|
import argparse
|
|
# génère l'index gemini et html des articles rangés par langue
|
|
|
|
# Définition des arguments de la ligne de commande
|
|
parser = argparse.ArgumentParser(description="Générer un site Web à partir de fichiers HTML.")
|
|
parser.add_argument("source", help="Le chemin vers le dossier contenant les fichiers HTML.")
|
|
parser.add_argument("title", default="Mon site Web", help="Le titre du site Web.")
|
|
args = parser.parse_args()
|
|
|
|
# Variables personnalisables
|
|
DOSSIER_MD = 'sources/'+args.source # Nom du dossier contenant les fichiers Markdown
|
|
FICHIER_INDEX = 'index_'+args.source # Nom du fichier d'index à générer
|
|
TITRE_INDEX = f" # {args.title} - Articles"
|
|
source_files_extension="org"
|
|
|
|
|
|
def get_files_list_of_folder(folder_path):
|
|
# Vérifie si le dossier existe
|
|
if not os.path.exists(folder_path):
|
|
print(f"Erreur : Le dossier '{dossier_md}' n'existe pas.")
|
|
return
|
|
print('source ',folder_path)
|
|
# Liste les fichiers articles, trie par nom décroissant
|
|
try:
|
|
fichiers_md = sorted([f.replace(source_files_extension, '.gmi') for f in os.listdir(folder_path) if f.endswith(source_files_extension)], reverse=True)
|
|
print('fichiers trouvés:', len(fichiers_md))
|
|
return fichiers_md
|
|
except OSError as e:
|
|
print(f"Erreur lors de la lecture du dossier : {e}")
|
|
return
|
|
|
|
|
|
|
|
# Titre pour le fichier d'index
|
|
|
|
def generer_index(dossier_md, fichier_index, titre_index):
|
|
# Chemin absolu du dossier parent (pour sauver le fichier d'index)
|
|
dossier_parent = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
# Chemin complet du dossier contenant les Markdown
|
|
chemin_dossier_md = os.path.join(dossier_parent, dossier_md)
|
|
|
|
files_static = get_files_list_of_folder(chemin_dossier_md+'/')
|
|
files_fr = get_files_list_of_folder(chemin_dossier_md+'/lang_fr')
|
|
files_en = get_files_list_of_folder(chemin_dossier_md+'/lang_en')
|
|
|
|
# Chemin complet pour le fichier d'index
|
|
chemin_fichier_index_gemini = os.path.join(dossier_parent, fichier_index+'.gmi')
|
|
chemin_fichier_index_html = os.path.join(dossier_parent, fichier_index+'.html')
|
|
|
|
# Génère le contenu du fichier d'index
|
|
contenu_index_gmi = f"{titre_index}\n{'- ' * len(titre_index)}\n\n"
|
|
contenu_index_html = f"{titre_index}\n{'- ' * len(titre_index)}\n\n"
|
|
|
|
contenu_index_gmi += "\n# Navigation\n-------------------------\n"
|
|
for fichier in files_static:
|
|
contenu_index_gmi += f"=> {fichier}\n"
|
|
link_html = fichier.replace('..gmi','.html')
|
|
contenu_index_html += f"<br><a href=/{link_html}>{link_html}</a>"
|
|
|
|
contenu_index_gmi += "\n# Articles en Français\n-------------------------\n"
|
|
for fichier in files_fr:
|
|
contenu_index_gmi += f"=> {fichier}\n"
|
|
link_html = fichier.replace('..gmi','.html')
|
|
contenu_index_html += f"<br><a href=/{link_html}>{link_html}</a>"
|
|
|
|
contenu_index_gmi += "\n# Articles in English\n-------------------------\n"
|
|
for fichier in files_en:
|
|
contenu_index_gmi += f"=> {fichier}\n"
|
|
link_html = fichier.replace('..gmi','.html')
|
|
contenu_index_html += f"<br><a href=/{link_html}>{link_html}</a>"
|
|
|
|
# Écrit le contenu dans le fichier d'index
|
|
try:
|
|
with open(chemin_fichier_index_gemini, 'w', encoding='utf-8') as file:
|
|
file.write(contenu_index_gmi)
|
|
print(f"Fichier d'index '{chemin_fichier_index_html}' généré avec succès.")
|
|
|
|
with open(chemin_fichier_index_gemini, 'w', encoding='utf-8') as file:
|
|
file.write('<html><head><title>'+args.title+'</title></head><body>'+contenu_index_html+'</article></body></html>')
|
|
print(f"Fichier d'index '{chemin_fichier_index_html}' généré avec succès.")
|
|
except OSError as e:
|
|
print(f"Erreur lors de l'écriture du fichier d'index : {e}")
|
|
|
|
if __name__ == "__main__":
|
|
generer_index(DOSSIER_MD, FICHIER_INDEX, TITRE_INDEX)
|