Pregunta: ¿Como puedo mejorar el editor Maguma Studio usando PHP?
Requisitos: conexion a internet, php local.
Respuesta: utilizando quickref.txt de cvs.php.net y parseando el manual de php version html.
Ulilizando PHP con sus funciones para expresiones regulares es posible mejorar el editor para PHP Maguma Studio, de manera que:[list=1][*]El highlight (coloreado de texto) reconozca
todas las funciones de PHP.[*]Que la ayuda contextual con los parametros para las funciones, y las "Funciones Nativas de PHP" (ToolBox>Class Browser) aparezcan en español! (la mayoria
P)[/list=1]
Para realizar el punto
1 debemos tener en cuenta que Maguma utiliza un archivo llamando php-funcs.dat (por defecto se encuentra en C:\Archivos de programa\Maguma Studio\Data\php-funcs.dat) para almacenar todas la funciones que serán coloreadas; entonces lo que haremos es "actualizar" este fichero con uno nuestro mas completo siguiendo estos pasos:[list=a][*] Guargar en nuestro disco el archivo
http://cvs.php.net/cvs.php/phpdoc/quickref.txt?login=2 , que es la
lista oficial de las funciones php con su descripcion.[*] Utilizar el siguiente código para crear un nuevo php-funcs.dat
Código PHP:
$quickrefdecvs = "c:\\windows\\escritorio\\quickref.txt"; //Aqui hay que poner el path al quickref que bajamos de cvs.php.net
$nuevophp_funcs = "c:\\windows\escritorio\\php-funcs.dat"; // Aqui se creara el nuevo php-funcs.dat
$lineas = file($quickrefdecvs);
$fp = fopen($nuevophp_funcs, "w");
$patronascii = "[0-9]{1,2}|1[0-9]{1,2}|2[0-4][0-9]|25[0-5];"; // esta es mi primera expresion regular que funciona bien (creo)
foreach( $lineas as $linea ) {
$linea = trim($linea);
$linea = substr($linea, 0, strpos($linea, " - "));
if (ereg("&#(".$patronascii.");", $linea, $reg)) {
$linea = str_replace($reg[0], chr(intval($reg[1])), $linea);
}
if (next($lineas)) {
fputs($fp, $linea."\n");
} else {
fputs($fp, $linea);
}
}
fclose($fp);
echo "<big>Tu $nuevophp_funcs ahora tiene <b>".count($lineas)."</b> funciones :-P</big>";
[*] Reemplazar el archivo php-funcs.dat original por el que se acaba de crear.[/list=a]
Para realizar el punto
2 Maguma utiliza otro archivo llamado php-insight.dat (por defecto se encuentra en C:\Archivos de programa\Maguma Studio\Data\php-insight.dat) y en este caso lo actualizaremos a partir del manual oficial de PHP version
single HTML en español. Para ello:[list=a][*] Bajar el manual de
http://www.php.net/distributions/ma...ual_es.html.bz2 (esta comprimido con bz2 y si no sabes como abrirlo debes leer esto
http://www.php.net/manual/en/faq.misc.php#faq.misc.bz2)[*] Aplicarle este codigo que parseará el HTML usando expresiones regulares y devolverá un nuevo php-insight.dat:
Código PHP:
$manualphp = "C:\\windows\\escritorio\\php_manual_es.html"; //path al manual de php
$maguma_php_insight = "c:\\windows\\escritorio\\php-insight.dat"; // lugar donde se creara el nuevo php-insight.dat
$ini = time();
$fpm = fopen($manualphp, "r");
$lineas = fread($fpm, filesize($manualphp));
$lineas = str_replace("\n", "", $lineas);
$fpi = fopen($maguma_php_insight, "w");
$patron = '<H2>(Descripción|Description)</H2>([^<>]+)<(B CLASS|BCLASS)="methodname">([^<>]+)</B>([^<>]+)<';
$patronascii = "[0-9]{1,2}|1[0-9]{1,2}|2[0-4][0-9]|25[0-5];"; // esta es mi primera expresion regular que funciona bien (creo)
while (ereg($patron, $lineas, $reg)){
$a++;
$lineas = strstr($lineas, $reg[0]);
$lineas = substr($lineas, strlen($reg[0]));
$nuevaslineas[trim($reg[4])] = trim($reg[5]);
//echo nl2br("<b>$a: </b> $reg[2]<b>$reg[4]</b>$reg[5]\n"); //probar descomentar esta linea
// if ($a >= 1000) break; // para test
}
uksort($nuevaslineas, 'strcasecmp');
foreach( $nuevaslineas as $clave => $valor ) {
$linea = $clave.$valor;
if (ereg("&#(".$patronascii.");", $linea, $reg)) {
$linea = str_replace($reg[0], chr(intval($reg[1])), $linea);
}
if (next($nuevaslineas)) {
fputs($fpi, $linea."\n");
} else {
fputs($fpi, $linea);
}
}
$fin = time();
echo "<big>Despues de <b>";
echo date("i:s", $fin-$ini);
echo " minutos</b> se ordenaron y guardaron las $a referencias de funciones PHP en el archivo <b>$maguma_php_insight</b> !!</big>";
Debemos tener presente que, debido a que se utilizan expresione regulares y el manual es "pesado" (5 Mb aprox.) el proceso para lograr el punto 2 puede toman alrededor de
20 minutos con un procesador de 500Mhz.[*] Reemplazar el archivo php-insight.dat original por el que se acaba de crear.[/list=a]
Explicaciones para las expresiones regulares utilizadas:
- El que esta definido en $patronascii casa con cualquier numero que esta dentro del rango 0 a 255 pues hay 4 opciones (las opciones se diferencian con la barra vertical |)
Cualquier numero del 0 al 99:
Cualquier numero del 100 al 199:
Cualquier numero del 200 al 249:
Cualquier numero del 250 al 255:
- El que esta definido en $patron se utiliza especificamente para recorrer el Manual HTML de PHP, por lo que para interpretarlo basta con ver el codigo fuente del mismo y compararlo con la ER.
Una version actualizada del php-funcs.dat se puede bajar de:
http://www.forosdelweb.com/attachment.php?postid=358063
Una version actualizada del php-insight.dat se puede bajar de:
http://www.forosdelweb.com/attachment.php?postid=373755
Saludos!