Aller au contenu

Auto-éditer un wikilivre/Annexer (Version internationalisée)/src/ecfpb.sh

Un livre de Wikilivres.

File for development of the function ecfpb ecfpb.bash, and test-ecfpb.bash to tests the function included in annex.lib

Fichier de mise au point de la fonction ecfpb ecfpb.bash, et test-ecfpb.bash pour éprouver la fonction en librairie annex.lib

Development of the function

#!/bin/bash
#H VERSION 210409
#H File : ecfpb.bash function ecfpb 'extract contents from printable book'
#H This function is included in $Installdir/$Libdir/annex.lib
#H This function ecfpb product 'bookname.contents' in the project 'bookname'
#www function ecfcb () 'extract contents from compiled book'
#H
#H extract the documentation from this file :
#H cat test_ecfpc.bash | grep -e '#' > doc-test_ecfpc.bash
#H or cat test_ecfpb.bash | grep -e '#E' -e '#P' | sed -e "s/#E/ /g" -e "s/#P/ /g" |sed '1d' > docuEN-test_ecfpb
#H ou cat test_ecfpc.bash | grep -e '#F' -e '#P' | sed -e "s/#F/ /g" -e "s/#P/ /g" |sed '1d' > docuFR-test_ecfpc
#H
#E English Documentation
#E 

#F Doc en français
#F Le livre peut être annexé par article ou globalement.
#F Dans le cas d'annexes séparées d'un livre il sera nécessaire de concaténer
#F   les annexes manuellement.
#F Dans le cas de l'annexation du livre en entier il faut contrôler le
#F   résultat et, éventuellement, le corriger à l'aide d'un éditeur de texte.
#F

#P Doc programmeurs
#P L'objet de cette commande de tests est d'étudier le comportement que doit
#P   avoir la fonction ecfpc pour générer l'annexe d'un livre, avec un
#P   lien vers une page de contenu.
#P La fonction ecfpc de la librairie annex.lib analyse le paramètre entré
#P   par la ligne de commande à l'aide de la fonction findbook.
#P
#P ** Cas où le projet n'existe pas encore dans le répertoire de travail **
#P Ce paramètre doit être, l'url, l'adresse du livre ou de la page à annexer.
#P Exemples :
#P Version impimable :
#P  https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/Contenu
#P 
#P Dans ce cas la fonction findboox doit retrouver les articles du livre,
#P   trouver le nom du site, le nom du livre, le suffixe qui sera donné sous la
#P   forme : 'nom_du_livre.suffixe', afin d'être analysé par le programme list
#P   pour finalement générer la page'annexe' du livre.
#P
#P ** Cas où le projet existe **
#P Le paramètre doit être simplement le nom_dulivre. 
#P Le projet ~/Add_appendix/nomdulivre doit contenir le fichier
#P   nom_du_livre.suffixe qui contient la liste des pages à analyser.
#P La liste des pages peut être de la forme :
#P   * [[ nom_du_livre/article1 ]]
#P   * [[ nom_du_livre/article2|article2 ]] 
#P ou sous forme d'url :
#P   * https://fr.wikibooks.org/wiki/nom_du_livre/article1
#P   * [https://fr.wikibooks.org/wiki/nom_du_livre/article2 article 2]
#P

#P Print availables suffix in test mode
    if test -z $Installdir; then if test -d ~/Add_appendix/bin; then Installdir=~/Add_appendix;fi;fi
#T echo "Installdir = $Installdir"; exit 0;
    Workdir=~/Add_appendix
    Libdir=$Installdir/lib

#O Include the lib annex.lib which contains funtion findbook()
    source $Libdir/annex.lib
	
#O Print syntax if the first parameter is no entry in test mode
	if test -z $1; then echo "Syntax : ecfpb <book url> or ./ecfpb <book url>"; exit 1; fi

#O Test url with printable version
    #echo "Test for 'findbook https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/Contenu' "
    #findbook https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/Contenu
	echo "Test for $1"
	findbook $1
	echo ""
	echo "* Bookfullurl: "$Bookfullurl
	echo "* MW book url: "$MWbookurl
    echo "* Site name  : "$Site
    echo "* Last field : "$Lastfield
    echo "* Bookname   : "$Bookname
    echo "* Suffix     : "$Suffix
    echo "* Bookname.Suffix : "$Bookname.$Suffix	  

#function ecfpb ()
#{
#O Affect the variable $Projectdir
	Projectdir=$Workdir/$Bookname
#T Print the project directory echo "Project directory = $Projectdir"; exit 0

#O Test if the file is a printable version
    if [ -n $Site ] && [ "$Suffix" = "contents" ]; 
    then 
      echo "url is a printable version."; 	 
#O   Download script from the file $Lastfield
	  #wget https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/Contenu
	  #wget $1
#O 	 Find the contents of file named '$Lastfield'
	 #cat Contenu | grep /wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/ | grep -v -i Contenu > $Lastfield.txt
	 cat $Lastfield | grep /$MWbookurl/ | grep -v -i $Lastfield > beforelastfield.txt
#T	 cat beforelastfield.txt and select 
	 cat beforelastfield.txt | awk -F "/" '{for (i=1;i<=NF;i++) print $i}' > fieldlist.txt
	 cat fieldlist.txt | sed  -e "s/\"/\n/g" | sed -e "s/ /\n/g" > fieldlist2.txt
	 wc -l fieldlist.txt | cut -d" " -f1 > N.txt; read N < N.txt; #T echo " N Fields = "$N   
     let  n=N; i=0 ; j=0; article=1; flag0=0; #flag1=1;
	 rm article.*.txt
	 while read line  
     do 
	   let i+=1;
	   if [ "$line" = "wiki" ]; then echo -n "[[$MWbookurl/" > article.$article.txt; let flag0=1; fi
	   if [ $flag0 = "1" ] && [ "$line" = "$Bookname" ]; then let j=i+1; fi
	   if [ $flag0 = "1" ] && [ "$i" = "$j" ]; then echo "$line]]" >> article.$article.txt; let article+=1; let flag0=0; fi
     done < fieldlist2.txt
	 fi
#O Concatenation of files obtained, to file bookname.suffix
    let i=1; rm $Bookname.$Suffix
	echo "[[$MWbookurl]]" > $Bookname.$Suffix
	while (( i < 10 ))
	do
	  #echo "article.$i.txt ="; cat article.$i.txt
      if [ -r article.$i.txt ]; then cat article.$i.txt >> $Bookname.$Suffix; let i+=1 ; else break; fi
	done
	
#O If project '$Bookname' exist
    if test -d $Projectdir 
    then
	  echo "Project directory = $Projectdir"
      if [ -r "$Projectdir/$Bookname.$Suffix" ] 
      then 
        echo -n -e "$(gettext ' \033[31mUpdate $Bookname.$Suffix ? y/n :\033[0m ')"; read -s -n1 -p "inkey" Inkey; echo;
        if [ "$Inkey" = "y" ] 
        then  chmod 755 "$Projectdir/$Bookname.$Suffix"; cp "$Bookname.$Suffix" $Projectdir/.; chmod 555 "$Projectdir/$Bookname.$Suffix";
        else "$(gettext ' file is not updated ! ... Continue ... ')"
        fi
      else cp "$Bookname.$Suffix" $Projectdir/.
      fi
    fi
#}
#T Affichage de bookname.suffix en mode test
    if [ $0="./ecfpb.bash" ] || [ $0="$Testsdir/findbook/ecfpb.bash" ]; then echo "$Bookname.$Suffix :"; cat $Bookname.$Suffix; fi

test-ecfpb.bash with function in annex.lib

[modifier | modifier le wikicode]
#!/bin/bash
#H File : ecfpb.bash function ecfpb 'extract contents from printable book'
#H Syntax for tests ecfpb <book url>, example in tests directory :
#H ./ecfpb.bash https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/Contenu

#P Print availables suffix in test mode
#    if test -z $Installdir; then if test -d ~/Add_appendix/bin; then Installdir=~/Add_appendix;fi;fi
#T echo "Installdir = $Installdir"; exit 0;
#    Workdir=~/Add_appendix
#    Libdir=$Installdir/lib
    
Version=210414

clear
#P print prog, version and Why
echo "ecfpb.sh $Version for testing ecfpb in annex.lib"

#P initialization of variables
    Site=""
    Bookname=""
    Suffix=""
    Return_value="non available"

#P find the current directory
     pwd > pwd.txt
     read Currentdir < pwd.txt
#P find the user home directory
     echo -n "/" > homedir.txt
     cat pwd.txt | head -n 3 | cut -d '/' -f 2-3 >> homedir.txt
     read Homedir < homedir.txt
     echo -n "/" > workdir.txt
     cat pwd.txt | head -n 4 | cut -d '/' -f 2-4 >> workdir.txt
     read Workdir < workdir.txt
    # rm pwd.txt homedir.txt workdir.txt
     
#P print current, home, working directories
    echo "Current directory = $Currentdir"
    echo ""
    echo "Home directory = $Homedir"
    echo ""
    echo "Working directory = $Workdir"
#T Test break exit 0

#P Find lib directory
    if test -a /usr/local/lib/annex.lib; then Libdir=/usr/local/lib; Bindir=/usr/local/bin; Sharedir=/usr/local/share
    elif test -a $Workdir/lib/annex.lib; then Libdir=$Workdir/lib; Bindir=Workdir/bin; Sharedir=$Workdir/share
    elif test -a $Workdir/tests/1-annex.lib/annex.lib; then Libdir=$Workdir/tests/1-annex.lib/
    else echo "Lib directory is not found, exit -1"; exit -1
    fi

# print directories and if OK
   echo -n "Working directory = $Workdir"
   if [ -d $Workdir ]; then echo " found"; else echo "notfound";fi
   echo -n "Lib directory = $Libdir"
   if [ -d $Libdir ]; then echo " found"; else echo "notfound";fi
   echo -n "bin directory = $Bindir"
   if [ -d $Bindir ]; then echo " found"; else echo "notfound";fi
   echo -n "share directory = $Sharedir"
   if [ -d $Sharedir ]; then echo " found"; else echo "notfound";fi
   echo "----"
#T Testbreak exit 0
    clear   
    
#O Include the lib annex.lib which contains funtion ecfpb()
    source $Libdir/annex.lib
	
#O Print syntax if the first parameter is no entry in test mode
	#if test -z $1; then echo "Syntax : ecfpb <book url> or ./ecfpb <book url>"; exit 1; fi

#O Test url with printable version
    #echo "Test for 'ecfpb https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/Contenu' "
    #ecfpb https://fr.wikibooks.org/wiki/Utilisateur:Goelette_Cardabela/Sandbox/LivreTest/Contenu
	echo "Test for $1"
	findbook $1
	echo ""
	echo "* Bookfullurl: "$Bookfullurl
	echo "* MW book url: "$MWbookurl
    echo "* Site name  : "$Site
    echo "* Last field : "$Lastfield
    echo "* Bookname   : "$Bookname
    echo "* Suffix     : "$Suffix
    echo "* Bookname.Suffix : "$Bookname.$Suffix
    
#O Test the function ecfpb 
    ecfpb $1

#T Print bookname.suffix in test mode
    if [ $0="./ecfpb.sh" ] || [ $0="$Testsdir/1-annex.lib/12-ecfpb/ecfpb.sh" ]; then echo "$Bookname.$Suffix :"; cat $Bookname.$Suffix; fi