00001 <?php
00002 echo "documentar.php - Copyright Ilke Benson, A.I.E. 2008";
00003 echo "\nNo hay ninguna garant�a asociada al uso de este programa.\n\n";
00004
00005 if (sizeof($argv) != 3){
00006 echo "\n\nUso: documentar.php directorioCodigo Doxyfile";
00007 echo "\n\nGenera la documentaci�n de un directorio de c�digo.";
00008 echo "\n\n�Lo tienes claro ahora?\n\n";
00009 exit();
00010 }
00011
00012 define ("MARCA_INICIO", "/**");
00013 define ("MARCA_FIN", "**/");
00014 define ("DIR_SALIDA", "src/");
00015 define ("EXTENSIONES", "php, js");
00016
00017 $dirCodigo = $argv[1];
00018
00019 if (substr($dirCodigo,strlen($dirCodigo)-1,1) != '/') $dirCodigo.='/';
00020
00021 if (!mkdir(DIR_SALIDA)) throw new Exception("No se pudo crear el directorio de salida ".DIR_SALIDA);
00022 $inodeDirSalida = fileinode(DIR_SALIDA);
00023 echo "El inode es $inodeDirSalida";
00024
00025 extraerComentarios($dirCodigo, DIR_SALIDA);
00026
00027
00028 echo "Llamando a Doxygen...";
00029 exec("doxygen ".$argv[2]);
00030
00031 exit;
00032
00035 function extraerComentarios($dirEntrada, $dirSalida){
00036 global $inodeDirSalida;
00037
00038 echo "\nProcesando el directorio $dirEntrada:\n";
00039 if (!is_dir($dirEntrada)) throw new Exception("Esto (".$dirEntrada.") no es un directorio.");
00040 if (!is_dir($dirSalida)) throw new Exception("El directorio de salida (".$dirSalida.") no es un directorio.");
00041 $gd = opendir($dirEntrada);
00042 if (!$gd) throw new Exception("Error al abrir el directorio $dirEntrada.");
00043 while (($nombreArchivoEntrada = readdir($gd)) !== false){
00044 $pathArchivoEntrada = $dirEntrada.$nombreArchivoEntrada;
00045 echo "Revisando $pathArchivoEntrada ...";
00046 $pathArchivoSalida = $dirSalida.$nombreArchivoEntrada;
00047 if (is_dir($pathArchivoEntrada)){
00048 echo " es un directorio...";
00049 echo "... su inode es, ".fileinode($pathArchivoEntrada);
00050 if (fileinode($pathArchivoEntrada) == $inodeDirSalida){
00051 echo "es el directorio de salida. Lo evito.\n";
00052 continue;
00053 }
00054 if (($nombreArchivoEntrada != ".") AND ($nombreArchivoEntrada != "..")){
00055 if (!mkdir($pathArchivoSalida)) throw new Exception("No se pudo crear el directorio $pathArchivoSalida");
00056 echo " lo proceso.\n";
00057 extraerComentarios($pathArchivoEntrada."/", $pathArchivoSalida."/");
00058 }
00059 echo " pero no lo proceso.\n";
00060 }
00061
00062 echo " es un fichero...";
00063 if (substr($nombreArchivoEntrada,strlen($nombreArchivoEntrada)-4,4) != '.php'){
00064 echo " no es PHP... Seguimos.\n";
00065 continue;
00066 }
00067 echo " es PHP, lo proceso...";
00068 $entrada = file($pathArchivoEntrada);
00069 $salida = procesarCodigo($entrada);
00070 $ficheroSalida = fopen($pathArchivoSalida, 'w');
00071 if (fwrite($ficheroSalida, $salida) === FALSE) echo "Fall� la escritura del fichero $pathArchivoSalida... Seguimos\n";
00072 echo " generada la salida. Seguimos con el siguiente.\n";
00073 }
00074 closedir($gd);
00075 }
00076
00077 function procesarCodigo($codigo){
00078 for ($i = 0; $i < count($codigo); $i++)
00079
00080 if (ereg("/\*\*-",$codigo[$i])){
00081 $inicioComentario = $i;
00082 $finComentario = buscarFinComentario($i, $codigo);
00083 if ($finComentario) $codigo = sacarCodigo($inicioComentario, $finComentario, $codigo);
00084 }
00085
00086
00087 $salida = "";
00088 for ($i = 0; $i < count($codigo); $i++)
00089 $salida .= $codigo[$i];
00090 return $salida;
00091 }
00092
00093 function buscarFinComentario($posicion, $codigo){
00094 for ($i = $posicion + 1; $i < count($codigo); $i++)
00095 if (ereg("\*\*/", $codigo[$i]))
00096 return $i;
00097 return false;
00098 }
00099
00100 function sacarCodigo($inicio, $fin, $codigo){
00101
00102 $trozo1 = array_slice($codigo, 0, $inicio - 1);
00103 $elemento = array($codigo[$inicio - 1]);
00104 $comentario = array_slice($codigo, $inicio, $fin - $inicio + 1);
00105 $comentario = str_replace("/**-", "/**", $comentario);
00106 $trozo2 = array_slice($codigo, $fin + 1, count($codigo) + 1);
00107
00108 return array_merge($trozo1, $comentario, $elemento, $trozo2);
00109 }
00110
00111 ?>