#!/usr/bin/perl #================================================================================ # NOM : stxt2html # DESCRIPTION : convertit un fichier text (en version markup) en html # CATEGORIE : 2html # DEPENDANCE : Getopt::Std # AUTEUR : Jean-Louis Bicquelet-Salaun # LANGAGE : perl # DATE : 31/07/2015 # VERSION : 2.9 # 1.0 28/11/2008 version initiale # 1.1 06/02/2009 modification pour une manipulation plus simple: le résultat est retourné dans une chaine # 1.2 02/10/2009 écrit un fichier et gère les défaut # 1.3 05/10/2009 gère les arguments # 1.4 07/10/2009 correction du bug console # 1.5 12/10/2009 management des arguments # 2.1 27/05/2010 refonte de la version (2 passes) # 2.2 11/07/2011 correction bug tableau, ajout du + en début de ligne dans un tableau pour ne pas changer la couleur # 2.3 02/12/2011 ajout de la commande download, de la commande exec et de la commande include # correction de l'erreur lorsqu'il n'y a pas d'extension # 2.4 14/12/2011 ajout des séparateurs pour les tableaux ( & + # | : ), de l'option header et des listes # 2.5 19/12/2011 ajout de la commande url # 2.6 19/01/2012 ajout des commandes de date et d'heure %time %date etc .. # 2.7 24/06/2013 ajout des couleurs %red, %blue .. et du terme alternate pour un tableau avec un séparateur # 2.8 24/06/2013 ajout de pseudo code html %ul{; %ul}, %p, %li # 2.8.1 22/04/2015 mise en forme et doc # 2.8.2 20/07/2015 mise à jour de la doc # 2.8.3 21/07/2015 substitution de caractères @.; @%; ... # 2.8.4 22/07/2015 ajout ..[include text].... et de header4 ~~~~ # 2.8.5 23/07/2015 ajout de la convertion ascii2html (en caractères html) # 2.8.6 29/07/2015 ajout des couleurs par défaut pour ..[table].... # 2.8.7 30/07/2015 vérification sur les arguments, ajout de la convertion des caractères en html # 2.9 31/07/2015 ajout des macros et des styles css # # BUGS : 19/12/2011 le _ dans url est mal traduit # 29/07/2015 bug plusieures fois la même couleur # #================================================================================ # EXAMPLES: # # 1. stxt2html test.txt # # genere un fichier test.html à partir de test # # 2. stxt2html test test.html # # genere un fichier test.html à partir de test # # 3. stxt2html -m # # affiche la page de man #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ use Getopt::Std; #============================================================================== # libdate.pl librairie date #============================================================================== @GLB_month = ("January","February","March","April","May","June","July","August","September","October","November","December"); @GLB_day=("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"); @GLB_mois=("janvier","fevrier","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","decembre"); @GLB_jour=("lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"); #......................................................... # valeurs par defaut #......................................................... $SEPARATOR =";"; $BORDER=0; $PUCE=""; $DEFAULT_COLOR1="#C0C0C0"; $DEFAULT_COLOR2="#EFEFEF"; $DEBUG="no"; $cmd=""; $arg1=""; $arg2=""; $arg3=""; $mode=1; #------------------------------------------------------------------------------- sub getdate() { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime time; $year += 1900; $mon +=1; $v = sprintf("%2.2d/%2.2d/%2.4d",$mday,$mon,$year); return $v; } #------------------------------------------------------------------------------- sub getdate_en() { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime time; $year += 1900; $mon +=1; $v = sprintf("%2.4d/%2.2d/%2.2d",$year,$mon,$mday); return $v; } #------------------------------------------------------------------------------- sub tagdate() { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime time; $year += 1900; $mon +=1; $v = sprintf("%2.4d%2.2d%2.2d",$year,$mon,$mday,$mon); return $v; } #------------------------------------------------------------------------------- sub gettime { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($hour < 10) { $hour = "0"."$hour"; } if ($min < 10) { $min = "0"."$min"; } if ($sec < 10) { $sec = "0"."$sec"; } return "$hour:$min:$sec\n"; } #------------------------------------------------------------------------------- sub ordinal_en() { my ($v)=@_; if ($v == 1) { $r="1st"; } elsif ($v == 2) { $r="2nd"; } elsif ($v == 3) { $r="3rd"; } else { $r=$v."th"; } return $r; } #------------------------------------------------------------------------------- sub show_date_fr() { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); } #------------------------------------------------------------------------------- sub show_date_en() { my($v); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($year <= 99) { $year = "19"."$year"; } if ($year > 99) { $year = $year-100; if($year < 10) { $year = "0".$year; }$year = "20"."$year"; } $v=&ordinal_en($mday); return "$GLB_month[$mon]$m $v $year"; } #------------------------------------------------------------------------------- sub show_date_long_en() { my($v); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($year <= 99) { $year = "19"."$year"; } if ($year > 99) { $year = $year-100; if($year < 10) { $year = "0".$year; }$year = "20"."$year"; } $v=&ordinal_en($mday); return $GLB_day[$wday].", "."$GLB_month[$mon] $v $year"; } #------------------------------------------------------------------------------- sub show_date() { my($v); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($year <= 99) { $year = "19"."$year"; } if ($year > 99) { $year = $year-100; if($year < 10) { $year = "0".$year; }$year = "20"."$year"; } return "$mday $GLB_mois[$mon] $year"; } #------------------------------------------------------------------------------- sub show_date_long() { my($v); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($year <= 99) { $year = "19"."$year"; } if ($year > 99) { $year = $year-100; if($year < 10) { $year = "0".$year; }$year = "20"."$year"; } return "$GLB_jour[$wday], $mday $GLB_mois[$mon] $year"; } #------------------------------------------------------------------------------- #......................................................... # valeurs par defaut #......................................................... $name="defaut.txt"; $filename="defaut.html"; $result=""; #========================================================= #========================================================= # usage et man #========================================================= sub usage() { print << 'XXX'; usage: stxt2html file.txt XXX exit; } #---------------------------------------------------------- # man #---------------------------------------------------------- sub man() { print <<'XXX'; NAME stxt2html - convertisseur de simple fichier texte (en markup langage) en html DESCRIPTION traduit un fichier texte en un fichier html en utilisant quelques règles simples: * le paragraphe formaté Les formats utilisés pour formater les paragraphes permettent d'identifier clairement les parties du documents. Les paragraphes formaté commence par une ligne ressemblant à ..[ ]............. et se termine par un ligne comme celle-ci ................... (au moins 4 "."). La syntaxe générale est : début de paragraphe: ..[format arg1 arg2 arg3]............... ..[format arg1 arg2].................... ..[format arg1]......................... ..[format].............................. Aucun espace n'est toléré avant le caractère "]". fin de paragraphe: .... ........................................ Les formats reconnus sont: * file : un fichier * table : un tableau * code : un listing * exec : le resultat d'une commande * table * url : une liste d'url * download : une liste de fichiers à télécharger Chaque table a un type, qui prédéfini l'affichage le type peut âtre: simple (simple table avec une couleur de fond) Une table avec une couleur pour les lignes impaires et une pour les lignes paires ..[table simple #C0C0C0 #EFEFEF]......................................... val;12 val;13 url;144 ......................................................................... * paragraphe par défaut Le paragraphe est formatté suivant les règles suivantes: - headers Si une ligne est soulignée par 3 ou plus caractères suivants, il devient un header: Une ligne commençant par au moins 3 caractères '*' correspond à H1 Une ligne commençant par au moins 3 caractères '=' correspond à H2 Une ligne commençant par au moins 3 caractères '-' correspond à H3 Une ligne commençant par au moins 3 caractères '~' correspond à H4 - gras et italique Pour mettre en gras un mot on le précède et on le fait suivre par le caractère '*'. Pour mettre en itaque un mot on le précède et on le fait suivre par le caractère '_'. 10 substitutions de chaque sont acceptéer au maximum par ligne. - liens et images [http://link:text] est un lien vers "link" avec le "text" pour valeur. [image] affiche une image nommée "image" - pas de format Une ligne commençant par un espace n'est pas formattée. - html code Il est bien sur possible d'utiliser des tags html dans un paragraphe par défaut. Pourquoi se priver de *awk* alors? will produce Pourquoi se priver de awk alors? SYNTAX stxt2html [options] [textfile] Options: -h help -m man EXAMPLES: 1. stxt2html test.txt génère un fichier test.html à partir de test 2. stxt2html test test.html génère un fichier test.html à partir de test 3. stxt2html -m affiche la page de man VERSION 2.9 31/07/2015 SEE ALSO la documentation complète peut être trouvée dans stxt2html.html XXX exit 1; } #-------------------------------------------------------- # gestion arguments #-------------------------------------------------------- sub couleur_par_defaut() { if ($arg2==-1) { $arg2=$DEFAULT_COLOR1; $arg3=$DEFAULT_COLOR2 } ; if ($arg3==-1) { $arg3=$DEFAULT_COLOR2 } ; } #-------------------------------------------------------- # test pour replace %red ... #-------------------------------------------------------- sub replace() { my $a=pop; my $r=""; my @b=(); my $j; @b=split/%red\(/,$a; foreach $j (@b) { if ($j ne "") { $j=~ s/\)/<\/font>/; $r=$r."$j"; } i } $a=$r; $r=""; $j=""; @b=split/%blue\(/,$a; foreach $j (@b) { if ($j ne "") { $j=~ s/\)/<\/font>/; $r=$r."$j"; } i } $a=$r; $r=""; $j=""; @b=split/%green\(/,$a; foreach $j (@b) { if ($j ne "") { $j=~ s/\)/<\/font>/; $r=$r."$j"; } i } $_ = $r; } #========================================================= # gestion des macros #========================================================= #-------------------------------------------------------- # fixe la valeur d'une variable #-------------------------------------------------------- sub set_var() { my $value = pop; my $var = pop; $var = uc $var; print "$var $value\n"; if ($var eq "DEBUG") { $DEBUG=$value } elsif ($var eq "DEFAULT_COLOR1") { $DEFAULT_COLOR1=$value } elsif ($var eq "DEFAULT_COLOR2") { $DEFAULT_COLOR2=$value } } #-------------------------------------------------------- # affiche toutes les variables #-------------------------------------------------------- sub display_var() { print << "EOV" \$DEBUG = $DEBUG \$DEFAULT_COLOR1 = $DEFAULT_COLOR1 \$DEFAULT_COLOR2 = $DEFAULT_COLOR2 \$SEPARATOR = $SEPARATOR EOV ; } #========================================================= # déclaration de tags d'ouverture fermeture des modes #========================================================= #-------------------------------------------------------- # read a text file and put it in a list. #-------------------------------------------------------- sub file_read() { my ($name)=shift; my @l; open(FILE,$name)||die "couldn't open file $!\n"; @l=; close FILE; return @l; } #-------------------------------------------------------- # write a list into a text file #-------------------------------------------------------- sub file_write { my ($name,@l)=(@_); open(FILE,">$name")||die "couldn't write file $!\n"; print FILE @l; close FILE; } #--------------------------------------------------------- # TAG console #--------------------------------------------------------- sub display_console_begin() { $_ = '
'; }
sub display_console_end() { $_  = '
'; } #--------------------------------------------------------- # TAG screen #--------------------------------------------------------- sub display_screen_begin() { $_ = '
'; }
sub display_screen_end() { $_  = '
'; } #--------------------------------------------------------- # TAG code (same model as console) #--------------------------------------------------------- sub display_code_begin() { $_ = '
';  }
sub display_code_end()  { $_  = '
'; } #--------------------------------------------------------- # TAG text (same model as console) #--------------------------------------------------------- sub display_text_begin() { $_ = '
'; }
sub display_text_end() { $_  = '
'; } #--------------------------------------------------------- # TAG file #--------------------------------------------------------- sub display_file_begin() { $_ = '
'; }
sub display_file_end() { $_  = '
'; } #--------------------------------------------------------- # TAG include #--------------------------------------------------------- sub display_include_begin() { } sub display_include_end() { } #--------------------------------------------------------- # TAG exec (presentation comme console) #--------------------------------------------------------- sub display_exec_begin() { $_ = << "EOF"

EOF
;
}

sub display_exec_end()
{
	$_ = <<'EOF'
	
EOF ; } #---------------------------------------------------------------------------------------- # TAG table #---------------------------------------------------------------------------------------- #---------------------------------------------------------------------------------------- sub display_table_end { my $color2 = pop; my $color1 = pop; my $type = pop; my @lignes = @_; my $sep=";"; my $first; ### SEPARATEURS ### if($type eq "alt&") { $sep="&"; } elsif($type eq "alt#") { $sep="#"; } elsif($type eq "alt:") { $sep=":"; } elsif($type eq "alt+") { $sep="+"; } elsif($type eq "alt|") { $sep="|"; } elsif($type eq "alt£") { $sep="£"; } elsif($type eq "alt%") { $sep="%"; } elsif($type eq "alt;") { $sep=";"; } elsif($type eq "alt§") { $sep="§"; } elsif($type eq "alt!") { $sep="!"; } elsif($type eq "alt") { $sep=";"; } if($type eq "simple&") { $sep="&"; } elsif($type eq "simple#") { $sep="#"; } elsif($type eq "simple:") { $sep=":"; } elsif($type eq "simple+") { $sep="+"; } elsif($type eq "simple|") { $sep="|"; } elsif($type eq "simple") { $sep="£"; } elsif($type eq "simple%") { $sep="%"; } elsif($type eq "simple;") { $sep=";"; } elsif($type eq "simple§") { $sep="§"; } elsif($type eq "simple!") { $sep="!"; } elsif($type eq "simple") { $sep=";"; } $first=0; if($type eq "header") { $first=1;} else { $first=0;} $result .=<< "_START_" _START_ ; $pair=0; foreach $e (@lignes) { # print "$sep $e \n"; @tab=split(/$sep/,$e); if ( substr($tab[$0],0,1) ne "+" ) { if ($pair == 0) { $pair=1; $color=$color1; } else { $pair=0; $color=$color2; } } else { $tab[$0]=substr($tab[$0],1);} $result .="\n"; # ------------------ TABLE ----------------------------------- if($cmd =~ m/table/) { for $i (0..$#tab) { if($first==1) { $result .=" \n"; } else { $result .=" \n"; } } # ------------------ DOWNLOAD -------------------------------- } elsif ($cmd =~ m/download/) { for $i (0..$#tab-1) { $result .=" \n"; } $result .=" \n"; } # ------------------ URL -------------------------------- elsif ($cmd =~ m/url/) { $result .=" \n"; if ($#tab >1) { for $i (2..$#tab) { $result .=" \n"; } } } # ------------------------------------------------------------ $result .="\n"; $first=0; } $result .= << '_STOP_'
$tab[$i]$tab[$i]$tab[$i]$tab[$i]$tab[1]$tab[$i]
_STOP_ ; $_=$result; } #---------------------------------------------------------------------------------------- # TAG liste #---------------------------------------------------------------------------------------- #---------------------------------------------------------------------------------------- sub display_liste_end { my $type = pop; my @lignes = @_; @lignes_formates = &dopass1(@lignes); $result="
    "; if ($type eq "num") { $result="
      "; } foreach $e (@lignes_formates) { $result .="
    1. ".$e."
    2. "; } if ($type eq "num") { $result.="
        "; } else { $result.="
"; } $_=$result; } #========================================================= # pass2 #========================================================= sub dopass2() { my (@data)=(@_); my @res; my $i; my $j; my $work; #-------------------------------------------------------------------------------------------------- # modes possibles # # mode 0 = mode normal # mode 1 = mode begin sert aussi à gérer les arguments # mode 2 = mode traitement formattage special # mode 3 = mode end # mode 4 = mode ligne mise en liste pour traitement au final # mode 5 = mode exec #-------------------------------------------------------------------------------------------------- my $mode=0; for ($i=0;$i<=$#data;$i++) { $current=$data[$i]; # reduce white # print ">$current\n"; # nettoyage de la chaine pour éviter les erreur. if($current =~ m/^\.\.\[(.*)\./) { $current=~s/ / /g; if ( $DEBUG eq "yes") { print "DEBUG $current\n"; } } if($current =~ m/^\.\.\[(.*) (.*) (.*) (.*) (.*)\]\.\.\./) { print "HALT pas plus de 4 arguments\n"; exit1; } if($current =~ m/^\.\.\[(.*) (.*) (.*) (.*)\]\.\.\./) { $cmd=$1; $arg1=$2; $arg2=$3; $arg3=$4; $mode=1; } elsif($current =~ m/^\.\.\[(.*) (.*) (.*)\]\.\.\./) { $cmd=$1; $arg1=$2; $arg2=$3; $arg3=-1; $mode=1; } elsif($current =~ m/^\.\.\[(.*) (.*)\]\.\.\./) { $cmd=$1; $arg1=$2; $arg2=-1; $arg3=-1; $mode=1; } elsif($current =~ m/^\.\.\[(.*)]\.\.\./) { $cmd=$1; $arg1=-1; $arg2=-1; $arg3=-1; $mode=1; } elsif($current =~ m/^\.\.\.\./) { if ($cmd eq "console" ) { push(@res,&display_console_end()); } elsif ($cmd eq "file") { push(@res,&display_file_end()); } elsif ($cmd eq "screen") { push(@res,&display_screen_end()); } elsif ($cmd eq "code") { push(@res,&display_code_end()); } elsif ($cmd eq "text") { push(@res,&display_text_end()); } elsif ($cmd eq "exec") { push(@res,&display_exec_end()); } elsif ($cmd eq "table") { push(@res,&display_table_end(@lines,$arg1,$arg2,$arg3)); @lines=(); $result=""; } elsif ($cmd eq "url") { push(@res,&display_table_end(@lines,$arg1,$arg2,$arg3)); @lines=(); $result=""; } elsif ($cmd eq "list") { push(@res,&display_liste_end(@lines,$arg1)); @lines=(); $result=""; } elsif ($cmd eq "download") { push(@res,&display_table_end(@lines,$arg1,$arg2,$arg3)); @lines=(); $result=""; } $mode=3; } #-------------------------------------------------------------------- # formats specifiques mode1 (debut) mode2 (lignes) mode4 (retardé) mode 5 (exec) #-------------------------------------------------------------------- # mode 0 = mode normal avec traduction des tags if ($mode eq 0) { push(@res,$current); } # mode 1 = mode begin sert aussi à gérer les arguments elsif ($mode eq 1) { if ( $cmd eq "console" ) { push(@res,&display_console_begin()); $mode=2;} elsif ($cmd eq "file") { push(@res,&display_file_begin()); $mode=2;} elsif ($cmd eq "screen") { push(@res,&display_screen_begin()); $mode=2;} elsif ($cmd eq "code") { push(@res,&display_code_begin());$mode=2; } elsif ($cmd eq "text") { push(@res,&display_text_begin());$mode=2; } elsif ($cmd eq "table") { &couleur_par_defaut(); @lines=(); $mode=4;} elsif ($cmd eq "url") { &couleur_par_defaut(); @lines=(); $mode=4;} elsif ($cmd eq "download") { &couleur_par_defaut(); @lines=(); $mode=4;} elsif ($cmd eq "list") { @lines=(); $mode=4;} elsif ($cmd eq "exec") { push(@res,&display_exec_begin()); $mode=5;} elsif ($cmd eq "include") { if ($arg1 eq "text") {@lines = &file_read($arg2); push(@res,"
"); push(@res,@lines); push(@res,"
"); $mode=3; } else { @lines = &file_read($arg1); push(@res,@lines);$mode=3; } } elsif ($cmd eq "set") { print "> $arg1 = $arg2 \n"; &set_var ($arg1,$arg2) ; $mode=3; @lines=(); $result=""; } elsif ($cmd eq "var") { &display_var(); $mode=3; @lines=(); $result="";} } # mode 2 = mode traitement formattage special elsif ($mode eq 2) { push(@res,$current); } # mode 3 = mode end : on revient au mode normal elsif ($mode eq 3) { $mode=0; } # mode 4 = mode ligne mise en liste pour traitement au final elsif ($mode eq 4) { push(@lines,$current); } # mode 5 = mode exec elsif ($mode eq 5) { push(@res,`$current`); } } @_=@res; } #========================================================= # pass3 #========================================================= sub dopass3() { my (@data)=(@_); my @res; my @res2; my $i; my $j; my $work; for ($i=0;$i<=$#data;$i++) { $current=$data[$i]; # caractères réservés $current =~ s/@%;/%/g; $current =~ s/@!;/!/g; $current =~ s/@.;/./g; # convertion des caractères en html $current =~ s/à/\à/g; $current =~s/â/\â/g; $current =~s/ä/\ä/g; $current =~s/á/\á/g; $current =~s/ã/\ã/g; $current =~ s/å/\å/g; $current =~s/é/\é/g; $current =~s/è/\è/g; $current =~s/ê/\ê/g; $current =~s/ë/\ë/g; $current =~s/î/\î/g; $current =~ s/ï/\ï/g; $current =~s/ô/\ô/g; $current =~s/ö/\ö/g; $current =~ s/û/\û/g; $current =~s/ü/\ü/g; $current =~s/y^/\ŷ/g; $current =~s/ÿ/\ÿ/g; $current =~s/«/\«/g; $current =~s/»/\»/g; $current =~s/À/\À/g; $current =~s/Á/\Á/g; $current =~s/Â/\Â/g; $current =~s/Ã/\Ã/g; $current =~s/Ä/\Ä/g; $current =~s/Å/\Å/g; $current =~s/Æ/\Æ/g; $current =~s/Ç/\Ç/g; $current =~s/È/\È/g; $current =~s/É/\É/g; $current =~s/Ê/\Ê/g; $current =~s/Ë/\Ë/g; $current =~s/Ì/\Ì/g; $current =~s/Í/\Í/g; $current =~s/Î/\Î/g; $current =~s/Ï/\Ï/g; $current =~s/Ð/\Ð/g; $current =~s/Ñ/\Ñ/g; $current =~s/Ò/\Ò/g; $current =~s/Ó/\Ó/g; $current =~s/Ô/\Ô/g; $current =~s/Õ/\Õ/g; $current =~s/Ö/\Ö/g; $current =~s/×/\×/g; $current =~s/Ø/\Ø/g; $current =~s/Ù/\Ù/g; $current =~s/Ú/\Ú/g; $current =~s/Û/\Û/g; $current =~s/Ü/\Ü/g; $current =~s/Ý/\Ý/g; $current =~s/Þ/\Þ/g; $current =~s/ß/\ß/g; $current =~s/æ/\æ/g; $current =~s/ç/\ç/g; $current =~s/ì/\ì/g; $current =~s/í/\í/g; $current =~s/ð/\ð/g; $current =~s/ò/\ò/g; $current =~s/ó/\ó/g; $current =~s/õ/\õ/g; $current =~s/÷/\÷/g; $current =~s/ø/\ø/g; $current =~s/ù/\ù/g; $current =~s/ú/\ú/g; $current =~s/ÿ/\&ytilde;/g; $current =~s/ý/\ý/g; $current =~s/þ/\þ/g; $current =~s/®/\®/g; $current =~s/©/\©/g; $current =~s/¢/\¢/g; push(@res,$current); } @_ =@res; } #========================================================= # ascii2html #========================================================= sub ascii2html() { my (@data)=(@_); my @res; my $i; my $j; my $work; for ($i=0;$i<=$#data;$i++) { $_=$data[$i]; s/à/\à/g; s/â/\â/g; s/ä/\ä/g; s/á/\á/g; s/ã/\ã/g; s/å/\å/g; s/é/\é/g; s/è/\è/g; s/ê/\ê/g; s/ë/\ë/g; s/î/\î/g; s/ï/\ï/g; s/ô/\ô/g; s/ö/\ö/g; s/û/\û/g; s/ü/\ü/g; s/y^/\ŷ/g; s/ÿ/\ÿ/g; s/«/\«/g; s/»/\»/g; s/À/\À/g; s/Á/\Á/g; s/Â/\Â/g; s/Ã/\Ã/g; s/Ä/\Ä/g; s/Å/\Å/g; s/Æ/\Æ/g; s/Ç/\Ç/g; s/È/\È/g; s/É/\É/g; s/Ê/\Ê/g; s/Ë/\Ë/g; s/Ì/\Ì/g; s/Í/\Í/g; s/Î/\Î/g; s/Ï/\Ï/g; s/Ð/\Ð/g; s/Ñ/\Ñ/g; s/Ò/\Ò/g; s/Ó/\Ó/g; s/Ô/\Ô/g; s/Õ/\Õ/g; s/Ö/\Ö/g; s/×/\×/g; s/Ø/\Ø/g; s/Ù/\Ù/g; s/Ú/\Ú/g; s/Û/\Û/g; s/Ü/\Ü/g; s/Ý/\Ý/g; s/Þ/\Þ/g; s/ß/\ß/g; s/æ/\æ/g; s/ç/\ç/g; s/ì/\ì/g; s/í/\í/g; s/ð/\ð/g; s/ò/\ò/g; s/ó/\ó/g; s/õ/\õ/g; s/÷/\÷/g; s/ø/\ø/g; s/ù/\ù/g; s/ú/\ú/g; s/ÿ/\&ytilde;/g; s/ý/\ý/g; s/þ/\þ/g; s/®/\®/g; s/©/\©/g; s/¢/\¢/g; push(@res,$current); } @_=@res; } #========================================================= # pass1 #========================================================= sub dopass1() { my (@data)=(@_); my @res; my $i; my $j; my $work; for ($i=0;$i<=$#data;$i++) { if($data[$i+1] =~ m/^\*\*\*/) { chomp($data[$i]); push(@res,"

$data[$i]

\n"); $i++; } elsif ( $data[$i+1] =~ m/^\=\=\=/) { chomp($data[$i]); push(@res,"

$data[$i]

\n"); $i++; } elsif ( $data[$i+1] =~ m/^\-\-\-/) { chomp($data[$i]); push(@res,"

$data[$i]

\n"); $i++; } elsif ( $data[$i+1] =~ m/^\~\~\~/) { chomp($data[$i]); push(@res,"

$data[$i]

\n"); $i++; } else { $work=$data[$i]; if($work =~m/^ (.*)/) { $work=$1."\n"; } elsif($work =~ m/^$/) { $work = "

\n

"; } else { #$work = &replace($work); for($j=0;$j<10;$j++) { # bold et italique if( $work =~m/(.*)\*(.*)\*(.*)/) { $work=$1."".$2."".$3; } if( $work =~m/(.*)_(.*)_(.*)/) { $work=$1." ".$2." ".$3; } # langage proche du html if( $work =~m/(.*)%pre{(.*)/) { $work=$1."

".$2; }
	           if( $work =~m/(.*)%pre}(.*)/) { $work=$1." 
".$2;} if( $work =~m/(.*)%li{(.*)/) { $work=$1."
  • ".$2; } if( $work =~m/(.*)%li}(.*)/) { $work=$1."
  • ".$2; } if( $work =~m/(.*)%ul{(.*)/) { $work=$1."
      ".$2; } if( $work =~m/(.*)%ul}(.*)/) { $work=$1."
    ".$2; } if( $work =~m/(.*)%ol{(.*)/) { $work=$1."
      ".$2; } if( $work =~m/(.*)%ol}(.*)/) { $work=$1."
    ".$2;} if( $work =~m/(.*)%li(.*)/) { $work=$1."
  • ".$2; } if( $work =~m/(.*)%br(.*)/) { $work=$1."
    ".$2; } if( $work =~m/(.*)%p(.*)/) { $work=$1."

    ".$2; } # couleurs bold if( $work =~m/(.*)%red_\((.*)\)(.*)/) { $work=$1." ".$2." ".$3;} if( $work =~m/(.*)%blue_\((.*)\)(.*)/){ $work=$1." ".$2." ".$3;} if( $work =~m/(.*)%green_\((.*)\)(.*)/) { $work=$1." ".$2." ".$3; } if( $work =~m/(.*)%black_\((.*)\)(.*)/) { $work=$1." ".$2." ".$3; } # couleurs if( $work =~m/(.*)%red\((.*)\)(.*)/) { $work=$1." ".$2." ".$3; } if( $work =~m/(.*)%blue\((.*)\)(.*)/) { $work=$1." ".$2." ".$3; } if( $work =~m/(.*)%green\((.*)\)(.*)/) { $work=$1." ".$2." ".$3;} if( $work =~m/(.*)%black\((.*)\)(.*)/) { $work=$1." ".$2." ".$3;} # liens if( $work =~m/(.*)\[http:(.*):(.*)\](.*)/) { $work = $1."$3".$4; } if( $work =~m/(.*)\[file:(.*):(.*)\](.*)/) { $work = $1."$3".$4; } if( $work =~m/(.*)\[file:(.*)\](.*)/) { $work = $1."$2".$3; } if( $work =~m/(.*)\[(.*)\](.*)/) { if( ! $work =~m/^\.\.\[/) { $work="$1$3" } } # date et heure (les plus longues en premiers) if( $work =~m/%longdate_uk/) { $dt=&show_date_long_en(); $work=~s#%longdate_uk#$dt#; } if( $work =~m/%date_uk/) { $dt=&show_date_en(); $work=~s#%date#$dt#; } if( $work =~m/%longdate/) { $dt=&show_date_long(); $work=~s#%longdate#$dt#; } if( $work =~m/%date/) { $dt=&show_date(); $work=~s#%date#$dt#; } if( $work =~m/%time/) { $dt=&gettime(); $work=~s#%time#$dt#; } } } push(@res,$work); } } @_=@res; } #========================================================= sub main() { #read the file #@source = libfile::file_read("package_slackware.txt"); @source = &file_read($name); @pass1 = &dopass1(@source); @pass2 = &dopass2(@pass1); @pass3 = &dopass3(@pass2); @pass1 = &dopass3(@pass3); # display it with a line #&libfile::lines_print(@pass2); #libfile::file_write("package_slackware.html",@pass2); file_write($filename,@pass1); } #------------------------------------------------------- # arguments verification #------------------------------------------------------- sub arg() { %options=(); getopt("h",\%options); &usage if defined $options{o}; &usage if ($#ARGV < 0) || ($#ARGV > 1); if ($#ARGV == 0) { $name=$ARGV[0]; $_=$name; ($nom, $ext) = (/^(.*?)\.?([^\.]*)$/); # if ($nom =="") { $nom=$ext; } $filename=$nom.".html"; # print "$name\n"; # print "$filename\n"; } if ($#ARGV == 1) { $name=$ARGV[0]; $filename=$ARGV[1]; # print "$name\n"; # print "$filename\n"; } } &arg(); &main();