[Perl] HTML2PML

Alejandro G. Bedoya nezumi@prodigy.net.mx
Mon, 16 Sep 2002 08:35:11 -0500


Saludos!!!

    Un dia que me levante de buenas decidi hacer algo por la comunidad, así
que estoy haciendo un programita que convierta archivos HTML a PML. PML es
el código horrible y espantoso para hacer libros que se lean en la Palm, con
el Palm Reader. El objetivo de esto es que si alguien quiere hacer un
librito para la Palm, es mas facil editarlo en HTML que todo mundo sabe con
un editor cualquiera y transformarlo con este programita, en vez de escribir
a manopla todo en PML. Y mejor aún, poder traspasar cualquier página HTML a
la palm rápidamente, esto tendria algunas ventajas que hacerlo por el
AvantGo.

    Ya funciona primitivamente para los formatos básicos, lo que hace el
programa es sustituir los tags HMTL básicos(negritas, italicas, etc) a PML y
todos los demas tags desconocidos los borra. Con este REgex que encontré(no
me pregunten como funciona) se borran todos los tags:

         $Lin =~ s/(<[^>]+>)//g;

    Funciona bastante bien, pero encontre en un HTML tags que no se cierran
y se abren en la misma linea, ocasionando que no se borren con el anterior
código:

Hola <meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1"> Mundo

    Pregunta, como le hago? Se me ocurre meter dos RegEx adicionales. Uno
que busque y borre de una linea desde "<" hasta el final de la misma, y otro
desde el inicio hasta ">". Cuales serian esos RegEx???  Que otra forma se
puede hacer???

    El código completo de lo que va del programita para su mofa se los
mando. Gracias por sus consejos...


---
Sinceramente...
Alejandro G. Bedoya
InterAccion.COM          Ponemos su Internet en Acción


=====
use strict;

my $ARG=$ARGV[0];

open(FileHandle, $ARG) || die "$_[0]: $!";
my @FILE= <FileHandle>;
close(FileHandle);
chomp(@FILE);

print "\\v\Done with HTML2PML\\v\n";
foreach my $Lin (@FILE) {
# $Lin=~ s/\n/ /gi;
 $Lin=~ s/<BR>/\n/gi;
 $Lin=~ s/\\/\\\\/gi;

 #Title to title
 $Lin=~ s/<TITLE>/\\vTITLE="/gi;
 $Lin=~ s/<\/TITLE>/"\\v/gi;

 #Rules
 $Lin=~ s/<HR>/\\w="100%"/gi;

 #Headings to chapters.
 $Lin=~ s/<H1>/\\x\\c\\b\\u/gi;
 $Lin=~ s/<\/H1>/\\u\\b\n\\c\\x/gi;
 $Lin=~ s/<H2>/\\X1\\b\\u/gi;
 $Lin=~ s/<\/H2>/\\u\\b\\X1/gi;
 $Lin=~ s/<H3>/\\X2\\b\\u/gi;
 $Lin=~ s/<\/H3>/\\u\\b\\X2/gi;
 $Lin=~ s/<H4>/\\X3\\b\\u/gi;
 $Lin=~ s/<\/H4>/\\u\\b\\X3/gi;
 $Lin=~ s/<H5>/\\X4\\b\\u/gi;
 $Lin=~ s/<\/H5>/\\u\\b\\X4/gi;

 #Bolds
 $Lin=~ s/<B>/\\b/gi;
 $Lin=~ s/<\/B>/\\b/gi;
 $Lin=~ s/<STRONG>/\\b/gi;
 $Lin=~ s/<\/STRONG>/\\b/gi;

 #Italics
 $Lin=~ s/<I>/\\i/gi;
 $Lin=~ s/<\/I>/\\i/gi;
 $Lin=~ s/<EM>/\\i/gi;
 $Lin=~ s/<\/EM>/\\i/gi;

 #Underline
 $Lin=~ s/<U>/\\u/gi;
 $Lin=~ s/<\/U>/\\u/gi;

 #Center
 $Lin=~ s/<CENTER>/\\c/gi;
 $Lin=~ s/<\/CENTER>/\n\\c/gi;

 #Clean the rest
 $Lin =~ s/(<[^>]+>)//g;
# if ($Lin eq "") { $Lin="\n"; }
 print "$Lin ";
 }