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.kroc.tk
#
# 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.