Auto-éditer un wikilivre/Auto-référencer/header.inc.sh
Apparence
header.inc.sh
[modifier | modifier le wikicode]- 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
[modifier | modifier le wikicode]Ce 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
[modifier | modifier le wikicode]Ce 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 : $?"