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

Un livre de Wikilivres.
#! /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