X-Git-Url: https://git.llucax.com/z.facultad/75.10/miklolife.git/blobdiff_plain/148f2461df47cd972bde6a5d83574478038d938a..48da19b5978471d89b16929327476be7fc2e5e56:/scripts/clases2spec.py diff --git a/scripts/clases2spec.py b/scripts/clases2spec.py index 4822cd1..818d1dd 100755 --- a/scripts/clases2spec.py +++ b/scripts/clases2spec.py @@ -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 " % 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__': @@ -99,7 +138,8 @@ if __name__ == '__main__': # Verifica parámetros if len(sys.argv) < 2: - print >>sys.stderr, 'Uso:', sys.argv[0], 'archivo.dia' + print >>sys.stderr, 'Uso:', sys.argv[0], 'archivo.dia [-n]' + print >>sys.stderr, '-n si no se quieren incluir los métodos' sys.exit(1) # Create a parser @@ -117,14 +157,34 @@ if __name__ == '__main__': # Parse the input parser.parse(sys.argv[1]) + # Veo si hay que poner métodos + metodos = True + if len(sys.argv) > 2 and sys.argv[2] == '-n': + metodos = False + + print '' + print 'Especificación' # Recorro clases obtenidas for c in dh.clases: - print - print 'Clase:', c['name'] - print 'Descripción:', c['comment'] - print 'Atributos:' + print '' \ + % c['name'].encode('iso-8859-1', 'replace') + print '' % c['name'].encode('iso-8859-1', 'replace') + print '' % c['comment'].encode('iso-8859-1', 'replace') + print '' for a in c['attrs']: - print ' %(name)s (%(type)s): %(comment)s' % a + print '' \ + % (a['name'].encode('iso-8859-1', 'replace'), + a['type'].encode('iso-8859-1', 'replace'), + a['comment'].encode('iso-8859-1', 'replace')) + if metodos: + print '' + for o in c['ops']: + print '' \ + % (o['name'].encode('iso-8859-1', 'replace'), + o['type'].encode('iso-8859-1', 'replace'), + o['comment'].encode('iso-8859-1', 'replace')) + print '
%s
%s
AtributoTipoDescripción
%s%s%s
MétodoRetornoDescripción
%s%s%s
' + print '' # vim: set et sw=4 sts=4 :