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.
- Indice de las FAQs: Conceptos, Configuración, Formularios, Manejo de Archivos, Integración con Bases de Datos, Sesiones, Extensiones y Librerías, Seguridad, Funciones, Clases y Objetos, Frameworks
- Recomendamos también: Guía Zend, Frameworks PHP, Aceleradores PHP
- Agregar al FAQ: PHP: Instrucciones para agregar una pregunta al FAQ de PHP
- Para preguntas sobre PHP: Foro de Php
