martes, 17 de marzo de 2009

HAL y las marcas (HTML - II)

Nuestro texto, marcado como prescribe la especificación de HTML, esta casi listo para ser interpretado adecuadamente por un navegador. Sólo le faltan unos detalles más, los más engorrosos y desagradables para alguien no particularmente interesado en los entresijos de HTML. Nos conformaremos con incluirlos sin apenas comentario, dando por hecho que el lector curioso sabrá encontrar la información pertinente en la referencia que se indica al final del artículo.

Los gabinetes de especialistas a los que vamos a dirigir nuestro texto marcado suelen ser muy puntillosos en la forma de remitírselo. Tampoco es nada nuevo, estamos acostumbrados en la vida diaria a pasar por toda clase de formalismos endemoniados cuando tratamos de realizar ciertas gestiones que desde nuestro punto de vista son elementales (que si la maldita fotocopia del DNI, que si una copia compulsada de la cabecera de vaya usted a saber qué recibo, ...). Los receptores de nuestros textos marcados gustan de ese mismo rigor protocolario. Sus razones tienen, y no vamos a analizarlas. Ahora es cuestión sólo de conocer la fórmula y perder el menor tiempo posible en tratar de desentrañar su sentido.

Bien, recurramos a una metáfora que hará más entretenida esta burocrática tarea. Imaginemos que nos dirigimos a la ventanilla de la oficina de nuestro navegador web para informarnos de cómo enviarles el texto que acabamos de marcar. Los funcionarios del navegador nos notificarán que tenemos que utilizar un sobre y que no podemos emplear cualquier clase de sobre. Es necesario un sobre especial, que recibe el nombre BODY. Pero no basta, conviene incluir además, en otro sobre aparte ---y que se vea al principio---, llamado HEAD, información de orden global sobre el documento, por ejemplo, el tipo de codificación de caracteres con el que ha sido escrito. Esos dos sobres deben introducirse a su vez en otro mayor, denominado HTML, en cuya solapa se pegará una etiqueta donde conste claramente expresado el tipo de documento que remitimos. Si ahora pensamos en los sobres implicados como marcas globales de HTML, nuestro envío deberá atenerse al siguiente formato:

DECLARACIÓN DEL TIPO DE DOCUMENTO
<HTML>
<HEAD>

[Metainformación (como codificación del documento) y otras informaciones de orden global.]
</HEAD>

<BODY>
[Nuestro texto con las marcas HTML.]
</BODY>
</HTML>

Preparados los sobres e informados puntual y minuciosamente por los oficinistas del navegador, rellenamos todo lo burocráticamente necesario y metemos en el sobre BODY nuestro texto con las marcas HTML visto ayer:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<HTML>
<HEAD>
<META content="text/html; charset=UTF-8">
</HEAD>


<BODY>
<H2>
Navegación gráfica
</H2>

<DIV>
<P>
Si hubiésemos estado visitando la página con un buen navegador gráfico que disponga de la opción de guardar las páginas web como texto, tendríamos que realizar al menos dos acciones, ambas independientes:
</P>

<OL>
<LI>
Ir al menú "Archivo" del navegador y guardar como texto la página web. (Lo que además implica seleccionar un nombre de fichero y un directorio).
</LI>

<LI>
Crear en <EM>Vim</EM> una nueva ventana para editar en ella el documento que acabamos de guardar, mediante la orden <CODE>:new ruta_fichero</CODE>.
</LI>
</OL>
</DIV>

<H2>
Navegación desde consola
</H2>

<DIV>
<P>
Si navegamos con <EM>w3m</EM>, y gracias a la interacción entre las aplicaciones de consola, bastaría ejecutar una única acción desde el propio <EM>Vim</EM>, que, además, podríamos abreviar para reproducirla en situaciones semejantes. Veamos cómo.
</P>

<P>
Con <EM>w3m</EM> el proceso de convertir una página web en texto es absolutamente elemental: añadir la opción <CODE>-dump</CODE>. Por ejemplo:
</P>

<P>
<CODE>w3m -dump http://www.w3.org/TR/html401/struct/lists.html</CODE>
</P>

<P>
nos devuelve la página dada como argumento, tal cual se presenta en el navegador, pero como puro texto.
</P>
</DIV>
</BODY>
</HTML>

Sería insoportablemente aburrido tener que repetir "el papeleo" cada vez que enviamos al navegador un documento web. Es frecuente, por ese motivo, crearse una plantilla con las partes áridas y comúnmente compartidas por todos los documentos html que vayamos a producir y concentrarse en el marcado del texto propiamente dicho. Por supuesto, otra forma, mucho más del gusto de HAL, sería crear un guión que incorporase nuestra anterior orden sed y que de paso añadiese el resto del formulismo.

Un guión posible para esta tarea ---uno más para nuestro directorio guiones--- sería éste. Lo llamaremos generar_html:

## --* generar_html - 18/03/09 - átopos *--
## Genera documento HTML canónico a partir de un documento de texto
## marcado con mis marcas informales
SED_F=txt2html.sed # Fichero sed: convierte mis marcas
# informales en marcas HTML
ORIG_F=$1 # Fichero de entrada
DEST_F=$(basename $ORIG_F .txt).html # Fichero HTML de salida

sed -f $SED_F $ORIG_F \
| awk 'BEGIN {
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"";
print "\t\"http://www.w3.org/TR/html4/strict.dtd\">";
print "<HTML>";
print "<HEAD>";
print "<META content=\"text/html; charset=UTF-8\">";
print "</HEAD>";
print "\n<BODY>";
}
{ print $0; }
END { print "</BODY>";
print "</HTML>";
}' \
> $DEST_F

El guión presupone que el fichero txt2html.sed, creado el día pasado, se encuentra en el mismo directorio donde está el guión, en nuestro caso, el directorio guiones.

Para generar el documento HTML, deberíamos cambiar el modo del guión y solicitar a HAL su ejecución con la siguiente orden:

./generar_html texto_etiquetado.txt

El resultado será el fichero texto_etiquetado.html cuyo contenido será el referido en este artículo.

La única orden de HAL que aparece en ese guión y que no hemos explicado todavía en estas conversaciones es la orden basename. El lector sabrá encontrar la información concerniente a ella recurriendo a man.

Asimismo, el lector interesado en profundizar en lo expuesto durante estos días podrá encontrar toda clase de información sobre las marcas utilizadas y el resto de marcas HTML en la referencia definitiva de la especificación actualmente más usada de HTML, que se puede encontrar aquí:

http://www.w3.org/TR/html401/

Por supuesto, se debe comprobar que el HTML funciona, abriéndolo con cualquier navegador:

w3m texto_etiquetado.html

¡Felices sueños!

No hay comentarios:

Publicar un comentario