Tema: FAQ's de PHP
Ver Mensaje Individual
  #55 (permalink)  
Antiguo 08/04/2003, 05:17
fran86
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 22 años, 3 meses
Puntos: 8
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($linea0strpos($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($fpmfilesize($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($lineasstrlen($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:
    Código:
    [0-9]{1,2}
    
    Cualquier numero del 100 al 199:
    Código:
    1[0-9]{1,2}
    
    Cualquier numero del 200 al 249:
    Código:
    2[0-4][0-9]
    
    Cualquier numero del 250 al 255:
    Código:
    25[0-5]
    
  • 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!

Última edición por Cluster; 26/04/2003 a las 22:24