Auto-éditer un wikilivre/Auto-référencer/ajouter sclic.sh
Apparence
#! /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