Auto-éditer un wikilivre/Auto-référencer
Codes shell pour créer la page « Annexe » d'un wikilivre
modifierPour des examens approfondis il est possible d'accéder à ces modules d'origine dans le chapitre déroulable Nouveautés, section 3.1 : Programmes_d'évaluations_et_de_tests.
Cliquer sur l'historique de chaque module pour visualiser les codes correspondants aux dates des évaluations et des tests.
--------
- Pourquoi avoir choisi le shell bash ?
- Les codes shells sont les plus proches du code machine, ils sont donc ultra-rapides, même sur de très vieux micro-ordinateurs, ils sont disponibles pour tous les systèmes d'exploitation, gratuits, efficaces, parfois difficiles à mettre en œuvre ou à comprendre car les règles sont strictes et les différentes versions diffèrent quelque peu selon que l'on choisit les versions posix[1] ou gnu ou autres shells : csh, tcsh, ksh, etc.
- Synopsis de ce projet
- Examiner le projet en préétude, avec le LivreTest
Ce projet doit permettre de créer la page Annexe des livres de wikilivres, avec :
- Les références.
- La liste des articles avec le lien, la licence associée, ainsi que les noms des contributeurs.
- La liste des illustrations avec le lien, la licence associée, ainsi que les noms des auteurs.
- La licence de la page principale ou de sa version imprimable.
- Outils de programmation
- Le shell BASH : Le programme sera écrit en code bash (Bourne again shell) ou Bourne_shell(bsh ou sh), sous linux de préférence. Il existe des versions de bash pour d'autres systèmes d'exploitation[2].
- Le système d'exploitation : Préférez Ubuntu pour avoir un accès direct aux paquets de mkd et ses applications dérivées, par le serveur sécurisé launchpad
- Le logiciel mkd : extracteur de documents. Il est recommandé de l'installer dès que possible. [3].
- En complément de mkd, le shell mkddocu extracteur de documents écrit en bash. Avec l'option -s il extrait toutes les chaînes de caractères pré-encodées pour les traductions avec gettext.
- Directives de programmation
- Les modules du programme devront être indépendants et éprouvés séparément avant d'être intégrés dans le programme principal. Pour ce faire on écrira un module d'entête header.sh qui servira aux tests de chaque module. Ce module d'entête fonctionnera comme les module "include" des langages C, c++ etc. Ce sera le fichier d'entête de chaque module inclus avec la commande shell source. Exemple : source header.sh
- Utiliser les codes d'extraction suivants pour les logiciels de documentation
#H pour les commentaires d'entête. On va les retrouver dans toutes les commandes du projet #O pour les commentaires d'organigramme. #P pour les commentaires destinés aux Programmeurs. #S pour les commentaires de structure. #T pour les commentaire de tests, ce sont souvent des points d'arrêt pour la mise au point. #w pour des commentaires d'attention, de mise en garde.
- Internationalisation des messages
- Tous le messages affichés avec la commande echo devront être traduits en anglais, langue de base pour les traductions, puis intégrés dans le programme final. Un fichier .pot sera créé pour les messages puis traduits à l'aide de Poedit et compilés sous forme de fichier .mo copiés dans les répertoires de traduction habituels.
- Internationalisation des manuels
- Un manuel man(1) unix sera écrit en français puis traduit en anglais.
- Un manuel html sera écrit en français et en anglais pour être lus à l'aide de navigateurs internet.
- Références
modifier cette description du projet
Entête des modules
modifier- (header)
- Documentation
Le fichier de commandes header.sh doit être inclus dans tous les modules de test du programme principal. Il initialise le répertoire des commandes, le répertoire de travail du projet; le projet est le nom du livre, de l'article ou de la page. Si ils n'existent pas ils seront créés Ce projet éducatif et de tests est destiné à être utilisé sous wikilivres en langue française et en caractères UTF8. Les variables Site et SitePrefix se rapportent à "fr.wikibooks.org". Le programme est prévu pour fonctionner à l'initiative du contributeur qui qui doit copier la page "Contenus" ou la page de la compilation dans le répertoire de travail "~/Annexe/<nom du livre>" Les modules en tests sont indépendants, cependant ils doivent être exécutés dans l'ordre ./header.sh <livre>, ./lister <livre>, ./télécharger <livre> ./ajouter_sclt <livre>, ./ajouter_sclic, ./ajouter_sclip <livre> La liste des pages à analyser est indispensable dans tous les modules en tests. L'absence de la liste des pages à analyser est signalée à chaque lancement des modules du programme principal "Annexer"
AVERTISSEMENT : Ce programme avec ses modules doit être utilisé par des wikipédiens, à titre personnel. La structure du résultat est voisine de l'impression par PediaPress. Pour cette raison ce programme n'est pas commercialisable.
- Organigramme
2:#P Nom du fichier de commandes : header ou header.sh 3:#P Syntaxe : ".header.sh <nom du livre>" 4:#P Exemple : "./header.sh LivreTest" à la console pour les essais. 5:#P Ce fichier d'entête est commun aux fichiers de commandes annexer, lister, 6:#P télécharger, ajouter_sclt, ajouter_sclip dans lesquels ils sont inclus. 7:#P Date de création : 24 mars 2020 8:#P Modifié le : 14 mai 2020 par GC ajout des "données_de_conversions" url->utf8 9:#P Modifié le : 16 mai 2020 par GC maj de la nouvelle syntaxe de la commande. 10:#P Version sur WikiLivres le : 17 mai 2020 11:#P 34:#P Note : L'extraction de la documentation peut se faire par la commande : 35:#P Documentation : 36:#P mkd -Stw D header.sh <livre>_doc/header.sh.D.doc 37:#P grep -e '#D' header.sh | sed s/#D//g > <livre>_doc/header.sh.HPw.doc 38:#P Organigrammes : 39:#P grep -e -n '#H' -e '#P' -e '#w' header.sh 40:#P ou : grep -E "#H|#P|#w" header.sh > <livre>_doc/header.sh.HPw.doc 41:#P Exemples : 42:#P mkd -Stw D header.sh LivreTest_doc/header.sh.D.doc 43:#P grep -e '#D' header.sh | sed s/#D//g > LivreTest_doc/header.sh.D.doc 44:#P grep -n -E "#H|#P|#w" header.sh > LivreTest_doc/header.sh.HPw.doc 45:#P 47:#H vider (nettoyer) l'écran. 54:#H tester la présence du répertoire racine des commandes, si il n'existe pas, 55:#H le créer. 65:#H initialiser la variable Conversion avec le lien vers le fichier 66:#H données_de_conversion 69:#H si le programme de test de header.sh est actif, alors supprimer le fichier 70:#H 'données_de_conversions' 77:#H tester la présence du fichier des 'données_de_conversion', si il n'existe 78:#H pas; le créer. 121:#H créer la fonction header_syntax. 126: #w seulement avec la commande 'Annexer' 127: #w echo "ou $0 <livre> [-v] [-pb||-pc]" 128: #w echo "options -v:mode bavard, -pb ou -pc:versions personnalisées Wikibooks ou Commons." 132:#H tester la présence du premier paramètre de la ligne de commandes 146: exit 0 #P exit 0 : Fin d'affichage de la syntaxe 150:#H initialiser la variable "Projet" = répertoire de projet. 156:#H tester la présence du répertoire du projet, si il n'existe pas, le créer. 165:#H initialiser les variables 'Site' (nom du serveur) et 'SitePrefix'. 169:#H nettoyer l'écran, afficher les variables globales et le contenu du répertoire de projet. 198:#H entrer dans la répertoire de travail.
Code header.sh
- Référence de l'article pour cette section
- Version du 25 mai 2020
- Version actualisée
header.inc.sh
modifier- Ce code est à transcrire dans le répertoire ~/Annexer/tests/header.inc.sh et ne doit pas être exécutable.
- Lorsque le code est éprouvé, le transcrire dans le répertoire ~/Annexer/src
- Le code header.inc validé peut être transcrit dans le répertoire ~/Annexer/bin et ne doit pas être exécutable, le code doit être inclus dans un programme appelant par la commande 'source ~/Annexer/bin/header.inc'
- Notez que ce code a été testé et peut être copié dans le répertoire des sources sans subir de tests préablables.
#! /bin/bash
# VERSION=200623
VERSION=210505
#H Nom du fichier de commandes : header.sh ou header.inc.sh (30 mai 2020)
#H Syntaxe : "./header.inc.sh <nom du livre>"
#H Exemple : "./header.inc.sh LivreTest" à la console pour les essais.
#H Ce fichier d'entête est commun aux fichiers de commandes annexer, lister,
#H télécharger, ajouter_sclt, ajouter_sclip dans lesquels ils sont inclus.
#H Date de création : 24 mars 2020
#H Modifié le : 14 mai 2020 par GC ajout des "données_de_conversions" url->utf8
#H Modifié le : 16 mai 2020 par GC maj de la nouvelle syntaxe de la commande.
#H Modifié le : 30 mai 2020 par GC maj pour l'installation automatique.
#H Modifié le 04 mai 2021 par JPL suppression des caractères ';' en fin de ligne
#H Modifié le 05 mai 2021 par JPL modification de la structure des répertoires
#H Version sur WikiLivres le : 17 mai 2020
#H
#D Le fichier de commandes header.sh doit être inclus dans tous les modules
#D de test du programme principal. Il initialise le répertoire des commandes,
#D le répertoire de travail du projet; le projet est le nom du livre, de
#D l'article ou de la page. Si ils n'existent pas ils seront créés
#D Ce projet éducatif et de tests est destiné à être utilisé sous wikilivres
#D en langue française et en caractères UTF8.
#D Les variables Site et SitePrefix se rapportent à "fr.wikibooks.org".
#D Le programme est prévu pour fonctionner à l'initiative du contributeur qui
#D qui doit copier la page "Contenus" ou la page de la compilation dans le
#D répertoire de travail "~/Annexe/<nom du livre>"
#D Les modules en tests sont indépendants, cependant ils doivent être exécutés
#D dans l'ordre ./header.sh <livre>, ./lister <livre>, ./télécharger <livre>
#D ./ajouter_sclt <livre>, ./ajouter_sclic, ./ajouter_sclip <livre>
#D La liste des pages à analyser est indispensable dans tous les modules en
#D tests. L'absence de la liste des pages à analyser est signalée à chaque
#D lancement des modules du programme principal "Annexer"
#D
#D AVERTISSEMENT : Ce programme avec ses modules doit être utilisé par des
#D wikipédiens, à titre personnel. La structure du résultat est voisine de
#D l'impression par PediaPress. Pour cette raison ce programme n'est pas
#D commercialisable.
#D
#P Note : L'extraction de la documentation peut se faire par les commandes :
#P Documentation :
#P mkd -Stw D header.sh <livre>_doc/header.inc.sh.D.doc
#P grep -e '#D' header.inc.sh | sed s/#D//g > <livre>_doc/header.inc.sh.D.doc
#P Organigrammes :
#P grep -e -n '#H' -e '#P' -e '#w' header.sh
#P ou : grep -E "#H|#P|#w" header.sh > <livre>_doc/header.sh.HPw.doc
#P Exemples :
#P mkd -Stw D header.inc.sh LivreTest_doc/header.inc.sh.D.doc
#P grep -e '#D' header.sh | sed s/#D//g > LivreTest_doc/header.sh.D.doc
#P grep -n -E "#O|#P|#w" header.sh > LivreTest_doc/header.sh.HPw.doc
#P
#O Vider (nettoyer) l'écran.
clear
echo $0, $1
#T Test break exit 0
#O Si l'option --t est présente, afficher la version de header.inc
if [ "$0" = "./test-header.inc.bash" ] && [ "$1" = "--t" ]
then
echo "header.inc : Version "$VERSION
sleep 2
fi
#T Test break exit 0
#O Initialiser les répertoires des commandes et des données.
RepRef=~/Annexer
RepCom=~/Annexer/bin
RepConv=~/Annexer/datas
#O Tester la présence du répertoire des commandes, si il n'existe pas,
#O le créer
echo "Test de présence du répertoire des commandes : "$RepCom
if test -d $RepCom
then
echo " Le répertoire des commandes : "$RepCom" est présent !"
else
mkdir $RepCom
echo " Le répertoire des commandes "$RepCom" a été créé !"
fi
#O Tester la présence du répertoire des données, si il n'existe pas,
#O le créer
echo "Test de présence du répertoire des données : "$RepConv
if test -d $RepConv
then
echo " Le répertoire des données : "$RepConv" est présent !"
else
mkdir $RepConv
echo " Le répertoire des données "$RepConv" a été créé !"
fi
#O Initialiser la variable Conversion avec le lien vers le fichier
#O Données_de_conversion
Conversions=~/Annexer/datas/données_de_conversions
#O Si le programme de test de header.inc est actif, alors vérifier la
#O présence du fichier de données
if [ "$0" = "./test-header.inc.bash" ] && [ "$1" = "--t" ]
then
if test -a $Conversions
then echo " Le fichier données_de_conversion est présent il ne sera pas actualisé."
else
{
echo "s/%E2%80%99/&#8217;/g;s/%E2%82%AC/&#8364;/g;s/%2F///g;s/%3F/?/g;" > $Conversions
echo "s/%24/$/g;s/%21/!/g;s/%25/%/g;s/%2B/+/g;s/%3C/\&lt;/g;s/%3E/&gt;/g;" >> $Conversions
echo "s/%5C/\/g;s/%B0/°/g" >> $Conversions
echo "s/%E0/à/g;s/%E2/â/g" >> $Conversions
echo "s/%E8/è/g;s/%E9/é/g;s/%EA/ê/g;s/%EB/ë/g" >> $Conversions
echo "s/%EE/î/g;s/%EF/ï/g" >> $Conversions
echo "s/%F4/ô/g" >> $Conversions
echo "s/%F9/ù/g;s/%FB/û/g" >> $Conversions
echo 's/%2C/,/g;s/%21/!/g;s/%3F/?/g;s/%40/@/g;s/%23/#/g;s/%24/$/g' >> $Conversions
echo "s/%25/%/g;" >> $Conversions
echo "s/%26/&#x26;/g;" >> $Conversions
echo "s/%28/(/g;s/%29/)/g;" >> $Conversions
echo "s/%2B/+/g;" >> $Conversions
echo "s/%3A/:/g;" >> $Conversions
echo "s/%3D/=/g;" >> $Conversions
echo "s/%5B/[/g;" >> $Conversions
echo "s/%5D/]/g" >> $Conversions
echo "s/%3B/;/g;s/%2F///g;s/%27//g" >> $Conversions
echo 's/%22/"/g' >> $Conversions
echo "s/%C3%A7/ç/g;s/%E7/ç/g" >> $Conversions
echo "s/+/ /g;s/%7E/~/g;s/\/&#92;/g" >> $Conversions
echo "s/%0D/&#x0D;/g;s/%0A/&#x0A;/g" >> $Conversions
echo "s/%C3%A0/à/g;s/%C3%A2/â/g" >> $Conversions
echo "s/%C3%A9/é/g;s/%C3%A8/è/g;s/%C3%AA/ê/g" >> $Conversions
echo "s/%C3%AE/î/g;s/%C3%AF/ï/g" >> $Conversions
echo "s/%C3%B4/ô/g" >> $Conversions
echo "s/%C3%B9/ù/g;s/%C3%BB/û/g" >> $Conversions
echo "s/%C2%B7/-/g;s/%C2%AB/«/g;s/%C2%BB/»/g" >> $Conversions
}
echo " Le fichier '$Conversions' est créé."
fi
fi
#T cat $RepCom/$Conversions
#T exit
#T echo "https://fr.wikibooks.org/wiki/Fichier:Commerce_de_communaut%C3%A9s_indig%C3%A8nes.JPG"| sed -f $RepCom/$Conversions
#T exit
#T
#T echo "Paramètre d'entrée : "$1
#T exit 2
#O Créer la foncion header_syntax en mode test.
function header_syntax
{
echo "Syntaxe de la commande header.inc en mode tests: header.inc [ --t | <livre>" ]
echo -e "\033[1m-> ATTENTION\033[0m : Le nom du livre ne doit pas contenir le caractère 'espace'"
echo "Exemples : 'test-header.inc.bash Faire_fleurir_le_sel' ou"
echo " 'test-header.inc.bash ?' ou"
echo " 'test-header.inc.bash --t' "
echo " Le premier paramètre est transmis à la commande header.inc"
#w seulement avec la commande 'Annexer'
#w echo "ou header.inc <livre> [-v] [-pb||-pc]"
#w echo "options -v:mode bavard, -pb ou -pc:versions personnalisées Wikibooks ou Commons."
echo
}
#O Tester la présence du premier paramètre de la ligne de commandes
if test -z "$1"
then
echo "-----"
echo "Erreur, pas de paramètre en entrée"
header_syntax
exit 1;
fi
if test $1; then
if [ $1 = '?' ]
then
header_syntax
exit 0
fi
fi
if [ "$1" != "--t" ]
then
echo "Projet : création de la page '$1.annexe' du livre : $1"
#O Initialiser la variable "Projet" = répertoire de projet.
Projet=$RepRef/$1
echo "Répertoitre de projet : "$Projet
echo "----------"
else
echo -e "\033[33m Le projet n'est pas défini veuillez entrer un paramètre valide. \033[0m"
exit 0
fi
#T
read -p "Si tout est correct : retour-chariot une pour continuer, Ctrl-C pour quitter >"
#O Tester la présence du répertoire du projet, si il n'existe pas, le créer.
if test -d $Projet
then
echo "Le répertoire de projet : "$Projet" est correct !"
else
mkdir $Projet
echo "Le répertoire de projet "$Projet" a été créé !"
fi
#O Initialiser les variables 'Site' (nom du serveur) et 'SitePrefix'.
Site="fr.wikibooks.org"
SitePrefix="https://fr.wikibooks.org/wiki/"
#O Nettoyer l'écran, afficher les variables globales et le contenu du répertoire de projet.
#T clear
echo "----------"
echo "Nom du projet: "$1
echo "Site: "$Site
echo "Préfixe du site: $SitePrefix pour la commande shell sed."
echo "----------"
echo "Liste des liens vers les articles à analyser:"
echo "fichier : "$Projet/$1".list si il existe."
if test -a $Projet/$1.list
then
echo "le fichier : "$Projet/$1".list existe."
else
echo -e "\033[31mle fichier : "$Projet/$1".list n'a pas encore été créé.\033[0m"
fi
echo "----------"
echo "Liste des pages et articles à analyser:"
echo "fichier : "$Projet/$1".prj si il existe."
if test -a $Projet/$1.prj;
then
echo "le fichier : "$Projet/$1".prj existe."
else
echo -e "\033[31mle fichier : "$Projet/$1".prj n'a pas encore été créé.\033[0m"
fi
echo "----------"
echo "Contenu du répertoire de travail du projet:"
ls -al $Projet
echo "----------"
# Fin header.inc.sh
ctrl-header.inc.bash
modifierCe code est à transcrire dans le répertoire ~/Annexer/tests/header.inc.sh et doit être rendu exécutable (chmod 755 ctrl-header.inc.bash)
- ctrl-header.inc.bash contrôle des codes de header.inc.sh
- vérifie que les lignes de codes ne contiennent pas de commentaire et lance les tests de validation avec test-header.inc.bash ci-après.
#! /bin/bash
#H file : ctrl-header.inc.bash
VERSION=210505
# Remplacer 'file.sh' par le nom du fichier de codes, exemple 'annexer.sh'
# Control if the local file.sh is clean
echo -e "\033[1;33m Control header.inc.sh in the local test directory \033[0m" > text-control.txt
echo -e "\033[1;33m Please check that the comment line does not contain an command \033[0m" >> text-control.txt
grep -n -e "#O\|#P\|#T" header.inc.sh >> text-control.txt
more text-control.txt
#T echo -e "\033[31m ROUGE \033[0m"
#T echo -e "\033[1;33m Please check that the comment line does not contain an command \033[0m"
echo; echo "Continue ? y/n"
read -s -e -n 1 -t 60 -p "y/n ? : " Inkey;echo
#T echo "Inkey = $Inkey"
if [ "$Inkey" != 'y' ]; then echo " Inkey is not yes, or time out after 60 sec, exit from $0"; exit 0;fi
# Copy file.sh file to fil without #O, #P,#T
ls -l header.*
echo -e "\033[1;33m Is the .sh file newer than the file without an extension ? \033[0m"
echo -e "\033[1;33m Le fichier .sh est-il plus récent que le fichier sans extension ? \033[0m"
read -s -e -n 1 -t 60 -p "y/n ? : " Inkey;echo
#T echo "Inkey = $Inkey"
if [ "$Inkey" != 'y' ]; then echo " Inkey is not yes, or time out after 60 sec, exit from $0"; exit 0;fi
cat header.inc.sh | grep -v "#O\|#P\|#T" > header.inc
echo " Test sans paramètre"
./test-header.inc.bash
sleep 5
echo " Test avec paramètre '?'"
./test-header.inc.bash ?
sleep 5
echo " Test avec paramètre '--t'"
./test-header.inc.bash --t
sleep 5
echo " Test avec paramètre 'LivreTest'"
./test-header.inc.bash LivreTest
sleep 5
test-header.inc.bash
modifierCe code est à transcrire dans le répertoire ~/Annexer/tests/header.inc.sh et doit être rendu exécutable
#! /bin/bash
#H file : test-header.inc.bash
#H Syntaxe : ./test-header.inc.bash [ ? | --t | <livre> ]
VERSION=210505
# Begin tests
echo "Premier paramètre : $1"
if test -z $1
then
echo " Syntaxe : ./test-header.inc.bash [ ? | --t | <livre> ]"
exit -1
fi
source header.inc
echo "retour : $?"
Annexer (main)
modifier- (Appendix)
Annexer ou annexer.sh est la page principale qui permet de produire la page « Annexe », elle utilise les commandes shell "header.sh, "lister", "télécharger", "ajouter_sclt", "ajouter_sclic" et "ajouter_sclip".
- Documentation
- mkd -Stw D annexer Bash_doc/annexer.D.doc, qui respecte les tabulations, ou :
mkd -sStw D annexer > Bash_doc/annexer.D.doc, avec une présentation comme ci-dessous.
la commande "annexer" est le programme principal de tests pour créer la page "Annexe" des livres de wikilivres. annexer (module de tests) analyse la ligne de commandes et initialise la variable $Verbose ou affiche la syntaxe à la demande interrogative '?' en premier paramètre. ce programme supprime tous les fichiers obsolètes du répertoire de travail "~/Annexe/<nom du livre>" et de ses sous répertoires, avec l'accord de l'utilisateur. les modules lister, télécharger, ajouter_sclt, ajouter_scli* sont exécutés dans l'ordre, puis pour finir, le fichier "Annexe" du livre est assemblé. à la fin de l'exécution de chaque module il est possible d'interrompre le programme par la validation de la ligne (retour chariot après #T) : #T exit -> sur deux lignes comme ci-après : #T exit l'extraction de la documentation peut se faire par la commande : mkd -Stw DOP annexer (D=Docu, O=organigramme, P=pour programmeurs)
- Organigramme
- mkd -nStw O annexer Bash_doc/annexer.O.doc
47 analyse de la ligne de commandes : 48 si le premier paramètre est le caractère ? 50 alors : 52 afficher la syntaxe et quitter. 63 fin si 66 inclure le fichier d'entête header.sh 69 ## annexer ################ 71 initialiser les variables $Verbose et $Personal à 'false' 80 si ne nombre de paramètres est supérieur à 1 82 alors : 84 si le deuxième paramètre est '-v' 86 alors initialiser la variable $Verbose à 'true' (vrai). 89 fin si 91 si le deuxième paramètre est '-pb' 93 alors initialiser la variable $Personalwb à 'true' (vrai). 96 fin si 98 si le deuxième paramètre est '-pc' 100 alors initialiser la variable $Personalco à 'true' (vrai). 103 fin s 105 fin si 108 si le nombre de paramètres est égal à 3 110 alors : 112 si le troisième paramètre est '-v' 114 alors initialiser la variable $Verbose à 'true' (vrai). 117 fin si 119 si le troisième paramètre est '-pb' 121 alors, si la variable $Personalco n'est pas à validée, initialiser la variable $Personalwb à 'true' (vrai). 123 fin si 126 si le troisième paramètre est '-pc' 128 alors, si la variable $Personalwb n'est pas à validée, initialiser la variable $Personalco à 'true' (vrai). 130 fin si 132 fin si 135 si le nombre de paramètres est supérieur à 3 137 alors : signaler l'erreur et quitter. 142 fin si 156 afficher : 'effacer tous les fichiers obsolètes ? :' 157 '*.html *.str *.img *.lnk tmp temp *.tmp *.temp *.list ?' 161 attendre 'un' (un seul) caractère de réponse. 165 si la réponse au clavier est 'o' (oui !), 167 alors effacer les fichiers du répertoire de projet (nom du livre). 173 sinon, continuer. 175 fin si 181 se placer dans le répertoire des commandes(~/Annexer/.) 184 créer le fichier contenant la liste des articles à analyser. (./lister $1) 185 si la variable $Verbose et validée (à 'true'), 187 alors : exécuter la commande 'lister' en mode bavard. 190 sinon : exécuter 'lister' en mode silencieux, les observation seront dans 191 le fichier lister-cmd.txt 194 fin si 199 si le code de retour est supérieur à 0 201 alors afficher le nom du module de commande en erreur et quitter 'annexer' 202 avec retour à 1 206 fin si 212 se placer dans le répertoire des commandes 216 si le mode bavard est activé, 218 alors: exécuter la commande 'télécharger' en mode bavard. 221 sinon: exécuter la commande 'télécharger' en mode silencieux.. 224 fin si 229 si le code de retour est supérieur à 0 231 alors afficher le nom du module de commande en erreur et quitter 'annexer' 232 avec retour à 1 236 fin si 242 se placer dans le répertoire des commandes 245 créer la "page Annexe" et ajouter les sources, contributeurs, droits de 246 copie du texte des articles. 247 sclt signifie : s=source, c=contributeurs, l=licence, t=texte des articles 248 si le mode bavard est activé, 250 alors : exécuter la commande 'ajouter_sclt' en mode bavard. 253 sinon : exécuter la commande 'ajouter_sclt' en mode silencieux. 256 fin si 261 si le code de retour est supérieur à 0 263 alors afficher le nom du module de commande en erreur et quitter 'annexer' 264 avec retour à 1 268 fin si 274 se placer dans le répertoire des commandes 277 si la variable $Personal est invalide 'false' 279 alors: 281 exécuter ajouter_sclic 282 (ajouter les sources, licence, contributeurs des images avec la commande 283 globale conventionnelle ajouter_sclic 284 si le mode bavard est validé, 286 alors : ajouter_sclic en mode bavard 289 sinon : ajouter_sclic et copier les observations dans ajouter-sclic-cmd.txt 292 fin si 295 fin si 300 si le code de retour est supérieur '0' 302 alors afficher le nom du module de commande en erreur et quitter 'annexer' 303 avec retour à 1 307 fin si 313 se placer dans le répertoire des commandes 315 si l'option annexe' personnalisée est validée ($Personal=true) 317 alors: 319 exécuter ajouter_sclip 320 (ajouter les sources, licence, contributeurs des images avec la commande 321 globale conventionnelle ajouter_sclic 327 fin si 330 fin si 334 si le code de retour est différent de '0' 336 alors afficher le nom du module de commande en erreur et quitter 'annexer' 337 avec retour à 1 341 fin si 350 se placer dans le répertoire des commandes. 352 si l'option de la commande annexe '-pc' (personalco) est activée à 'vrai' 354 alors exécuter sclipco.inc 358 fin si 360 si le code de retour est différent de '0', 362 alors afficher le nom du module de commande en erreur et quitter 'annexer' 363 avec retour à 1 367 fin si 374 se placer dans le répertoire des commandes. 376 si l'option de la commande annexe '-pb' (personalwb) est activée à 'vrai' 378 alors exécuter sclipwb.inc 382 fin si 384 si le code de retour est différent de '0', 386 alors afficher le nom du module de commande en erreur et quitter 'annexer' 387 avec retour à 1 391 fin si 397 assembler la page 'Annexe' du livre. 400 copier sclt dans la page 'Annexe' du livre. 403 si la variable Personal est activée à 'true' 405 alors : ajouter le contenu du fichier $1.sclip au fichier $1.annexe 407 sinon : 409 ajouter $1.sclic à l'annexe 411 fin si 414 ajouter la licence (fr) à la page 'Annexe'
Code du programme maître annexer
- Version de référence pour cet article du 20 mai 2020
- Annexer.sh
- Version actualisée
#! /bin/bash
# Fichier annexer.sh
VERSION=200626
#P Nom du fichier de commandes : annexer
#P Syntaxe : "annexer <nom du livre> [options]"
#P Options :
#P annexer ? pour obtenir la syntaxe de la ligne de commandes.
#P -p pour la version personnalisée de l'annexe (personal version).
#P -v pour la version bavarde à l'exécution (verbose mode).
#P Exemple : "./annexer LivreTest -v -pb" à la console.
#P Date de création : 24 mars 2020
#P Modifié le : 7 mai 2020 par GC
#P Modifié le : 18 mai 2020 par GC mise à jour de modules.
#P Modifié le : 19 mai 2020 par GC lignes 350 à 392.
#P Modifié le : 30 mai 2020 par GC pour l'installation automatique.
#P Modifié le : 2 juin 2020 par GC mise à jour des liens d'exécution.
#P Version sur WikiLivres le : 20 mai 2020
#P
#P LES FICHIERS DE COMMANDES
#P## header.sh ##############
#P header.sh, a créé le répertoire des commandes si celui-ci ne préexistait pas
#P il a vérifié la validité ou invalidé de ligne de commande, initialisé
#P les variables $Projet, $Site, $SitePrefix, vérifié l'existence des
#P fichiers de liste "$Projet/$1".list et "$Projet/$1".prj, puis affiché le
#P contenu du répertoire de travail.
#P## annexer ################
#P lors de l'exécution de la commande "Annexer" le répertoire courant EST le
#P répertoire travail ; $1 (~/annexer/$1/.), il est inutile de s'encombrer de
#P la variable $Projet.
#P
#D la commande "annexer" est le programme principal de tests pour créer la
#D page "Annexe" des livres de wikilivres.
#D annexer (module de tests) analyse la ligne de commandes et initialise la
#D variable $Verbose ou affiche la syntaxe à la demande interrogative '?'
#D en premier paramètre.
#D ce programme supprime tous les fichiers obsolètes du répertoire de travail
#D "~/Annexe/<nom du livre>" et de ses sous répertoires, avec l'accord de
#D l'utilisateur.
#D les modules lister, télécharger, ajouter_sclt, ajouter_scli? sont exécutés
#D dans l'ordre, puis pour finir, le fichier "Annexe" du livre est assemblé.
#D à la fin de l'exécution de chaque module il est possible d'interrompre le
#D programme par la validation de la ligne (retour chariot après #T) :
#D #T exit -> sur deux lignes comme ci-après :
#D #T
#D exit
#D
#D l'extraction de la documentation peut se faire par la commande :
#D mkd -Stw DOP annexer (D=Docu, O=organigramme, P=pour programmeurs)
#D
if [ $0=annexer ]; then echo "annexer : Version "$VERSION; fi
#O analyse de la ligne de commandes :
#O si le premier paramètre est le caractère ?
if [ "$1" = "?" ]
#O alors :
then {
#O afficher la syntaxe et quitter.
clear
echo "Syntaxe de la ligne de commande :"
echo " annexer [ <nom du livre> || ? ] [ -v ] [ -pb || -pc ]"
echo " Par défaut, seule la version Annexe globale sera proposée."
echo " Options pour obtenir une version personnalisée par article :"
echo " annexer ?, pour afficher la syntaxe de la ligne de commandes."
echo " -pb pour la version personnalisée wikilivres (personal version whith wikibooks)."
echo " -pc pour la version personnalisée commons (personal version with commons)."
echo " -v pour la version bavarde (verbose mode)."
exit 0
}
#O fin si
fi
#O inclure le fichier d'entête header.sh
source header.inc
#O## annexer ################
#O initialiser les variables $Verbose et $Personal à 'false'
Verbose="false"
Personal="false"
Personalwb="false"
Personalco="false"
#P si le nombre de paramètres reçus est inférieur à 2 ($0 ne compte pas)
#P alors : passer, il n'y a rien à initialiser
#O si ne nombre de paramètres est supérieur à 1
if (("$#" > "1"))
#O alors :
then
#O si le deuxième paramètre est '-v'
if [ "$2" = "-v" ]
#O alors initialiser la variable $Verbose à 'true' (vrai).
then
Verbose="true";
#O fin si
fi
#O si le deuxième paramètre est '-pb'
if [ "$2" = "-pb" ]
#O alors initialiser la variable $Personalwb à 'true' (vrai).
then
Personalwb="true"; Personal="true";
#O fin si
fi
#O si le deuxième paramètre est '-pc'
if [ "$2" = "-pc" ]
#O alors initialiser la variable $Personalco à 'true' (vrai).
then
Personalco="true"; Personal="true";
#O fin s
fi
#O fin si
fi
#O si le nombre de paramètres est égal à 3
if (("$#" == "3"))
#O alors :
then
#O si le troisième paramètre est '-v'
if [ "$3" = "-v" ]
#O alors initialiser la variable $Verbose à 'true' (vrai).
then
Verbose="true";
#O fin si
fi
#O si le troisième paramètre est '-pb'
if [ "$3" = "-pb" ]
#O alors, si la variable $Personalco n'est pas à validée, initialiser la variable $Personalwb à 'true' (vrai).
then if test "$Personalco" = "false"; then Personalwb="true"; Personal="true"; else echo "Erreur de syntaxe paramètre 3 :$3 incompatible avec paramètre 2 :$2"; exit 1; fi;
#O fin si
fi
#O si le troisième paramètre est '-pc'
if [ "$3" = "-pc" ]
#O alors, si la variable $Personalwb n'est pas à validée, initialiser la variable $Personalco à 'true' (vrai).
then if test "$Personalwb" = "false"; then Personalco="true"; Personal="true"; else echo "Erreur de syntaxe paramètre 3 :$3 incompatible avec paramètre 2 :$2"; exit 1; fi;
#O fin si
fi
#O fin si
fi
#O si le nombre de paramètres est supérieur à 3
if (("$#" > "3"))
#O alors : signaler l'erreur et quitter.
then
echo "Erreur : trop de paramètres !"
echo "'./annexer ?' pour la syntaxe."
exit 1
#O fin si
fi
#T
echo "La variable Verbose est initialisée à : $Verbose"
#T
echo "La variable Personalwb est initialisée à : $Personalwb"
#T
echo "La variable Personalco est initialisée à : $Personalco"
#T
echo "La variable Personal est initialisée à : $Personal"
#-----
#T exit #w interrompt l'exécution de la suite.
#O afficher : 'effacer tous les fichiers obsolètes ? :'
#O '*.html *.str *.img *.lnk tmp temp *.tmp *.temp *.list ?'
echo "effacer tous les fichiers *.html *.str *.img *.lnk tmp temp *.tmp *.temp *.list ?"
echo -e "\033[31m 'o' pour approuver l'effacement des fichiers obsolètes. \033[0m "
echo " Retour-chariot pour continuer, Ctrl-C pour quitter."
#O attendre 'un' (un seul) caractère de réponse.
read -n1 -p -s Inkey
echo "Inkey = "$Inkey
#O si la réponse au clavier est 'o' (oui !),
if [ "$Inkey" = "o" ]
#O alors effacer les fichiers du répertoire de projet (nom du livre).
then {
cd $Projet
echo -e "\033[31mSuppression des fichiers obsolètes.\033[0m "
rm -R *.html *.str *.img *.lnk tmp temp *.tmp *.temp *.list
}
#O sinon, continuer.
else echo "Pas de suppression de fichiers ! ... suite ..."
#O fin si
fi
#-----
#T exit #w interrompt l'exécution de la suite.
#O se placer dans le répertoire des commandes(~/Annexer/.)
cd $RepCom
#O créer le fichier contenant la liste des articles à analyser. (./lister $1)
#O si la variable $Verbose et validée (à 'true'),
if [ $Verbose = "true" ]
#O alors : exécuter la commande 'lister' en mode bavard.
then
./lister $1
#O sinon : exécuter 'lister' en mode silencieux, les observation seront dans
#O le fichier lister-cmd.txt
else
./lister $1 > lister-cmd.txt
#O fin si
fi
Retour=$?
#T echo "Code de retour de la commande lister : " $Retour
#O si le code de retour est supérieur à 0
if [ $Retour -gt '0' ]
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'lister' en mode silencieux voyez lister-cmd.txt"
exit 1
#O fin si
fi
#
# -----
#T exit #w interrompt l'exécution de la suite.
#O se placer dans le répertoire des commandes
cd $RepCom
#T créer les répertoires et sous répertoires complets du livre. (../télécharger $1)
#O si le mode bavard est activé,
if [ $Verbose = "true" ]
#O alors: exécuter la commande 'télécharger' en mode bavard.
then
./télécharger $1
#O sinon: exécuter la commande 'télécharger' en mode silencieux..
else
./télécharger $1 > télécharger-cmd.txt
#O fin si
fi
Retour=$?
#T echo "Code de retour de la commande télécharger : " $Retour?
#O si le code de retour est supérieur à 0
if [ $Retour -gt '0' ]
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'télécharger' en mode silencieux voyez télécharger-cmd.txt"
exit 1
#O fin si
fi
# -----
#T exit #w interrompt l'exécution de la suite.
#O se placer dans le répertoire des commandes
cd $RepCom
#O créer la "page Annexe" et ajouter les sources, contributeurs, droits de
#O copie du texte des articles.
#O sclt signifie : s=source, c=contributeurs, l=license, t=texte des articles
#O si le mode bavard est activé,
if [ $Verbose = "true" ]
#O alors : exécuter la commande 'ajouter_sclt' en mode bavard.
then
./ajouter_sclt $1
#O sinon : exécuter la commande 'ajouter_sclt' en mode silencieux.
else
./ajouter_sclt $1 > ajouter_sclt-cmd.txt
#O fin si
fi
Retour=$?
#T echo "Code de retour de la commande ajouter_sclt : " $Retour
#O si le code de retour est supérieur à 0
if [ $Retour -gt '0' ]
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'ajouter-sclt' en mode silencieux voyez ajouter_sclt-cmd.txt"
exit 1
#O fin si
fi
# -----
#T exit #w interrompt l'exécution de la suite.
#O se placer dans le répertoire des commandes
cd $RepCom
#O si la variable $Personal est invalide 'false'
if [ $Personal = "false" ]
#O alors:
then
#O exécuter ajouter_sclic
#O (ajouter les sources, licence, contributeurs des images avec la commande
#O globale conventionnelle ajouter_sclic
#O si le mode bavard est validé,
if [ $Verbose = "true" ]
#O alors : ajouter_sclic en mode bavard
then
./ajouter_sclic $1
#O sinon : ajouter_sclic et copier les observations dans ajouter-sclic-cmd.txt
else
./ajouter_sclic $1 > ajouter-sclic-cmd.txt
#O fin si
fi
cat $Projet/$1.sclic > $Projet/$1.scli
#O fin si
fi
Retour=$?
#T echo "Code de retour de la commande ajouter_sclic : " $Retour
#O si le code de retour est supérieur '0'
if [ $Retour -gt '0' ] && [ $Personal = "false" ];
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'ajouter_sclic'"
exit 1
#O fin si
fi
# -----
#T exit #w interrompt l'exécution de la suite.
#O se placer dans le répertoire des commandes
#cd $RepCom
#O si l'option annexe' personalisée est validée ($Personal=true)
# if [ $Personal = "true" ]
#O alors:
# then
#O exécuter ajouter_sclip
#O (ajouter les sources, licence, contributeurs des images avec la commande
#O globale conventionnelle ajouter_sclic
# if [ $Verbose = "true" ]
# then
# ./ajouter_sclip $1
# else
# ./ajouter_sclip $1 > ajouter-sclip-cmd.txt
#O fin si
# fi
# cat $1.sclip > $1.scli
#O fin si
# fi
#Retour=$?
#T echo "Code de retour de la commande ajouter_sclip : " $Retour
#O si le code de retour est différent de '0'
# if [ $Retour -gt '0' ] && [ $Personal = "true" ];
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
# then
# echo "Erreur au module shell 'ajouter_sclip'"
# exit 1
#O fin si
# fi
#T echo "La variable Verbose est initialisée à : $Verbose"
#T echo "La variable Personalwb est initialisée à : $Personalwb"
#T echo "La variable Personalco est initialisée à : $Personalco"
#T echo "La variable Personal est initialisée à : $Personal"
#T break
#O se placer dans le répertoire des commandes.
cd $RepCom
#O si l'option de la commande annexe '-pc' (personalco) est activée à 'vrai'
if [ "$Personalco" == "true" ]
#O alors exécuter sclipco
then
if [ "$Verbose" == "true" ]; then ./sclipwb $1 && ./sclipco $1; else ./sclipwb $1 > sclipwb-cmd.txt && ./sclipco $1 > sclipco-cmd.txt; fi;
echo "sclipwb et sclipco ont été exécutés successivement.";
#O fin si
fi
#O si le code de retour est différent de '0',
if [ $Retour -gt '0' ] && [ $Personalpc = "true" ];
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'slipco' ou au module 'sclipw'"
exit 1
#O fin si
fi
#T Remarque :
#T $Personalpc et $Personalpw ne peuvent pas être actifs en même temps au
#T cours de la commande.
#O se placer dans le répertoire des commandes.
cd $RepCom
#O si l'option de la commande annexe '-pb' (personalwb) est activée à 'vrai'
if [ "$Personalwb" == "true" ]
#O alors exécuter sclipwb.inc
then
if [ "$Verbose" == "true" ]; then ./sclipwb $1; else ./sclipwb $1 > scliwb.inc-cmd.txt; fi;
echo "sclipwb a été exécuté";
#O fin si
fi
#O si le code de retour est différent de '0',
if [ $Retour -gt '0' ] && [ $Personalwb = "true" ];
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'slipwb'"
exit 1
#O fin si
fi
# -----
#T exit #w interrompt l'exécution de la suite.
#O assembler la page 'Annexe' du livre.
cd $Projet
#O copier sclt dans la page 'Annexe' du livre.
cat $1.sclt > $1.annexe
#O si la variable Personal est activée à 'true'
if [ $Personal == "true" ]
#O alors : ajouter le contenu du fichier $1.sclip au fichier $1.annexe
then cat $Projet/$1.sclip >> $Projet/$1.annexe; echo "$1.sclip est copié dans $1.annexe";
#O sinon :
else
#O ajouter $1.sclic à l'annexe
cat $1.sclic >> $1.annexe echo "$1.sclic est copié dans $1.annexe";
#O fin si
fi
#O ajouter la licence (fr) à la page 'Annexe'
echo "== Licence ==" >> $1.annexe
cat $1/$1.licence >> $1.annexe
echo "" >> $1.annexe
echo "{{Nouvelle page imprimée}}" >> $1.annexe
echo ""
echo ""
echo ""
echo "Copier le contenu du fichier "$1/annexe" dans la page 'Annexe' du livre "$1.
exit 0
# Fin de fichier annexer.sh
Tests unitaires du fichier de commandes annexer
modifierFaire un brouillon avec le micro-ordinateur sous linux (ou autre système acceptant les shells bash).
- Avec un micro-ordinateur doté d'un système d'exploitation unix ou linux.
- Copier le code du fichier annexer dans un éditeur de texte comme Notepadqq, Gedit, ou Bluefish.
- Créer le répertoire Annexer avec l'éditeur, ou, sous console : mkdir ~/Annexer
- Enregistrer le texte avec pour nom annexer dans le répertoire Annexer.
- Sous console, entrer dans le répertoire Annexer : cd ~/Annexer
- Copier le code de la commande header.sh dans ~/Annexer/.
- Rendre les commandes annexer et header.sh exécutables : chmod 777 annexer header.sh
- Pour tester, lancer la commande ./annexer LivreTest.
- Observer le répertoire LivreTest : ls -l ~/Annexer/LivreTest qui doit être vide.
- Copier et coller tous les codes des modules : header.sh, lister, télécharger, ajouter-sclt, ajouter_sclic, ajouter_sclip, dans le répertoire des commandes Annexer.
exemple : code header.sh dans le fichier ~/Annexer/hearder.sh, etc. - tous les fichiers shell doivent être exécutables
chmod 777 lister télécharger ajouter_sclt ajouter_sclic ajouter_sclip - Éditer et copier le contenu de la page Contenus de la version imprimable, dans le répertoire de travail du projet, ~/Annexer/<nom du livre>/. avec pour nom <nom du livre>.contenu ou le contenu d'une page de compilation, avec pour nom <nom du livre>.compilé.
ls -l ~/Annexer/<nom du livre> doit maintenant afficher un de ces deux fichiers.
Note : Si, par exemple, vous lancez la commande ./annexer LivreTest ou ./header.sh LivreTest de n'importe répertoire, les répertoires ~/Annexer et ~/annexer/LivreTest seront automatiquement créés au bon endroit par l'entête header.sh. Il suffira de copier le fichier de commandes annexer ou annexer.sh dans le répertoire de fichiers de commandes :
"mv ./annexer ~/Annexer/annexer" ou shell bash sous windows, "mv ./annexer.sh ~/Annexer/annexer.sh"
Annexe obtenue
modifier= Annexe = == Références == <references /> {{Nouvelle page imprimée}} == Contenus == <small> https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/ArticleUn https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/ArticleDeux https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/ArticleTrois </small> === Source de cette édition === <small> https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest </small> {{Nouvelle page imprimée}} == Sources licences et contributeurs des articles == <small>Les ''sources'' listées pour chaque article fournissent des informations de licence plus détaillées, y compris le statut des droits d'auteurs, les détenteurs de ces droits et les conditions de licence.</small> <small><small> '''ArticleUn''' , ''source : ''https://fr.wikibooks.org/w/index.php?oldid=632571 , ''licence : ''https://creativecommons.org/licenses/by-sa/3.0/ , ''auteur(s) : ''Goelette Cardabela '''ArticleDeux''' , ''source : ''https://fr.wikibooks.org/w/index.php?oldid=632572 , ''licence : ''https://creativecommons.org/licenses/by-sa/3.0/ , ''auteur(s) : ''Goelette Cardabela '''ArticleTrois''' , ''source : ''https://fr.wikibooks.org/w/index.php?oldid=632573 , ''licence : ''https://creativecommons.org/licenses/by-sa/3.0/ , ''auteur(s) : ''Goelette Cardabela </small></small> {{Nouvelle page imprimée}} == Sources des images licences et contributeurs == <small>Les ''sources'' listées pour chaque illustration fournissent des informations de licence plus détaillées, y compris le statut des droits d'auteurs, les détenteurs de ces droits et les conditions de licence.</small> <small><small> '''Illustration : '''Gabriel Garcia Marquez - Fresque.jpg , ''source : ''https://fr.wikibooks.org/w/index.php?title=File:Gabriel_Garcia_Marquez_-_Fresque.jpg , ''licence : ''CC BY-SA 4.0 , ''auteur(s) : ''User:Pohline_Blast_Clm '''Illustration : '''Commerce de communautés indigènes.JPG , ''source : ''https://fr.wikibooks.org/w/index.php?title=File:Commerce_de_communautés_indigènes.JPG , ''licence : ''CC BY-SA 3.0 , ''auteur(s) : ''User:Goelette.Cardabela '''Illustration : '''Fernando Botero (2018).jpg , ''source : ''https://fr.wikibooks.org/w/index.php?title=File:Fernando_Botero_(2018).jpg , ''licence : ''CC BY 3.0 , ''auteur(s) : ''- '''Illustration : '''Pano Plazo Botero.jpg , ''source : ''https://fr.wikibooks.org/w/index.php?title=File:Pano_Plazo_Botero.jpg , ''licence : ''Public domain , ''auteur(s) : ''User:Scabredon~commonswiki </small></small> {{Nouvelle page imprimée}} == Licence == https://creativecommons.org/licenses/by-sa/3.0/ {{Nouvelle page imprimée}}
Impression visuelle de cette annexe
modifierUtilisateur:Goelette_Cardabela/Sandbox/LivreTest/Annexe_bis
- Comparer avec la versions manuelle ou semi-automatique
Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/Annexe
Lister (module)
modifier- (List)
Créer une liste des liens vers les pages qui composent le livre.
- Documentation
L'objet de cette commande est de créer le fichier de liste $Projet/$1.list avec le fichier "contenu" prioritaire, sinon avec le fichier "compilé" si il existe. Le 23 avril; créer la liste de projet $Projet/$1.prj a été jugée nécessaire pour que l'utilisation des boucles de commandes s'exécutent dans l'ordre de présentation des textes et des images afin de créer la page "Annexe" du livre (ou de la page). Si le fichier "<livre>.contenu" (copie de la page "Contenus" de la version imprimable) n'existe pas le programme teste la présence du fichier de compilation "<livre>.compilé", et si celui-ci n'est pas présent le programme se termine avec un code de retour à 1. Lorsque le programme se termine normalement le code de retour est 0, le fichier examiné aura été protégé contre l'effacement, donc en lecture seule, et le fichier projet.list aura été créé. Le contenu des listes sont affichés pour être validés.
- Organigramme
## lister ################# effacer tous les fichiers *.list, initialiser la variable de retour à 0 créer le fichier de liste $Projet/$1.list avec le fichier "contenu" prioritaire, sinon avec le fichier "compilé" s'il existe. si le fichier LivreTest.contenu existe, alors : s'assurer que le fichier sera en lecture seule, créer la liste des articles de la page avec la page de Contenus du livre. créer le fichier de projet avec la page de Contenus du livre. sinon, si le fichier LivreTest.compilé existe, alors : s'assurer que le fichier sera en lecture seule, créer la liste avec la page compilée. créer le fichier de projet avec la page compilée sinon afficher les raisons de l'échec et recommander la marche à suivre. fin si afficher le code de retour de la commande. afficher les listes pour contrôle et retourner la valeur 0 si tout est correct.
Code du module lister
- Référence pour cet article
- lister
- Article actualisé
#! /bin/bash # Fichier : lister.sh VERSION=200701 #P Nom du fichier de commandes : lister #P Syntaxe : "lister <nom du livre>" #P Exemple : "./lister LivreTest" à la console. #P Date de création : 26 mars 2020 #P Modifié le : 26 avril 2020 par GC #P Modifié le : 30 mai 2020 par GC pour l'installation automatique. #P Modifié le : 30 juin par GC pour inclure les sommaires aux fichiers de liste #P Version de documentation sur WikiLivres le : 26 avril 2020 #P #P LES FICHIERS DE COMMANDES #P## header.sh ############## #P header.sh, a créé le répertoire des commandes si celui-ci ne préexistait pas #P il a vérifié la validité ou invalidé de ligne de commande, initialisé #P les variables $Projet, $Site, $SitePrefix, vérifié l'existence des #P fichiers de liste "$Projet/$1".list et "$Projet/$1".prj, puis affiché le #P contenu du répertoire de travail. #D L'objet de cette commande est de créer le fichier de liste $Projet/$1.list #D avec le fichier "contenu" prioritaire, sinon avec le fichier "compilé" #D si il existe. #D Le 23 avril; créer la liste de projet $Projet/$1.prj a été jugée nécessaire #D pour que l'utilisation des boucles de commandes s'exécutent dans l'ordre #D de présentation des textes et des images afin de créer la page "Annexe" #D du livre (ou de la page). #D #D Si le fichier "<livre>.contenu" (copie de la page "Contenus" de la version #D imprimable) n'exite pas le programme teste la présence du fichier de #D compilation "<livre>.compilé", et si celui-ci n'est pas présent le #D programme se termine avec un code de retour à 1. #D Lorsque le programme se termine normalement le code de retour est 0, le #D fichier examiné aura été protégé contre l'effacement, donc en lecture #D seule, et le fichier projet.list aura été créé. #D Le contenu des listes sont affichés pour être validés. #D #P L'extraction de la documentation peut se faire par la commande : #P mkd -Stw DP lister #O inclure le fichier d'entête header.sh source header.inc #O## lister ################# if [ $0=lister ]; then echo "lister : Version "$VERSION; fi #O effacer tous les fichiers *.list, rm *.list #O initialiser la variable de retour à 0 retour=0 err1=1 #P initialise une valeur d'erreur #T echo "retour = "$retour #T echo "valeur d'erreur de retour N°1 = "$err1 #T exit #O initialisation du fichier de liste avec la page racine du livre echo "https://$Site/wiki/$1" > $Projet/$1.list #O créer le fichier de liste $Projet/$1.list avec les fichiers "contenu" ou #O "contenus" prioritaires, ou avec les fichier "Sommaire" ou #O "Sommaire_du_livre", sinon avec le fichier "compilé" si ils existent. #O #O si un fichier de contenu existen, affecter la variable $Contenu, protéger #O le fichier conte l'écriture. #P REMARQUE:les extensions en majuscules peuvent avoir tét produites par la #P fonction "findbook.sh" par la commande "findbook.sh [ url ]" du sommaire #P ou du fichier de Contenus de la version imprimable du livre. #P Exemple : (findbook.sh se trouve dans le répertoire ~/Annexer/bin) #P ./findbook https://fr.wikibooks.org/w/index.php?title=Goélette_Cardabela/Sommaire_du_livre #P Dans ce cas le répertoire du projet aura été créé dans ~/Annexer, et le #P fichier "Contenu=$Projet/$1.Sommaire" du_livre aura été créé dans ce #P répertoire. if test -r $Projet/$1.contenu; then Contenu=$Projet/$1.contenu; fi if test -r $Projet/$1.Contenus; then Contenu=$Projet/$1.Contenus;fi if test -r $Projet/$1.compilé; then Contenu=$Projet/$1.compilé;fi if test -r $Projet/$1.Sommaire; then Contenu=$Projet/$1.Sommaire;fi if test -r $Projet/$1.Sommaire_du_livre; then Contenu=$Projet/$1.Sommaire_du_livre;fi chmod 444 $Contenu echo "Contenu : "; ls -l $Contenu #O si la variable "$Contenu" n'existe pas existe ou n'est pas vide, if test -z $Contenu #O alors : afficher les raisons de l'échec et recommander la marche à suivre. then clear echo "Les pages $Projet/$1.contenu et $Projet/$1.compilé n'ont pas été trouvées" echo "" echo -e "\033[31m copier la page 'Contenus' du livre dans le fichier $Projet/$1.contenu \033[0m" echo "" echo -e "\033[31m ou : copier la page de compilation dans le fichier $Projet/$1.compilé \033[0m" let retour+=1; #O afficher le code de retour de la commande et quitter. #P Le code $retour n'est valable que pour un appel de fonction n'est pas pour #P une commande directe. if "$O" != "./lister" then echo "code de retour : $retour" return $retour else exit $retour fi #O fin si la variable "$Contenu" n'existe pas existe ou n'est pas vide, fi #O si la variable "$Contenu" est égale à la chaîne "$Projet/$1.contenu" ou "$Projet/$1.Contenus" if [ "$Contenu" = "$Projet/$1.Contenu" ] || [ "$Contenu" = "$Projet/$1.Contenus" ] #O alors : then { #O créer la liste des articles de la page avec la page de Contenus du livre. echo "" echo "$Projet/$1.list avec $Contenu :" cat $Contenu | sed "s/\[\[/$SitePrefix/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" | tr ' ' '_' >> $Projet/$1.list #O créer le fichier de projet avec la page de Contenus du livre. cat $Contenu | grep $1 | sed "s/\[\[//g" | tr '|' '\n' |grep $1 | sed "s/$1\]\]/\r/g" | sed "s/\]\]//g" | cut -sd '/' -f2-5 > $Projet/$1.prj } fi #O si le fichier LivreTest.compilé existe, if test -r $Projet/$1".compilé" #O alors : then { #O créer la liste avec la page compilée. echo "" echo "$Projet/$1.list avec $Projet/$1.compilé :" cat $Projet/$1.compilé | sed "s/:\[\[/$SitePrefix/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" | tr ' ' '_' >> $Projet/$1.list #O créer le fichier de projet avec la page compilée cat $1.compilé | grep $1 | sed "s/:\[\[//g" | tr '|' '\n' | grep $1 | sed "s/$1\]\]/\r/g" | sed "s/\]\]//g" | cut -sd '/' -f2-5 > $Projet/$1.prj } fi #O si la variable "$Contenu" est égale à la chaîne "$Projet/$1.Sommaire" ou "$Projet/$1.Sommaire_du_livre" if [ "$Contenu" = "$Projet/$1.Sommaire" ] || [ "$Contenu" = "$Projet/$1.Sommaire_du_livre" ] #O alors : then { #O créer la liste des articles de la page avec la page de Contenus du livre. echo "" echo "$Projet/$1.list avec $Contenu :" cat $Contenu | sed "s/\[\[/\n$SitePrefix/g" | grep -e "https:" | grep -v "Catégorie:" | grep -v "#" | sed "s/{{BASEPAGENAME}}/$1/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" | tr ' ' '_' >> $Projet/$1.list exit 0 #cat $Contenu | sed "s/\[\[/$SitePrefix/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" | tr ' ' '_' >> $Projet/$1.list #O créer le fichier de projet avec la page de Contenus du livre. cat $Contenu | grep "[[" | sed "s/\[\[//g" | tr '|' '\n' | grep $1 | sed "s/$1\]\]/\r/g" | sed "s/\]\]//g" | cut -sd '/' -f2-5 > $Projet/$1.prj } fi #O afficher les listes pour contrôle et retourner la valeur 0 si tout est correct. echo "" echo " fichier Projet.list" cat $Projet/$1.list echo "" echo " fichier Projet.prj" cat $Projet/$1.prj echo " " read -p "Si tout est correct : retour-chariot pour continuer, Ctrl-C pour quitter > " exit 0 # Fin lister.sh
Exemple de page Contenus du livre en test LivreTest
modifier- LivreTest.contenu
; Article maître du livre [[Utilisateur:Goelette Cardabela/Sandbox/LivreTest|LivreTest]] ; Contenus [[Utilisateur:Goelette Cardabela/Sandbox/LivreTest/ArticleUn|ArticleUn]]<br /> [[Utilisateur:Goelette Cardabela/Sandbox/LivreTest/ArticleDeux|ArticleDeux]]<br /> [[Utilisateur:Goelette Cardabela/Sandbox/LivreTest/ArticleTrois|ArticleTrois]] {{Autocat}}
La page Contenus d'une version imprimable contient l'Article maître du livre OU la liste des articles qui composent le livre. Dans ces tests nous incluons les deux versions qui nous permettrons de distinguer des présentations différentes de la page Annexe du livre.
Exemple de page du livre en test, LivreTest compilé
modifier- LivreTest.compilé
== LivreTest == === Tests de référencement === ; Article maître du livre :[[Utilisateur:Goelette Cardabela/Sandbox/LivreTest|LivreTest]] ; Contenus :[[Utilisateur:Goelette Cardabela/Sandbox/LivreTest/ArticleUn]] :[[Utilisateur:Goelette Cardabela/Sandbox/LivreTest/ArticleDeux]] :[[Utilisateur:Goelette Cardabela/Sandbox/LivreTest/ArticleTrois]] [[Catégorie:Compilations|LivreTest]]
Nous faisons ici les mêmes remarques que pour la page Contenus de la version imprimable. La première ligne, qui est un lien vers la page principale n'existe pas, normalement, dans une version compilée. Si elle est présente dans de fichier, c'est pour la même raison de démonstration que précédemment: voir les différences de présentation de la page Annexe du livre.
Exemple de listes obtenues pour le livre LivreTest
modifier- LivreTest.list
https://fr.wikibooks.org/wiki/Utilisateur:Goelette Cardabela/Sandbox/LivreTest https://fr.wikibooks.org/wiki/Utilisateur:Goelette Cardabela/Sandbox/LivreTest/ArticleUn https://fr.wikibooks.org/wiki/Utilisateur:Goelette Cardabela/Sandbox/LivreTest/ArticleDeux https://fr.wikibooks.org/wiki/Utilisateur:Goelette Cardabela/Sandbox/LivreTest/ArticleTrois
- LivreTest.prj
LivreTest LivreTest/ArticleUn LivreTest/ArticleDeux LivreTest/ArticleTrois
Tests du module lister
modifierLe but est d'obtenir un fichier qui content la liste des liens vers les pages d'un livre de wikilivres à documenter.
Nous pouvons obtenir ces liens grâce aux pages « Contenus » des Versions imprimables et « Compilation » issue de la compilation d'une page. (Menu à gauche d'une page wikimedia.)
Il est aussi possible d'éditer et d'enregistrer manuellement une telle liste.
Les lignes qui méritent notre attention
modifierLa ligne 65 dans l'édition du 26 avril 2020 :
Remarque : $Projet est un répertoire et $1.contenu est un fichier.
cat $Projet/$1.contenu | sed "s/\[\[/$SitePrefix/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" > $Projet/$1.list
Cette ligne prend en compte le texte de la page Contenus de la Version imprimable du livre pour créer le fichier de liste.
La ligne elle même signifie :
ouvrir le flux du fichier '''''$Projet/$1.contenu''''' | filtrer et remplacer la chaîne "[[" par le préfixe du site $SitePréxixe (chaîne "https://fr.wikibooks.org/wiki/"), | filtrer et remplacer le caractère '|' par le caractère '\n' (retour-chariot), (si ce caractère '|' existe !), | filtrer et supprimer la chaîne "]]", (si cette chaîne existe !), | fitrer et ne retenir que la ligne qui contient la chaîne "wiki", > rediriger le flux vers la création du fichier '''''$Projet/$1.list'''''.
La ligne 79 de la même édition :
cat $Projet/$1.compilé | sed "s/:\[\[/$SitePrefix/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" > $Projet/$1.list
Cette ligne prend en compte le texte de la page Compilation de la Version compilée du livre pour créer le fichier de liste.
Le commentaire est le même que pour la ligne précédent à ceci près qu'au premier filtre on supprime aussi le caractère ':' du début de ligne des fichiers issus de la compilation.
Tests de la commande
modifier- Copier le code du chapitre Lister dans un éditeur et enregistrer ce code dans le répertoire Annexe sous le nom « lister » ou « lister.sh »
- Autoriser l'exécution du code par la commande chmod 777 ~/Annexe/lister
- Copier le « Contenus » de la Version imprimable vu précédemment dans ce sous chapitre,
- Enregistrer ce « Contenus » dans le fichier Annexe/LivreTest/LivreTest.contenus
- Lancer la commande ./lister LivreTest
Vérifier que l'on obtient les fichier
- ~/Annexe/LivreTest/LivreTest.list :
https://fr.wikibooks.org/wiki/Utilisateur:Goelette Cardabela/Sandbox/LivreTest https://fr.wikibooks.org/wiki/Utilisateur:Goelette Cardabela/Sandbox/LivreTest/ArticleUn https://fr.wikibooks.org/wiki/Utilisateur:Goelette Cardabela/Sandbox/LivreTest/ArticleDeux https://fr.wikibooks.org/wiki/Utilisateur:Goelette Cardabela/Sandbox/LivreTest/ArticleTrois
Vérifier que l'on a modifié les autorisations du fichier LivreTest.contenus afin qu'il ne puisse pas être supprimé par mégarde lors des manipulations de fichiers.
- ~/Annexe/LivreTest/LivreTest.prj :
LivreTest LivreTest/ArticleUn LivreTest/ArticleDeux LivreTest/ArticleTrois
Vérifier avec la commande : ~/Annexer$ ls -l ~/Annexer/LivreTest/LivreTest.contenu, que le fichier LivreTest.contenu est en lecture seule pour tous les utilisateurs : -r--r--r--.
-r--r--r-- 1 gc gc 353 avril 3 16:57 /home/gc/Annexer/LivreTest/LivreTest.contenu
Télécharger (module)
modifier- (Download)
- Télécharger le code source de la page ou la sous page grâce à la liste obtenue dans la section lister.
- Documentation
La commande ./télécharger <wikilivre> télécharge la page complète d'une "page" ou d'un "livre" de wikilivre. Elle crée les répertoires de travail avec la même hiérarchie que dans la page originale du livre, ou de sa version imprimable, ou de sa page de compilation. On procède par le téléchargement complet de la page et des sous-pages du livre. Viennent ensuite la création des répertoires de travail des pages qui composent le livre, puis on copie des pages html dans ces répertoires. Pendant tout ce processus des lichiers temporaires de liste sont créés en local: $Projet/$1.locale.list qui est une image locale de la structure du livre. $Projet/$1.mainPage. lien local vers l' "Article maître du livre" $Projet/$1.dirs : liste des sous-pages de l'article principal du livre.
- Organigramme
## télécharger ############ télécharger dans le répertoire de travail, la structure complète du livre. Déplacer les pages html dans des sous-répertoires de travail pour documenter les pages et sous pages créer une liste locale vers les répertoires téléchargés $Projet/$1.locale.list Copier les fichiers html dans les répertoires respectifs. créer un fichier avec le nom de la page $Projet/$1.mainPage. initialiser la variable $mainPage créer un fichier des répertoires de travail à créer. copier les pages et sous pages html dans les répertoires respectifs. quitter le programme d'essai et passer à la création de la page "Annexe" des articles.
Code du module télécharger
#! /bin/bash
# Fichier : télécharger.sh
VERSION=200623
#P Nom du fichier de commandes : télécharger
#P Syntaxe : "télécharger <Page wikimedia>"
#P Exemple : "./télécharger LivreTest" à la console.
#P Date de création : 28 mars 2020
#P Modifié le : 26 avril 2020 par GC
#P Modifié le : 30 mai 2020 par GC pour l'installation automatique.
#P Version de la documentation sur WikiLivres le : 26 avril 2020
#P
#P LES FICHIERS DE COMMANDES
#P## header.sh ##############
#P header.sh, a créé le répertoire des commandes si celui-ci ne préexistait pas
#P il a vérifié la validité ou invalidé de ligne de commande, initialisé
#P les variables $Projet, $Site, $SitePrefix, vérifié l'existence des
#P fichiers de liste "$Projet/$1".list et "$Projet/$1".prj, puis affiché le
#P contenu du répertoire de travail.
#P## lister #################
#P lister a créé le fichier de liste $Projet/$1.list par l'extraction du fichie
#P fichier $Projet/$1.contenu, copie de la page "Contenus" de la version
#P imprimable du livre, ou du fichier $Projet/$1.compilé issu d'une
#P compilation destinée à la publication par PediaPress.
#P il crée aussi le fichier $Projet/$1.prj qui conserve l'ordre d'affichage
#P de la publication.
#D La commande ./télécharger <wikilivre> télécharge la page complète d'une
#D "page" ou d'un "livre" de wikilivre. Elle crée les répertoires de travail
#D avec la même hiérarchie que dans la page originale du livre, ou de sa
#D version imprimable, ou de sa page de compilation.
#D
#D On procède par le téléchargement complet de la page et des sous-pages du
#D livre. Viennent ensuite la création des répertoires de travail des pages
#D qui composent le livre, puis on copie des pages html dans ces répertoires.
#D Pendant tout ce processus des lichiers temporaires de liste sont créés en
#D local:
#D $Projet/$1.locale.list qui est une image locale de la structure du livre.
#D $Projet/$1.mainPage. lien local vers l' "Article maître du livre"
#D $Projet/$1.dirs : liste des sous-pages de l'article principal du livre.
source header.inc
#O## télécharger ############
if [ $0=télécharger ]; then echo "télécharger : Version "$VERSION; fi
#O télécharger dans le répertoire de travail, la structure complète du livre.
cd $Projet
echo "télécharger tous des répertoires du livre '$1'"
wget -r -linf -k -p -E -i $1.list -o wget-log-télécharger.txt
echo "----------"
#O Déplacer les pages html dans des sous-répertoires de travail pour documenter les pages et sous pages
#O créer une liste locale vers les répertoires téléchargés $Projet/$1.locale.list
echo "créer la hirarchie complète concaténées des répertoires du livre '$1'"
cat $Projet/$1.list | sed "s/https:\/\///g" | sed "s/\ /\\\ /g" | tr '\n' ',' > $Projet/$1.locale.list
echo " Liste locale concaténée $Projet/$1.locale.list :"
echo ""
cat $Projet/$1.locale.list
echo "----------"
#O Copier les fichiers html dans les répertoires respectifs.
#O créer un fichier avec le nom de la page $Projet/$1.mainPage.
echo "créer la page du lien local vers la page principale, 'le livre'."
cat $Projet/$1.locale.list | sed "s/ /\\ /g" | cut -d ',' -f1 > $Projet/$1.mainPage
echo "----------"
#O initialiser la variable $mainPage
read mainPage < $Projet/$1.mainPage
echo "variable mainPage = $mainPage"
#T cat $Projet/$1.mainPage | awk -F"/" '{print NF}' > nbchamps
#T read NbChamps < nbchamps
#T echo "Variable NbChamps = $NbChamps"
echo "----------"
#O créer un fichier des répertoires de travail à créer.
ls "$mainPage" | sed "s/.html//g" > $Projet/$1.dirs
echo "sous-répertoires de travail : "
cat $Projet/$1.dirs
echo "----------"
#O copier les pages et sous pages html dans les répertoires respectifs.
while read line
do
echo "$line".html | sed "s/https:\/\///g" | tr '\n' ' ' > source
read Source < source
echo "Source = $Source"
echo "$line" | awk -F"/" '{ print $NF }'| tr '\n' '/' > destination
read dir < destination
mkdir $dir
echo "$line".html | awk -F"/" '{ print $NF }' >> destination
read Destination < destination
echo "Destination = $Destination"
echo "Copier : cp ./$Source $Destination"
cp -f "./$Source" "$Destination"
done < $Projet/$1.list
rm source ; rm destination
#O quitter le programme d'essai et passer à la création de la page "Annexe" des articles.
echo "----------"
# echo -en "\033[31mRetour-chariot une pour créer l'Annexe des articles, Ctrl-C pour quitter.\033[0m "
# read -p ">"
# "\033[31mRetour-chariot une pour créer l'Annexe, Ctrl-C pour quitter >"
exit 0
# Fin télécharger.sh
Test du module « télécharger »
modifierLe but est de télécharger tous les fichiers html qui composent le livre grâce au fichier de liste obtenu précédemment.
Les lignes qui méritent notre attention
modifierligne48 de la version du 26 avril 2020
wget -r -linf -k -p -E -i $1.list -o wget-log.txt
echo "----------"
Cette ligne crée la structure complète des répertoires et fichiers, depuis la racine du site, jusqu'aux fichiers html qui composent le livre.
- Exemple
- lignes 80 à 96 de la version du 26avril 2020
#O copier les pages et sous pages html dans les répertoires respectifs.
while read line
do
echo "$line".html | sed "s/https:\/\///g" | tr '\n' ' ' > source
read Source < source
echo "Source = $Source"
echo "$line" | awk -F"/" '{ print $NF }'| tr '\n' '/' > destination
read dir < destination
mkdir $dir
echo "$line".html | awk -F"/" '{ print $NF }' >> destination
read Destination < destination
echo "Destination = $Destination"
echo "Copier : cp ./$Source $Destination"
cp -f "./$Source" "$Destination"
done < $Projet/$1.list
rm source ; rm destination
- ligne 4 : On ajoute .html à la variable $ligne puis on copie dans le fichier source local, toute la ligne en supprimant https://.
- ligne 5 : On affecte la variable Source le texte enregistré dans le fichier source
- ligne 6 : On affiche à la console le nom de la variable $Source :
- Exemple pour la première ligne : fr.wikibooks.org/wiki/Utilisateur:Goelette Cardabela/Sandbox/LivreTest.html
- ligne 8 : On copie le dernier champ de la ligne dans le fichier destination. C'est du texte !
- Exemple pour la première ligne : LivreTest
- ligne 10 : On en profite pour créer le répertoire correspondant à ce champ dans le répertoire courant.
- ~/Annexer/LivreTest est le répertoire racine du projet, ~/Annexer/LivreTest/LivreTest sera le répertoire de travail de la page principale.
- ligne 11 : On ajoute à ce dernier champ l'extension .html que l'on concatène au fichier destination. C'est une url !.
- ligne 15 : On copie les fichiers html du répertoire source (local) vers le répertoire de destination (local).
- On obtient finalement le lien ~/Annexer/LivreTest/LivreTest/LivreTest.html où la variable du projet $Projet est ~/Annexer/LivreTest.
- Il faudrait ajouter $Projet/ devant source et destination pour être certain de copier dans le répertoire de travail racine.
Tests de la commande télécharger
modifierCopier le code du chapitre Télécharger dans un éditeur et enregistrer ce code dans le répertoire Annexe sous le nom « télécharger » ou « télécharger.sh » Autoriser l'exécution du code par la commande chmod 777 ~/Annexe/télécharger Lancer la commande ./télécharger LivreTest
On devrait obtenir :
- Structure complète du téléchargement avec la commande wget -r -linf -k -p -E -i $1.list -o wget-log-télécharger.txt
~/Annexer$ ls -R LivreTest/fr.wikibooks.org
LivreTest/fr.wikibooks.org: robots.txt wiki LivreTest/fr.wikibooks.org/wiki: 'Utilisateur:Goelette Cardabela' 'LivreTest/fr.wikibooks.org/wiki/Utilisateur:Goelette Cardabela': Sandbox 'LivreTest/fr.wikibooks.org/wiki/Utilisateur:Goelette Cardabela/Sandbox': LivreTest LivreTest.html 'LivreTest/fr.wikibooks.org/wiki/Utilisateur:Goelette Cardabela/Sandbox/LivreTest': ArticleDeux.html ArticleTrois.html ArticleUn.html
- Liste des répertoires créés avec la commande télécharger LivreTest.
$ ls -a -1 ~/Annexer$/LivreTest
.
..
ArticleDeux
ArticleTrois
ArticleUn
fr.wikibooks.org
LivreTest
LivreTest.compilé
LivreTest.compilé.test
LivreTest.contenu
LivreTest.contenu.test
LivreTest.dirs
LivreTest.list
LivreTest.locale.list
LivreTest.mainPage
LivreTest.prj
wget-log-télécharger.txt
Ajouter sclt (module)
modifier- (Adding sclt) or (Append sclt)
Ajouter la section article, source, licence, contributeur(s).
- Documentation
La commande ./ajouter-sclt <wikilivre> commence par créer la page $Projet/$1.sclt comme elle apparaîtra dans la première partie de la page "Annexe" du livre avec les titre en wikitexte et les sections : Références: toutes celles qui n'ont pas été affichées dans les pages. Contenus: liens établis vers la page du livre et les articles (sous-pages) Source de l'édition: lien vers la page qui a permis de créer l' "Annexe". Sources licences et contributeurs des articles: ne concerne que les articles, les sous-pages.
- Organigramme
## ajouter_sclt ########### but final: créer la page "Annexe" avec les pages Projet.sclt et Projet.scli. --- créer la page PageSclt=$Projet/$1.sclt et afficher son contenu. ajouter la balise <references /> ajouter le lien vers : la page du livre imprimable, et vers les articles. créer la section 'Article', 'Source', 'licence', 'Contributeur(?)' ajouter le texte : Les ''sources'' listées pour chaque article fournissent des informations de licence plus détaillées, y compris le statut des droits d'auteurs, les détenteurs de ces droits et les conditions de licence. ou, valider l'un ou l'autre de ces textes : Les textes sont disponibles avec leurs licences respectives, cependant d’autres termes peuvent s’appliquer.<br /> Voyez les termes d’utilisation pour plus de détails :<br /> https://wikimediafoundation.org/wiki/Conditions_d'utilisation Créer ou recréer le fichier de liste $Projet/$1.pj tant qu'il y a des lignes dans le fichier de liste, afficher la ligne lue, extraire et copier toutes les chaînes de caractères du fichier html $ligne.html dans le fichier $ligne.str et les dupliquer à l'écran créer les fichiers de documentation des pages : article, source, auteur(s).
Code du module ajouter_sclt
#! /bin/bash
# Fichier : ajouter_sclt.sh
VERSION=210125
#P Nom du fichier de commandes : ajouter_sclt
#P Syntaxe : "ajouter_sclt <nom du livre>"
#P Exemple : "./ajouter_sclt LivreTest" à la console.
#P Date de création : 12 avril 2020
#P Modifié le : par GC le 1er mai 2020
#P Modifié le : par GC pour l'installation automatique.
#P Version de la documentation sur WikiLivres le : 30 avril 2020
#P
#P LES FICHIERS DE COMMANDES
#P
#P## header.sh ##############
#P header.sh, a créé le répertoire des commandes si celui-ci ne préexistait pas
#P il a vérifié la validité ou invalidé de ligne de commande, initialisé
#P les variables $Projet, $Site, $SitePrefix, vérifié l'existence des
#P fichiers de liste "$Projet/$1".list et "$Projet/$1".prj, puis affiché le
#P contenu du répertoire de travail.
#P
#P## lister #################
#P lister a créé le fichier de liste $Projet/$1.list par l'extraction du fichie
#P fichier $Projet/$1.contenu, copie de la page "Contenus" de la version
#P imprimable du livre, ou du fichier $Projet/$1.compilé issu d'une
#P compilation destinée à la publication par PediaPress.
#P il crée aussi le fichier $Projet/$1.prj qui conserve l'ordre d'affichage
#P de la publication.
#P
#P## télécharger ############
#P la commande aura téléchargé toutes les page du livre et aura copié les pages
#P html dans des répertoires qui leurs sont dédiés pour y extraire toute la
#P documentation nécessaire à la création de la page "Annexe" du livre.
#w à ce stade, pour les tests; on dispose des répertoires de travail :
#w LivreTest, ArticleUn, ArticleDeux, ArticleTrois
#P qui contiennent chacun le fichier html de la page ou de l'article qui le
#P concerne.
#P L'ensemble de commandes aura créé les fichiers de listes :
#P $Projet/$1.dirs, $Projet/$1.list, $Projet/$1.mainPage, $Projet/$1.prj
#P
#D La commande ./ajouter-sclt <wikilivre> commence par créer la page
#D $Projet/$1.sclt comme elle apparaîtra dans la première partie de la page
#D "Annexe" du livre avec les titre en wikitexte et les sections :
#D Références: toutes celles qui n'ont pas été affichées dans les pages.
#D Contenus: liens établis vers la page du livre et les articles (sous-pages)
#D Source de l'édition: lien vers la page qui a permis de créer l' "Annexe".
#D Sources licences et contributeurs des articles: ne concerne que les
#D articles, les sous-pages.
#D
#O inclure le fichier d'entête header.sh
source header.inc
if [ $0=ajouter_sclt ]; then echo "ajouter_sclt : Version "$VERSION; fi
#O## ajouter_sclt ###########
PageSclt=$Projet/$1.sclt
echo $PageSclt
cd $Projet
#T exit 0
#O but final: créer la page "Annexe" avec les pages Projet.sclt et Projet.scli.
#O ---
#O créer la page PageSclt=$Projet/$1.sclt et afficher son contenu.
echo "créer la page "$PageSclt
echo "----------"
echo "= Annexe =" > $PageSclt
echo "" >> $PageSclt
#O ajouter la balise <references />
echo "== Références ==" >> $PageSclt
echo "<references />" >> $PageSclt
echo " " >> $PageSclt
echo "{{Nouvelle page imprimée}}" >> $PageSclt
#? (option) ajouter la liste créée avec la page "Contenus" de la version imprimable ou la page compilée ?
#O ajouter le lien vers : la page du livre imprimable, et vers les articles.
echo "== Contenus ==" >> $PageSclt
echo "<div style="font-zize:85%";>" >> $PageSclt
cat $Projet/$1".list" | tr ' ' '_' | tr '\n' '%' | sed "s/%/\n\n/g" >> $PageSclt
echo "</div>" >> $PageSclt
#0 ajouter lien vers la source de cette édition.
echo "=== Source de cette édition ===" >> $PageSclt
echo "<div style="font-zize:85%";>" >> $PageSclt
echo -n "https://" >> $PageSclt
cat $Projet/$1.mainPage |sed "s/\\\ /_/g" >> $PageSclt
#P autre version : cat $Projet/$1".list" | tr ' ' '_' | tr '\n' '%' | sed "s/%/%\n/g" | grep $1% | tr -d % >> $PageSclt
echo "</div>" >> $PageSclt
echo " " >> $PageSclt
echo "{{Nouvelle page imprimée}}" >> $PageSclt
#O créer la section 'Article', 'Source', 'licence', 'Contributeur(?)'
echo "== Sources licences et contributeurs des articles ==" >> $PageSclt
#O ajouter le texte : style PediaPress ou personnalisé.
#O Les ''sources'' listées pour chaque article fournissent des informations
#O de licence plus détaillées, y compris le statut des droits d'auteurs, les
#O détenteurs de ces droits et les conditions de licence.
echo "<span style="font-zize:85%";>Les ''sources'' listées pour chaque article fournissent des informations de licence plus détaillées, y compris le statut des droits d'auteurs, les détenteurs de ces droits et les conditions de licence.</span>" >> $PageSclt
#O ou, valider l'un ou l'autre de ces textes :
#O Les textes sont disponibles avec leurs licences respectives, cependant
#O d’autres termes peuvent s’appliquer.<br />
#O Voyez les termes d’utilisation pour plus de détails :<br />
#O https://wikimediafoundation.org/wiki/Conditions_d'utilisation
# echo "<span style="font-zize:85%";>Les textes sont disponibles avec leurs licences respectives, cependant d’autres termes peuvent s’appliquer.<br />Voyez les termes d’utilisation pour plus de détails :<br />https://wikimediafoundation.org/wiki/Conditions_d'utilisation.</span>" >> $PageSclt
echo " " >> $PageSclt
echo "<div style="font-zize:72%";>" >> $PageSclt
#T exit 0
#T echo -n "Répertoire courant : "
#T pwd
echo "----------"
#O Créer ou recréer le fichier de liste $Projet/$1.pj
cat $Projet/$1.list | awk -F"/" '{ print $NF }' > $Projet/$1.pj
#Liste=~/Annexer/$1/$1.pj
Liste=$Projet/$1.pj
echo "Fichier de liste : "$Liste
#T exit 0
#O tant qu'il y a des lignes dans le fichier de liste,
while read ligne
do
#O afficher la ligne lue,
echo ""
echo " ligne lue = "$ligne
echo ""
#O extraire et copier toutes les chaînes de caractères du fichier html
#O $ligne.html dans le fichier $ligne.str et les dupliquer à l'écran
#T pwd
mkd -pws '**' "$ligne/$ligne.html" $Projet/$ligne/$ligne.tmp | tr ',' '\n' > $Projet/$ligne/$ligne.str
#T break
#O créer les fichiers de documentation des pages :
echo "*** Références : articles, src, lic, contrib. "
#O article,
if [ $ligne != $1 ]
then
echo "'''"$ligne"'''" >> $PageSclt
fi
echo "'''"$ligne"'''" > $Projet/$ligne/$ligne.article
cat $Projet/$ligne/$ligne.article
#O source,
echo -n ", ''source : ''https://"$Site"/w/index.php?oldid=" > $Projet/$ligne/$ligne.RevisionId
cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e wgRevisionId | tr -d ':' | sed "s/\"/%/g" | cut -d'%' -f3 >> $Projet/$ligne/$ligne.RevisionId
if [ $ligne != $1 ]
then
cat $Projet/$ligne/$ligne.RevisionId >> $PageSclt
fi
cat $Projet/$ligne/$ligne.RevisionId
#P licence du bas de page :
#P <li id="footer-info-copyright">Les textes sont disponibles sous <a href="https://creativecommons.org/licenses/by-sa/3.0/">licence Creative Commons attribution partage à l’identique</a> ; d’autres termes peuvent s’appliquer.<br/>
#P Voyez les <a href="https://wikimediafoundation.org/wiki/Conditions_d'utilisation">termes d’utilisation</a> pour plus de détails.<br/></li>
#P
#P license :
#P licence s'écrit license en anglais (langage de base en programmation).
#P <link rel="license" href="https://creativecommons.org/licenses/by-sa/3.0/"/>
#T echo ", ''Droits de copie :''" >> ArticleUn.tmp
#T cat ArticleUn.str | grep -n -m 1 -i -e license | sed "s/\"\//%\//g" | cut -d'%' -f2 |sed "s/\/\//https:\/\//g" >> ArticleUn.tmp
#O license :
echo -n ", ''licence : ''" > $Projet/$ligne/$ligne.license
#T cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e license | sed "s/\"\//%\//g" | cut -d'%' -f4 >> $Projet/$ligne/$ligne.license
cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e license | sed "s/\"\//%\//g" | tr '"' '%' | cut -d'%' -f4 >> $Projet/$ligne/$ligne.license
#T cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e license | sed "s/\"\//%\//g" | cut -d'%' -f2 | sed "s/\/\//https:\/\//g" >> $Projet/$ligne/$ligne.license
if [ $ligne != $1 ]
then
cat $Projet/$ligne/$ligne.license >> $PageSclt
fi
cat $Projet/$ligne/$ligne.license
#
#P spécial pour bas de page fr ##
cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e footer-info-copyright | sed "s/\"\//%\//g" | tr '"' '%' | cut -d'%' -f4 > $Projet/$ligne/$ligne.licence
#O auteur(s).
echo -n ", ''auteur(s) : ''" > $Projet/$ligne/$ligne.auteur
cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e wgRelevantUserName | sed "s/\"/%/g" | cut -d'%' -f4 > tmp
if test -s tmp;
then cat tmp >> $Projet/$ligne/$ligne.auteur; rm tmp;
else
echo "Pas trouvé d'auteur ! " >> $Projet/$ligne/$ligne.auteur
echo "voir : https://xtools.wmflabs.org/articleinfo/fr.wikibooks.org/$ligne" >> $Projet/$ligne/$ligne.auteur;
fi
if [ $ligne != $1 ]
then
cat $Projet/$ligne/$ligne.auteur >> $PageSclt
cat $Projet/$ligne/$ligne.auteur
fi
echo "" >> $PageSclt
#O fin du tant que.
done < $Projet/$1.pj #< $Liste
echo "</div>" >> $PageSclt
echo "{{Nouvelle page imprimée}}" >> $PageSclt
exit 0
# Fin de ajouter_sclt.sh
Tests du module ajouter_sclt
modifierLe but est de créer l'entête de la page Annexe et d'y ajouter la liste des articles avec les sources, licences, contributeurs.
Les numéros des pages n'est possibles que lorsque la version imprimable aura été créée, avec une post-indexation et une post-annexion.
Les lignes qui méritent notre attention
modifierRemarque : Dans les explications du code on entend par projet le nom du projet entré en paramètre dans la commande ./ajouter_sclt projet
Lignes 117-119 de la version du 29 avril 2020
#O extraire et copier toutes les chaînes de caractères du fichier html #O $ligne.html dans le fichier $ligne.str et les dupliquer à l'écran mkd -pws '**' $Projet/$ligne/$ligne.html $Projet/$ligne/$ligne.tmp | tr ',' '\n' > $Projet/$ligne/$ligne.str
mkd n'est pas inclus dans les distributions linux. les paquets et sources sont téléchargeable pour tous les systèmes d'exploitation.
Pour toute informations complémentaires : mkd (commande unix), Mkd_(Extracteur_de_documents)
Cette ligne de commandes extrait tous les commentaires avec une sortie dans un fichier projet.tmp ainsi que vers la sortie standard (l'écran par défaut) où elle est reprise pour être listée en colonne grâce au séparateur de chaînes ','.
Lignes 124-130
#O article, if [ $ligne != $1 ] then echo ""$ligne"" >> $PageSclt fi echo ""$ligne"" > $Projet/$ligne/$ligne.article cat $Projet/$ligne/$ligne.article
$ligne est la variable lue ligne par ligne du fichier de liste projet.pj dans une boucle tant qu'il y a des lignes à lire, faire ...
Cette ligne est aussi le nom de l'article qui va être analysé. Si $ligne n'est pas le nom du livre (de l'article principal) le nom de l'article est ajouté à la page $PageSclt.
Lignes 132-139
#O source, echo -n ", source : https://"$Site"/w/index.php?oldid=" > $Projet/$ligne/$ligne.RevisionId cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e wgRevisionId | tr -d ':' | sed "s/\"/%/g" | cut -d'%' -f3 >> $Projet/$ligne/$ligne.RevisionId if [ $ligne != $1 ] then cat $Projet/$ligne/$ligne.RevisionId >> $PageSclt fi cat $Projet/$ligne/$ligne.RevisionId
La deuxième ligne crée le fichier de .RevisionId dans lequel on écrit une chaîne de caractères sans retour à la ligne.
La troisième ligne :
cat ouvre le flux du fichier projet.str | retient la ligne qui contient wgRevisionId, | supprime le caractère ':' qu'il contient | remplace les caractères '"' par le caractère '%' | coupe la chaîne à l'endroit où se trouvent les caractères '%' et sélectionne le champ 3. >> la chaîne résultante est ajoutée au fichier projet.RevisionId
Lignes 152-164
1 #O license : 2 echo -n ", licence : " > $Projet/$ligne/$ligne.license 3 #T cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e license | sed "s/\"\//%\//g" | cut -d'%' -f4 >> $Projet/$ligne/$ligne.license 4 cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e license | sed "s/\"\//%\//g" | tr '"' '%' | cut -d'%' -f4 >> $Projet/$ligne/$ligne.license 5 #T cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e license | sed "s/\"\//%\//g" | cut -d'%' -f2 | sed "s/\/\//https:\/\//g" >> $Projet/$ligne/$ligne.license 6 if [ $ligne != $1 ] 7 then 8 cat $Projet/$ligne/$ligne.license >> $PageSclt 9 fi 10 cat $Projet/$ligne/$ligne.license 11 # 12 #P spécial pour bas de page fr ## 13 cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e footer-info-copyright | sed "s/\"\//%\//g" | tr '"' '%' | cut -d'%' -f4 > $Projet/$ligne/$ligne.licence
- La ligne 2 initialise dans le répertoire $Projet/$ligne/, le fichier $ligne.license de l'article $ligne.
exemple : le répertoire de l'ArticleUn est ~/Annexer/LivreTest/ArticleUn/ dans lequel on va écrire ArticleUn.license
- Les lignes 3 et 5 sont des commentaires de tests à l'usage des programmeurs.
- La ligne 4 produit les fichier .license dans le répertoire de l'article correspondant.
- La ligne 5 :
cat ouvre le flux du fichier projet.str, | retient la ligne qui contient license, | sélectionne la chaîne "/ et la remplace par la chaîne %/, | supprime '%' et coupe la chaîne au caractère '%' puis sélectionne le deuxième tronçon (-f2), il existe aussi (-f2-3, -f2-4) etc. | remplacer les caractères // par https:// >> copier la chaîne dans le fichier projet.license
- Les lignes 6 à 9 ajoutent la license à $PageSclt si la license concerne un article et non la page principale du livre.
- La ligne 10 affiche à l'écran le contenu du fichier qui vient d'être créé.
- La ligne 13 : mêmes remarques que précédemment par sélection du bas de page en français avec licence.
Lignes 155-159
#O auteur(s). echo -n ", auteur(s) : " > $Projet/$ligne/$ligne.auteur cat $Projet/$ligne/$ligne.str | grep -n -m 1 -i -e wgRelevantUserName | sed "s/\"/%/g" | cut -d'%' -f4 >> $Projet/$ligne/$ligne.auteur if [ $ligne != $1 ] then cat $Projet/$ligne/$ligne.auteur >> $PageSclt fi cat $Projet/$ligne/$ligne.auteur
- mêmes remarques que pour les actions précédentes.
Tests de la commande
modifier- fichier obtenu avec la commande ~/Annexer/ajouter_sclt LivreTest
cat LivreTest.sclt dans le répertoire du projet LivreTest
= Annexe = == Références == <references /> {{Nouvelle page imprimée}} == Contenus == <small> https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/ArticleUn https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/ArticleDeux https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/ArticleTrois </small> === Source de cette édition === <small> https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest </small> {{Nouvelle page imprimée}} == Sources licences et contributeurs des articles == Les ''sources'' listées pour chaque article fournissent des informations de licence plus détaillées, y compris le statut des droits d'auteurs, les détenteurs de ces droits et les conditions de licence. <div style="font-size:72.5%;"> '''ArticleUn''' , ''source : ''https://fr.wikibooks.org/w/index.php?oldid=632571 , ''licence : ''https://creativecommons.org/licenses/by-sa/3.0/ , ''auteur(s) : ''Goelette Cardabela '''ArticleDeux''' , ''source : ''https://fr.wikibooks.org/w/index.php?oldid=632572 , ''licence : ''https://creativecommons.org/licenses/by-sa/3.0/ , ''auteur(s) : ''Goelette Cardabela '''ArticleTrois''' , ''source : ''https://fr.wikibooks.org/w/index.php?oldid=632573 , ''licence : ''https://creativecommons.org/licenses/by-sa/3.0/ , ''auteur(s) : ''Goelette Cardabela </div> {{Nouvelle page imprimée}}
- Apparence provisoire un peu arrangée pour ne pas intervenir sur l'index des sections de cet article ...
Annexe
Références
Contenus
https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest
https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/ArticleUn
https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/ArticleDeux
https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/ArticleTrois
Source de cette édition
https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest
Sources licences et contributeurs des articles
Les sources listées pour chaque article fournissent des informations de licence plus détaillées, y compris le statut des droits d'auteurs, les détenteurs de ces droits et les conditions de licence.
ArticleUn , source : https://fr.wikibooks.org/w/index.php?oldid=632571 , licence : https://creativecommons.org/licenses/by-sa/3.0/ , auteur(s) : Goelette Cardabela
ArticleDeux , source : https://fr.wikibooks.org/w/index.php?oldid=632572 , licence : https://creativecommons.org/licenses/by-sa/3.0/ , auteur(s) : Goelette Cardabela
ArticleTrois , source : https://fr.wikibooks.org/w/index.php?oldid=632573 , licence : https://creativecommons.org/licenses/by-sa/3.0/ , auteur(s) : Goelette Cardabela
Ajouter scli (trois modules indépendants)
modifier- (Adding scli) or (Append scli)
Ajouter la section image, source, license, contributeurs(s) à la page Annexe.
Les fichier de commandes scli
modifier- On peut concevoir deux façon ce référencer les images
- La version globale : on extrait les images de la page principale.
Illustration 2 Source : ..., Licence : ..., Contributeur : ... Illustration 3 Source : ..., Licence : ..., Contributeur : ... Illustration 4 Source : ..., Licence : ..., Contributeur : ...
- La version par article : les images sont extraites de chaque article, ce qui donne :
Article 1 :
Article 2 :
Illustration 2.n Source : ..., Licence : ..., Contributeur : ...
Version classique sclic (module)
modifier- Documentation programmeur
## ajouter_sclic ########## Remarques : à ce stade, Les fichiers $1.list, $1.prj, $1.pj, $1.sclt, $.mainPage sont cencés préexister dans le répertoire racine du projet $1. De même, les fichiers <Article>.str sont sensés préexister dans les répertoires <Article> correspondants. seront créés : dans le rétoire de travail racine ~/Annexe/$1/. : le fichier $1.sclic qui vient compléter le fichier $1.sclt afin de créerle fichier "Annexe", dans le sous-répertoire de travail ~/Annexe/$1/$1/. : $1.files, $1.pict, $1.illustrations, $1.links, html.list et les fichiers d'images .title, .source, .license, .auteur.
- Organigramme programmeur
inclure le fichier d'entête header.sh ## ajouter_scli_classique ########### ligne de commande "ajouter_sclic <livre>" où "livre" = variable $1 PageScliC sera la variable d'identifiation du fichier "livre.sclic" placé dans le répertoire" de travail du projet : $Projet = ~/Annexe/$1/. se placer dans le sous-répertoire de travail "$Projet/$1/" rappel : $Projet = ~/Annexer/$1 d'où ss-rep = ~/Annexer/$1/$1/. créer la section 'Image', 'Source', 'licence', 'Contributeur(?)' ajouter le texte : style PediaPress ou personnalisé.; Organigramme inclure le fichier d'entête header.sh ## ajouter_scli_classique ########### ligne de commande "ajouter_sclic <livre>" où "livre" = variable $1 PageScliC sera la variable d'identifiation du fichier "livre.sclic" placé dans le répertoire" de travail du projet : $Projet = ~/Annexe/$1/. se placer dans le sous-répertoire de travail "$Projet/$1/" rappel : $Projet = ~/Annexer/$1 d'où ss-rep = ~/Annexer/$1/$1/. créer la section 'Image', 'Source', 'licence', 'Contributeur(?)' ajouter le texte : style PediaPress ou personnalisé. style PediaPress : Les ''sources'' listées pour chaque article fournissent des informations de licence plus détaillées, y compris le statut des droits d'auteurs, les détenteurs de ces droits et les conditions de licence. ou: (imprimer l'un ou l'autre de ces textes) style personnalisé : Les textes sont disponibles avec leurs licences respectives, cependant d’autres termes peuvent s’appliquer.<br /> Voyez les termes d’utilisation pour plus de détails :<br /> https://wikimediafoundation.org/wiki/Conditions_d'utilisation créer les fichiers de documentation des images de la page principale. ouvrir le flux $Projet/$1/$1.str de la page principale et sélectionner les chaînes de caractères contenant fichier:, file:, image:, dans le nouveau fichier $Projet/$1/$1.files télécharger les fichiers d'images depuis le serveur wikimedia. initialiser le fichier de liste html.list avec un texte vide. lister les fichiers d'images dans l'ordre d'impression ou de l'affichage, à laide de la liste $1.links. créer les fichiers de documentation des pages : tant qu'il y a des liens (locaux) dans le fichier d'images html.list afficher la ligne lue, sélectionner les chaînes du fichier d'image et les transférer dans images, sources, licence, auteur(s). terminer la page $PageScliC fin du tant qu'il y a des lignes terminer la page $PageScliC
Code ajouter_sclic
#! /bin/bash
# Fichier : ajouter_sclic.sh
VERSION=210125
#P Nom du fichier de commandes : ajouter_sclic
#P Syntaxe : "ajouter_sclic <nom du livre>"
#P Exemple : "./ajouter_sclic LivreTest" à la console.
#P Date de création : 30 mars 2020
#P Modifié le : 7 mai 2020 par GC
#P Modifié le : 30 mai 2020 par GC pour l'installation automatique
#P Version de la documentation sur WikiLivres le : 7 mai 2020
#P
#P LES FICHIERS DE COMMANDES
#P
#P## header.sh ##############
#P header.sh, a créé le répertoire des commandes si celui-ci ne préexistait pas
#P il a vérifié la validité ou invalidé de ligne de commande, initialisé
#P les variables $Projet, $Site, $SitePrefix, vérifié l'existence des
#P fichiers de liste "$Projet/$1".list et "$Projet/$1".prj, puis affiché le
#P contenu du répertoire de travail.
#P
#P## lister #################
#P lister a créé le fichier de liste $Projet/$1.list par l'extraction du
#P fichier $Projet/$1.contenu, copie de la page "Contenus" de la version
#P imprimable du livre, ou du fichier $Projet/$1.compilé issu d'une
#P compilation destinée à la publication par PediaPress.
#P il crée aussi le fichier $Projet/$1.prj qui conserve l'ordre d'affichage
#P de la publication.
#P
#P## télécharger ############
#P la commande aura téléchargé toutes les page du livre et aura copié les pages
#P html dans des répertoires qui leurs sont dédiés pour y extraire toute la
#P documentation nécessaire à la création de la page "Annexe" du livre.
#w à ce stade, pour les tests; on dispose des répertoires de travail :
#w LivreTest, ArticleUn, ArticleDeux, ArticleTrois
#P qui contiennent chacun le fichier html de la page ou de l'article qui le
#P concerne.
#P L'ensemble des commandes aura créé les fichiers de listes :
#P $Projet/$1.dirs, $Projet/$1.list, $Projet/$1.mainPage, $Projet/$1.prj
#P
#P## ajouter_sclt ###########
#P La commande ./ajouter-sclt <wikilivre> commence par créer la page
#P $Projet/$1.sclt comme elle apparaîtra dans la première partie de la page
#P "Annexe" du livre avec les titre en wikitexte et les sections :
#P Références: toutes celles qui n'ont pas été affichées dans les pages.
#P Contenus: liens établis vers la page du livre et les articles (sous-pages)
#P Source de l'édition: lien vers la page qui a permis de créer l' "Annexe".
#P Sources licences et contributeurs des articles: ne concerne que les
#P articles, les sous-pages.
#P
#D## ajouter_sclic ##########
#D Remarques :
#D à ce stade, Les fichiers $1.list, $1.prj, $1.pj, $1.sclt, $.mainPage sont
#D censés préexister dans le répertoire racine du projet $1.
#D De même, les fichiers <Article>.str sont sensés préexister dans les
#D répertoires <Article> correspondants.
#D seront créés :
#D dans le répertoire de travail racine ~/Annexe/$1/. : le fichier $1.sclic qui
#D vient compléter le fichier $1.sclt afin de créerle fichier "Annexe",
#D dans le sous-répertoire de travail ~/Annexe/$1/$1/. :
#D $1.files, $1.pict, $1.illustrations, $1.links, html.list et
#D les fichiers d'images .str .title, .source, .license, .auteur.
#D
#O inclure le fichier d'entête header.sh
source header.inc
#O## ajouter_scli_classique ###########
if [ $0=ajouter_sclic ]; then echo "ajouter_sclic : Version "$VERSION; fi
#0 initialisation de la variables $PageScliC, avec le premier paramètre de la
#O ligne de commande "ajouter_sclic <livre>" où "livre" = variable $1
#O PageScliC sera la variable d'identifiation du fichier "livre.sclic" placé
#O dans le répertoire" de travail du projet : $Projet = ~/Annexe/$1/.
PageScliC=$Projet/$1.sclic
echo "Page .scli classique .sclic = " $PageScliC
echo "------"
#O se placer dans le sous-répertoire de travail "$Projet/$1/"
#P rappel : $Projet = ~/Annexer/$1 d'où ss-rep = ~/Annexer/$1/$1/.
cd $Projet/$1/
echo -n "Répertoire de travail pour l'annexion classique des illustrations : "
pwd
#O créer la section 'Image', 'Source', 'licence', 'Contributeur(?)'
echo "== Sources des images licences et contributeurs ==" > $PageScliC
#O ajouter le texte : style PediaPress ou personnalisé.
#O style PediaPress :
#O Les ''sources'' listées pour chaque article fournissent des informations
#O de licence plus détaillées, y compris le statut des droits d'auteurs, les
#O détenteurs de ces droits et les conditions de licence.
echo "<span style="font-zize:85%";>Les ''sources'' listées pour chaque illustration fournissent des informations de licence plus détaillées, y compris le statut des droits d'auteurs, les détenteurs de ces droits et les conditions de licence.</span>" >> $PageScliC
#O ou: (imprimer l'un ou l'autre de ces textes)
#O style personnalisé :
#O Les textes sont disponibles avec leurs licences respectives, cependant
#O d’autres termes peuvent s’appliquer.<br />
#O Voyez les termes d’utilisation pour plus de détails :<br />
#O https://wikimediafoundation.org/wiki/Conditions_d'utilisation
# echo "<span style="font-zize:85%";>Les textes sont disponibles avec leurs licences respectives, cependant d’autres termes peuvent s’appliquer.<br />Voyez les termes d’utilisation pour plus de détails :<br />https://wikimediafoundation.org/wiki/Conditions_d'utilisation.</span>" >> $PageScliC
echo " " >> $PageScliC
echo "<div style="font-zize:72%";>" >> $PageScliC
#T exit
#O créer les fichiers de documentation des images de la page principale.
#O ouvrir le flux $Projet/$1/$1.str de la page principale et sélectionner les
#O chaînes de caractères contenant fichier:, file:, image:, dans le nouveau
#O fichier $Projet/$1/$1.files
cat $Projet/$1/$1.str | grep -n -i -e fichier: -e file: -e image: > $Projet/$1/$1.files
cat $Projet/$1/$1.str | grep -n -i -e fichier: -e .jpg -e .png -e .gif > $Projet/$1/$1.picts
cat $Projet/$1/$1.files | grep title |sed "s/<\/div>//g" | awk -F">" '{print $NF}' > $Projet/$1/$1.illustrations
#T ls $Projet/$1/.
#T exit
# O ouvrir le flux $Projet/$1/$1.files, et remplacer à la volée le caractère
# O '=' par un double retour-chariot,
# O sélectionner les lignes contenant https
# T #T avec les deux lignes suivantes option -A 2,
# O couper les lignes au caractère " et conserver le deuxième champ,
# O #T conserver les lignes qui contennent le champ "image"
# O remplacer à la volée le caractère " par le caractère '!', et
# O concaténer les chaînes contenant le caractère ! dans le nouveau fichier
# O Projet/$1/$1/.lnk
# #T cat $Projet/$1/$1.files | awk -F"=" '{for (i=1;i<=NF;i++) print $i "\n"}' |grep -A 2 https|cut -d '"' -f2
# #T |grep -B 2 image|tr '\n' !|cut -d ! -f1-3
#cat $Projet/$1/$1.files | awk -F "=" '{for (i=1;i<=NF;i++) print $i "\n"}' | grep https | sed "s/\"/!/g" | cut -d '!' -f2-3 | grep https | tr '>' ! | sed "s/<\/a//g" |sed "s/!//g" > $Projet/$1/$1.links
cat $Projet/$1/$1.files | awk -F "=" '{for (i=1;i<=NF;i++) print $i "\n"}' | grep https | sed "s/\"/!/g" | cut -d '!' -f2-3 | grep https | tr '>' ! | sed "s/<\/a//g" |sed "s/!/\n/g" | grep https |grep -v 'upload' > $Projet/$1/$1.links
exit 0
#O télécharger les fichiers d'images depuis le serveur wikimedia.
# #T wget -P $Projet/$1 -i $Projet/$1/$1.links
wget -P $Projet/$1 -r -linf -k -p -E -i $Projet/$1/$1.links
cp ./commons.wikimedia.org/wiki/*.html .
#T créer un fichier de liste html.list
#T ls *.html | grep -i -e fichier: -e file: -e image: > html.list
#T echo html.list
#O initialiser le fichier de liste html.list avec un texte vide.
echo -n "" > html.list
#O lister les fichiers d'images dans l'ordre d'impression ou de l'affichage,
#O à laide de la liste $1.links.
while read line
do
echo $line | awk -F"/" '{print $NF}' | cut -d '%' -f1 | cut -d '.' -f1 > tmp
#echo $line | tr ' ' '_' > tmp
read Image < tmp
ls $Image*.html >> html.list
echo "Image : "$Image.html
done < $Projet/$1/$1.links
#T exit
#T compter le nombre de lignes (nb d'images) du fichier $Projet/$1/$1.links
#T cat $Projet/$1/$1.links | wc -l > $Projet/$1/links.nblignes
#T read nbl < $Projet/$1/links.nblignes
#T echo -n "Nombre de lignes de links = "
#T echo $nbl
#T initialiser la variable entière de comptage de boucle
#T declare -i n=1
#T cd $Projet/$1
#T echo -n "pwd = "
#T pwd
#O créer les fichiers de documentation des pages :
echo "*** Références : image, src, lic, contrib. "
#O tant qu'il y a des liens (locaux) dans le fichier d'images html.list
while read line
do
#O afficher la ligne lue,
echo ""
echo ""
echo "---- ligne lue = $line ---"
echo ""
#O sélectionner les chaînes du fichier d'image et les transférer dans
mkd -pw '**' $line $line.tmp
cat $line.tmp | tr ',' '\n' > $line.str
#O images,
echo -n "'''Illustration : '''" > $line.title
cat $line.str |grep wgTitle | cut -d '"' -f4 >> $line.title
cat $line.title >> $PageScliC
cat $line.title
#O source,
echo -n ", ''source : ''https://"$Site"/w/index.php?title=" > $line.source
echo $line | sed "s/.html//g" >> $line.source
cat $line.source >> $PageScliC
cat $line.source
#O license,
echo -n ", ''licence : ''" > $line.license
cat $line.str | grep licensetpl_short | sed "s/<td>//g" | sed "s/<span class//g" | sed "s/<\/span>//g" | sed "s/style=\"display:none;\"//g" | tr '=' '\n' | grep licensetpl_short | awk -F">" '{print $NF}' >> $line.license
cat $line.license >> $PageScliC
cat $line.license
#O auteur(s).
echo -n ", ''auteur(s) : ''" > $line.auteur
cat $line.str | grep -i -n -m1 -A 1 -e Author | grep -i -e user -e utilisteur -e auteur | tr '/' '\n' | grep -i -e user -e utilisteur -e auteur | cut -d '"' -f1 > tmp
if test -s tmp
then echo "Nom d'auteur non vide"
else echo "-" > tmp
fi
cat tmp >> $line.auteur
cat $line.auteur >> $PageScliC
cat $line.auteur
#O terminer la page $PageScliC
echo "" >> $PageScliC
#O fin du tant qu'il y a des lignes
done < html.list
#O terminer la page $PageScliC
echo "</div>" >> $PageScliC
echo "{{Nouvelle page imprimée}}" >> $PageScliC
exit 0
# Fin de ajouter_sclic.sh
Programme des tests du module ajouter_sclic
modifierLes lignes qui méritent notre attention
modifierTests de la commande ajouter_sclic
modifierFichiers obtenus avec la commande ~/Annexer/ajouter_sclic LivreTest
modifier- contenu du fichier /home/jpl/Annexer/LivreTest/LivreTest.pj
https://commons.wikimedia.org/wiki/File:Commerce_de_communautés_indigènes.JPG https://commons.wikimedia.org/wiki/File:Fernando_Botero_(2018).jpg https://commons.wikimedia.org/wiki/File:Gabriel_Garcia_Marquez_-_Fresque.jpg https://commons.wikimedia.org/wiki/File:Pano_Plazo_Botero.jpg
- fichier LivreTest.sclic
== Sources des images licences et contributeurs == <small>Les ''sources'' listées pour chaque illustration fournissent des informations de licence plus détaillées, y compris le statut des droits d'auteurs, les détenteurs de ces droits et les conditions de licence.</small> <div style="font-size:72.5%;"> '''Illustration : '''Gabriel Garcia Marquez - Fresque.jpg , ''source : ''https://fr.wikibooks.org/w/index.php?title=File:Gabriel_Garcia_Marquez_-_Fresque.jpg , ''licence : ''CC BY-SA 4.0 , ''auteur(s) : ''User:Pohline_Blast_Clm '''Illustration : '''Commerce de communautés indigènes.JPG , ''source : ''https://fr.wikibooks.org/w/index.php?title=File:Commerce_de_communautés_indigènes.JPG , ''licence : ''CC BY-SA 3.0 , ''auteur(s) : ''User:Goelette.Cardabela '''Illustration : '''Fernando Botero (2018).jpg , ''source : ''https://fr.wikibooks.org/w/index.php?title=File:Fernando_Botero_(2018).jpg , ''licence : ''CC BY 3.0 , ''auteur(s) : ''- '''Illustration : '''Pano Plazo Botero.jpg , ''source : ''https://fr.wikibooks.org/w/index.php?title=File:Pano_Plazo_Botero.jpg , ''licence : ''Public domain , ''auteur(s) : ''User:Scabredon~commonswiki </div> {{Nouvelle page imprimée}}
Version personnalisée par article sclip (module)
modifierCette commande est composée de trois parties :
- Le module principal. Il prépare l'entête de la section Images, source, licence, auteur puis exécute l'un ou l'autre des modules de récupération des images.
- Le module de récupération des images de Commons dans le sous-répertoire de la page du livre.
- Le module de récupération des images sur le site Wikilivres.
Chacun de ces modules peut être éprouvé séparément.
Il n'est pas envisagé de détailler l'explication des lignes de codes,
on peut considérer que la compréhension des codes de commandes bash est suffisamment assimilée à ce niveau de la programmation.
Les explications éventuelles se trouvent au sein du code de programmation.
Entête ajouter_sclip
modifier☞ | Ce module est devenu l'entête des modules sclipco.inc et sclipwb.inc pour faciliter l'écriture de la page principale Annexer, il peut être éprouvé séparément comme tous les modules de ce programme. |
- Documentation
- ajouter_sclic ##########
Le répertoire de travail est le sous répertoire du projet $Projet/$1/$1 plus précisément : ~/Annexer/<nom du livre>/<nom du livre> <nom du livre> pourrait être la sous-page 'Version imprimable' du livre et peut être considéré comme un 'Article'.
Remarques : à ce stade, Les fichiers $1.list, $1.prj, $1.pj, $1.sclt, $.mainPage sont censés préexister dans le répertoire racine du projet $1 (nom du livre). De même, les fichiers <Article>.str sont sensés préexister dans les répertoires <Article> correspondants. Seront créés : * Dans le répertoire de travail racine ~/Annexe/$1/. : le fichier $1.sclic qui vient compléter le fichier $1.sclt afin de créer le fichier "Annexe", * dans le sous-répertoire de travail ~/Annexe/$1/$1/. : $1.files, $1.pict, $1.illustrations, $1.links, html.list et les fichiers d'images .str .title, .source, .license, .auteur.
- ajouter_sclip ##########
Ce module est l'entête des programmes sclipco.inc et sclipwb.inc du programme Annexer : Si une des options -pc ou -pb de la ligne de commande 'annexer <livre>' est validée, le module ajouter_sclip est exécuté puis un des modules sclipco ou sclipwb est exécutés selon l'option choisie -pc ou -pb. (-pc pour images sur 'Commons', -pb pour images sur 'Wikilivres'.) Structure, organisation des fichiers : Les répertoires de travail sont les répertoires des 'Articles'. Le fichier $Projet/$ligne/$ligne.str a été créé avec la commande ajouter_sclt Remarques : 1.les images extraites avec le fichier de commandes ajouter_sclic peuvent être copiées dans les répertoires des articles correspondants lorsqu'ils sont identifiés dans leurs répertoires respectifs pour créer une option d'images téléchargées de 'Commons'. 2.le fichier de conversions url/html vers utf8 a été inclus dans l'entête header.sh depuis le 13 mai 2020
- Documentation programmeur
2:#P Nom du fichier de commandes : ajouter_sclip 3:#P Syntaxe : "ajouter_sclip <nom du livre>" 4:#P Exemple : "./ajouter_sclip LivreTest" à la console. 5:#P Date de création : 9 mai 2020 6:#P Modifié le : 15 mai 2020 par GC pour ajouter une version d'images depuis 7:#P wilimedia commons 8:#P Modifié le : 16 mai 2020 par GC pour séparer les fichier en trois parties 9:#P Partie 1 : entête des deux versions de téléchargement, 'ajouter_sclip'. 10:#P Partie 2 : fichier de téléchargement des images sur wikibooks, sclipwb.inc 11:#P Partie 3 : fichier de téléchargement des images sur coomons, sclipco.inc 12:#P Version sur WikiLivres le : 17 mai 2020 13:#P 14:#P LES FICHIERS DE COMMANDES 15:#P 16:#P## header.sh ############## 17:#P header.sh, a créé le répertoire des commandes si celui-ci ne préexistait pas 18:#P il a vérifié la validité ou invalidé de ligne de commande, initialisé 19:#P les variables $Projet, $Site, $SitePrefix, vérifié l'existence des 20:#P fichiers de liste "$Projet/$1".list et "$Projet/$1".prj, puis affiché le 21:#P contenu du répertoire de travail. 22:#P 23:#P## lister ################# 24:#P lister a créé le fichier de liste $Projet/$1.list par l'extraction du 25:#P fichier $Projet/$1.contenu, copie de la page "Contenus" de la version 26:#P imprimable du livre, ou du fichier $Projet/$1.compilé issu d'une 27:#P compilation destinée à la publication par PediaPress. 28:#P il crée aussi le fichier $Projet/$1.prj qui conserve l'ordre d'affichage 29:#P de la publication. 30:#P 31:#P## télécharger ############ 32:#P la commande aura téléchargé toutes les pages du livre et aura copié les 33:#P pages html dans des répertoires qui leurs sont dédiés pour y extraire 34:#P toute la documentation nécessaire à la création de la page "Annexe", et 35:#w à ce stade, pour les tests avec LivreTest; on dispose des répertoires 36:#w de travail : LivreTest, ArticleUn, ArticleDeux, ArticleTrois. 37:#P qui contiennent chacun le fichier html de la page ou de l'article qui le 38:#P concerne. 39:#P L'ensemble des commandes aura créé les fichiers de listes : 40:#P $Projet/$1.dirs, $Projet/$1.list, $Projet/$1.mainPage, $Projet/$1.prj 41:#P 42:#P## ajouter_sclt ########### 43:#P La commande ./ajouter-sclt <wikilivre> commence par créer la page 44:#P $Projet/$1.sclt comme elle apparaîtra dans la première partie de la page 45:#P "Annexe" du livre, avec les titres et les sections en wikitexte : 46:#P * Références: toutes celles qui n'ont pas été affichées dans les pages. 47:#P * Contenus: liens établis vers la page du livre et les articles. 48:#P (les sous-pages). 49:#P * Source de l'édition: lien vers la page qui a permis de créer l'Annexe. 50:#P * Sources licences et contributeurs des articles: ne concerne que les 51:#P articles, les sous-pages. 52:#P 53:#D## ajouter_sclic ########## 54:#D Le répertoire de travail est le sous répertoire du projet $Projet/$1/$1 55:#D plus précisément : ~/Annexer/<nom du livre>/<nom du livre> 56:#D <nom du livre> pourrait être la sous-page 'Version imprimable' du livre 57:#D et peut être considéré comme un 'Article'. 58:#D Remarques : 59:#D à ce stade, Les fichiers $1.list, $1.prj, $1.pj, $1.sclt, $.mainPage sont 60:#D censés préexister dans le répertoire racine du projet $1 (nom du livre). 61:#D De même, les fichiers <Article>.str sont sensés préexister dans les 62:#D répertoires <Article> correspondants. 63:#D Seront créés : 64:#D * Dans le répertoire de travail racine ~/Annexe/$1/. : 65:#D le fichier $1.sclic qui vient compléter le fichier $1.sclt afin de créer 66:#D le fichier "Annexe", 67:#D * dans le sous-répertoire de travail ~/Annexe/$1/$1/. : 68:#D $1.files, $1.pict, $1.illustrations, $1.links, html.list et 69:#D les fichiers d'images .str .title, .source, .license, .auteur. 70:#D 71:#D## ajouter_sclip ########## 72:#D Ce module est l'entête des programmes sclipco.inc et sclipwb.inc du 73:#D programme Annexer : 74:#D Si une des options -pc ou -pb de la ligne de commande 'annexer <livre>' 75:#D est validée, le module ajouter_sclip est exécuté puis un des modules 76:#D sclipco ou sclipwb est exécutés selon l'option choisie -pc ou -pb. 77:#D (-pc pour images sur 'Commons', -pb pour images sur 'Wikilivres'.) 78:#D Structure, organisation des fichiers : 79:#D Les répertoires de travail sont les répertoires des 'Articles'. 80:#D Le fichier $Projet/$ligne/$ligne.str a été créé avec la commande 81:#D ajouter_sclt 82:#D Remarques : 83:#D 1.les images extraites avec le fichier de commandes ajouter_sclic peuvent 84:#D être copiées dans les répertoires des articles correspondants lorsqu'ils 85:#D sont identifiés dans leurs répertoires respectifs pour créer une option 86:#D d'images téléchargées de 'Commons'. 87:#D 2.le fichier de conversions url/html vers utf8 a été inclus dans l'entête 88:#D header.sh depuis le 13 mai 2020 89:#D 90:#P Générer la documentation de cette page : 93:#P Générer la documentation programmeur : 96:#P Générer l'organigramme de cette commande : 99:#P
- Organigramme
101:#O inclure le fichier d'entête header.sh 104:#O## ajouter_scli_p (personnalisé) ############ 106:#O ligne de commande "ajouter_sclip <livre>" où "livre" = variable $1 108:#O PageScliP sera la variable d'identifiation du fichier "livre.sclip" placé 109:#O dans le répertoire" de travail du projet : $Projet = ~/Annexe/$1/. 114:#O créer la section 'Image', 'Source', 'licence', 'Contributeur(?)' 116:#O ajouter le texte : style PediaPress ou personnalisé. 117:#O style PediaPress : 118:#O Les ''sources'' listées pour chaque article fournissent des informations 119:#O de licence plus détaillées, y compris le statut des droits d'auteurs, les 120:#O détenteurs de ces droits et les conditions de licence. 122:#O ou: (imprimer l'un ou l'autre de ces textes) 123:#O style personnalisé : 124:#O Les textes sont disponibles avec leurs licences respectives, cependant 125:#O d’autres termes peuvent s’appliquer.<br /> 126:#O Voyez les termes d’utilisation pour plus de détails :<br /> 127:#O https://wikimediafoundation.org/wiki/Conditions_d'utilisation
Code ajouter_sclip
#! /bin/bash
# Fichier : ajouter_sclip.inc.sh
VERSION=200623
#P Nom du fichier de commandes : ajouter_sclip.inc
#P Syntaxe : "ajouter_sclip.inc <nom du livre>"
#P Exemple : "./ajouter_sclip.inc LivreTest" à la console.
#P Date de création : 9 mai 2020
#P Modifié le : 15 mai 2020 par GC pour ajouter une version d'images depuis
#P wilimedia commons
#P Modifié le : 16 mai 2020 par GC pour séparer les fichier en trois parties
#P Partie 1 : entête des deux versions de téléchargement, 'ajouter_sclip'.
#P Partie 2 : fichier de téléchargement des images sur wikibooks, sclipwb.inc
#P Partie 3 : fichier de téléchargement des images sur coomons, sclipco.inc
#P Modifié le : 30 mai 202 por l'installation automatique du module.
#P Version de la documentation sur WikiLivres le : 17 mai 2020
#P
#P LES FICHIERS DE COMMANDES
#P
#P## header.sh ##############
#P header.sh, a créé le répertoire des commandes si celui-ci ne préexistait pas
#P il a vérifié la validité ou invalidé de ligne de commande, initialisé
#P les variables $Projet, $Site, $SitePrefix, vérifié l'existence des
#P fichiers de liste "$Projet/$1".list et "$Projet/$1".prj, puis affiché le
#P contenu du répertoire de travail.
#P
#P## lister #################
#P lister a créé le fichier de liste $Projet/$1.list par l'extraction du
#P fichier $Projet/$1.contenu, copie de la page "Contenus" de la version
#P imprimable du livre, ou du fichier $Projet/$1.compilé issu d'une
#P compilation destinée à la publication par PediaPress.
#P il crée aussi le fichier $Projet/$1.prj qui conserve l'ordre d'affichage
#P de la publication.
#P
#P## télécharger ############
#P la commande aura téléchargé toutes les pages du livre et aura copié les
#P pages html dans des répertoires qui leurs sont dédiés pour y extraire
#P toute la documentation nécessaire à la création de la page "Annexe", et
#w à ce stade, pour les tests avec LivreTest; on dispose des répertoires
#w de travail : LivreTest, ArticleUn, ArticleDeux, ArticleTrois.
#P qui contiennent chacun le fichier html de la page ou de l'article qui le
#P concerne.
#P L'ensemble des commandes aura créé les fichiers de listes :
#P $Projet/$1.dirs, $Projet/$1.list, $Projet/$1.mainPage, $Projet/$1.prj
#P
#P## ajouter_sclt ###########
#P La commande ./ajouter-sclt <wikilivre> commence par créer la page
#P $Projet/$1.sclt comme elle apparaîtra dans la première partie de la page
#P "Annexe" du livre, avec les titres et les sections en wikitexte :
#P * Références: toutes celles qui n'ont pas été affichées dans les pages.
#P * Contenus: liens établis vers la page du livre et les articles.
#P (les sous-pages).
#P * Source de l'édition: lien vers la page qui a permis de créer l'Annexe.
#P * Sources licences et contributeurs des articles: ne concerne que les
#P articles, les sous-pages.
#P
#D## ajouter_sclic ##########
#D Le répertoire de travail est le sous répertoire du projet $Projet/$1/$1
#D plus précisément : ~/Annexer/<nom du livre>/<nom du livre>
#D <nom du livre> pourrait être la sous-page 'Version imprimable' du livre
#D et peut être considéré comme un 'Article'.
#D Remarques :
#D à ce stade, Les fichiers $1.list, $1.prj, $1.pj, $1.sclt, $.mainPage sont
#D censés préexister dans le répertoire racine du projet $1 (nom du livre).
#D De même, les fichiers <Article>.str sont sensés préexister dans les
#D répertoires <Article> correspondants.
#D Seront créés :
#D * Dans le répertoire de travail racine ~/Annexe/$1/. :
#D le fichier $1.sclic qui vient compléter le fichier $1.sclt afin de créer
#D le fichier "Annexe",
#D * dans le sous-répertoire de travail ~/Annexe/$1/$1/. :
#D $1.files, $1.pict, $1.illustrations, $1.links, html.list et
#D les fichiers d'images .str .title, .source, .license, .auteur.
#D
#D## ajouter_sclip ##########
#D Ce module est l'entête des programmes sclipco.inc et sclipwb.inc du
#D programme Annexer :
#D Si une des options -pc ou -pb de la ligne de commande 'annexer <livre>'
#D est validée, le module ajouter_sclip est exécuté puis un des modules
#D sclipco ou sclipwb est exécutés selon l'option choisie -pc ou -pb.
#D (-pc pour images sur 'Commons', -pb pour images sur 'Wikilivres'.)
#D Structure, organisation des fichiers :
#D Les répertoires de travail sont les répertoires des 'Articles'.
#D Le fichier $Projet/$ligne/$ligne.str a été créé avec la commande
#D ajouter_sclt
#D Remarques :
#D 1.les images extraites avec le fichier de commandes ajouter_sclic peuvent
#D être copiées dans les répertoires des articles correspondants lorsqu'ils
#D sont identifiés dans leurs répertoires respectifs pour créer une option
#D d'images téléchargées de 'Commons'.
#D 2.le fichier de conversions url/html vers utf8 a été inclus dans l'entête
#D header.sh depuis le 13 mai 2020
#D
#P Générer la documentation de cette page :
#P grep -E "#D" ajouter_sclip | grep -v 'grep' | sed s/#D//g > <livre>_doc/ajouter_sclip.D.doc
# grep -E "#D" ajouter_sclip | grep -v 'grep' | sed s/#D//g > LivreTest_doc/ajouter_sclip.D.doc
#P Générer la documentation programmeur :
#P grep -n -E "#P|#D|#w" ajouter_sclip | grep -v 'grep' > <livre>_doc/ajouter_sclip.PDw.doc
# grep -n -E "#P|#D|#w" ajouter_sclip | grep -v 'grep' > LivreTest_doc/ajouter_sclip.PDw.doc
#P Générer l'organigramme de cette commande :
#P grep -n -E "#O" ajouter_sclip | grep -v 'grep' > <livre>_doc/ajouter_sclip.O.doc
# grep -n -E "#O" ajouter_sclip | grep -v 'grep' > LivreTest_doc/ajouter_sclip.O.doc
#P
#O inclure le fichier d'entête header.sh
source header.inc
#O## ajouter_scli_p (personnalisé) ############
if [ $0=ajouter_sclip.inc ]; then echo "ajouter_sclip.inc : Version "$VERSION; fi
#0 initialisation de la variables $PageScliP, avec le premier paramètre de la
#O ligne de commande "ajouter_sclip <livre>" où "livre" = variable $1
#O PageScliP sera la variable d'identifiation du fichier "livre.sclip" placé
#O dans le répertoire" de travail du projet : $Projet = ~/Annexe/$1/.
PageScliP=$Projet/$1.sclip
echo "Page .scli personnalisée .sclip = " $PageScliP
echo "------"
#O créer la section 'Image', 'Source', 'licence', 'Contributeur(?)'
echo "== Sources des images licences et contributeurs ==" > $PageScliP
#O ajouter le texte : style PediaPress ou personnalisé.
#O style PediaPress :
#O Les ''sources'' listées pour chaque article fournissent des informations
#O de licence plus détaillées, y compris le statut des droits d'auteurs, les
#O détenteurs de ces droits et les conditions de licence.
echo "<span style="font-size:85%">Les ''sources'' listées pour chaque illustration fournissent des informations de licence plus détaillées, y compris le statut des droits d'auteurs, les détenteurs de ces droits et les conditions de licence.</span>" >> $PageScliP
#O ou: (imprimer l'un ou l'autre de ces textes)
#O style personnalisé :
#O Les textes sont disponibles avec leurs licences respectives, cependant
#O d’autres termes peuvent s’appliquer.<br />
#O Voyez les termes d’utilisation pour plus de détails :<br />
#O https://wikimediafoundation.org/wiki/Conditions_d'utilisation
# echo "<span style="font-size:85%">Les textes sont disponibles avec leurs licences respectives, cependant d’autres termes peuvent s’appliquer.<br />Voyez les termes d’utilisation pour plus de détails :<br />https://wikimediafoundation.org/wiki/Conditions_d'utilisation.</span>" >> $PageScliP
echo " " >> $PageScliP
echo "<div style="font-size:72%>" >> $PageScliP
echo "" >> $PageScliP
#T
cat $PageScliP
#T exit
# Fin de ajouter_sclip.inc.sh
Module sclipco.inc
modifierCode sclipco.inc
#! /bin/bash
# Fichier : sclipco.sh
VERSION=210125
#P Nom du fichier de commandes : sclipco
#P Syntaxe : "ajouter_sclipco <nom du livre>"
#P Exemple : "./ajouter_sclpco LivreTest" à la console.
#P Date de création : 16 mai 2020
#P Modifié le : 18 mai 2020 par GC
#P Modifié le : 20 mai 2020 par GC lignes 25 à 37 'Retour' de ajouter_sclip.
#P Modifié le : 30 mai 2020 par CG pour l'installation automatique du module.
#P Modifié le : 4 juin 2020 par GC mise à jour des liens d'exécution.
#P Version de la documentation sur WikiLivres le : 20 mai 2020
#P## Une version 'commons' est possible en co-édition avec la commande
#P## 'ajouter_sclic'.
#P## Les images, sources, licences, auteurs sont copiés dans les
#P## sous-répertoires respectifs depuis le sous-répertoire du livre.
#P## Les noms des images de 'commons' commencent par 'File:' alors qu'en
#P## version wikibooks les noms des images commencent par 'Fichier:'
#P## Dans l'exemple 'LivreTest' :
#P## cd $Projet/ArticleUn; ls Fichier*.html Fichier*.html.* | sed s/Fichier:/File:/g > ArticleUn.commonshtmlpict
#P## while read pict; do cp $Projet/$1/$pict .; done < ArticleUn.commonshtmlpict
#P## Il suffit de construire la page LivreTest.sclip à partir des fichiers :
#P## *.title, *.source, *.license, *.auteur
#P
if [ $0=sclipco ]; then echo "sclipco : Version "$VERSION; fi
#O inclure dans bin : ajouter_sclip.inc ou, dans src/* ajouter_sclip.inc.sh
source ajouter_sclip.inc
Retour=$?
#T echo "Code de retour de la commande ajouter_sclip : " $Retour
#O si le code de retour est différent de '0'
if [ $Retour -gt '0' ] && [ $Personal = "true" ];
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'ajouter_sclip'"
exit 1
#O fin si
fi
echo "fichier cible : "$PageScliP
echo "------"
#T exit
#O tant que l'on peut lire les lignes du fichier $Projet/$1.pj
while read pjline
do
#O si la ligne lue n'est pas $1 (nom du livre)
#T echo "ligne lue : " $line
if [ $pjline != $1 ]
#O alors:
then
#T echo "ligne prise en compte : " $pjline
#O entrer dans le répertore de l'article,
cd $Projet/$pjline
#O lister les 'Fichier*.html' et Fichier*.html.* dans le fichier
#O $pjline.commonshtmlpict
ls Fichier*.html Fichier*.html.* | sed s/Fichier:/File:/g > $pjline.commonshtmlpict
#O copier les fichiers Fichier*.html Fichier*.html.* du répertoire
#O $Projet/$1
while read pict; do cp $Projet/$1/$pict .; done < $pjline.commonshtmlpict
#O copier le nom de l'article dans $1.sclip
echo "'''Article : $pjline'''<br \>" >> $PageScliP
echo "'''Article : $pjline'''"
#P## Annexe version 'commons' ##############################
#O sélectionner les images de chaque articles dans Article/htmlcommons.list
#O exclure .title|.source|.license|.auteur|.str|.tmp
cat $pjline.commonshtmlpict | grep -v -E ".title|.source|.license|.auteur|.str|.tmp" > htmlcommons.list
#T cat htmlcommons.list
#O tant qu'il y a des lignes d'images dans le fichier htmlcommons.list
while read htmlcommonsline
do
#O images,
cat $htmlcommonsline.title >> $PageScliP
cat $htmlcommonsline.title
#O source,
cat $htmlcommonsline.source >> $PageScliP
cat $htmlcommonsline.source
#O license,
cat $htmlcommonsline.license >> $PageScliP
cat $htmlcommonsline.license
#O auteur(s).
cat $htmlcommonsline.auteur >> $PageScliP
cat $htmlcommonsline.auteur
#O terminer la page $P$PageScliP
echo "" >> $PageScliP
#O fin du tant qu'il y a des lignes d'images
done < htmlcommons.list
#O fin du 'si la ligne n'est pas le nom du livre'.
fi
#O fin du tq .pj
done < $Projet/$1.pj
#O terminer la page $PageScliP
echo "</div>" >> $PageScliP
echo "{{Nouvelle page imprimée}}" >> $PageScliP
exit 0
# Fin de sclipco.sh
Modude sclipwb.inc
modifierCode sclipwb.inc
#! /bin/bash
# Fichier sclipwb.sh
VERSION=210125
#P Nom du fichier de commandes : sclipwb (source : sclipwb.sh)
#P Syntaxe : "sclipwb <nom du livre>"
#P Exemple : "./sclipwb LivreTest" à la console.
#P Date de création : 9 mai 2020
#P Modifié le : 15 mai 2020 par GC
#P Modifié le : 20 mai 2020 par GC lignes 15 à 27 'Retour' de ajouter_sclip.
#P Modifié le : 30 mai 2020 par GC pour l'installation automatique.
#P Version de la documentation sur WikiLivres le : 20 mai 2020
#P
if [ $0=sclipwb ]; then echo "sclipwb : Version "$VERSION; fi
#O inclure dans bin : ajouter_sclip.inc ou, dans src ajouter_sclip.inc.sh ?
source ajouter_sclip.inc
Retour=$?
#T echo "Code de retour de la commande ajouter_sclip : " $Retour
#O si le code de retour est différent de '0'
if [ $Retour -gt '0' ] && [ $Personal = "true" ];
#O alors afficher le nom du module de commande en erreur et quitter 'annexer'
#O avec retour à 1
then
echo "Erreur au module shell 'ajouter_sclip.inc'"
exit 1
#O fin si
fi
#O Créer une boucle d'identification des répertoires correspondants aux article
#O du livre.
#O tant que l'on peut lire les lignes du fichier $Projet/$1.pj
while read pjline
do
#O si la ligne lue n'est pas $1 (nom du livre)
#T echo "ligne lue : " $line
if [ $pjline != $1 ]
#O alors:
then
#T echo "====="
#T echo ""
#T echo "ligne prise en compte : " $pjline
#O entrer dans le répertore de l'article,
cd $Projet/$pjline
#T echo -n "répertoire courant : "
#T pwd
#T break
#O créer les fichiers de documentation des images de la page principale.
#O ouvrir le flux $Projet/$1/$1.str de la page principale et sélectionner les
#O chaînes de caractères contenant fichier:, file:, image:, dans le nouveau
#O fichier $Projet/$line/$line/.files, .pict, .illustration, .links
cat $Projet/$pjline/$pjline.str | grep -n -i -e Fichier: -e file: -e image: | sed -f $RepCom/$Conversions > $Projet/$pjline/$pjline.files
cat $Projet/$pjline/$pjline.str | grep -n -i -e fichier: -e .jpg -e .png -e .gif | sed -f $RepCom/$Conversions> $Projet/$pjline/$pjline.picts
cat $Projet/$pjline/$pjline.files | grep title |sed "s/<\/div>//g" | awk -F">" '{print $NF}' > $Projet/$pjline/$pjline.illustrations
#T cat $Projet/$pjline/$pjline.files | awk -F"=" '{for (i=1;i<=NF;i++) print $i "\n"}' | grep https | sed "s/\"/!/g" | cut -d '!' -f3 | grep https | tr '>' ! | sed "s/<\/a//g" |sed "s/!//g" > $Projet/$pjline/$pjline.links
cat $Projet/$pjline/$pjline.files | awk -F"=" '{for (i=1;i<=NF;i++) print $i "\n"}' | grep https://fr.wikibooks.org | sed "s/\"/!/g" | cut -d '!' -f2 > $Projet/$pjline/$pjline.images
#Tbreak
#O télécharger les fichiers d'images depuis le serveur wikimedia.
#P remarque : l'option -N permet d'éviter de téléchager un fichier à jour
#P et sans ajouter une numérotation.
#T #T wget -N -P $Projet/$pjline -i $Projet/$pjline/$pjline.images
wget -P $Projet/$pjline -r -linf -k -p -E -i $Projet/$pjline/$pjline.images
#O copier les images téléchargées dans le répertoire de l'article courant.
cp $Projet/$pjline/fr.wikibooks.org/wiki/*.html $Projet/$pjline/.
#O initialiser le fichier de liste html.list avec un texte vide.
echo -n "" > html.doublons
#O lister les fichiers d'images dans l'ordre d'impression ou de l'affichage,
#O à laide de la liste $Projet/$pjline/$pjline.images
#O tant que l'on peut lire des lignes dans $Projet/$pjline/$pictline.images
while read pictline
do
#O couper les lignes au retour chariot, sélectionner le dernier champ et ajouter '.html'
#echo $pictline | awk -F"/" '{for (i=1;i<=NF;i+=2) print $i "\n"}' #| cut -d '%' -f1 | cut -d '.' -f1 > tmp
echo $pictline | awk -F"/" '{ print $NF".html"}' >> html.doublons
#O couper les doublons et sélectionner les champs pairs.
echo -n "" > html.list
awk 'BEGIN { FILENAME }
{memfile [NR] = $0 }
END { for ( i = 1 ; i <= NR ; i=i+2 ) {
print memfile[i] >> "html.list"
}
# print "Fin"
} ' html.doublons
#O fin tant que l'on peut lire des lignes dans $Projet/$pictline/$pictline.images
done < $Projet/$pjline/$pjline.images
#T afficher html.list
#T cat html.list
#O copier le nom de l'article dans $1.sclip
echo "'''Article : $pjline'''<br \>" >> $PageScliP
echo "'''Article : $pjline'''"
#P## Annexe version 'wikibooks' ##############################
#O tant qu'il y a des liens (locaux) dans le fichier d'images html.list
while read htmlline
do
#O afficher la ligne lue,
echo ""
echo ""
echo "---- ligne lue = $htmlline ---"
echo ""
#O sélectionner les chaînes de caractères du fichier image $htmlline et les
#O copier dans $htmlline.str après remplacement du caractère ',' par 'new-line'
mkd -pw '**' $htmlline $htmlline.tmp
cat $htmlline.tmp | tr ',' '\n' > $htmlline.str
#O images,
echo -n "'''Illustration : '''" > $htmlline.title
cat $htmlline.str |grep wgTitle | cut -d '"' -f4 >> $htmlline.title
cat $htmlline.title >> $PageScliP
cat $htmlline.title
#O source,
echo -n ", ''source : ''https://"$Site"/w/index.php?title=" > $htmlline.source
echo $htmlline.str | sed "s/.html//g" | sed "s/.str//g" >> $htmlline.source
cat $htmlline.source >> $PageScliP
cat $htmlline.source
#O license,
echo -n ", ''licence : ''" > $htmlline.license
cat $htmlline.str | grep licensetpl_short | sed "s/<td>//g" | sed "s/<span class//g" | sed "s/<\/span>//g" | sed "s/style=\"display:none;\"//g" | tr '=' '\n' | grep licensetpl_short | awk -F">" '{print $NF}' >> $htmlline.license
cat $htmlline.license >> $PageScliP
cat $htmlline.license
#O auteur(s).
echo -n '' > tmp
echo -n ", ''auteur(s) : ''" > $htmlline.auteur
cat $htmlline.str | grep -i -n -m1 -A 1 -e Author -e Auteur | tr '/' '\n' | grep -i -e user -e utilisteur -e auteur | cut -d '"' -f1 | grep -i -e user -e utilisteur -e auteur > tmp
read Tmp < tmp
#T
echo "Tmp = $Tmp"
if [ "$Tmp" = "" ]
#T then echo "tmp vide"
then echo "-" > tmp
fi
#T echo $Tmp | cut -d '-' -f2 | sed "s/\.\ /%/g" | cut -d '%' -f1
cat tmp >> $htmlline.auteur
cat $htmlline.auteur >> $PageScliP
cat $htmlline.auteur
#O terminer la page $PageScliP
echo "" >> $PageScliP
#O fin du tant qu'il y a des lignes
done < html.list
#O fin du 'si la ligne n'est pas le nom du livre'.
fi
#O fin du tq .pj
done < $Projet/$1.pj
#O terminer la page $PageScliP
echo "</div>" >> $PageScliP
echo "{{Nouvelle page imprimée}}" >> $PageScliP
exit 0
# Fin de sclipwb.sh
Comparaison des annexes obtenues pour la page LivreTest
modifierAnnexe classique avec sclic
modifier☞ | Annexe classique de LivreTest avec sclic Cette présentation peut être utile pour une extension d' Index, Table des matières et numérotation des pages avec OpenOffice. |
Annexe personnalisée avec le téléchargement sur le serveur Commons
modifier☞ | Annexe pesonnalisée de LivreTest avec sclipco.inc Cette présentation simple permet de repérer les illustrations en fonction des chapitres, sans numérotation des pages. |
Annexe personnalisée avec le téléchargement sur le serveur Wikilivres
modifier☞ | Annexe pesonnalisée de LivreTest avec sclipwb.inc Cette présentation simple permet de repérer les illustrations en fonction des chapitres, sans numérotation des pages. On notera la différence avec la version Commons pour la résolution du nom d'auteur de l'image. |
Comparaison avec l'annexe manuelle ou semi-manuelle
modifier☞ | Visualiser l' Annexe manuelle ou semi-manuelle de LivreTest, produite avec des cannevas. |
Tests unitaires et d'intégration
modifierLes fichiers de commandes shell peuvent être éprouvés successivement, sous linux ou sous d'autres systèmes d'exploitation acceptant les commandes shell bash : Windows 10[1][2], MinGw, Cygwin, ....
Pour effectuer ces tests il faut se placer dans le répertoire utilisateur et créer un répertoire qui regroupe les fichiers de commandes. Dans les exemples présentés : mkdir ~/Annexer
Les fichiers de commandes :
header.sh, annexer, lister, télécharger, ajouter-sclt, ajouter-sclic, ajouter-sclip, sont prévus pour être placés dans ce répertoire des commandes ~/Annexer. Le fichier header.sh est non seulement un fichier de commandes, il est aussi un fichier d'entête pour tous les modules en tests unitaires.
Les commandes peuvent être éprouvées avec tous les livres disponibles. Pour les essais de ces versions en tests, nous avons utilisé le livre « LivreTest ».
La commande « annexer » permet le test d'intégration de tous les modules avec des points d'arrêt possibles après chaque module testé.
Rendez-vous dans le chapitre Annexer pour effectuer ces test et/ou avoir plus d'informations.
Copier et installer les fichiers de l'application et des tests
modifierCes versions, mises à jour, peuvent être différentes des premières versions exposées dans les chapitres de cet article.
Éditer la page originale[3]
Codes de l'application en français avec les manuels
modifier☞ | Ce projet est bien avancé pour linux ou mingw-windows, il est à utiliser avec indulgence. Dans cette version, les images téléversées sur wiki-Commons sans passer par wikibooks ne sont pas reconnues. Votre contribution est souhaitée. Vous pouvez rédiger vos remarques et vos recommandations dans la page Discussion. |
- Il est possible de télécharger cette application expérimentale à but éducatif
- Télécharger par ftp
Remarque concernant l'état du serveur de téléchargements
- télécharger Annexer-fr_200701.zip qui contient les copies des articles ci-dessous,
- télécharger md5sum_Annexer-fr_200701.zip qui contient la somme de contrôle attestant que le fichier n'a pas subi de modification.
- md5sum de Annexer-fr_200701.zip: c4825faa84eef1514d72edb0bd7b394e
- Les droits de copies et de partages des fichiers téléchargés sont ceux des articles ci-dessous.
- Copier le contenu de la page du premier module header.inc.sh dans un éditeur de texte comme Notepadqq,
l'enregistrer sous le nom header.inc.sh dans le répertoire des tests ~/Annexer/tests/header.inc.sh/header.inc.sh
que vous aurez créé. - Y copier également des programmes de test ctrl-header.inc.bash et test-header.inc.bash
- Ouvrir un terminal. Dans le répertoire '~/Annexer/test/header.inc.sh/', modifier le mode de lecture-écriture-exécution
des programmes de contrôle et de tests de header.inc.sh de la façon suivante : chmod 755 *.bash
Exécuter le module sans paramètre : ./ctrl-header.inc.bash puis avec le paramètre LivreTest - Éditer la page LivreTest.contenu, copier la partie éditée et l'enregistrer sous le nom LivreTest.contenu
dans le répertoire Annexer/LivreTest qui vient d'être créé par l'exécution de ./ctrl-header.inc.bash LivreTest.
- Copier le contenu de la page du module lister.sh, pour les tests, et l’enregistrer sous le nom
'~/Annexer/tests/lister.sh/lister.sh '. Y copier également les programmes ctrl-lister.bash, et test-lister.bash
Faire les test du module et observer les modifications du répertoire Annexer/LivreTest. - ... et ainsi-de-suite. Le dernier fichier à créer est le fichier d'exécution globale annexer.
- Annexes que l'on doit obtenir : 1) Annexe globale - 2) Annexe personnalisée wb - 3) Annexe personnalisée co.
- Annexe obtenue avec la version 200623 de l'application Faire_fleurir_le_sel/Annexe
Fichiers du logiciel annexer
modifier- Les fichiers suivants, en cours de réécritures, devront être installés dans le répertoire ~/Annexer/src, puis installés avec l'installateur.
Auto-éditer_un_wikilivre/Auto-référencer/header.inc.sh Fichier d'entête, inclus dans tous les modules. Version 210505
Auto-éditer_un_wikilivre/Auto-référencer/lister.sh Crée les fichiers de listes pour les modules suivants. Version obsolète 200701
Auto-éditer_un_wikilivre/Auto-référencer/télécharger.sh Télécharge les pages de Wikilivres selon les listes générées.Version obsolète 200623
Auto-éditer_un_wikilivre/Auto-référencer/ajouter_sclt.sh Ajoute l'entête pour les textes et les articles de l'Annexe. Version obsolète 210125
Auto-éditer_un_wikilivre/Auto-référencer/ajouter_sclic.sh Ajoute l'entête globale pour les images et illustration, etc. Version obsolète 210125
Auto-éditer_un_wikilivre/Auto-référencer/ajouter_sclip.inc.sh Ajoute les textes des conditions de copie des images. Version obsolète 210125
Auto-éditer_un_wikilivre/Auto-référencer/sclipwb.sh Ajoute, par article, les liens vers les images selon Wikilivres. Version obsolète 210125
Auto-éditer_un_wikilivre/Auto-référencer/sclipco.sh Ajoute, par article, les liens vers les images selon Commons. Version obsolète 210125
- ↑ Ce module sclipco.sh utilise des données produites par le module sclipwb sclipco.sh l’exécutable est à réviser. Avis du 30 juillet 2020 et du 25/01/2021.
Auto-éditer_un_wikilivre/Auto-référencer/annexer.sh Commande globale. Version obsolète 200626
Auto-éditer_un_wikilivre/Auto-référencer/md5sum_src-orig Somme de contrôle des fichiers depuis la Version 200623
Auto-éditer_un_wikilivre/Auto-référencer/cp-localsrc-2-localbin . Version 210504
- ↑ L'Installateur ci-dessus installe les fichiers de commandes dans le répertoire d'exécution ~/Annexer,
il doit d'être installé en mode exécutable dans le répertoire des sources ~/Annexer/src.
Fichiers de documentation du logiciel annexer
modifier- Les fichiers suivants doivent être installés dans le répertoire ~/Annexer/tests/02-manuels.
Effectuer les tests puis installer le manuel dans le système linux avec makeman_annexer.sh
Après avoir effectué l'installation dans le système linux, vous pouvez utiliser le script htmlman.sh pour créer le manuel en html et texte pour l'imprimante.
Auto-éditer_un_wikilivre/Auto-référencer/annexer_fr.1 Fichier nroff avec un aperçu, pour l'installation du manuel français version 200626
Auto-éditer_un_wikilivre/Auto-référencer/annexer_fr.html Fichier html avec un aperçu, pour l'installation du manuel français version 200626
Auto-éditer_un_wikilivre/Auto-référencer/makeman_annexer.sh Cet exécutable installe le manuel dans la sructure unix/linux en français.
Fichiers d'installation
modifier- INSTALLER.sh
Cette commande télécharge tous les fichiers de commandes et installe l'application dans les répertoires du PC.
- Syntaxe
- INSTALLER.sh [ liste | pour moi | pour tous | pour admin ]
- Exemples dans le répertoire d installation : ~/tmp
- -> exemple ./INSTALLER.sh annexer.list, pour télécharger les articles depuis wikilivres.
- -> exemple ./INSTALLER.sh pour moi, pour copier les codes dans ~/Annexer.
- -> exemple ./INSTALLER.sh pour tous, pour copier les codes exécutables dans /usr/local/bin.
- -> exemple ./INSTALLER.sh pour admin, pour copier les codes exécutables dans /usr/local/sbin.
Les corrections et tests ne pourront pas se faire dans l'immédiat (juin 2020).
Sauf si des wikipédiens se dévouent.
Essayer et comparer les codes des sources obtenues avec les codes des pages wiki.
Dans l'attente, préférer l'installation des codes de tous les fichiers par copier-coller.
Fichier original à copier-coller pour télécharger l'application Annexer, avec le fichier annexer.list qui contient la liste des fichiers à télécharger :
vβ 200604 Auto-éditer_un_wikilivre/Auto-référencer/INSTALLER.sh shell exécutable
vβ 210419 Liste des fichiers à copier Texte pour mémoire, préférer lancer les copies avec la page wikilivres
Auto-éditer_un_wikilivre/Auto-référencer/html_data_conversions Copie pour contrôle du fichier INSTALLER.sh
md5sum : c7a7e6eb3347e2f0d614df29029d5578
Auto-éditer_un_wikilivre/Auto-référencer/html_url_conversions Copie pour contrôle du fichier INSTALLER.sh
md5sum : a01327f2138adeffea16e446be79e917
Post-référencer post-indexer un wikilivre
modifier- Post-référencer
- Créer l'Annexe après avoir créé la version imprimable d'un livre. Ceci inclut les liens vers les pages Version_imprimable/Annexe et Version_imprimable/Index créées bien que sans contenu réel au moment de la création de l'Annexe.
- Post indexer
- Cela veut dire "Créer les liens entre les articles et les numéros des pages du livre. Cela se fait de façon naturelle avec OpenOffice et LibreOffice.
Post indexer avec Open Office (OO) ou LibreOffice
modifierAvec OpenOffice ou LibreOffice on n'obtient pas l’équivalent d'une Version imprimable d'un wiki-livre.
Comparer les deux versions PDF de La goélette Cardabela - (De 1979 à 1999), tout pour la re-construire.
* La version pour liseuse est construite avec LibreOffice, le fichier PDF est produit avec une réduction de la définition de 300px pour être téléversable sur Wikimedia Commons. Il y a été nécessaire de revoir la configuration des images et de créer une copie d'écran pour insérer les formules mathématiques.
* La version PDF (avec couverture) est plus ancienne, elle a été produite avec l'application PDF24 et la version imprimable. Le PDF est généré avec une résolution de 700px. Il n'y a eu aucun problème avec les formules mathématiques lors de la création du PDF.
- Il faut donc noter que les éditeurs OO et LO n'aiment pas les formules mathématiques copiées de Wilikivres..
Survol rapide de post indexation avec le LivreTest
modifierPréparation du document avec OO
modifier- Démarrer "OpenOffice Writer".
- Au démarrage la page est en style "Standard". Modifier le style de la page en style "Première page". (Pour le sommaire dont la page ne doit pas être numérotée). Appuyer sur la touche "F11", Choisir "Style et formatage" puis "Première page" et validez par un retour chariot.
- Insérer une "Nouvelle page" de style "Première page". (Pour le verso du sommaire qui ne doit pas être numéroté.)
- "Insérer" un "Saut manuel", avec le choix du "Style" : "Première page", sans cocher "Modifier le numéro de page".
- Insérer une troisième 'Nouvelle page" style "Première page" pour y insérer le premier article.
- Insérer une quatrième page, style "Standard", et valider la numérotation qui doit commencer à 1, page du sommaire, bien qu'elle ne soit pas affichée. Le premier numéro de page visible sera ici la page 4.
Copier le document dans OO
modifier- Se déconnecter du compte utilisateur wikilivres. (Cela évite de recopier les renvois tels que ↑ [URL] [[lien]].), numéro de section et sous-section qui ne doivent pas apparaître dans le pages du vivre. Ceci facilite aussi la création table des matières et de l'index alphabétique.
- Dérouler les textes masqués.
- Surligner et copier (avec touches Crtl+C) le document. (Chaque article ou tout le document.)
- Coller (avec touches Ctrl+V) le document dans la page de "Style standard".
- Le cas échéant, chercher et supprimer les liens associés aux chapitres « ↑ », « [URL][[lien]] », numéros de chapitres.
- Corriger la mise en page, réinsérer les sauts de pages qui n'auront pas été pris en compte.
- Corriger la mise en page des tableaux. Il est parfois préférable de créer de nouveaux tableaux et d'y coller le contenu des tableaux mal agencés.
Créer l'« Index lexical »
modifierIl faut commencer par créer tous les index afin qu'ils soient pris en compte dans la table des matières. Documentation : Index lexical[4], Fichier de concordance[5].
- Ajouter une page de style standard à la suite du document pour y insérer les index. Dans le menu « Insérer, saut manuel, saut de page », Choisir style Index et placer le curseur en haut de la page.
- Créer l'indexation : « Insertion/Index et tables », choisir « Entrée » et « Index lexical »
- Dans le champ « Entrée » surligner le mot ou la phrase à indexer. Carthagène des Indes dans l'exemple ci-dessous.
- Dans le champ « Clé 1 » LivreTest dans l'exemple ci-dessous.
- Dans le champ « Clé 2 » Annexe dans l'exemple ci-dessous.
- Cliquer sur « Insérer »
Exemple d'Index lexical créé pour l'exercice "LivreTest" (Utilisateur:Goelette_Cardabela/Sandbox/LivreTest).
Index lexical LivreTest Annexe Carthagène des Indes. (Colombie), 5 Commerce de communautés indigènes, 5 Fernando Botero (2018), 5 Fernando_Botero, 5 Gabriel Garcia Marquez, 5 Leticia et Tabatinga, 5 Licence, 6 Pano Plazo Botero, 5 Pohline Blast, 5 Références, 5 Source des images, licences et contributeurs, 5 Sources et contributeurs des articles, 5 Utilisateur:Goelette Cardabela, 5 ArticleDeux, 3 Chapitre 1, 3 Chapitre 2, 3 Chapitre 3, 3 Sommaire, 3 ArticleTrois, 4 Chapitre 1, 4 Chapitre 2, 4 Chapitre 3, 4 ArticleUn, 2 Chapitre 1, 2 Chapitre 2, 2 Chapitre 3, 2 Sommaire, 2 Contenu, 1
Créer l'« Index des illustrations »
modifierL'index des illustrations aura peut-être été créé par le programme Annexer qui renvoie à l'adresse internet d'origine. Cependant, pour les liseuses il est intéressant de créer cet index des illustrations avec OpenOffice ou LibreOffice; cet index renvoie à l'image dans le livre.
Pour créer cet index automatique il est nécessaire de cliquer sur l'image puis de faire un clic droit pour faire apparaître un menu.
- Sélectionner Légende
- Dans la fenêtre Légende placer le nom de l'image.
- Dans la fenêtre Catégorie sélectionner illustration.
- Dans le bas du menu apparaît Illustration 1 : nom de l'illustration.
- Choisir la position de ce texte dans le bas de l’image infra, sinon supra au dessus.
- Créer l'index des illustrations dans le menu des insertions Table des matières et index.
- Choisir, dans Afficher : Texte de légende.
Exemple :
- url de la page : https://commons.wikimedia.org/wiki/File:LivreTest.pdf
- url du fichier : https://upload.wikimedia.org/wikipedia/commons/7/70/LivreTest.pdf
Important: Dans toutes ces opérations, penser à Actualiser les changements, Tout, ou aux choix proposés.
Créer la « Table des matières »
modifierLa table des matière se place dans, ou après, la page Index, après la table des illustrations dans un ouvrage traditionnel. Toutefois, dans les ouvrages de Wikilivres la table des illustrations, avec les liens Internet, se place dans la page Annexe si elle est créée avec le programme Annexer, après la table des articles. Il est aussi possible de placer la table des matières en début de livre en remplacement du Sommaire, il suffit de remplacer le nom Table des matières par Sommaire.
Créer une page de style "première page" pour y insérer la table des matières. Placer le curseur au début de la page.
La table des matières donne le titre des articles et des sections. Il n'y a pratiquement aucun travail supplémentaire pour établir cet index. Dans le menu « Insertion/Index et tables », choisir « Table des matières » puis décocher la case « Protéger contre toute modification manuelle », puis cliquer sur « OK ». C'est terminé, l'index se place où votre souris a positionné le curseur.
Les liens internes vers les chapitres peuvent être effacés si l'index n'est pas protégé contre les modifications manuelles.
Exemple de table des matières créé pour l'exercice "LivreTest".
Table des matières Contenu du livre, 1 ArticleUn, 2 Sommaire, 2 Chapitre 1, 2 Chapitre 2, 2 Chapitre 3, 2 ArticleDeux, 3 Sommaire, 3 Chapitre 1, 3 Chapitre 2, 3 Chapitre 3, 3 ArticleTrois, 4 Chapitre 1, 4 Chapitre 2, 4 Chapitre 3, 4 Annexe, 5 Références, 5 Sources et contributeurs des articles, 5 Source des images, licences et contributeurs, 5 Licence, 6 Index, 7
Dans cet exemple on utilise la mise en page <pre>...</pre> avec des espaces et des tabulations.
Dans une syntaxe wiki ou html on peut utiliser :
<span style="float:right">..... 1</span> pour numéroter les pages à droite. ....................... 1
Indexer un wikilivre
modifierRappel : (OO est l'abréviation de OpenOffice)
Préparer le « Modèle de livre » pour OO
modifier- Procéder comme dans le sous-chapitre précédent , créer autant de pages de style "Première page" qu'il y aura de pages non numérotées, ou numérotées différemment des pages du contenu (i, ii,iii, etc.) : L'énumération suivante est non-exhaustive :
Deux éventuelles pages de gardes blanches (pour les gros livres), faux titre (modèle:faux-titre, verso de faux titre (modèle:verso de faux-titre), page de titre avec sous-titre et le nom de l'éditeur (modèle:Page de titre), un verso de titre (modèle:Colophon), sommaire, voire un dos de sommaire (vierge ou non),
six ou huit pages en général, sachant que les Contenus, Sommaires, et les Chapitres doivent toujours commencer sur une page impaire. - Ajouter une page standard pour le foliotage, à la suite du document. La numérotation doit commencer à 1, page à droite, suivie d'une page verso à gauche, cette page 1 peut être la première page de garde ou la page de faux-titre. Le style de page est indiqué sous la fenêtre d'édition.
Pour faciliter la numérotation gauche et droite, choisissez (F11) Style standard avec Mise en page en Vis-à-vis, puis activer l'En-tête ou/et Pied de page, décocher Contenu identique gauche/droite. - Ajouter les pages de la fin du document en style "Première page", (Postface, pages de garde, etc.) 2 au minimum. À défaut, d'autres pages pourront facilement être ajoutées.
- Enregistrer ce document avec le nom « Modèle de livre ». Ce document évitera de tout recommencer avec la conversion d'un autre wiki-livre vers OpenOffice.
Recopier le contenu WikiMedia (textes et images) dans OO
modifier- Méthode 1 : Surligner et Copier (clic Ctrl-c) le contenu WikiMedia à recopier sans être connecté, ceci permet d'éviter d'être obligé de supprimer les ↑ [URL] [[lien]]. La méthode convient lorsqu'il y a des textes masqués que l'on doit dérouler avant de copier.
- Méthode 2 : Éditer, surligner, copier, avec le menu Modifier s’il n'y a pas de texte masqué.
- Méthode 3 : Éditer, surligner, copier, chaque chapitre et coller le début de chaque chapitre dans une page de style première page de droite, puis les pages suivantes dans les pages de style standard. Le titre du chapitre doit être style Titre 1 en première ligne.
- Coller ce contenu dans "OO writer" (clic Ctrl-v), le contenu collé ne tient pas compte des directives {{Nouvelle page imprimée}}
- Rétablir les nouvelles pages à imprimer dans "OO Writer" : "Insertion" + "Saut manuel" + "Saut de page"
- Faites une sauvegarde initiale du contenu dans le style date-titre-initial.
Corriger et compléter les pages
modifier- Si vous disposez d'un correcteur analyseur de syntaxe ("Antidote" ?), c'est le moment de vous en servir.
- Faites une sauvegarde du contenu corrigé dans le style date-titre-corrrigé.
Toutes les sauvegardes doivent ensuite être incrémentées de façon à retrouver les originaux si ça tourne mal après ou au cours d'une intervention. Il existe une macro qui fait cela :
https://forum.openoffice.org/fr/forum/viewtopic.php?f=18&t=18566. - Vous pouvez maintenant insérer l'index lexical "Insertion" + "Index et tables" + "Entrée" (Voir la section précédente Indexation de l'index lexical).
- Faites une sauvegarde incrémentée.
- Insérer une « En-tête » dans les pages de contenu (ou un pied de page) dans laquelle vous pourrez placer le numéro de page qui doit commencer à '1' sur une page impaire. Cliquez sur la touche F11 pour obtenir les listes de styles et formatages. Finissez par ajouter "Insérer" une "Règle horizontale" (sur la même ligne). Cette règle crée une sorte de séparateur entre le texte et l'entête.
- Pour finir Recopiez les éventuelles pages de présentation et faites une sauvegarde du fichier.
- Supprimez l'« En-tête » de la première page de chaque chapitre recopié.
Documentation générale
modifier- Une liste des styles de pages est disponible sur https://fr.wikipedia.org/wiki/Page_(livre)#Lexique.
- Exemple de modèle pour les couvertures : {{Couverture d'un wikilivre}}
- Visualiser le fichier PDF cette page, daté du 23 septembre 2019
https://upload.wikimedia.org/wikipedia/commons/e/eb/Référencement_manuel_des_pages_et_livres_de_MediaWiki-fr.pdf - Créez une compilation des fichiers du livre (menu latéral, "imprimer/exporter") et voyez ce que propose PediaPress.
Vous pourrez noter à part les résultats qui vous conviennent (le copier-coller ne marche pas), si tout est bon commandez le livre.
Conseils pour les cadres et les formules mathématiques dans OO
modifierLes images sont souvent mal recadrées. Le plus simple est de recopier l'image ailleurs dans le texte ou dans de nouveaux cadres créés. Replacer aussi le texte sous l'image.
Les blocs de formules mathématiques ne sont pas reproduits correctement. Il est préférable de faire une copie d'écran du bloc et de recopier l'image, éventuellement recadrée, à sa place dans le texte.
Imprimer
modifierCréer un PDF pour l'imprimante et pour les « liseuses ».[6]
- La version peut être convertie et enregistrée au format PDF/A (non modifiable) par le menu d'OpenOffice.
PDF avec les liens internets : Dans l'option Liens (Link): cochez l'export des liens (Export bookmark as named destination). - Il est aussi possible d'imprimer au format PDF avec une imprimante PDF telle que PDF24 qui a de nombreux avantages dont celui d'imprimer en haute qualité et de permettre de déplacer, ajouter, supprimer, et remplacer des pages.
Alternative à l'indexation avec OpenOffice ou LibreOffice
modifierCette alternative permet de conserver la présentation de l'auteur du livre.
La page Annexe créée avec le programme annexer résout le plus grand des problèmes[7].
- Pour créer l'index des chapitres on peut utiliser le mot magique __TOC__ dans la page Index ou la copie de l'encadré des Sections.
- Pour créer un index alphabétique on peut
- recopier l'index des chapitres dans un tableur,
- ajouter les numéros des pages dans la colonne B, trouvées dans la pré-édition PDF,
- supprimer les numéros de chapitres pour ne conserver que le texte dans la colonne A, puis
- trier dans l'ordre alphabétique et
- placer cet "index alphabétique" dans la page Index.
- Créer un nouveau PDF avec une numérotation des pages, incluant les pages Annexe et Index.
Références
modifier- ↑ https://korben.info/installer-shell-bash-linux-windows-10.html
- ↑ http://montefiore.ulg.ac.be/~nvecoven/ci/files/tuto_bash/tuto_bash.html
- ↑ Installer les fichiers de l'application originale en français
- ↑ https://forum.openoffice.org/fr/forum/viewtopic.php?p=185643#p185643 Writer - Index Lexical
- ↑ https://help.libreoffice.org/6.3/fr/text/swriter/01/04120250.html?DbPAR=WRITER#bm_id3148768 Fichier de concordance
- ↑ https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Lecture_et_impression_des_livres_de_Wikilivres#créer_un_PDF_pour_l'imprimante
- ↑ https://fr.wikibook.org/Auto-éditer_un_wikilivre/Auto-référencer
Index des sections
modifierSections ↑
1 Codes shell pour créer la page « Annexe » d'un wikilivre 1.1 Entête des modules 1.2 Annexer (main) 1.2.1 Tests unitaires du fichier de commandes annexer 1.2.2 Annexe obtenue 1.2.2.1 Impression visuelle de cette annexe 1.3 Lister (module) 1.3.1 Exemple de page Contenus du livre en test LivreTest 1.3.2 Exemple de page du livre en test, LivreTest compilé 1.3.3 Exemple de listes obtenues pour le livre LivreTest 1.3.4 Tests du module lister 1.3.4.1 Les lignes qui méritent notre attention 1.3.4.2 Tests de la commande 1.4 Télécharger (module) 1.4.1 Test du module « télécharger » 1.4.1.1 Les lignes qui méritent notre attention 1.4.1.2 Tests de la commande télécharger 1.5 Ajouter sclt (module) 1.5.1 Tests du module ajouter_sclt 1.5.1.1 Les lignes qui méritent notre attention 1.5.1.2 Tests de la commande 1.6 Ajouter scli (trois modules indépendants) 1.6.1 Les fichier de commandes scli 1.6.1.1 Version classique sclic (module) 1.6.1.2 Programme des tests du module ajouter_sclic 1.6.1.3 Les lignes qui méritent notre attention 1.6.1.4 Tests de la commande ajouter_sclic 1.6.1.4.1 Fichiers obtenus avec la commande ~/Annexer/ajouter_sclic LivreTest 1.6.1.5 Version personnalisée par article sclip (module) 1.6.1.6 Entête ajouter_sclip 1.6.1.7 Module sclipco.inc 1.6.1.8 Modude sclipwb.inc 1.6.2 Comparaison des annexes obtenues pour la page LivreTest 1.6.2.1 Annexe classique avec sclic 1.6.2.2 Annexe personnalisée avec le téléchargement sur le serveur Commons 1.6.2.3 Annexe personnalisée avec le téléchargement sur le serveur Wikilivres 1.6.2.4 Comparaison avec l'annexe manuelle ou semi-manuelle 2 Tests unitaires et d'intégration 3 Copier et installer les fichiers de l'application et des tests 4 Post-référencer post-indexer un wikilivre 5 Post indexer avec Open Office (OO) ou LibreOffice 5.1 Survol rapide de post indexation avec le LivreTest 5.1.1 Préparation du document avec OO 5.1.2 Copier le document dans OO 5.1.2.1 Créer l'« Index lexical » 5.1.2.2 Créer la « Table des matières » 6 Indexer un wikilivre 6.1 Préparer le « Modèle de livre » pour OO 6.2 Recopier le contenu WikiMedia (textes et images) dans OO 6.3 Corriger et compléter les pages 6.4 Documentation générale 6.5 Conseils pour les cadres et les formules mathématiques dans OO 6.6 Imprimer 7 Alternative à l'indexation avec OpenOffice ou LibreOffice 8 Références 9 Index des sections