2024-11-04 00:13:58 +01:00
import argparse
2024-11-05 01:14:45 +01:00
import datetime
2024-11-14 13:32:56 +01:00
import os
2024-11-05 23:06:54 +01:00
import shutil
2024-11-10 00:01:15 +01:00
2024-11-15 15:58:19 +01:00
from utils import *
2024-11-14 13:32:56 +01:00
from enrich_html import enrich_one_file
from website_config import configs_sites , global_config
2024-11-12 00:55:21 +01:00
2024-11-10 18:03:31 +01:00
# from enrich_html import static_page_path
2024-11-04 00:13:58 +01:00
# génère l'index gemini et html des articles rangés par langue
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. " )
args = parser . parse_args ( )
2024-11-02 18:30:04 +01:00
# Variables personnalisables
2024-11-14 13:32:56 +01:00
DOSSIER_SOURCE = ' sources/ ' + args . source # Nom du dossier contenant les fichiers Markdown
FICHIER_INDEX = ' index_ ' + args . source # Nom du fichier d'index à générer
2024-11-10 00:01:15 +01:00
TITRE_INDEX = f " "
2024-11-14 13:32:56 +01:00
source_files_extension = " org "
config_title = configs_sites [ args . source ] [ ' BLOG_TITLE ' ]
2024-11-04 00:13:58 +01:00
2024-11-14 13:32:56 +01:00
use_article_file_for_name = ( not global_config [ " slug_with_year " ] )
2024-11-10 18:03:31 +01:00
website_name = args . source
2024-11-11 01:25:10 +01:00
2024-11-10 15:58:11 +01:00
2024-11-04 00:13:58 +01:00
2024-11-05 01:14:45 +01:00
# transformer le nom du fichier orgmode en une création de dossier de l'année, et un sous dossier du nom du slug dans le nom de fichier, contenant un seul fichier d'index afin de faire de l'url rewrite en dur.
# le nom de fichier org commence par une date YYYY-MM-DD ou bien YYYYMMDDHHmmss, est suivie d'un slug, et finit par l'extension .org
2024-11-04 00:13:58 +01:00
2024-11-14 13:32:56 +01:00
def generer_index ( dossier_source , fichier_index ) :
2024-11-02 18:30:04 +01:00
# Chemin absolu du dossier parent (pour sauver le fichier d'index)
dossier_parent = os . path . dirname ( os . path . abspath ( __file__ ) )
2024-11-14 13:32:56 +01:00
2024-11-02 18:30:04 +01:00
# Chemin complet du dossier contenant les Markdown
2024-11-05 11:17:52 +01:00
chemin_dossier_source = os . path . join ( dossier_parent , dossier_source )
2024-11-14 13:32:56 +01:00
files_static = get_files_list_of_folder ( chemin_dossier_source + ' / ' )
files_fr = get_files_list_of_folder ( chemin_dossier_source + ' /lang_fr ' )
files_en = get_files_list_of_folder ( chemin_dossier_source + ' /lang_en ' )
2024-11-02 18:30:04 +01:00
# Chemin complet pour le fichier d'index
2024-11-14 13:32:56 +01:00
chemin_fichier_index_gemini = os . path . join ( dossier_parent , ' gemini-capsules ' , args . source , ' index.gmi ' )
chemin_fichier_index_html = os . path . join ( dossier_parent , ' html-websites ' , args . source , ' index.html ' )
2024-11-05 23:06:54 +01:00
print ( ' \n index html: ' , chemin_fichier_index_html )
2024-11-02 18:30:04 +01:00
# Génère le contenu du fichier d'index
2024-11-14 13:32:56 +01:00
contenu_index_gmi = f " { config_title } \n { ' - ' * len ( config_title ) } \n \n "
contenu_index_html = f " { config_title } \n { ' - ' * len ( config_title ) } \n \n "
2024-11-04 00:13:58 +01:00
contenu_index_gmi + = " \n # Navigation \n ------------------------- \n "
2024-11-14 13:32:56 +01:00
2024-11-04 00:13:58 +01:00
2024-11-05 23:06:54 +01:00
# ne préciser la langue français que si on a des articles en Anglais
if len ( files_en ) :
contenu_index_gmi + = " \n # Articles en Français \n ------------------------- \n "
2024-11-14 13:32:56 +01:00
lang_folder = " lang_fr/ "
2024-11-11 00:02:50 +01:00
# ----------- indexer les articles en Français ------------------
2024-11-04 00:13:58 +01:00
for fichier in files_fr :
2024-11-05 01:14:45 +01:00
date_string , année , slug = find_year_and_slug ( fichier )
2024-11-11 00:02:50 +01:00
2024-11-04 00:13:58 +01:00
contenu_index_gmi + = f " => { fichier } \n "
2024-11-14 13:32:56 +01:00
link_html = fichier . replace ( ' .gmi ' , ' .html ' )
chemin_fichier_this_article_html = chemin_dossier_source + ' /lang_fr/converted/ ' + link_html
chemin_fichier_this_article_html = chemin_dossier_source + ' /lang_fr/converted/ ' + link_html
2024-11-11 00:02:50 +01:00
2024-11-14 13:32:56 +01:00
link_org = fichier . replace ( ' .gmi ' , ' .org ' )
file_path_org = os . path . join ( dossier_parent , " sources " , website_name , lang_folder , link_org )
2024-11-15 15:58:19 +01:00
article_name = trouver_nom_article ( file_path_org , args . source , ' org ' )
2024-11-11 00:02:50 +01:00
if not article_name :
2024-11-14 13:32:56 +01:00
article_name = slug . replace ( ' - ' , ' ' )
if global_config [ " slug_with_year " ] :
new_folder = f " { année } / { slug } "
new_folder_path_this_article = os . path . join ( dossier_parent ,
' html-websites/ ' + args . source + ' / ' + new_folder + ' / ' )
# déplacer le fichier html dans le dossier slug,
# et le renommer en index.html ensuite pour ne pas modifier l'index du blog
2024-11-15 01:45:11 +01:00
contenu_index_html + = f " <br/><a href=/ { année } / { slug } > { année } { article_name } </a> "
2024-11-14 13:32:56 +01:00
os . makedirs ( os . path . dirname ( new_folder_path_this_article ) , exist_ok = True )
shutil . copy ( chemin_fichier_this_article_html , new_folder_path_this_article + ' index.html ' )
else :
2024-11-15 01:45:11 +01:00
contenu_index_html + = f " <br/><a href=/ { lang_folder } / { link_html } > { link_html } </a> "
2024-11-11 00:02:50 +01:00
2024-11-14 16:22:34 +01:00
contenu_index_html + = " <hr/> "
contenu_index_html + = " <h1>Navigation</h1> "
for fichier in files_static :
2024-11-15 15:58:19 +01:00
mylog ( " -------- fichier " , fichier )
2024-11-14 16:22:34 +01:00
link_html = fichier . replace ( ' .gmi ' , ' .html ' )
link_org = fichier . replace ( ' .gmi ' , ' .org ' )
file_path_org = os . path . join ( dossier_parent , " sources " , website_name , link_org )
2024-11-15 15:58:19 +01:00
article_name = trouver_nom_article ( file_path_org , args . source , ' org ' )
2024-11-14 16:22:34 +01:00
if article_name :
contenu_index_gmi + = f " => { fichier } { article_name } \n "
else :
contenu_index_gmi + = f " => { fichier } \n "
if fichier != " index.gmi " :
2024-11-15 15:58:19 +01:00
mylog ( ' -------- rechercher le nom de l article dans le fichier ' )
2024-11-14 16:22:34 +01:00
if use_article_file_for_name :
article_name = link_html
else :
2024-11-15 15:58:19 +01:00
article_name = trouver_nom_article ( file_path_org , args . source , ' org ' )
2024-11-14 16:22:34 +01:00
if not article_name :
article_name = link_html
else :
article_name = ' Index '
article_name = article_name . replace ( ' _ ' , ' ' )
2024-11-15 01:45:11 +01:00
contenu_index_html + = f " <br/><a href=/ { link_html } > { article_name } </a> "
2024-11-10 18:43:38 +01:00
# ---------------- pareil en anglais TODO
2024-11-05 11:17:52 +01:00
# contenu_index_gmi += "\n# Articles in English\n-------------------------\n"
# contenu_index_html += "<h1>Articles in English</h1>"
2024-11-08 17:40:06 +01:00
# lang_folder="lang_en/"
2024-11-05 11:17:52 +01:00
# for fichier in files_en:
2024-11-10 18:43:38 +01:00
# ----------------------------------------
2024-11-08 18:05:08 +01:00
2024-11-14 13:32:56 +01:00
print ( ' chemin_fichier_index_html ' , chemin_fichier_index_html )
2024-11-08 18:05:08 +01:00
print ( ' ' )
2024-11-14 13:32:56 +01:00
with open ( chemin_fichier_index_html , ' w ' , encoding = ' utf-8 ' ) as file :
print ( ' contenu_index_html ' , contenu_index_html )
contenu_index_html = enrich_one_file ( contenu_index_html )
file . write ( contenu_index_html )
2024-11-10 00:01:15 +01:00
print ( f " ------------ build_indexes: Fichier d ' index ' { chemin_fichier_index_html } ' généré avec succès. " )
2024-11-14 13:32:56 +01:00
2024-11-02 18:30:04 +01:00
# Écrit le contenu dans le fichier d'index
try :
2024-11-08 18:05:08 +01:00
with open ( chemin_fichier_index_gemini , ' w ' , encoding = ' utf-8 ' ) as file :
file . write ( contenu_index_gmi )
2024-11-14 13:32:56 +01:00
print (
f " ------------ build_indexes: Fichier d ' index gemini ' { chemin_fichier_index_gemini } ' généré avec succès. " )
2024-11-02 18:30:04 +01:00
except OSError as e :
2024-11-10 00:01:15 +01:00
print ( f " ------------ build_indexes: Erreur lors de l ' écriture du fichier d ' index : { e } " )
2024-11-02 18:30:04 +01:00
2024-11-14 13:32:56 +01:00
2024-11-02 18:30:04 +01:00
if __name__ == " __main__ " :
2024-11-14 13:32:56 +01:00
generer_index ( DOSSIER_SOURCE , FICHIER_INDEX )