]> git.llucax.com Git - z.facultad/75.10/miklolife.git/commitdiff
Extiendo el script para que ponga los métodos también.
authorLeandro Lucarella <llucax@gmail.com>
Mon, 2 May 2005 18:08:42 +0000 (18:08 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Mon, 2 May 2005 18:08:42 +0000 (18:08 +0000)
Hago que la salida sea en HTML (más fácil de importar en un editor de texto).

scripts/clases2spec.py

index 4822cd19625eb42548f5663b6b81e8220a1f7977..7f7fba9961aeb077de8425438967a2e4155698f6 100755 (executable)
@@ -12,6 +12,11 @@ E_ATTR          = 5
 E_ATTR_NAME     = 6
 E_ATTR_COMMENT  = 7
 E_ATTR_TYPE     = 8
+E_OPS           = 9
+E_OP            = 10
+E_OP_NAME       = 11
+E_OP_COMMENT    = 12
+E_OP_TYPE       = 13
 
 # Caracteres a eliminar
 STRIPCHARS = '#\t\n '
@@ -40,6 +45,9 @@ class ObjFinder(saxutils.DefaultHandler):
                 elif name == 'attributes': # Paso empezó a encontrar atributos
                     self.curr['attrs'] = []
                     self.estado = E_ATTRS
+                elif name == 'operations': # Paso empezó a encontrar operaciones
+                    self.curr['ops'] = []
+                    self.estado = E_OPS
             elif self.estado == E_ATTR:  # Datos del atributo
                 if name == 'name':       # Nombre del atributo
                     self.curr_attr['name'] = ''
@@ -50,10 +58,23 @@ class ObjFinder(saxutils.DefaultHandler):
                 elif name == 'comment':  # Es la descripción del atributo
                     self.curr_attr['comment'] = ''
                     self.estado = E_ATTR_COMMENT
-        elif name == 'dia:composite': # Comienzo de attributos de clase
+            elif self.estado == E_OP:    # Datos del atributo
+                if name == 'name':       # Nombre del atributo
+                    self.curr_op['name'] = ''
+                    self.estado = E_OP_NAME
+                elif name == 'type':     # Es el tipo del atributo
+                    self.curr_op['type'] = ''
+                    self.estado = E_OP_TYPE
+                elif name == 'comment':  # Es la descripción del atributo
+                    self.curr_op['comment'] = ''
+                    self.estado = E_OP_COMMENT
+        elif name == 'dia:composite':   # Comienzo de attributos de clase
             if self.estado == E_ATTRS:  # Si estoy en una clase
                 self.curr_attr = {}
-                self.estado = E_ATTR   # Paso a buscar sus atributos
+                self.estado = E_ATTR    # Paso a buscar sus operaciones
+            elif self.estado == E_OPS:  # Si estoy en una clase
+                self.curr_op = {}
+                self.estado = E_OP   # Paso a buscar sus atributos
     def characters(self, data):
         if self.estado == E_CLASS_NAME:
             self.curr['name'] += data.strip(STRIPCHARS)
@@ -65,6 +86,12 @@ class ObjFinder(saxutils.DefaultHandler):
             self.curr_attr['type'] += data.strip(STRIPCHARS)
         elif self.estado == E_ATTR_COMMENT:
             self.curr_attr['comment'] += data.strip(STRIPCHARS)
+        elif self.estado == E_OP_NAME:
+            self.curr_op['name'] += data.strip(STRIPCHARS)
+        elif self.estado == E_OP_TYPE:
+            self.curr_op['type'] += data.strip(STRIPCHARS)
+        elif self.estado == E_OP_COMMENT:
+            self.curr_op['comment'] += data.strip(STRIPCHARS)
     def endElement(self, name):
         #print " #### Endt </%s>" % name
         if name == 'dia:object':
@@ -75,21 +102,33 @@ class ObjFinder(saxutils.DefaultHandler):
         elif name == 'dia:attribute':
             if self.estado == E_CLASS_NAME:
                 self.estado = E_CLASS
-            if self.estado == E_CLASS_COMMENT:
+            elif self.estado == E_CLASS_COMMENT:
                 self.estado = E_CLASS
-            if self.estado == E_ATTR_NAME:
+            elif self.estado == E_ATTR_NAME:
                 self.estado = E_ATTR
-            if self.estado == E_ATTR_TYPE:
+            elif self.estado == E_ATTR_TYPE:
                 self.estado = E_ATTR
-            if self.estado == E_ATTR_COMMENT:
+            elif self.estado == E_ATTR_COMMENT:
                 self.estado = E_ATTR
-            if self.estado == E_ATTRS:
+            elif self.estado == E_ATTRS:
+                self.estado = E_CLASS
+            elif self.estado == E_OP_NAME:
+                self.estado = E_OP
+            elif self.estado == E_OP_TYPE:
+                self.estado = E_OP
+            elif self.estado == E_OP_COMMENT:
+                self.estado = E_OP
+            elif self.estado == E_OPS:
                 self.estado = E_CLASS
         elif name == 'dia:composite':
             if self.estado == E_ATTR:
                 self.curr['attrs'].append(self.curr_attr)
                 self.curr_attr = None
                 self.estado = E_ATTRS
+            elif self.estado == E_OP:
+                self.curr['ops'].append(self.curr_op)
+                self.curr_op = None
+                self.estado = E_OPS
 
 
 if __name__ == '__main__':
@@ -117,14 +156,28 @@ if __name__ == '__main__':
     # Parse the input
     parser.parse(sys.argv[1])
 
+    print '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">'
+    print '<html lang="es"><head><title>Especificación</title></head><body>'
     # Recorro clases obtenidas
     for c in dh.clases:
-        print
-        print 'Clase:', c['name']
-        print 'Descripción:', c['comment']
-        print 'Atributos:'
+        print '<table width="100%%" border="1" summary="Especificación de clase %s">' \
+            % c['name'].encode('iso-8859-1', 'replace')
+        print '<tr><th colspan="3">%s</th></tr>' % c['name'].encode('iso-8859-1', 'replace')
+        print '<tr><td colspan="3">%s</td></tr>' % c['comment'].encode('iso-8859-1', 'replace')
+        print '<tr><th>Atributo</th><th>Tipo</th><th>Descripción</th></tr>'
         for a in c['attrs']:
-            print '    %(name)s (%(type)s): %(comment)s' % a
+            print '<tr><td>%s</td><td>%s</td><td>%s</td></tr>' \
+                % (a['name'].encode('iso-8859-1', 'replace'),
+                    a['type'].encode('iso-8859-1', 'replace'),
+                    a['comment'].encode('iso-8859-1', 'replace'))
+        print '<tr><th>Método</th><th>Retorno</th><th>Descripción</th></tr>'
+        for o in c['ops']:
+            print '<tr><td>%s</td><td>%s</td><td>%s</td></tr>' \
+                % (o['name'].encode('iso-8859-1', 'replace'),
+                    o['type'].encode('iso-8859-1', 'replace'),
+                    o['comment'].encode('iso-8859-1', 'replace'))
+        print '</table>'
+    print '</body></html>'
 
 
 # vim: set et sw=4 sts=4 :