Kroc - 03 Juin 2004
Petit utilitaire destiné à convertir grossièrement mais rapidement une page html en texte compatible avec Wikit grâce à lynx. Seul le corps du texte html sera conservé. Le résultat peut être collé directement dans une fenêtre d'édition de Wikit.
#!/usr/bin/env tclsh ################################################################################ # # Script pour transformer une page html au format wikit # # Copyright © 2004 - David Zolli - http://www.zolli.fr # # Ce script est distribué sous licence NOL http://wfr.tcl.tk/nol # # Version 1.0 - Juin 2004 # ################################################################################ # Contrôle de la ligne de commande : if {$argc != 2 || ![file exist [lindex $argv 0]]} { puts stdout "Utilisation :\nhtml2wikit source.html cible.txt" exit } # Conversion des tags HTML en tags Wikit : proc retag { l } { # Titres : set l [string map -nocase { <h1> <br>----<br>''' <h2> <br>----<br>''' <h3> <br>----<br>''' </h1> '''<br>----<br> </h2> '''<br>----<br> </h3> '''<br>----<br> <h4> <p>''' <h5> <p>''' <h6> <p>''' </h4> '''<p> </h5> '''<p> </h6> '''<p> } $l] # Gras : set l [string map -nocase { <b> ''' </b> ''' <u> ''' </u> ''' } $l] # Italique : set l [string map -nocase { <i> '' </i> '' } $l] # Quelques suppressions : set l [string map -nocase { <blockquote> "" </blockquote> "" <center> "" </center> "" } $l] # Crochets : set l [string map -nocase { [ \[\[ ] \]\] \[ \[\[ \] \]\] } $l] # Liens : while {[string first "<a href=" [string tolower $l]] != -1} { set d1 [string first "<a href=" [string tolower $l]] set f1 [expr [string first "/a>" [string range [string tolower $l] $d1 end]] +$d1+2] set link [string map { \" "" ./ "http://www.iciouailleurs.tk/" } [string range $l $d1 $f1]] set d2 [expr [string first = $link]+1] set f2 [expr [string first > [string range $link $d2 end]] +$d2 -1] set link \[[string range $link $d2 $f2]\] set l [string range $l 0 $d1]$link[string range $l $f1 end] set l [string map { "<\[" "" "\]>" "" } $l] } # Images : while {[string first "<img src=" [string tolower $l]] != -1} { set d1 [string first "<img src=" [string tolower $l]] set f1 [expr [string first ">" [string range [string tolower $l] $d1 end]] +$d1] set link [string map { \" "" ./ "http://www.iciouailleurs.tk/" } [string range $l $d1 $f1]] set d2 [expr [string first = $link]+1] set f2 [string first " " [string range $link $d2 end]] if { $f2 == -1 } { set f2 [string first > [string range $link $d2 end]] } set f2 [expr $f2 +$d2 -1] set link \[[string range $link $d2 $f2]\] set l [string range $l 0 $d1]$link[string range $l $f1 end] set l [string map { "<\[" <p>\[ "\]>" \]<p> } $l] } # Listes : set l [string map -nocase { <li> "" </li> "" <ul> "" </ul> "" <ol> "" </ol> "" } $l] # Lignes horizontales : set l [string map -nocase { <hr> <br>----<br> } $l] # Texte brut : set l [string map -nocase { <pre> "<pre><br>_pRe_<br>" </pre> "<br>_/pRe_<br></pre>" } $l] } # Espaces en début de ligne : proc brut { texte } { set brut 0 set res "" foreach ligne [split $texte \n] { if {[string match $ligne _pRe_]} { incr brut } elseif {[string match $ligne _/pRe_]} { incr brut -1 } else { if { $brut } { append res " [string map { \[\[ \[ \]\] \] } $ligne]\n" } else { # retrait des blancs : set i 0 while {[string index $ligne $i] eq " "} { incr i } append res [string range $ligne $i end]\n } } } return $res } # Traitement : set fichier [lindex $argv 0] set htm [file rootname $fichier]2.htm set txt [lindex $argv 1] set bodytag 0 set fin [open $fichier r] set fout [open $htm w] while {![eof $fin]} { set ligne [gets $fin] # On ne garde que le corps : if {[string first <body $ligne] != -1 } { set bodytag 1 puts $fout <body> } elseif {[string first </body> $ligne] != -1 } { set bodytag 0 puts $fout </body> } elseif {$bodytag} { puts $fout [retag $ligne] } } close $fin close $fout exec lynx -dump -width 120 -dont_wrap_pre $htm > $txt set fin [open $txt r] set data [read $fin] close $fin set fout [open $txt w] puts -nonewline $fout [brut $data] close $fout file delete -force $htm # C'est fini : puts stdout Fait.
Faite quand même une relecture du résultat, car si le code html d'origine est mal écrit (ce qui arrive souvent) le code produit contiendra certainement des erreurs.