Auto-éditer un wikilivre/Auto-référencer/ajouter sclic.sh

#! /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