From 5f54dfa57a6ee010b8a36e06d961230615d77251 Mon Sep 17 00:00:00 2001 From: Fr_Dae Date: Wed, 25 Oct 2023 00:02:16 +0200 Subject: [PATCH 1/5] add files --- Wikimedia-to-Markdown/Wiki2MD.py | 84 ++++++++++++++++++++++++++++++++ Wikimedia-to-Markdown/extract.sh | 34 +++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 Wikimedia-to-Markdown/Wiki2MD.py create mode 100755 Wikimedia-to-Markdown/extract.sh diff --git a/Wikimedia-to-Markdown/Wiki2MD.py b/Wikimedia-to-Markdown/Wiki2MD.py new file mode 100644 index 0000000..19a2767 --- /dev/null +++ b/Wikimedia-to-Markdown/Wiki2MD.py @@ -0,0 +1,84 @@ +# ecrit via Chat-GPT, conversion de wikicode vers MD par Fr_Dae pour Unionrolistes.fr / unitystation-fork +# CCBYNA +import re +import sys +import os + +def convert_wikicode_to_markdown(wikicode): + # Convertir les en-têtes + wikicode = re.sub(r'==(.*?)==', r'# \1', wikicode) + wikicode = re.sub(r'===(.*?)===', r'## \1', wikicode) + wikicode = re.sub(r'====(.*?)====', r'### \1', wikicode) + wikicode = re.sub(r'=====(.*?)=====', r'#### \1', wikicode) + wikicode = re.sub(r'======(.*?)======', r'##### \1', wikicode) + wikicode = re.sub(r'=======(.*?)=======', r'###### \1', wikicode) + + # Convertir les listes à puces + wikicode = re.sub(r'^\* ', r'* ', wikicode, flags=re.MULTILINE) + # Convertir les listes numérotées + wikicode = re.sub(r'^# ', r'1. ', wikicode, flags=re.MULTILINE) + + # Convertir les liens + wikicode = re.sub(r'\[\[([^\]]+?)\]\]', r'[\1](\1)', wikicode) + # Convertir les images + wikicode = re.sub(r'\[\[File:([^\]]+?)\]\]', r'![\1](\1)', wikicode) + # Convertir les liens internes + wikicode = re.sub(r'\[\[([^\]]+?)\]\]', r'[\1](\1)', wikicode) + # Convertir les liens internes personnalisés en balises de lien Markdown + wikicode = re.sub(r'\[\[([^|]+)\|([^]]+)\]\]', r'[\2](\1)', wikicode) + # Convertir les liens externes + wikicode = re.sub(r'\[([^\]]+?)\]', r'[\1]', wikicode) + # Convertir les citations + wikicode = re.sub(r'', r'[\1]', wikicode) + + # Convertir le gras + wikicode = re.sub(r"'''(.*?)'''", r'**\1**', wikicode) + # Convertir l'italique + wikicode = re.sub(r"''(.*?)''", r'*\1*', wikicode) + # Convertir le texte souligné en Markdown + wikicode = re.sub(r'(.*?)', r'__\1__', wikicode) + # Convertir le texte barré en Markdown + wikicode = re.sub(r'(.*?)|(.*?)', r'~~\1\2~~', wikicode) + + # Supprimer les balises de commentaires + wikicode = re.sub(r'', r'', wikicode) + # Convertir les balises de texte préformaté en balises de code Markdown + wikicode = re.sub(r'
(.*?)
', r'```\1```', wikicode) + + # Convertir les tables (exemples simples) + wikicode = re.sub(r'{|', r'\n| ', wikicode) + wikicode = re.sub(r'|}', r' |', wikicode) + wikicode = re.sub(r'|-', r'\n|', wikicode) + wikicode = re.sub(r'!', r'|', wikicode) + + return wikicode + +def convert_file(input_file, output_file): + try: + with open(input_file, 'r', encoding='utf-8') as file: + wikicode_text = file.read() + + markdown_text = convert_wikicode_to_markdown(wikicode_text) + + with open(output_file, 'w', encoding='utf-8') as file: + file.write(markdown_text) + + print(f"Conversion terminée. Fichier Markdown généré avec succès : {output_file}") + except FileNotFoundError: + print("Le fichier d'entrée n'a pas été trouvé.") + except Exception as e: + print(f"Une erreur s'est produite : {str(e)}") + +def convert_files_in_directory(input_directory, output_directory): + if not os.path.exists(output_directory): + os.makedirs(output_directory) + + for filename in os.listdir(input_directory): + if filename.endswith(".wiki"): + input_file = os.path.join(input_directory, filename) + output_file = os.path.join(output_directory, filename.replace(".wiki", ".md")) + + convert_file(input_file, output_file) + +if __name__ == "__main__": + main() diff --git a/Wikimedia-to-Markdown/extract.sh b/Wikimedia-to-Markdown/extract.sh new file mode 100755 index 0000000..295d060 --- /dev/null +++ b/Wikimedia-to-Markdown/extract.sh @@ -0,0 +1,34 @@ +## Extract.sh +#!/bin/bash + +# Demander à l'utilisateur l'URL de la page cible +read -p "Entrez l'URL de la page : " url + +# Télécharger le contenu de la page en utilisant wget +wget -q -O page.html "$url" + +# Extraire le code source de la page en utilisant sed +sed -n '/', '') + +# Enregistrer le code source dans le fichier résultat +output_filename = os.path.join(result_dir, title + ".wiki") +with open(output_filename, 'w', encoding='utf-8') as output_file: + output_file.write(wikicode) + +# Afficher un message de confirmation en jaune +print("\033[93mExtraction réussie. Le code source a été enregistré dans " + output_filename + ".\033[0m") diff --git a/Wikimedia-to-Markdown/extract.sh b/Wikimedia-to-Markdown/extract.sh index 295d060..5b2b951 100755 --- a/Wikimedia-to-Markdown/extract.sh +++ b/Wikimedia-to-Markdown/extract.sh @@ -1,12 +1,20 @@ ## Extract.sh #!/bin/bash +# Vérifier et créer le dossier Result s'il n'existe pas +result_dir="./Result" +mkdir -p "$result_dir" + # Demander à l'utilisateur l'URL de la page cible read -p "Entrez l'URL de la page : " url # Télécharger le contenu de la page en utilisant wget wget -q -O page.html "$url" +# Extraire le titre de la page en utilisant grep +title=$(grep -oP '.*?' page.html) +title=$(echo "$title" | sed -e 's///;s/- Unitystation<\/title>//;s/ /_/g') + # Extraire le code source de la page en utilisant sed sed -n '/<textarea/,/<\/textarea>/p' page.html > code_source.html @@ -14,21 +22,12 @@ sed -n '/<textarea/,/<\/textarea>/p' page.html > code_source.html sed -i 's/<textarea[^>]*>//g' code_source.html sed -i 's/<\/textarea>//g' code_source.html -# Demander à l'utilisateur de fournir le nom du fichier de sortie -read -p "Entrez le nom du fichier de sortie (avec l'extension .wikicode) : " output_filename - -# Renommer le fichier code_source.html en <nom>.wikicode -mv code_source.html "$output_filename" - -# Vérifier et créer le dossier Result s'il n'existe pas -result_dir="./Result" -mkdir -p "$result_dir" - -# Déplacer le fichier de sortie dans le dossier Result -mv "$output_filename" "$result_dir/$output_filename" +# Déplacer le fichier code_source.html dans le dossier Result +mv code_source.html "$result_dir/$title.wiki" +mv "$result_dir/View_source_for_"* "$result_dir/${0/View_source_for_/}" # Supprimer le fichier temporaire page.html rm page.html # Afficher un message de confirmation en jaune -echo -e "\e[33mExtraction réussie.\e[0m Le code source a été enregistré dans $result_dir/$output_filename." +echo -e "\e[33mExtraction réussie. Le code source a été enregistré dans $result_dir/$title.wiki.\e[0m" From 16e8bbfcffdd107c07234d2a63a1fc5f70d61425 Mon Sep 17 00:00:00 2001 From: Fr_Dae <dae.anthony@gmail.com> Date: Wed, 25 Oct 2023 01:02:03 +0200 Subject: [PATCH 4/5] delet sh --- Wikimedia-to-Markdown/extract.sh | 33 -------------------------------- 1 file changed, 33 deletions(-) delete mode 100755 Wikimedia-to-Markdown/extract.sh diff --git a/Wikimedia-to-Markdown/extract.sh b/Wikimedia-to-Markdown/extract.sh deleted file mode 100755 index 5b2b951..0000000 --- a/Wikimedia-to-Markdown/extract.sh +++ /dev/null @@ -1,33 +0,0 @@ -## Extract.sh -#!/bin/bash - -# Vérifier et créer le dossier Result s'il n'existe pas -result_dir="./Result" -mkdir -p "$result_dir" - -# Demander à l'utilisateur l'URL de la page cible -read -p "Entrez l'URL de la page : " url - -# Télécharger le contenu de la page en utilisant wget -wget -q -O page.html "$url" - -# Extraire le titre de la page en utilisant grep -title=$(grep -oP '<title>.*?' page.html) -title=$(echo "$title" | sed -e 's///;s/- Unitystation<\/title>//;s/ /_/g') - -# Extraire le code source de la page en utilisant sed -sed -n '/<textarea/,/<\/textarea>/p' page.html > code_source.html - -# Supprimer les balises <textarea> inutiles -sed -i 's/<textarea[^>]*>//g' code_source.html -sed -i 's/<\/textarea>//g' code_source.html - -# Déplacer le fichier code_source.html dans le dossier Result -mv code_source.html "$result_dir/$title.wiki" -mv "$result_dir/View_source_for_"* "$result_dir/${0/View_source_for_/}" - -# Supprimer le fichier temporaire page.html -rm page.html - -# Afficher un message de confirmation en jaune -echo -e "\e[33mExtraction réussie. Le code source a été enregistré dans $result_dir/$title.wiki.\e[0m" From d1e7ddc9c9e7c1ce3cfb6b9484a690683b2cdd1b Mon Sep 17 00:00:00 2001 From: Fr_Dae <dae.anthony@gmail.com> Date: Wed, 25 Oct 2023 01:36:48 +0200 Subject: [PATCH 5/5] wiki2md --- Wikimedia-to-Markdown/Wiki2MD.py | 56 +++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/Wikimedia-to-Markdown/Wiki2MD.py b/Wikimedia-to-Markdown/Wiki2MD.py index 19a2767..b19c635 100755 --- a/Wikimedia-to-Markdown/Wiki2MD.py +++ b/Wikimedia-to-Markdown/Wiki2MD.py @@ -3,20 +3,39 @@ import re import sys import os +import readline +def main(): + input_path = sys.argv[1] if len(sys.argv) > 1 else None + output_path = sys.argv[2] if len(sys.argv) > 2 else None + + if input_path is None: + input_path = input("\033[93mEntrez le chemin du fichier ou du dossier d'entrée : \033[0m") + + if not output_path: + output_path = input("\033[93mEntrez le chemin du dossier de sortie : \033[0m") + + if os.path.isfile(input_path): + convert_file(input_path, os.path.join(output_path, os.path.basename(input_path).replace(".wiki", ".md"))) + elif os.path.isdir(input_path): + convert_files_in_directory(input_path, output_path) + else: + print("Chemin d'entrée non valide.") + def convert_wikicode_to_markdown(wikicode): # Convertir les en-têtes - wikicode = re.sub(r'==(.*?)==', r'# \1', wikicode) - wikicode = re.sub(r'===(.*?)===', r'## \1', wikicode) - wikicode = re.sub(r'====(.*?)====', r'### \1', wikicode) - wikicode = re.sub(r'=====(.*?)=====', r'#### \1', wikicode) - wikicode = re.sub(r'======(.*?)======', r'##### \1', wikicode) - wikicode = re.sub(r'=======(.*?)=======', r'###### \1', wikicode) + wikicode = re.sub(r'=======(.*?)=======', r'###### \1', wikicode) + wikicode = re.sub(r'======(.*?)======', r'##### \1', wikicode) + wikicode = re.sub(r'=====(.*?)=====', r'#### \1', wikicode) + wikicode = re.sub(r'====(.*?)====', r'### \1', wikicode) + wikicode = re.sub(r'===(.*?)===', r'## \1', wikicode) + wikicode = re.sub(r'==(.*?)==', r'# \1', wikicode) + # Convertir les listes à puces wikicode = re.sub(r'^\* ', r'* ', wikicode, flags=re.MULTILINE) # Convertir les listes numérotées - wikicode = re.sub(r'^# ', r'1. ', wikicode, flags=re.MULTILINE) +# wikicode = re.sub(r'^# ', r'1. ', wikicode, flags=re.MULTILINE) # Convertir les liens wikicode = re.sub(r'\[\[([^\]]+?)\]\]', r'[\1](\1)', wikicode) @@ -45,11 +64,11 @@ def convert_wikicode_to_markdown(wikicode): # Convertir les balises de texte préformaté en balises de code Markdown wikicode = re.sub(r'<pre>(.*?)</pre>', r'```\1```', wikicode) - # Convertir les tables (exemples simples) - wikicode = re.sub(r'{|', r'\n| ', wikicode) - wikicode = re.sub(r'|}', r' |', wikicode) - wikicode = re.sub(r'|-', r'\n|', wikicode) - wikicode = re.sub(r'!', r'|', wikicode) +# # Convertir les tables (exemples simples) +# wikicode = re.sub(r'{|', r'\n| ', wikicode) +# wikicode = re.sub(r'|}', r' |', wikicode) +# wikicode = re.sub(r'|-', r'\n|', wikicode) +# wikicode = re.sub(r'!', r'|', wikicode) return wikicode @@ -57,7 +76,6 @@ def convert_file(input_file, output_file): try: with open(input_file, 'r', encoding='utf-8') as file: wikicode_text = file.read() - markdown_text = convert_wikicode_to_markdown(wikicode_text) with open(output_file, 'w', encoding='utf-8') as file: @@ -73,12 +91,12 @@ def convert_files_in_directory(input_directory, output_directory): if not os.path.exists(output_directory): os.makedirs(output_directory) - for filename in os.listdir(input_directory): - if filename.endswith(".wiki"): - input_file = os.path.join(input_directory, filename) - output_file = os.path.join(output_directory, filename.replace(".wiki", ".md")) - - convert_file(input_file, output_file) + for root, _, files in os.walk(input_directory): + for filename in files: + if filename.endswith(".wiki"): + input_file = os.path.join(root, filename) + output_file = os.path.join(output_directory, filename.replace(".wiki", ".md")) + convert_file(input_file, output_file) if __name__ == "__main__": main()