PHP:¿Cómo puedo mejorar el editor Maguma Studio usando PHP?

De Foros del Web

Requisitos: conexión a internet, php local.

Respuesta: utilizando quickref.txt de cvs.php.net y parseando el manual de php versión html.

Utilizando 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 parámetros para las funciones, y las "Funciones Nativas de PHP" (ToolBox>Class Browser) aparezcan en español! (la mayoría :-PP)[/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 más 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";  //Aquí hay que poner el path al quickref que bajamos de cvs.php.net 
$nuevophp_funcs = "c:\\windows\escritorio\\php-funcs.dat";  // Aquí se creará 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 expresión 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 versión 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 código 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 expresiones 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 está definido en $patronascii casa con cualquier número que está dentro del rango 0 a 255 pues hay 4 opciones (las opciones se diferencian con la barra vertical |) Cualquier número del 0 al 99:

Código:

[0-9]{1,2}

Cualquier número del 100 al 199:

Código:

1[0-9]{1,2}

Cualquier número del 200 al 249:

Código:

2[0-4][0-9]

Cualquier número del 250 al 255:

Código:

25[0-5]
  • El que esta definido en $patron se utiliza específicamente para recorrer el Manual HTML de PHP, por lo que para interpretarlo basta con ver el código fuente del mismo y compararlo con la ER.

Una versión actualizada del php-funcs.dat se puede bajar de:

http://www.forosdelweb.com/attachment.php?postid=358063

Una versión actualizada del php-insight.dat se puede bajar de:

http://www.forosdelweb.com/attachment.php?postid=373755


--fran86 08 Abr 2003

Este artículo es parte de las FAQs de PHP y el Manual de PHP.

Herramientas personales