]> git.llucax.com Git - mecon/scripts.git/commitdiff
Agrego de funcionalidad. Reconoce parametros pasados por referencia y ya no tiene...
authorMartín Marrese <marrese@gmail.com>
Thu, 28 Aug 2003 21:41:01 +0000 (21:41 +0000)
committerMartín Marrese <marrese@gmail.com>
Thu, 28 Aug 2003 21:41:01 +0000 (21:41 +0000)
code2xmi/code2xmi.php

index 7ea25f528957684429855ec10c0aa9cf687cbcaf..fbe33ddff5eb74c0b9457a8f64b13392806cd924 100755 (executable)
@@ -1,6 +1,6 @@
 #! /usr/bin/php4 -qC
 <?php 
-/* vim: set binary expandtab tabstop=4 shiftwidth=4:
+/* vim: set binary expandtab tabstop=4 shiftwidth=4 foldmethod=marker:
 -------------------------------------------------------------------------------
 Creado: jue jul 31 14:01:57 ART 2003
 Autor:  Martin Marrese <mmarre@mecon.gov.ar>
@@ -10,9 +10,7 @@ $Id$
 
 //Recibe como parametros el directorio o una lista de archivos a diagramar
 
-//////////////////////
-// TAG's XML
-//////////////////////
+//TAG's XML {{{
 $comienzo = <<<EOT
 <?xml version="1.0" encoding="UTF-8"?>
 <XMI xmlns:UML="org.omg/standards/UML" verified="false" timestamp="" xmi.version="1.2" >
@@ -33,8 +31,8 @@ $fin = <<<EOT3
   </XMI.content>
 </XMI>
 EOT3;
-
-
+//}}}
+//LINEAS TEMPLATES XMI {{{
 $umlclass       = '<UML:Class stereotype="##STEREOTYPE##" package="##PACKAGE##" xmi.id="##ID##" abstract="##ABSTRACT##" documentation="##DOCUMENTATION##" name="##NAME##" static="##STATIC##" scope="##SCOPE##" >';
 $umlclass_c     = '</UML:Class>';
 
@@ -47,16 +45,17 @@ $umlattribute   = '<UML:Attribute stereotype="##STEREOTYPE##" package="##PACKAGE
 
 $umllistitem   = '<listitem open="0" type="##TYPE##" id="##ID##" label="##LABEL##" >';
 $umllistitem_c = '</listitem>';
-
-//////////////////////
-
-
+//}}}
+//VARIABLES GLOBALES {{{
 $ID      = 0;
 $IDPARAM = 0;
 $ARRAY   = array();
+//}}}
 
+//PARTE 1 {{{
 for ($j = 1; $j < count($argv); $j++) {
     $file = $argv[$j];
+    //ARMO LA LISTA DE ARCHIVOS {{{
     // Si es un directorio, agrego cada archivo legible .php al argv.
     if (is_dir($file)) {
         $dh = opendir($file);
@@ -67,60 +66,70 @@ for ($j = 1; $j < count($argv); $j++) {
         }
         closedir($dh);
         continue;
-    // Si no, si se puede leer el archivo y es .php, lo procesa.
-    } elseif (is_readable($file) and substr($file, -4) == '.php') {
+    } 
+    //}}}
+    //GUARDO LA INFO{{{
+    elseif (is_readable($file) and substr($file, -4) == '.php') {
         $cont = file ($file);
-        
         $DOCUMENTANDO = false;
         $opciones = array ();
         $cont_param = 0;
         foreach ($cont as $linea) {
             $linea = trim ($linea);
-            $tmp = preg_split ('/[^\w_\/\*\@\$\']+/', $linea);
-            //Agrego la documentacion
+            $tmp = preg_split ('/[^\w_\/\*\@\$\&\.\']+/', $linea);
+            //DOCUMENTACION {{{
             if ($tmp['0'] == '/**') { //Comienza la documentacion
                 $DOCUMENTANDO = true;
             }
             if ($tmp['0'] == '*/') { //Termina la documentacion
                 $DOCUMENTANDO = false;
             }
-
             if ($DOCUMENTANDO) {
-                if ($tmp['0'] = '*') {
-                    array_shift($tmp);
-                }
-                switch ($tmp['0']) {
-                    case '@access':
-                        switch ($tmp['1']) {
-                            case 'private'  : $opciones['access'] = 201;
-                                              break;
-                            case 'protected': $opciones['access'] = 202;
-                                              break;
-                            default         : $opciones['access'] = 200;
-                        }
-                        break;
-                    case '@package' : $opciones['package']  = $tmp['1'];
+                $tmp2   = ltrim ($linea,'* /**'); //Elimino el * o /** del comienzo de la linea
+                $accion = substr($tmp2, 0, strpos($tmp2,' ')); //Obtengo la accion
+                $value  = trim(strstr($tmp2, ' ')); //Solo me importa lo que esta detras del @
+
+                switch ($accion) {
+                    case '@access'  : switch ($value) {
+                                          case 'private'  : $opciones['access'] = 201;
+                                                            break;
+                                          case 'protected': $opciones['access'] = 202;
+                                                            break;
+                                          default         : $opciones['access'] = 200;
+                                      }
+                                      $doc_param = 0;
+                                      break;
+                    case '@package' : $opciones['package'] = $value;
+                                      $doc_param = 0;
                                       break;
                     case '@abstract': $opciones['abstract'] = 1;
+                                      $doc_param = 0;
                                       break;
-                    case '@static'  : $opciones['static']   = 1;
+                    case '@static'  : $opciones['static'] = 1;
+                                      $doc_param = 0;
                                       break;
-                    case '@var'     : $opciones['type']     = $tmp['1'];
+                    case '@var'     : $opciones['type'] = substr($value, 0, strpos($value,' '));
+                                      $doc_param = 0;
                                       break;
-                    case '@return'  : $opciones['type']     = $tmp['1'];
+                    case '@return'  : $opciones['type'] = $value; 
+                                      $doc_param = 0;
                                       break;
-                    case '@param'   : $opciones['param'][$cont_param]['type'] = $tmp['1'];
-                                      $opciones['param'][$cont_param]['documentacion'] = implode (' ', array_slice($tmp,3));
+                    case '@param'   : $opciones['param'][$cont_param]['type'] = substr($value, 0, strpos($value,' '));
+                                      $opciones['param'][$cont_param]['documentacion'] = trim(strstr(trim(strstr($value, ' ')), ' '));
                                       $cont_param++;
+                                      $doc_param = 1;
                                       break;
                     default:
-                        if (array_key_exists('0',$tmp)) {
-                            @$opciones['documentacion'].= implode (' ',$tmp)."\n";
+                        if (@$doc_param) {
+                           $opciones['param'][$cont_param]['documentacion'].= $tmp2;
+                        }
+                        else {
+                            @$opciones['documentacion'].= $tmp2;
                         }
                 }
             }
-
-            //CLASE
+            //}}}
+            //CLASE {{{
             if (!$DOCUMENTANDO && $tmp['0'] == 'class') {
                 $ID++;
                 $IDCLASE = $ID;
@@ -137,9 +146,15 @@ for ($j = 1; $j < count($argv); $j++) {
                 $ARRAY[$ID]['attributes']    = array();
                 $opciones = array();
             }
-            //FUNCION
+            //}}}
+            //FUNCION {{{
             if (!$DOCUMENTANDO && $tmp['0'] == 'function') {
                 $ID++;
+
+                if ($tmp['1']{0} == '_') {
+                    $tmp['1'] = substr($tmp['1'], 1); //SACO EL _
+                }
+                
                 $ARRAY[$IDCLASE]['operations'][$ID]['id']            = $ID;
                 $ARRAY[$IDCLASE]['operations'][$ID]['name']          = $tmp['1'];
                 $ARRAY[$IDCLASE]['operations'][$ID]['stereotype']    = (@$opciones['stereotype'])    ? $opciones['stereotype']    : '';  
@@ -151,31 +166,47 @@ for ($j = 1; $j < count($argv); $j++) {
                 $ARRAY[$IDCLASE]['operations'][$ID]['type']          = (@$opciones['type'])          ? $opciones['type']          : '';
                 $ARRAY[$IDCLASE]['operations'][$ID]['param']         = array();
 
-                //PARAMETROS
+                //PARAMETROS {{{
                 array_shift($tmp); //SACO EL FUNCTION
                 array_shift($tmp); //SACO EL NOMBRE DE LA FUNCION
                 for ($i = 0; $i <= count($tmp); $i++) {
-                    if ($tmp[$i]{0} == '$') { //AL FINAL DEJE EL $ PARA DIFERENCIAR LOS PARAMETROS DE LOS VALORES INICIALES QUE TOMAN
-                        $tmp[$i] = substr($tmp[$i], 1); //SACO EL $
+                    if ($tmp[$i]{0} == '$'|| $tmp[$i]{0} == '&') { //Veo si empiezo con $ o &
+                        switch ($tmp[$i]{0}) {
+                            case '$': $tmp[$i] = substr($tmp[$i], 1); //SACO EL $
+                                      break;
+                            case '&': $tmp[$i] = substr($tmp[$i], 2); //SACO EL & Y EL $
+                                      $opciones['param'][$i]['type'] = 
+                                          (@$opciones['param'][$i]['type']) ? '&amp;'.$opciones['param'][$i]['type'] : '';
+                                      break;
+                        }                        
                         $OPANT = $i;
-                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['id']            = $i;
-                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['name']          = $tmp[$i];
-                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['stereotype']    = (@$opciones['param'][$i]['stereotype'])    ? $opciones['param'][$i]['stereotype']    : '';
-                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['package']       = (@$opciones['param'][$i]['package'])       ? $opciones['param'][$i]['package']       : '';
-                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['abstract']      = (@$opciones['param'][$i]['abstract'])      ? $opciones['param'][$i]['abstract']      : 0;
-                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['documentation'] = (@$opciones['param'][$i]['documentacion']) ? $opciones['param'][$i]['documentacion'] : '';
-                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['static']        = (@$opciones['param'][$i]['static'])        ? $opciones['param'][$i]['static']        : 0;
-                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['scope']         = (@$opciones['param'][$i]['access'])        ? $opciones['param'][$i]['access']        : '';
-                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['type']          = (@$opciones['param'][$i]['type'])          ? $opciones['param'][$i]['type']          : '';
+                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['id'] = $i;
+                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['name'] = $tmp[$i];
+                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['stereotype'] = 
+                            (@$opciones['param'][$i]['stereotype']) ? $opciones['param'][$i]['stereotype'] : '';
+                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['package'] = 
+                            (@$opciones['param'][$i]['package']) ? $opciones['param'][$i]['package'] : '';
+                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['abstract'] = 
+                            (@$opciones['param'][$i]['abstract']) ? $opciones['param'][$i]['abstract'] : 0;
+                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['documentation'] = 
+                            (@$opciones['param'][$i]['documentacion']) ? $opciones['param'][$i]['documentacion'] : '';
+                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['static'] = 
+                            (@$opciones['param'][$i]['static']) ? $opciones['param'][$i]['static'] : 0;
+                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['scope'] = 
+                            (@$opciones['param'][$i]['access']) ? $opciones['param'][$i]['access'] : '';
+                        $ARRAY[$IDCLASE]['operations'][$ID]['param'][$i]['type'] = 
+                            (@$opciones['param'][$i]['type']) ? $opciones['param'][$i]['type'] : '';
                     }
                     elseif ($tmp[$i] != '//'  && $tmp[$i] != 'X2C' && $tmp[$i] != '') {
                         $ARRAY[$IDCLASE]['operations'][$ID]['param'][$OPANT]['value']      .= $tmp[$i];
                     }
                 }
+                //}}}
                 $opciones = array();
                 $cont_param = 0;
             }
-            //ATRIBUTOS
+            //}}}
+            //ATRIBUTOS {{{
             if (!$DOCUMENTANDO && $tmp['0'] == 'var') {
                 $ID++;
                 $tmp['1'] = substr($tmp['1'], 1); //SACO EL $
@@ -202,23 +233,28 @@ for ($j = 1; $j < count($argv); $j++) {
                 $ARRAY[$IDCLASE]['attributes'][$ID]['value']         = (@$opciones['value'])         ? $opciones['value']         : '';
                 $opciones = array(operations);
             }
+        //}}}
         }
     } 
+    //}}}
 }
+//}}}
 
-$m = fopen ('./umlOut.xmi', 'w');
+
+//GUARDO EN EL ARCHIVO {{{
+$m =fopen ('./umlOut.xmi', 'w');
 fwrite($m, $comienzo);
 $LISTITEM = '';
 //CLASES
 foreach ($ARRAY as $ar) {
-    //PREPARO LA CLASE {{{
+    //PREPARO LA CLASE 
     $tmp2 = $umlclass;
     fwrite($m, preg_replace (array ('/##STEREOTYPE##/','/##PACKAGE##/','/##ID##/','/##ABSTRACT##/','/##DOCUMENTATION##/','/##NAME##/',
                                     '/##STATIC##/','/##SCOPE##/'), 
                              array ($ar['stereotype'],$ar['package'],$ar['id'],$ar['abstract'],$ar['documentation'],$ar['name'],
                                     $ar['static'],$ar['scope']), 
                              $tmp2)."\n");
-    //PREPARO LOS LISTITEM {{{
+    //PREPARO LOS LISTITEM 
     $tmp2 = $umllistitem;
     $LISTITEM.= preg_replace (array('/##TYPE##/','/##LABEL##/','/##ID##/'),array(813, $ar['name'], $ar['id']),$tmp2)."\n";  
 
@@ -240,7 +276,7 @@ foreach ($ARRAY as $ar) {
                                      $tmp2)."\n");
         } 
         fwrite($m,$umloperation_c."\n");
-        //PREPARO LOS LISTITEM {{{
+        //PREPARO LOS LISTITEM 
         $tmp2 = $umllistitem;
         $LISTITEM.= preg_replace (array('/##TYPE##/','/##LABEL##/','/##ID##/'),array(815, $op['name'], $op['id']),$tmp2)."\n";  
         $LISTITEM.=$umllistitem_c."\n";
@@ -253,14 +289,14 @@ foreach ($ARRAY as $ar) {
                                 array($op['stereotype'],$op['package'],$op['id'],$op['type'],$op['abstract'],$op['documentation'],$op['name'],
                                       $op['static'],$op['scope'],$op['value']),
                                 $tmp2)."\n");
-        //PREPARO LOS LISTITEM {{{
+        //PREPARO LOS LISTITEM
         $tmp2 = $umllistitem;
         $LISTITEM.= preg_replace (array('/##TYPE##/','/##LABEL##/','/##ID##/'),array(814, $op['name'], $op['id']),$tmp2)."\n";  
         $LISTITEM.=$umllistitem_c."\n";
     }
     fwrite($m,$umlclass_c);
     $LISTITEM.=$umllistitem_c."\n";
-    //}}}
 }
 fwrite($m,  $medio. $LISTITEM."\n".$fin);
+//}}}
 ?>