145 lines
6.7 KiB
Python
Executable File
145 lines
6.7 KiB
Python
Executable File
import argparse
|
|
|
|
from enrich_html import enrich_one_file
|
|
from utils import *
|
|
from website_config import configs_sites, global_config
|
|
|
|
# from enrich_html import static_page_path
|
|
# 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()
|
|
|
|
# Variables personnalisables
|
|
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
|
|
TITRE_INDEX = f""
|
|
source_files_extension = "org"
|
|
|
|
config_title = configs_sites[args.source]['BLOG_TITLE']
|
|
|
|
use_article_file_for_name = (not global_config["slug_with_year"])
|
|
website_name = args.source
|
|
|
|
|
|
# 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
|
|
|
|
def generer_index(dossier_source, fichier_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_source = os.path.join(dossier_parent, dossier_source)
|
|
|
|
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')
|
|
|
|
# Chemin complet pour le fichier d'index
|
|
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')
|
|
contenu_index_html = ''
|
|
print('\n index html: ', chemin_fichier_index_html)
|
|
# Génère le contenu du fichier d'index
|
|
contenu_index_gmi = f"{config_title}\n{'- ' * len(config_title)}\n\n"
|
|
# contenu_index_html = f"{config_title}\n{'- ' * len(config_title)}\n\n"
|
|
|
|
contenu_index_gmi += "\n# Navigation\n-------------------------\n"
|
|
|
|
# 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"
|
|
lang_folder = "lang_fr/"
|
|
|
|
# ----------- indexer les articles en Français ------------------
|
|
for fichier in files_fr:
|
|
# date_string, année, slug = find_year_and_slug(fichier)
|
|
|
|
contenu_index_gmi += f"=> {fichier}\n"
|
|
link_html = fichier.replace('.gmi', '.html')
|
|
chemin_fichier_this_article_html = chemin_dossier_source + '/lang_fr/converted/' + link_html
|
|
|
|
link_org = fichier.replace('.gmi', '.org')
|
|
file_path_org = os.path.join(dossier_parent, "sources", website_name, lang_folder, link_org)
|
|
article_name = trouver_nom_article(file_path_org, args.source, 'org')
|
|
|
|
basename_file = os.path.basename(file_path_org)
|
|
date_str, annee, slug = find_year_and_slug_on_filename(basename_file)
|
|
|
|
article_relative_url=f"/{annee}/{slug}/"
|
|
if not article_name:
|
|
article_name = basename_file.replace('-', ' ')
|
|
|
|
if global_config["slug_with_year"]:
|
|
new_folder_path_this_article = os.path.join(dossier_parent, f"html-websites/{args.source}/{article_relative_url}/")
|
|
new_folder_path_this_article = new_folder_path_this_article.replace('//','/')
|
|
|
|
print("article_relative_url",article_relative_url)
|
|
# déplacer le fichier html dans le dossier slug,
|
|
# et le renommer en index.html ensuite pour ne pas modifier l'index du blog
|
|
contenu_index_html += f"<br/><a href={article_relative_url}>{annee} - {article_name}</a>"
|
|
mylog(" -------- créer le dossier de l article ", new_folder_path_this_article)
|
|
os.makedirs(os.path.dirname(new_folder_path_this_article), exist_ok=True)
|
|
mylog('chemin_fichier_this_article_html',chemin_fichier_this_article_html)
|
|
shutil.copy2(chemin_fichier_this_article_html, new_folder_path_this_article + 'index.html')
|
|
else:
|
|
contenu_index_html += f"<br/><a href=/{lang_folder}/{link_html}>{link_html}</a>"
|
|
|
|
contenu_index_html += "<hr/>"
|
|
contenu_index_html += "<h1>Navigation</h1>"
|
|
for fichier in files_static:
|
|
mylog(" -------- fichier ", fichier)
|
|
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)
|
|
article_name = trouver_nom_article(file_path_org, args.source, 'org')
|
|
|
|
if article_name:
|
|
contenu_index_gmi += f"=> {fichier} {article_name}\n"
|
|
else:
|
|
contenu_index_gmi += f"=> {fichier}\n"
|
|
|
|
if fichier != "index.gmi":
|
|
mylog(' -------- rechercher le nom de l article dans le fichier ')
|
|
if use_article_file_for_name:
|
|
article_name = link_html
|
|
else:
|
|
article_name = trouver_nom_article(file_path_org, args.source, 'org')
|
|
|
|
if not article_name:
|
|
article_name = link_html
|
|
else:
|
|
article_name = 'Index'
|
|
article_name = article_name.replace('_', ' ')
|
|
contenu_index_html += f"<br/><a href=/{link_html}>{article_name}</a>"
|
|
# ---------------- pareil en anglais TODO
|
|
# contenu_index_gmi += "\n# Articles in English\n-------------------------\n"
|
|
# contenu_index_html += "<h1>Articles in English</h1>"
|
|
# lang_folder="lang_en/"
|
|
# for fichier in files_en:
|
|
# ----------------------------------------
|
|
|
|
print('chemin_fichier_index_html', chemin_fichier_index_html)
|
|
print(' ')
|
|
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)
|
|
print(f" ------------ build_indexes: Fichier d'index '{chemin_fichier_index_html}' généré avec succès.")
|
|
|
|
# É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" ------------ build_indexes: Fichier d'index gemini '{chemin_fichier_index_gemini}' généré avec succès.")
|
|
|
|
except OSError as e:
|
|
print(f" ------------ build_indexes: Erreur lors de l'écriture du fichier d'index : {e}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
generer_index(DOSSIER_SOURCE, FICHIER_INDEX)
|