From 086287fad3c58195e424da58bd4dc3bbb6aa4c18 Mon Sep 17 00:00:00 2001 From: Tykayn Date: Thu, 14 Nov 2024 13:32:56 +0100 Subject: [PATCH] refacto --- README.md | 16 +- __pycache__/enrich_html.cpython-312.pyc | Bin 4438 -> 11122 bytes build_indexes.py | 200 +++++++-------- converters.sh | 37 +-- enrich_html.py | 109 ++++---- essais.html | 1 + gemini-capsules/tykayn_blog/coucou.gmi | 7 + gemini-capsules/tykayn_blog/index.gmi | 16 +- .../20241111235943-sketches_de_toulouse.gmi | 10 +- .../lang_fr/20241112000047-sketches_18.gmi | 6 +- .../lang_fr/20241112000537-kinktober_2023.gmi | 11 +- .../lang_fr/20241112000653-calin_yuri_ah.gmi | 13 +- ...2000757-conseils_de_pratique_du_dessin.gmi | 16 +- .../20241112000852-essais_en_cabine.gmi | 12 +- ...41112001001-la_fougue_dans_les_rideaux.gmi | 14 +- ...de_partage_des_sources_d_illustrations.gmi | 14 +- .../index.html | 11 +- .../tykayn_blog/coucou.html | 0 html-websites/tykayn_blog/index.html | 115 ++++++++- .../tykayn_blog/index_tykayn_blog.html | 0 index_cipherbliss_blog.gmi | 239 ------------------ .../20200718145450_tkblog_997_.org | 42 +-- sources/tykayn_blog/converted/a-propos.html | 174 ------------- sources/tykayn_blog/converted/accueil.html | 174 ------------- sources/tykayn_blog/converted/blogroll.html | 176 ------------- sources/tykayn_blog/converted/contact.html | 173 ------------- .../converted/footer-articles.html | 175 ------------- sources/tykayn_blog/converted/projets.html | 176 ------------- sources/tykayn_blog/{index.org => coucou.org} | 0 ...60925100118_tkblog_861_dotclear-s-parti.org | 0 ...842_tkblog_456_salut-patrick-xkcd-style.org | 0 .../20241112000047-sketches_18.org | 6 +- .../20241112000229-illus_mono_couleurs.org | 0 .../20241112000537-kinktober_2023.org | 6 +- .../20241112000653-calin_yuri_ah.org | 16 ++ ...12000757-conseils_de_pratique_du_dessin.org | 10 +- .../20241112000852-essais_en_cabine.org | 22 ++ ...241112001001-la_fougue_dans_les_rideaux.org | 19 ++ ..._de_partage_des_sources_d_illustrations.org | 32 +++ ...t_evaluer_la_ligne_politique_d_un_media.org | 0 .../20241111235943-sketches_de_toulouse.org | 7 +- .../lang_fr/20241112000653-calin_yuri_ah.org | 16 -- .../20241112000852-essais_en_cabine.org | 22 -- ...41112001001-la_fougue_dans_les_rideaux.org | 19 -- ...de_partage_des_sources_d_illustrations.org | 32 --- .../20200718145450_tkblog_997_.org | 42 +-- utils.py | 27 ++ website_config.py | 4 +- 48 files changed, 536 insertions(+), 1681 deletions(-) create mode 100644 essais.html create mode 100644 gemini-capsules/tykayn_blog/coucou.gmi rename sources/tykayn_blog/converted/index.html => html-websites/tykayn_blog/coucou.html (100%) delete mode 100644 html-websites/tykayn_blog/index_tykayn_blog.html delete mode 100644 index_cipherbliss_blog.gmi delete mode 100644 sources/tykayn_blog/converted/a-propos.html delete mode 100644 sources/tykayn_blog/converted/accueil.html delete mode 100644 sources/tykayn_blog/converted/blogroll.html delete mode 100644 sources/tykayn_blog/converted/contact.html delete mode 100644 sources/tykayn_blog/converted/footer-articles.html delete mode 100644 sources/tykayn_blog/converted/projets.html rename sources/tykayn_blog/{index.org => coucou.org} (100%) rename sources/tykayn_blog/{lang_fr => de_coté_2024}/20060925100118_tkblog_861_dotclear-s-parti.org (100%) rename sources/tykayn_blog/{lang_fr => de_coté_2024}/20100420192842_tkblog_456_salut-patrick-xkcd-style.org (100%) rename sources/tykayn_blog/{lang_fr => de_coté_2024}/20241112000047-sketches_18.org (50%) rename sources/tykayn_blog/{lang_fr => de_coté_2024}/20241112000229-illus_mono_couleurs.org (100%) rename sources/tykayn_blog/{lang_fr => de_coté_2024}/20241112000537-kinktober_2023.org (66%) create mode 100644 sources/tykayn_blog/de_coté_2024/20241112000653-calin_yuri_ah.org rename sources/tykayn_blog/{lang_fr => de_coté_2024}/20241112000757-conseils_de_pratique_du_dessin.org (73%) create mode 100644 sources/tykayn_blog/de_coté_2024/20241112000852-essais_en_cabine.org create mode 100644 sources/tykayn_blog/de_coté_2024/20241112001001-la_fougue_dans_les_rideaux.org create mode 100644 sources/tykayn_blog/de_coté_2024/20241112001055-dossier_de_partage_des_sources_d_illustrations.org rename sources/tykayn_blog/{lang_fr => de_coté_2024}/20241112001152-comment_evaluer_la_ligne_politique_d_un_media.org (100%) delete mode 100644 sources/tykayn_blog/lang_fr/20241112000653-calin_yuri_ah.org delete mode 100644 sources/tykayn_blog/lang_fr/20241112000852-essais_en_cabine.org delete mode 100644 sources/tykayn_blog/lang_fr/20241112001001-la_fougue_dans_les_rideaux.org delete mode 100644 sources/tykayn_blog/lang_fr/20241112001055-dossier_de_partage_des_sources_d_illustrations.org create mode 100644 utils.py diff --git a/README.md b/README.md index 5db62129..c9d29c2a 100644 --- a/README.md +++ b/README.md @@ -76,14 +76,18 @@ Pandoc, PandocGmi # Roadmap -- config par site web de son nom de domaine -- réécriture des liens internes -- réécriture des url des images vers le dossier courant -- réparer la génération de fichiers gmi -- template footer article: gestion article suivant et précédent -- conversion des liens avec nom de domaine si relatifs +- template footer article: gestion article suivant et précédent +- sérendipité + - pages de tags +- liste de N derniers articles sur l'accueil, 10 par défaut +- réécriture des liens internes + - conversion des liens avec nom de domaine si relatifs + - détection des ID org-roam pour réécrire les liens html + - réécriture des url des images vers le dossier courant # Fait +- génération de fichiers gmi +- config par site web de son nom de domaine - navigation sur les pages d'article - gestion des langues dans la source et la destination - gestion multi site et multi langue \ No newline at end of file diff --git a/__pycache__/enrich_html.cpython-312.pyc b/__pycache__/enrich_html.cpython-312.pyc index 95a2c4f3d76cfcdf7e7fa8c7ec19de91496e7248..214d0e0017c900888f71d82f2224ffcd521c08ba 100644 GIT binary patch literal 11122 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.+)\<\/h1\>$' + titre_niveau_1 = r'(.*?)' titre_niveau_2 = r'^\(.+)\<\/h2\>$' else: titre_niveau_1 = r'^\*+ (.+)$' titre_niveau_2 = r'^\*\*+ (.+)$' - - # Itérer sur les lignes du fichier for ligne in lignes: # Rechercher un titre de niveau 1 titre_niveau_1_match = re.match(titre_niveau_1, ligne) if titre_niveau_1_match: titre_niveau_1_texte = titre_niveau_1_match.group(1) - if titre_niveau_1_texte.lower() != "article" and titre_niveau_1_texte.lower() != "liens" : + if titre_niveau_1_texte.lower() != "article" and titre_niveau_1_texte.lower() != "liens": nom_article = titre_niveau_1_texte break else: @@ -62,18 +61,18 @@ def trouver_nom_article(fichier_org, format="html"): if titre_niveau_2_match: nom_article = titre_niveau_2_match.group(1) break - print(f"Nom de l'article : {nom_article}") - - return nom_article.replace(args.source+'_', '').replace('_', ' ') + # print(f"Nom de l'article : {nom_article}") + + return nom_article.replace(args.source + '_', '').replace('_', ' ') def find_year_and_slug(fichier): - fichier = fichier.replace('..','.') + fichier = fichier.replace('..', '.') # print(f" ------------ build_indexes: find in {fichier} -------------") - slug = fichier.replace('.gmi','') + slug = fichier.replace('.gmi', '') annee = '2024' - date_str= '2024-00-00' - date= '2024-00-00' + date_str = '2024-00-00' + date = '2024-00-00' match = re.match(regex_orgroam, fichier) if match: @@ -89,12 +88,12 @@ def find_year_and_slug(fichier): date = datetime.datetime.strptime(date_str, "%Y-%m-%d") else: date = datetime.datetime.strptime(date_str, "%Y%m%d%H%M%S") - date_string_replaced = str(date).replace(' 00:00:00','') - slug = fichier.replace('.gmi','') - slug = slug.replace(date_string_replaced,'') + date_string_replaced = str(date).replace(' 00:00:00', '') + slug = fichier.replace('.gmi', '') + slug = slug.replace(date_string_replaced, '') slug = enlever_premier_tiret_ou_underscore(slug) - - annee = str(date.year).replace(' 00:00:00','') + + annee = str(date.year).replace(' 00:00:00', '') # else: # print('ERREUR aucun slug trouvé') @@ -113,7 +112,6 @@ def enlever_premier_tiret_ou_underscore(chaîne): return chaîne - # création des dossiers intermédiaires s'il y en a # déplace le fichier dans le dossier spécifié def create_path_folders_and_move_file(path, file): @@ -121,15 +119,17 @@ def create_path_folders_and_move_file(path, file): shutil.move(file, path) + def get_files_list_of_folder(folder_path): - # Vérifie si le dossier existe + # Vérifie si le dossier existe if not os.path.exists(folder_path): - print(f" ------------ build_indexes: Erreur : Le dossier '{dossier_md}' n'existe pas.") + print(f" ------------ build_indexes: Erreur : Le dossier '{folder_path}' n'existe pas.") return - print('----------- get_files_list_of_folder: folder_path : ',folder_path) + # print('----------- get_files_list_of_folder: folder_path : ', 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) + 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: @@ -140,99 +140,87 @@ def get_files_list_of_folder(folder_path): # 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 -# Titre pour le fichier d'index - - -def empty_folder_content(path): - print("empty ", path) - # parcours tous les fichiers et sous-dossiers du dossier - # for filename in os.listdir(path): - # file_path = os.path.join(path, filename) - - # # supprime le fichier ou le sous-dossier - # if os.path.isfile(file_path): - # os.remove(file_path) - # else: - # shutil.rmtree(file_path) - - -def generer_index(dossier_source, fichier_index, titre_index): +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__)) - empty_folder_content(dossier_parent+'/html-websites/'+args.source+'/') - + # 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') - + + 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, fichier_index+'.gmi') - chemin_fichier_index_html = os.path.join(dossier_parent, '/'+fichier_index+'.html') - + 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') print('\n index html: ', chemin_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 = 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" contenu_index_html += "

Navigation

" for fichier in files_static: - print(" -------- fichier ",fichier) - link_html = fichier.replace('.gmi','.html') - link_org = fichier.replace('.gmi','.org') - contenu_index_gmi += f"=> {fichier}\n" - + # print(" -------- 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, 'org') + + if article_name: + contenu_index_gmi += f"=> {fichier} {article_name}\n" + else: + contenu_index_gmi += f"=> {fichier}\n" + if fichier != "index.gmi": - print(' -------- rechercher le nom de l article dans le fichier ') + # print(' -------- rechercher le nom de l article dans le fichier ') if use_article_file_for_name: article_name = link_html else: - file_path_org = os.path.join(dossier_parent,"sources",website_name, link_org) - print('-------------- trouver_nom_article ',file_path_org) - article_name=trouver_nom_article(file_path_org, 'org') - + article_name = trouver_nom_article(file_path_org, 'org') + if not article_name: article_name = link_html else: article_name = 'Index' - article_name = article_name.replace('_',' ') + article_name = article_name.replace('_', ' ') contenu_index_html += f"
{article_name}" # 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" - # contenu_index_html += "

Articles en Français

" - lang_folder="lang_fr/" - + 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) - - new_folder=f"{année}/{slug}" - new_folder_path_this_article = os.path.join(dossier_parent, 'html-websites/'+args.source+'/'+new_folder+'/') - contenu_index_gmi += f"=> {fichier}\n" - link_html = fichier.replace('..gmi','.html') - link_html = fichier.replace('.gmi','.html') + 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 - chemin_fichier_this_article = chemin_dossier_source+'/lang_fr/converted/'+link_html - - article_name=trouver_nom_article(chemin_fichier_this_article) + 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, 'org') if not article_name: - article_name=slug.replace('-', ' ') + article_name = slug.replace('-', ' ') - # contenu_index_html += f"
{link_html}" - contenu_index_html += f"
{année} {article_name}" + 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 + '/') - os.makedirs(os.path.dirname(new_folder_path_this_article), exist_ok=True) - # déplacer le fichier html dans le dossier slug, et le renommer en index.html ensuite pour ne pas modifier l'index du blog - shutil.copy(chemin_fichier_this_article, new_folder_path_this_article+'index.html') + # 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"
{année} {article_name}" + 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: + contenu_index_html += f"
{link_html}" # ---------------- pareil en anglais TODO # contenu_index_gmi += "\n# Articles in English\n-------------------------\n" @@ -240,29 +228,25 @@ def generer_index(dossier_source, fichier_index, titre_index): # lang_folder="lang_en/" # for fichier in files_en: # ---------------------------------------- - - print(contenu_index_gmi) - print('chemin_fichier_index_html' , dossier_parent+chemin_fichier_index_html) + print('chemin_fichier_index_html', chemin_fichier_index_html) print(' ') - with open(dossier_parent+chemin_fichier_index_html, 'w', encoding='utf-8') as file: - file.write(''+args.title+''+contenu_index_html+'') + 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.") - - - destination_html = dossier_parent+'/html-websites/'+args.source+'/' - shutil.copy(dossier_parent+chemin_fichier_index_html, destination_html) - shutil.copy(destination_html+chemin_fichier_index_html, destination_html+'index.html') - - + # É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.") - + 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, TITRE_INDEX) + generer_index(DOSSIER_SOURCE, FICHIER_INDEX) diff --git a/converters.sh b/converters.sh index a1300bcf..c6f010ce 100755 --- a/converters.sh +++ b/converters.sh @@ -92,13 +92,13 @@ generate_website() { cd templates convert_sources ../ - echo "----------- convert_sources : pages template $website_name converties" +# echo "----------- convert_sources : pages template $website_name converties" cd .. # traduction fr cd lang_fr convert_sources ../ - echo "----------- convert_sources :pages en français du site web $website_name converties" +# echo "----------- convert_sources :pages en français du site web $website_name converties" cd .. # traduction en @@ -133,10 +133,10 @@ convert_markdown_to_gmi() { - echo "----------- convert_markdown_to_gmi : $PWD" - echo "----------- convert_markdown_to_gmi : destination: $destination_gemini" +# echo "----------- convert_markdown_to_gmi : $PWD" +# echo "----------- convert_markdown_to_gmi : destination: $destination_gemini" - echo "----------- convert_markdown_to_gmi : fichiers markdown présents dans le dossier de base: " +# echo "----------- convert_markdown_to_gmi : fichiers markdown présents dans le dossier de base: " ls -l sources/$website_name/converted/*.md |wc @@ -146,7 +146,7 @@ convert_markdown_to_gmi() { # pages en for fichier in sources/$website_name/converted/*.md ; do if [ -f "$fichier" ]; then - echo "----------- convert_markdown_to_gmi : md2gemini : $destination_gemini : $fichier" +# echo "----------- convert_markdown_to_gmi : md2gemini : $destination_gemini : $fichier" md2gemini "$fichier" -w -d $destination_gemini/ fi done @@ -154,7 +154,7 @@ convert_markdown_to_gmi() { for fichier in sources/$website_name/lang_fr/converted/*.md ; do if [ -f "$fichier" ]; then - echo "----------- convert_markdown_to_gmi : md2gemini : $fichier" +# echo "----------- convert_markdown_to_gmi : md2gemini : $fichier" md2gemini "$fichier" -w -d sources/$website_name/lang_fr/converted/ fi done @@ -162,7 +162,7 @@ convert_markdown_to_gmi() { for fichier in sources/$website_name/lang_en/converted/*.md ; do if [ -f "$fichier" ]; then - echo "----------- convert_markdown_to_gmi : md2gemini : $fichier" +# echo "----------- convert_markdown_to_gmi : md2gemini : $fichier" md2gemini "$fichier" -w -d sources/$website_name/lang_fr/converted/ fi done @@ -183,7 +183,6 @@ convert_markdown_to_gmi() { # regrouper les types de fichiers générés bash sass_styles.sh -# ls -l $style_file # Boucle à travers la liste des sites Web for website_name in "${blogs_folders[@]}"; do @@ -192,28 +191,18 @@ for website_name in "${blogs_folders[@]}"; do convert_markdown_to_gmi $website_name - # création de l'index: + # création de l'index listant les articles pour le html et la capsule gemini: # prendre les fichiers markdown du dossier md/ , # et créer un index des fichiers situés dedans, rangés par nom de fichier décroissant, # sauver le tout dans un fichier index.gmi - python3 build_indexes.py $website_name "$website_name" + python3 build_indexes.py $website_name # déplacer les fichiers générés en html dans le dossier statique - - cp sources/$website_name/converted/*.html html-websites/$website_name/ - cp index_$website_name.html html-websites/$website_name/index.html -# cp sources/$website_name/templates/converted/*.html html-websites/$website_name/templates/ -# cp sources/$website_name/lang_en/converted/*.html html-websites/$website_name/lang_en/ + mv sources/$website_name/converted/*.html html-websites/$website_name/ - python3 enrich_html.py html-websites/$website_name -t $website_name --style $style_file + python3 enrich_html.py html-websites/$website_name --style $style_file - # # déplacer les fichirers gemini dans la capsule - cp index_$website_name.gmi gemini-capsules/$website_name/index.gmi - # cp sources/$website_name/converted/*.gmi gemini-capsules/$website_name/ -# cp sources/$website_name/lang_fr/converted/*.gmi gemini-capsules/$website_name/lang_fr/ -# cp sources/$website_name/lang_en/converted/*.gmi gemini-capsules/$website_name/lang_en/ - - # copy style + # copier le style dans le dossier html cp $style_file html-websites/$website_name/style.css done diff --git a/enrich_html.py b/enrich_html.py index 55bcd679..c204f103 100755 --- a/enrich_html.py +++ b/enrich_html.py @@ -1,36 +1,34 @@ #!/bin/python3 -import os import argparse +import os import re + from website_config import configs_sites parser = argparse.ArgumentParser(description="Générer un site Web à partir de fichiers HTML.") parser.add_argument("blog_name", help="Le chemin vers le dossier contenant les fichiers HTML.") -parser.add_argument("--title", "-t", default="Mon site Web", help="Le titre du site Web.") + parser.add_argument("--style", default="templates/style_general.css", help="Le chemin vers le fichier de style CSS.") args = parser.parse_args() # Style CSS minimaliste style_file = args.style -blog_name = args.blog_name.replace('html-websites/','') +blog_name = args.blog_name.replace('html-websites/', '') source_blog = f"sources/{blog_name}" header_content_path = f"{source_blog}/templates/converted/header_page.html" footer_content_path = f"{source_blog}/templates/converted/footer_page.html" static_page_path = f"{source_blog}/templates/html/static.html" - print('---------- blog name ', blog_name) -template_content = configs_sites[blog_name] +template_content = configs_sites[blog_name] -footer_content='' -after_article='' -# TODO add footer on every article -# with open(footer_content_path, "r") as f: -# footer_content = f.read() +after_article = '' -# TODO make these variables overrided by configuration of a source website -# variables du template de page +inline_the_css = False + + +# inline_the_css=True def extract_body_content(html_content): pattern = r']*?>(.*?)' @@ -40,41 +38,26 @@ def extract_body_content(html_content): else: return None + def remove_properties_section(text): pattern = r"

Article

.+?" replacement = "" return re.sub(pattern, replacement, text, flags=re.DOTALL) + def remove_article_head_properties_orgmode(text): pattern = r":PROPERTIES:.+?:END:" replacement = "" return re.sub(pattern, replacement, text, flags=re.DOTALL) + def remove_hint_html(text): pattern = r"

ceciestduhtml

" replacement = "" return re.sub(pattern, replacement, text, flags=re.DOTALL) - -def enrich_one_file(file, root_path): - - - print(' ----------- enrich_html: file:',os.path.join(root_path, file)) - css_content = "" - - inline_the_css=False - # inline_the_css=True - - print(' ----------- enrich_html: CSS inline: ',inline_the_css) - # Trouver le fichier entête - header_content='' - with open(os.path.join(root_path, file), "r") as f: - header_content = f.read() - # Ouvrir le fichier HTML en mode lecture - with open(os.path.join(root_path, file), "r") as f: - html_content = f.read() - +def enrich_one_file(html_content, partials={"header_page": "", "footer_content": ""}): # remove some parts html_content = remove_properties_section(html_content) html_content = remove_article_head_properties_orgmode(html_content) @@ -126,13 +109,15 @@ def enrich_one_file(file, root_path):

{template_content['BLOG_TITLE']}

{template_content['BLOG_SUBTITLE']}

+
+ +