#!/bin/bash
########################################################Fontion traitant le sens####################################################################################
function traiteSens
{
#On regroupe ici tous les motifs 
motif_anglais="bud|button|switch|simple|spot";
motif_arabe="برﻋﻢ|ﺯﺮ|بشرة";
motif_espagnol="botón|grano|pustula|capullo";       
motif_francais="bouton";
motif_malgache="vontsina|bokotra|mony|forofotra";
motif_russe="бутон|пуговица|кнопка|прыщ"; 
#On cré et on initialise les compteurs à 0
#Le compteur j sert à crée des sous-répertoires dans les répertoires PAGESASPIREES, DUMP, ET CONTEXTES. Chaque sous-répertoire va stocker les résultats crée par le programme.
j=0;
#Le compteur c sert à compter uniqument les urls.
c=0;
#Le compteur i sert à crée des fichiers dans les répertoires PAGESASPIREES, DUMP, ET CONTEXTES. Chaque fichier va stocker les résultats crée par le programme.
i=0;
#On crée et on initialise le compteur nbdump qui servira pour le répertoire FICHIERSGLOBAUX
nbdump=0;
	#Pour chaque fichier dans chaque répertoire sens, on fait:
	for fic in `ls $dossier/$sens`
	{
			#On incrémente le compteur j
			let "j+=1";
			#On extraie la langue de chaque fichier
			basename=$(basename $fic);
			langue=$(echo $basename |cut -d"_" -f2 |cut -d"." -f1);
			echo -n "traiteSens langue=$langue";
			# On attribue un ou des motif(s) parmi chaque langue. On crée donc une condition.
			if [ "$langue" == "ar" ]
			then
			motif=$motif_arabe;
			fichier="motif_arabe.txt";
			elif [ "$langue" == "an" ]
			then			
			motif=$motif_anglais;
			fichier="motif_anglais.txt";
			elif [ "$langue" == "es" ]
			then
			motif=$motif_espagnol;
			fichier="motif_espagnol.txt";
			elif [ "$langue" == "fr" ]
			then
			motif=$motif_francais;
			fichier="motif_francais.txt";
			elif [ "$langue" == "ma" ]
			then
			motif=$motif_malgache;
			fichier="motif_malgache.txt";
			else [ "$langue" == "ru" ] 
			motif=$motif_russe;
			fichier="motif_russe.txt";
			fi
			#fin de la condition
		
		#Pour chaque url dans chaque fichier, on fait:	
	    for nom in `cat $dossier/$sens/$fic`
	    {
			#On incrémente les compteurs
			let "c+=1";
			let "i+=1";
	    #On crée des sous dossiers pour mettre tous les résultats
		mkdir -p CONTEXTES/$sens/$j ;
		mkdir -p DUMP-TXT/$sens/$j ;
		mkdir -p PAGES-ASPIREES/$sens/$j ;
		   
		echo "================================================================";
		echo "==========TRAITEMENT : $nom ";
        #--------------- On CURL et on détermine l'encodage -----------------------------------------------------------------------------------------
		curl -o ./PAGES-ASPIREES/$sens/$j/$i.html "$nom";
		#C'est une variable qui vérifie si le curl se passe bien ou pas
		retourcurl=$? ;
		echo "RETOUR CURL : $retourcurl";
		#si le curl se passe bien,
		if [[ $retourcurl == 0 ]] 
		    then
			#alors je lance ma detection d'encodage
		    encodage=$(file -i ./PAGES-ASPIREES/$sens/$j/$i.html | cut -d= -f2);
		    echo "ENCODAGE initial : $encodage";
			#------------------ on continue en tenant compte de l'encodage fourni par curl-------------------------------------------------------------
		    #si l'encodage est de l'utf8, alors je fais le travail habituel: lynx et dump
		    if [[ $encodage == "utf-8|UTF-8" ]]
			then
			lynx -dump -nolist -display_charset=$encodage ./PAGES-ASPIREES/$sens/$j/$i.html  > ./DUMP-TXT/$sens/$j/$i-utf8.txt ;
			egrep -i "\b$motif\b" ./DUMP-TXT/$sens/$j/$i-utf8.txt > ./CONTEXTES/$sens/$j/$i-utf8.txt ;
			perl ./PROGRAMMES/minigrepmultilingue.pl  "UTF-8" ./DUMP-TXT/$sens/$j/$i-utf8.txt ./PROGRAMMES/$fichier ;
		    #On renomme le résultat, avec une nomination cohérente
			mv ./resultat-extraction.html ./CONTEXTES/$sens/$j/$i-utf8.html ;
		    #On écrit après les résultats dans le tableau
			echo "
			| $c | $fic | $nom | $i.html | $i.txt ($encodage)
 | $i-utf8.txt | $i-utf8.txt | $i-utf8.html | 
" >> $tablo;
		    #On génère le dossier global
			cat ./CONTEXTES/$sens/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$j.txt ;
			cat ./DUMP-TXT/$sens/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/DUMP-GLOBAUX_$j.txt ;
		    #Le compteur nbdump est initialisé pour savoir où on empile
			let "nbdump+=1";
			
            #-------------------------------------------------------------------------------------------------------------------------------------------------
            # la page n'est pas en utf-8, on cherche un charset...
            #-------------------------------------------------------------------------------------------------------------------------------------------------
			#autrement, l'encogage de la page aspirée n'est pas en utf8
		    else
			echo "on cherche un charset dans la page aspiree...";
		    #on détecte l'encodage de la page web au niveau du charse et encoding:
			if egrep -qi "(charset ?=.*?(\"|\')|encoding ?=.*?(\"|\'))" ./PAGES-ASPIREES/$sens/$j/$i.html ; 
			    then 
   	            #--------------------------------------------------------------------------------------------------------------------------------------------------
	            # on a peut-etre trouve un charset.....
	            #-------------------------------------------------------------------------------------------------------------------------------------------------
				#S'il y a la présence d'un charset, on va l'extraire l'encodage avec la commande egrep: 
			    echo "Presence d'un charset...";
			    encodage=$(egrep -m 1 -o '(((utf|UTF)-(8|16|32))|(gb|GB)(k|K|2312|18030)|(iso|ISO|Iso)-8859-(\w)(\w)?|(WINDOWS|windows|Windows)-1251|(WINDOWS|windows|Windows)-1256|((m|M)(a|A)(c|C)(R|r)(O|o)(M|m)(a|A)(n|N))|us-ascii)' ./PAGES-ASPIREES/$sens/$j/$i.html | sort -u) ;
			    echo "charset extrait : $encodage ";
	            #-------------------------------------------------------------------------------------------------------------------------------
                # avant de continuer on va vérifier si le charset est connu de iconv
	            #-------------------------------------------------------------------------------------------------------------------------------
			    VERIFENCODAGEDANSICONV=$(iconv -l | egrep -io $encodage | sort -u);
			    if [[ $VERIFENCODAGEDANSICONV == "" ]]
				then
	            #-------------------------------------------------------------------------------------------------------------------------------------------------------------
	            # le charset n'est pas connu de iconv : on fait rien....
	            #-------------------------------------------------------------------------------------------------------------------------------------------------------------
				echo "VERIF : <$VERIFENCODAGEDANSICONV> ==> inconnu par inconv, on ne fait rien"
				#On écrit les résultats dans le tableau
				echo "
				| $c | $fic | $nom | $i.html | Encodage non détecté
 | Encodage non détecté
 | Encodage non détecté
 | Encodage non détecté
 | 
" >> $tablo;
			    else
	            #----------------------------------------------------------------------------------------------------------------------------------------------------------
	            # le charset extrait est connu de iconv : on lynxe et on dump !!!
                #----------------------------------------------------------------------------------------------------------------------------------------------------------
				echo "VERIF : <$VERIFENCODAGEDANSICONV> ==> connu par inconv, c'est parti ==> lynx, iconv..."
				lynx -dump -nolist -display_charset=$encodage ./PAGES-ASPIREES/$sens/$j/$i.html  > ./DUMP-TXT/$sens/$j/$i.txt ;
				echo "ENCODAGE final : $encodage (avant conversion vers utf-8)";
				iconv -f $encodage -t utf-8 ./DUMP-TXT/$sens/$j/$i.txt > ./DUMP-TXT/$sens/$j/$i-utf8.txt
				egrep -i "\b$motif\b" ./DUMP-TXT/$sens/$j/$i-utf8.txt > ./CONTEXTES/$sens/$j/$i-utf8.txt ;
				perl ./PROGRAMMES/minigrepmultilingue.pl  "UTF-8" ./DUMP-TXT/$sens/$j/$i-utf8.txt ./PROGRAMMES/$fichier ;
				mv ./resultat-extraction.html ./CONTEXTES/$sens/$j/$i-utf8.html ;
				#On écrit les résultats dans le tableau
				echo "
				| $c | $fic | $nom | $i.html | $i.txt ($encodage)
 | $i-utf8.txt | $i-utf8.txt | $i-utf8.html | 
" >> $tablo;
				#On génère le dossier global
				cat ./CONTEXTES/$sens/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$j.txt ;
				cat ./DUMP-TXT/$sens/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/DUMP-GLOBAUX_$j.txt ;
				#Le compteur nbdump est initialisé pour savoir où on empile
				let "nbdump+=1"; 
			    fi
			else 
				#Sinon, le charset n'est pas détecté, on ne fait rien
			    echo "Pas de charset detecte : on ne fait rien pour le DUMP... ";
			    #On écrit les résultats dans le tableau
				echo "
				| $c | $fic | $nom | $i.html | Encodage non détecté
 | Encodage non détecté
 | Encodage non détecté
 | Encodage non détecté
 | 
" >> $tablo;
			fi  
		    fi
          # Fin de curl 
		else
			#On écrit les résultats dans le tableau
		    echo "
			| $c | $fic | $nom | Page non aspiree... | Encodage non détecté
 | Encodage non détecté
 | Encodage non détecté
 | Encodage non détecté
 | 
" >> $tablo;
		fi
	    }
	}
	
	#On écris les résultats de FICHIERGLOBAUX à la fin du tableau
	echo "
	|  | Fichier Dump global
 $nbdump fichier(s)
 | Fichier Contexte global
 $nbdump fichier(s)
 | 
" >> $tablo;
	#On ferme le tableau
	echo "" >> $tablo;
}
############################# FIN de la fonction qui traite le sens #################################################################################
#On enregistre le nom du répertoire contenant les urls dans la variable 'dossier'
dossier="./URLS/"; 
#On enregistre le nom du fichier de sortie dans la variable tablo
tablo="loulou.html"; 
#On crée le début de la page web
echo "Tableau de liens" > $tablo;
echo " " >> $tablo;
#Création du répertoire FICHIERGLOBAUX
mkdir -p FICHIERGLOBAUX ;
#On supprime tous les répertoires contenant dans le répertoire FICHIERGLOBAUX
rm ./FICHIERGLOBAUX/*.*;
########################On crée un tableau pour chaque sens:#####################################################################
#Pour chaque sans dans le répertoire URLS,
for sens in `ls $dossier`
{
	#Si le sens est botanique alors,
    if [[ $sens == "botanique" ]]
	then
	#On écrit "sens botannique" dans le tableau
	echo "Sens botanique :
" >> $tablo; 
	#On crée la première ligne du tableau qui contient tous les titres des colonnes	
	echo "
	| Nombre d'url: | Nom des fichiers: | Urls: | Pages aspirées: | Dump initial: | Dump utf-8: 
 | Contextes utf-8: 
 | Contextes html: 
 | 
" >> $tablo;
	#On fait l'appel de la fonction 'traite sens'
	traiteSens;
	
	#Sinon si le sens est "electrique", alors
    elif [[ $sens == "electrique" ]]
	then
	#On écrit "sens electrique"	dans le tableau
	echo "Sens électrique :
" >> $tablo;
	#On crée la première ligne du tableau qui contient tous les titres des colonnes	
	echo "
	| Nombre d'url: | Nom des fichiers: | Urls: | Pages aspirées: | Dump initial: | Dump utf-8: 
 | Contextes utf-8: 
 | Contextes html: 
 | 
" >> $tablo;
	#On fait l'appel de la fonction 'traite sens'
	traiteSens;
	
	#sinon si le sens est medical, alors
	elif [[ $sens == "medical" ]]
	then
	#On écrit "sens médical" dans le tableau
	echo "Sens médical :
" >> $tablo;
	#On crée la première ligne du tableau qui contient tous les titres des colonnes		
	echo "
	| Nombre d'url: | Nom des fichiers: | Urls: | Pages aspirées: | Dump initial: | Dump utf-8: 
 | Contextes utf-8: 
 | Contextes html: 
 | 
" >> $tablo;
	#On fait l'appel de la fonction 'traite sens'	
	traiteSens;
	
	#sinon le sens est couture, alors
	else [[ $sens == "couture" ]]
	#On écrit "sens couture" dans le tableau
	echo "Sens couture :
" >> $tablo;
	#On crée la première ligne du tableau qui contient tous les titres des colonnes	
	echo "
	| Nombre d'url: | Nom des fichiers: | Urls: | Pages aspirées: | Dump initial: | Dump utf-8: 
 | Contextes utf-8: 
 | Contextes html: 
 | 
" >> $tablo;
	#On fait l'appel de la fonction 'traite sens'
	traiteSens;
	#Fin de la condition
    fi
}
######################################### FIN du programme ######################################################################################################################################################################################################################### 
#On ferme les balises body et html
echo "" >> $tablo;
################################################################################################################################################################################################################################################