13 noviembre 2007

Una pequeña mejora para PsPad

Yo solía usar el editor Notepad++ como sustituto del bloc de notas de Windows, que es muy cómodo y permite hacer casi de todo, pero tiene una carencia seria para mi trabajo habitual: no permite exportar en formato de HTML ni RTF los fuentes de programación con la sintaxis coloreada, algo que yo necesito hacer con frecuencia para mis clases y mis cursos online.

Para eso usaba Scite (que tiene muchas menos funciones, pero a cambio tiene un tamaño muy reducido) o preferiblemente PsPad, que además es ¿casi? tan potente como Notepad++.

Pero resulta que hay disponible una nueva versión de PsPad, y tiene poco (o nada) que envidiar a Notepad++. De hecho, yo sólo he echado una cosa en falta: convertir caracteres internacionales en entidades HTML: pasar de "á" a "á" y similares. Es algo que Notepad++ tampoco hace directamente (sí lo hacen editores "visuales" como Nvu o el más reciente Kompozer), pero tiene un plugin que permite conseguirlo con una pulsación de tecla. Así que he echado un vistazo a la estructura de carpetas de PsPad para ver si encontraba una forma sencilla de conseguirlo yo mismo y sí... es muy fácil añadirle ese tipo de facilidades...

Se puede hacer desde JavaScript: un pequeño programa que busque secuencias de caracteres y las reemplace por otro. Podría ser así (cuidado, quizá no se vean correctamente los caracteres internacionales; el original lo puedes descargar desde www.nachocabanes.com/utils/pspad_HTMLreplace.zip):

/*****************************************************************************
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from
* the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it freely,
* subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not claim
* that you wrote the original software. If you use this software in a product,
* an acknowledgment in the product documentation would be appreciated but is
* not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source distribution.
*
* Original Code by: Nacho Cabanes
* www.nachocabanes.com
*
********************************************************************************/
var module_name = "HTMLreplace";
var module_ver = "1.00";

/* Function to replace multiple times
as seen in "http://lineadecodigo.com/2007/08/07/funcion-replace-en-javascript/"
*/

function nreplace(texto,s1,s2){
return texto.split(s1).join(s2);
}

/* Function to replace frequent international ANSI entities */
function HTMLreplaceANSI() {

var ed = newEditor();
ed.assignActiveEditor();

var sentence = ed.selText();
if(sentence=='') {
sentence = ed.Text();
}
sentence = nreplace(sentence, "á", "á");
sentence = nreplace(sentence, "é", "é");
sentence = nreplace(sentence, "í", "í");
sentence = nreplace(sentence, "ó", "ó");
sentence = nreplace(sentence, "ú", "ú");
sentence = nreplace(sentence, "Á", "Á");
sentence = nreplace(sentence, "É", "É");
sentence = nreplace(sentence, "Í", "Í");
sentence = nreplace(sentence, "Ó", "Ó");
sentence = nreplace(sentence, "Ú", "Ú");
sentence = nreplace(sentence, "ñ", "ñ");
sentence = nreplace(sentence, "Ñ", "Ñ");
sentence = nreplace(sentence, "ü", "ü");
sentence = nreplace(sentence, "Ü", "Ü");

var txt = ed.selText();
if(txt=='')
ed.text(sentence);
else
ed.selText(sentence);
}


/* Function to replace frequent international DOS ASCII entities */
function HTMLreplaceDOS() {

var ed = newEditor();
ed.assignActiveEditor();

var sentence = ed.selText();
if(sentence=='') {
sentence = ed.Text();
}

sentence = nreplace(sentence, " ", "á");
sentence = nreplace(sentence, "‚", "é");
sentence = nreplace(sentence, "¡", "í");
sentence = nreplace(sentence, "¢", "ó");
sentence = nreplace(sentence, "£", "ú");
sentence = nreplace(sentence, "µ", "Á");
sentence = nreplace(sentence, "", "É");
sentence = nreplace(sentence, "Ö", "Í");
sentence = nreplace(sentence, "à", "Ó");
sentence = nreplace(sentence, "é", "Ú");
sentence = nreplace(sentence, "¤", "ñ");
sentence = nreplace(sentence, "¥", "Ñ");
sentence = nreplace(sentence, "", "Ü");
sentence = nreplace(sentence, "š", "Ü");

var txt = ed.selText();
if(txt=='')
ed.text(sentence);
else
ed.selText(sentence);
}


function Init(){
addMenuItem("HTML replace ANSI chars", "HTML replace", "HTMLreplaceANSI");
addMenuItem("HTML replace DOS chars", "HTML replace", "HTMLreplaceDOS");
}



Basta copiarlo en la carpeta de PsPad (típicamente "c:/Archivos de Programa/PsPad editor"), dentro de la subcarpeta Script, y a su vez, dentro de JScript. Yo lo he llamado "HTMLreplace.js", pero el nombre no debería ser importante.

A partir de entonces, en cuanto vuelvas a entrar a PsPad, ya tienes una opción en el menú (en "Guiones", dentro "HTML repace") que permite escribir en español, con acentos y eñes, con la tranquilidad de que es fácil convertirlo a entidades HTML para que se vea correctamente en cualquier navegador y con cualquier codificación de caracteres.

1 comentario:

Click2Pay casino dijo...
Este comentario ha sido eliminado por un administrador del blog.