Vocales acentuadas en HTML

Bueno, ando trabajando en un proyecto en Java y a la hora de comentar las clases y paquetes que voy creando me decidí a usar javadoc. Javadoc es una utilidad de Sun Microsystems para la generación de documentación de APIs en formato HTML a partir de código fuente Java. Javadoc es el estándar de la industria para documentar clases de Java. La mayoría de los IDEs (como Eclipse, que es el que estoy usando) los generan automáticamente.

Para quien nunca haya usado javadoc, os comento que te crea en un directorio principal los ficheros HTML de la estructura y el índice de la documentación a generar, y en subdirectorios inserta los ficheros HTML con la documentación de las clases pertenecientes a los diferentes paquetes del proyecto.

El problema particular es que a la hora de visualizar la documentación creada en el navegador, me encontré con el siguiente problema: las palabras acentuadas se ven mal. Y es que en HTML, como la mayoría ya sabréis, para escribir ???á??? hay que poner ???á???, y por mucho que lo intento, según escribo se me olvida utilizar esos códigos tan poco humanos.

Ahora os describiré una solución general que he empleado para solucionar esto y en general solucionar cualquier problema de este tipo en el que queramos sustituir todas las vocales acentuadas en diferentes ficheros HTML organizados en diferentes directorios y subdirectorios.

Como imaginaréis no consiste en editar manualmente fichero a fichero (algo interminable), sino automatizar este trabajo con un script. En GNU/Linux existe una herramienta capaz de hacer los cambios de una cadena por otra, en este caso necesitaremos cambiar las ???á??? por ???á???, ???é??? por ???é?????? así las cinco vocales, tanto en mayúscula como en minúscula; y también, cómo no, la eñe, en mayúscula y minúscula. Esta herramienta se llama sed. Y en Obiter Dicta encontré como usarla para mi fin. Echadle un vistazo para comprender la base.

Tras comprobar que el método funciona, para cambiar en una sola línea todas las vocales acentuadas y las eñes (mayúsculas y minúsculas) por su correspondiente código usaremos:

cat archivo.html | sed -e ???s/á/\á/g??? -e ???s/é/\é/g??? -e ???s/í/\í/g??? -e ???s/ó/\ó/g??? -e ???s/ú/\ú/g??? -e ???s/ñ/\ñ/g??? -e ???s/Á/\Á/g??? -e ???s/??/\É/g??? -e ???s/Í/\Í/g??? -e ???s/??/\Ó/g??? -e ???s/??/\Ú/g??? -e ???s/??/\Ñ/g??? > archivo2.html

Pero ahora necesitamos que esto lo haga con todos los ficheros de un directorio y sus subdirectorios. Como siempre googleando encontré lo que necesitaba y al fin creé mi script para automatizar ese trabajo:

#!/bin/sh
# La linea superior indica al SO el interprete

#Este shell script sustituye los acentos y “eñes” por su equivalente HTML en todos los ficheros .html de un directorio y subdirectorios.

#Forzamos la salida si algun parametro no se ejecuta bien
#de lo contrario se seguiria pese a que hubise algun error
set -e
#Forzamos la salida si alguna variable no es definida
set -u

###########################

# Esta función procesa el directorio actual
procesar_este_directorio()
{
# Creamos un fichero temporal
touch ficheroTemporalHtml.html

# Para cada fichero .html sustituimos los acentos y las “eñes” por su equivalente html
for archivo in *html; do
cp $archivo ${archivo}.bak
cat ${archivo}.bak | sed -e ‘s/á/\á/g’ -e ‘s/é/\é/g’ -e ‘s/í/\í/g’ -e ‘s/ó/\ó/g’ -e ‘s/ú/\ú/g’ -e ‘s/ñ/\ñ/g’ -e ‘s/Á/\Á/g’ -e ‘s/??/\É/g’ -e ‘s/Í/\Í/g’ -e ‘s/??/\Ó/g’ -e ‘s/??/\Ú/g’ -e ‘s/??/\Ñ/g’ -e ‘s/©/\©/g’ -e ‘s/¡/\¡/g’ -e ‘s/§/\§/g’ -e ‘s/ª/\ª/g’ -e ‘s/«/\«/g’ -e ‘s/®/\®/g’ -e ‘s/±/\±/g’ -e ‘s/²/\²/g’ -e ‘s/³/\³/g’ -e ‘s/¶/\¶/g’ -e ‘s/º/\º/g’ -e ‘s/»/\»/g’ -e ‘s/¿/\¿/g’ -e ‘s/??/\Æ/g’ -e ‘s/??/\Ç/g’ -e ‘s/æ/\æ/g’ -e ‘s/ç/\ç/g’ -e ‘s/??/\Ü/g’ -e ‘s/ü/\ü/g’ > $archivo
rm ${archivo}.bak
done

#Borramos el fichero temporal
rm ficheroTemporalHtml.html
}

# Esta función busca subdirectorios recursivamente y los procesa
buscar_subdirectorios()
{
# Para todos los elementos que se encuentren en el directorio actual
for i in *; do
# Si es un directorio
if [ -d $i ]; then
# Procesamos el subdirectorio y buscamos subsubdirectorios
echo “Procesamos el directorio $i…”
cd $i
procesar_este_directorio
buscar_subdirectorios
cd ..

fi

done
}

###########################

echo “Procesando el directorio actual $PWD…”

procesar_este_directorio
buscar_subdirectorios

echo “Proceso de colocar acentos terminado.”

Espero que os sirva a alguien de ayuda. Si queréis descargar el script:

Descargar Scrpit

Como WordPress no me ha dejado subir el fichero con formato .sh lo he renombrado a .txt. Para usarlo:

Primero lo renombramos:

mv colocarAcentos.txt colocarAcentos.sh

Y luego le damos permisos de ejecución:

chmod +x colocarAcentos.sh

Para poder ejecutarlo desde cualquier sitio yo lo he colocado en el directorio /usr/bin, es lo más cómodo.

Supongo que habrá otras alternativas. ¿Conocéis alguna? Y en el caso de utilizar un sistema Windows, ¿Qué aplicaciones o alternativas hay disponibles?

4 comentarios en “Vocales acentuadas en HTML

  1. Muchas gracias Defero. Tomaremos medidas.

    Luisdo dicen que en el mundo siempre hay alguien igual que tu, parece que ya has encontrado tu clon, jejeje. Dile que te pase el proyecto o de hacerlo juntos así acabas ya la carrera 😀

Deja un comentario