#!/usr/bin/perl -w
# remd: petit éditeur pour console, sorti au format html.
# (adaptation de Aled pour écrire du html)_ alain Adelmar 29 decembre 2001 ~ Novembre 2002

system(clear);
$time_in_s = time();  #facultatif mais peut être pour divers tempfile
$dt = localtime($time_in_s);
$mt ="";

$y = 0;
$ip = 1;

#-------------liste des commandes--
@it = ( 'i%', "<i\>", "<\/i\>");
@gr = ( 'g%', "<b\>", "<\/b\>");
@sl = ( 'u%', "<u\>", "<\/u\>");
@ex = ( 'ex%', "<strike\>", "<\/strike\>");
@cl = ( 'cl%', "<blink\>", "<\/blink\>");
@tt = ( 'tt%', "<tt\>", "<\/tt\>");
@pg = ( '+%', "<font size=+1\>", "<\/font\>");
@pp = ( '+%', "<font size=-1\>", "<\/font\>");
@tt_h1 = ( 'h1%', "<h1\>", "<\/h1\>");
@tt_h2 = ( 'h2%', "<h2\>", "<\/h3\>");
@tt_h3 = ( 'h3%', "<h3\>", "<\/h3\>");
@tt_h4 = ( 'h4%', "<h4\>", "<\/h4\>");
@tt_h5 = ( 'h5%', "<h5\>", "<\/h5\>");
@tt_h6 = ( 'h6%', "<h6\>", "<\/h6\>");
@lo = ( 'lo%', "<hr\>");
@alC = ( 'ac%', "<center\>", "<\/center\>");
@alD = ( 'ad%', "<div align=right\>", "<\/div\>");
@cgris = ( 'cg%', "<font color=\"\#0808080\"\>", "<\/font\>");
@cvert = ( 'cv%', "<font color=\"\#006600\"\>", "<\/font\>");
@crg = ( 'cr%', "<font color=\"\#006600\"\>", "<\/font\>");
@y = ( 'tab ', "<A NAME=\"$y\"\>"); #index pour les tag
$revenir = '¤';
#----------------------------


#===== assignation au différantes variables ========================
#a)***présentation de l'application à l'écran ***
$x = "x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x\n"; 
$bienvenu = "$x  *  $dt  *\n$x Bienvenu sur l'éditeur aled2Html\nl\'editeur HTML alain A_d_e_l_m_a_r\n$x";
#b)**recolte des informations de base.
print "Je vais maintenant procéder à la collécte des informations de base\n";
print "votre nom:\t";
chomp ($auteur = <STDIN>);
print "votre prénom:\t";
chomp ($prenom = <STDIN>);
print "votre e_mail:\t";
chomp ($email = <STDIN>);
($login, $fai)= split(/\@/, $email);

print "$x merci, $prenom\n$bienvenu\n";
print "On va pouvoir commencer,\nmais avant quel sera le titre de ce document?\n(de preferance sans espace),\nil servira de nom pour le document\n";
chomp ($titre = <STDIN>);
$titre =~ s/\s//;

if ($titre =~ /\.htm.?$/i) {
  &titre_et_mini_titre;
}
else {
  $root = $titre;
  $ext = "html";
  &titre_et_mini_titre;
}
while (-e $titre) {
  print "désolé mais il existe déjà un fichier portant le nom de $titre, veuiller entrer un autre nom\n";
  chomp ($titre = <STDIN>);
  &titre_et_mini_titre;
}
$mini_titre .= "\.html";
$titre = "$root" . "\.$ext";
print "donc vous préférez:\n\t [1] $mini_titre\nou\n\t [2] $titre\n";
$rtitre = <STDIN>;
chomp $rtitre;
if ($rtitre == 1) {
  $titre = $mini_titre;
}
elsif ($rtitre == 2) {
  print "tres bon chois\n";
}
else {
  $titre = "$root" . "\.htm";
  print "Le titre sera dans ce cas $titre\n";
}
print "Récapitulation:\nMaintenant que le document est défini, en cas d'erreurs, quoi qu'il arrive il vous suffira de taper:\nalEd2html.pl $mini_titre\net vous pourrez reprendre le document ou vous l'avez laissé\nUn bref tutorial est accessible en tapant: TUT\nLa liste des commandes d'éditions en tapant: C\nUn aperçu du travail en tapant: VOIR\n$x $root\t  $dt page $ip pour continuer taper:\t<Enter\>\n";
$ligne = <STDIN>;
chomp $ligne;
$ilc = 1;
$tut = "TUT";  #appel au tutorial
$voir = "VOIR";  #appel au compte rendu, visionner le document
$com = "C";
&control; #appel a la fonction control


sub control {
  $ilc++;
  # on peut mettre un compteur de page ici
  
  if ($ligne eq $tut) {
    &tutorial;
  }
  elsif ($ligne eq $com) {
    &play_commands;
  }
  elsif ($ligne eq $voir) {
    &vu;
  }
  elsif ($ligne =~ /^q|:q/i) {
    &closet;
    &sauve_par_def;
    &quitte;
  }
  elsif ($ligne eq ":wq!") {
    &closet;
    &sauve;
    &quitte;
  }
  elsif ($ligne eq "") {
    $ligne_in = "\n";
  }
  else {
    $l++;
    &ligne_in($ligne);
  }
}


sub ligne_in($ligne) {
  my($ligne) = @_; 
	
  while ($ligne) {
    push @reste, $it[2] if s/$it[0]/$it[1]/;
    push @reste, $gr[2] if s/$gr[0]/$gr[1]/;
    push @reste, $sl[2] if s/$sl[0]/$sl[1]/;
    push @reste, $pg[2] if s/$pg[0]/$pg[1]/;
    push @reste, $pp[2] if s/$pp[0]/$pp[1]/;
    push @reste, $h1[2] if s/$h1[0]/$h1[1]/;
    s/$h2[0]/$h2[1]/ && push @reste, $h2[2];
    s/$h3[0]/$h3[1]/ && push @reste, $h3[2];
    s/$h4[0]/$h4[1]/ && push @reste, $h4[2];
    s/$h5[0]/$h5[1]/ && push @reste, $h5[2];
    s/$h6[0]/$h6[1]/ && push @reste, $h6[2];
    s/$ex[0]/$ex[1]/ && push @reste, $ex[2];
    s/$tt[0]/$tt[1]/ && push @reste, $tt[2];
    s/$cl[0]/$cl[1]/ && push @reste, $cl[2];
    s/$cgris[0]/$cgris[1]/ && push @reste, $cgris[2];
    s/$cvert[0]/$cvert[1]/ && push @reste, $cvert[2];
    s/$crg[0]/$crg[1]/ && push @reste, $crg[2];
    s/$alD[0]/$alD[1]/ && push @reste, $alD[2];
    s/$alC[0]/$alC[1]/ && push @reste, $alC[2];
    s/$tt_h1[0]/$tt_h1[1]/ && push @reste, $tt_h1[2];
    s/$tt_h2[0]/$tt_h2[1]/ && push @reste, $tt_h2[2];
    s/$tt_h3[0]/$tt_h3[1]/ && push @reste, $tt_h3[2];
    s/$tt_h4[0]/$tt_h4[1]/ && push @reste, $tt_h4[2];
    s/$tt_h5[0]/$tt_h5[1]/ && push @reste, $tt_h5[2];
    s/$tt_h6[0]/$tt_h6[1]/ && push @reste, $tt_h6[2];
    s/$lo[0]/$lo[1]\n/;
    s/$y[0]/$y[1]/ && $y++;
  }
  &et_ferme($ligne);

  # $ligne = "<br\> " . $ligne . "@reste\n";
  # ou pour fermer les modif a la fin:
  $ligne = "<br\> " . $ligne;
  push @nwline, $ligne;
  &ma_ligne;
}

# le document ==============
$lib_deb = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">';


sub et_ferme($ligne) {
  my($ligne)=@_;

  for $i (0 .. $#reste) {
    s/$revenir/shift(@reste)/;
  }
}

sub ma_ligne {
  $ligne = <STDIN>;
  chomp $ligne;
  &control($ligne);
}

sub titre_et_mini_titre {

  ($root, $ext)= split(/\./, $titre);
  @q = split(//,$root);
  for $i(0..7) {
    $mt .= "$q[$i]";
  }
  $mini_titre = $mt;
}

sub sauve_par_def {
  $titre = "temp-" . $dt . "\.html";
  
  open FO, ">$titre" or die "ouverture de $titre impossible $!";
  print FO "$lib_deb\n";
  print FO "\t<metta name=\"Author\" content=\"$prenom $auteur\", \"<mailto:$email\>\"\>\n\t<body\>\n";
  print FO "@nwline\n";
  print FO "<\/body\>\n<\/html\>\n";
  close FO || die "fermeture de $titre impossible $!";
}

sub sauve {
  open FO, ">$titre" or die "ouverture de $titre impossible $!";
  print FO "$lib_deb\n";
  print FO "\t<metta name=\"Author\" content=\"$prenom $auteur\", \"<mailto:$email\>\"\>\n\t<body\>\n";
  print FO "@nwline\n";
  print FO "<\/body\>\n<\/html\>\n";
  close FO || die "fermeture de $titre impossible $!";
}

sub closet {
  &et_ferme;
  print "@reste voilà il ne reste que ca\n";
}

print "$x $ilc appel pour $l $lignes de code html\n";

sub quitte {
  die "$xTchao!\n";
}

END;
  
