Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/04/2003, 02:32
fran86
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Para todos los que usen Maguma Studio

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:
Código:
abs - Absolute value
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($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>"
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($fpmfilesize($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($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>"
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.

Última edición por fran86; 08/04/2003 a las 05:27