From: Martín Marrese Date: Thu, 28 Aug 2003 21:41:01 +0000 (+0000) Subject: Agrego de funcionalidad. Reconoce parametros pasados por referencia y ya no tiene... X-Git-Tag: svn_import~32 X-Git-Url: https://git.llucax.com/mecon/scripts.git/commitdiff_plain/3738e30a0bdc5c3086f14f7d9fe5deb44dd98df7?ds=sidebyside Agrego de funcionalidad. Reconoce parametros pasados por referencia y ya no tiene problemas si la documentacion de los mismos esta en varios renglones. --- diff --git a/code2xmi/code2xmi.php b/code2xmi/code2xmi.php index 7ea25f5..fbe33dd 100755 --- a/code2xmi/code2xmi.php +++ b/code2xmi/code2xmi.php @@ -1,6 +1,6 @@ #! /usr/bin/php4 -qC @@ -10,9 +10,7 @@ $Id$ //Recibe como parametros el directorio o una lista de archivos a diagramar -////////////////////// -// TAG's XML -////////////////////// +//TAG's XML {{{ $comienzo = << @@ -33,8 +31,8 @@ $fin = << EOT3; - - +//}}} +//LINEAS TEMPLATES XMI {{{ $umlclass = ''; $umlclass_c = ''; @@ -47,16 +45,17 @@ $umlattribute = ''; $umllistitem_c = ''; - -////////////////////// - - +//}}} +//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']) ? '&'.$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); +//}}} ?>