#!/usr/bin/perl -w
# remd: reconstruction de ligne html style:
# <br>Les lignes sont coupées par les logiciels de navigations comme <a
# href="exemple.html> 
# donc soit je les réunifies, puis je les redécoupente. alain Adelmar
# 27 Mars 2009
# quand ca fonctionnera bien j'en fais un module.


use Cwd;
my $dir = cwd;

my @copim = my @nwcopim = my @names = ();
my $argv = "";
my $texte = "";
my $encre_vue = 0;
# my $a = '/home/common/atelier/pub/a.html';
my $lx = "xxxxx" x 5;

# traitement argument - fichier a traiter et verif validité

if (@ARGV) {
  if ($ARGV[0] =~ /^-/) {
    $ARGV[0] =~ s/-()/($1)/;
    ($argv = "c") if ($ARGV[0]=~ /^c/);   # pour complet
    ($argv = "u") if ($ARGV[0]=~ /^u/);   # pour update
    ($argv = "l") if ($ARGV[0]=~ /^l/);   # pour light
    ($argv = "o") if ($ARGV[0]=~ /^o/);   # pour ortographe
    if ($ARGV[1] ne "") {
      $f = $ARGV[1];
      &veriff;
      }
    }
  else {
    $f = $ARGV[0];
    &veriff;
    }
  }
else {
  print "$lx\nusage: $reconstruction2lignes.pl [-cou] [fichier_a_traiter] \n(made by $moi\n";
  #---------demander quel fichier traiter et verifier si il existe
  print "$lx\n";
  print "Indiquez le fichier a traiter:\n";
  chomp($f =<STDIN>);
  &veriff;
  }


# création d'un fichier de sortie
$fout = "sorti_" . "$rootfile";
&logout;
open F, "<:utf8", "$f" or die "impos ouvre a $!";
binmode F;
open (FOUT, ">>$fout") or die "ouverture de $fo impossible $!";
# open (FULL, ">>sorti_ec_r2.log") or die "ouverture de ec_changeloghtml impossible $!";
@copim = <F>;

# si une ligne a une balise qui ne ferme par oter le caractere retour chariot et fin de ligne
# et en profiter pour l'option -c d'ajouter une balize _top si aucune ancre n'est présente.
&reconstruire_ligne;


$texte = "@nwcopim";
print FOUT "@nwcopim\n";
# print "texte :\n\n\n $texte\n\n\n";
# $br= '<br>';
# $texte =~ s/\Q<br>\E/$br/g;
print "$texte\n";

close F || die "fermeture de $f impossible $!";

#-----------------------------------
      foreach $line(@nwcopim) {
        if ($line =~ /<body\>/i) {
	  $ligne = $line;   					# met de coté la vrai ligne en créant un substitut
	  chomp $ligne;     					# ote la fin de ligne au substitut
          $bodygarde = "$ligne" . '<a name="_top">' . "\n";     # initilise la ligne qui remplacera $line si il le faut
          $body = $lpp;						# stock le numero de la ligne dans body
          &cherche_encre;
          push @supcopim, $line;
	  $lpp++;
	}
        else {
          &cherche_encre;
          push @supcopim, $line;
	  $lpp++;
	}
      }
      # tout ce qui suit est faut jusqu'a &faitdcopies, mais pas grave car ne peut etre utiliser - a saquer
      if ($encre_vue == 0) {
        if ($argv eq "c") {
         # si c'est pour faire ca j'avais besoin de rien au dessus
#	  for (@supcopim) {
#               s/$copim[$body]/$bodygarde/;
#	    }
          foreach $el (@supcopim) {
            if ($el =~ /<body>/i) {
              s/$el/$bodygarde/;
            }
           }
         # ou ca peut etre
#         $mybody = $supcopim[$body];
#	  @supcopim=~ s/$mybody/$bodygarde/;
	  # $copim[$body] = "<a name=\"_top\"\>\n";
          print FOUT "$lx\npour voir body trouvé\n$supcopim[$body]\npar $bodygarde\n";
          }
        else {
          # ce else est à degagez quand testé
          print FOUT "$lx\ny a des encre ca marche pas, pour voir body trouvé\n$supcopim[$body]\n";
	}
      }
#----------------------------------


print FOUT "$lx\n$lx\navec le nouveau hashage h_tencre\n";
    while ( ($key, $value) = each %h_tencre) {
      print FOUT "$key = $value\n";
      }
print FOUT "$lx\n$lx\navec le nouveau hashage h_tencre\n";
    while ( ($key, $value) = each %h_tag) {
      print FOUT "$key = $value\n";
      }


close FOUT || die "fermeture de $fout impossible $!";

sub veriff {
  if ($f !~ /\/|\\/) {
    $rootfile = $f;
    $f = "$dir\/$f";
  }
  else {
    $rootfile = $f;
    @pathf = split("\/", $rootfile);
    $rootfile = pop @pathf;
  }
  while (!(-f $f)) {
    print "Veuillez entrer un nom de fichier, et son path si ailleur que dans le $dir:\n";
    chomp ($f = <STDIN>);
  }
}

sub reconstruire_ligne {

  foreach $l (@copim) {
    if ($l=~ /^\s/) {
      $l=~ s/^\s{1}?//;
    }
    if ($l =~ /<a[^>]\n$/i) {
      $l =~ s/\x0d\x0a$//;
      $k++;
      $j++;
    }
    # sinon ôter juste le \r (retour chariot)
    else {
      $l =~ s/\x0d$//;
      $j++;
    }
    push @nwcopim, $l;
  }
  print "fichier $file,de $j lignes dont $k ligne href couper\n";
}



sub logout {
  my $fout= @_;
  
  $u= 0;
  while (-f $fout) {
    $u++;
    $fout = "$dir\/sorti_" . $u . "_$rootfile";
  }
}

sub cherche_encre {
  if ($line=~ /<a\sname="(.*?)"/i) {
    $tag = $1;
    $encre_vue++;
    $fz = "$file#$tag";
    $kh = "$cf:$tz";
    $h_tencre{$kh}= "$file" . '#' . "$tag";
    $h_tag{$kh}= "#" . "$tag";
    $tz++;
    }
}



END;
