Esto es mas que nada una experiencia para compartir...
Hola,
Hace poco empece a usar el editos Maguma Studio y al rato me encontre con que el coloreado de sintaxis no reconoce algunas de la funciones, entonces me encapriche

y empece a buscarle una solucion. Asi que la comparto con ustedes.
Finalmente llegue a esto:
- Que reconozca TODAS las funciones de PHP
- Que la ayuda contextual con los parametros de la funcion aparezca en español!! (la mayoria
P)
El primer punto es bastante facil, si se fijan en el directorio donde instalaron maguma (por defecto es C:\Archivos de programa\Maguma Studio\) hay una carpeta que se llama Data y dentro un archivo que llamado php-funcs.dat. Al parecer esto no es mas que la lista de funciones que Maguma usa para highlight, y basta con ir al cvs de php.net y bajar un archivo que tiene presisamente esto de la seccion de manuales en ingles.
El link es este:
http://cvs.php.net/cvs.php/phpdoc/quickref.txt?login=2
Luego hay que guardarlo en nuestra pc con cualquier nombre, por ej quickref.txt
Cada linea de este archivo es esto:
Código:
nombredelafuncion - breve descripcion de la funcion
Ejemplo:
De este archivo lo que saque entonces es la lista completa de funciones aplicandole este codigo:
Código PHP:
$quickrefdecvs = 'c:\windows\escritorio\quickref.txt'; //Aqui hay que poner el path al quickref
$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>";
Despues solo resta hacer un backup del php-funcs.dat original y sobreescribirlo con el nuevo.
Hasta alli vamos facil, el problema es que en el archivo que se bajo del cvs no tiene los parametros de cada funcion, entonces lo que probe hacer es interpretar el Manual de PHP en español version HTML, y de alli obtener los parametros de c/func.
Maguma usa un archivo de nombre php-insight.dat que tiene esta estructura (cada linea)
Ej de echo:
Código:
echo(string $arg1 [, string $argn...])
Asi que usando la expresion regular correcta, se puede obtener lo que se quiere desde el html.
Primero que bajar la version html de un solo archivo del manual desde php.net.
Aca ta' el link:
http://www.php.net/distributions/man...al_es.html.bz2
Despues de descomprimirlo y bla bla... use este codigo.
Código PHP:
$manualphp = 'C:\windows\escritorio\php_manual_es.html'; // aca esta el manual
$maguma_php_insight = 'c:\windows\escritorio\php-insight.dat'; //aca quedara 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
$patron = '<H2>(Descripción|Description)</H2>([^<>]+)<(B CLASS|BCLASS)="methodname">([^<>]+)</B>([^<>]+)<';
// Patron
$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>";
Despues se hace lo mismo que con el punto 1, copia de seguridad de php-insight.dat, sobreescribir, etc

El unico inconveniente es que, debido a que el manual pesa como 5MB y se usan ER, se tarda bastante en parsear el HTML. En mi maquina AMD K6-2 450 (

que anda overclockeada a 523mhz

) tarda como 20 minutos.
Lo unico que resta es que alguien pula la RE por yo del tema ¡casi-cero! (estuve como 2 horas pa' pegarle

).
Espero que a alguien le interese y le sirva, mejor dicho, espero que alguien se haya tomado el trabajo de leer todo esto

.
Saludos.