« Auto-éditer un wikilivre/Auto-référencer/ajouter sclic.sh » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
WL:RD : ! mise en page, Initialisation de la page
(Aucune différence)

Version du 25 mai 2020 à 14:53

  1. ! /bin/bash
  2. #! /bin/bash
    #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 Version sur WikiLivres le : 7 mai 2020
    #P
    #P LES FICHIERS DE COMMANDES 
    #P
    #P## header.sh ##############
    #P header.sh, a crée 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   cencé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.sh
    
    #O## ajouter_scli_classique ###########
    #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 "<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>" >>  $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 "<small>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.</mall>" >>  $PageScliC
    echo " " >>  $PageScliC
    echo "<small><small>" >>  $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 '!' -f3 \
    | grep https | tr '>' ! | sed "s/<\/a//g" |sed "s/!//g" > $Projet/$1/$1.links
    
    #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 "</small></small>" >> $PageScliC
        echo "{{Nouvelle page imprimée}}" >> $PageScliC
    
    exit 0
    # Fin de ajouter_sclic