Again, small utility docSor

algaba at my-deja.com algaba at my-deja.com
Sat Jul 10 06:04:24 EDT 1999


Sorry if you get this twice !!

I've done this:

"""
1998 Manuel Gutierrez Algaba
You are free to use , modify, distribute and copy this piece of
python code, if you keep this free copyright notice in it.

arbor.py Version 1.0

It makes trees of anything you want to. Class depencencies, calls...

For more related doc py programs look at:
http:\\www.ctv.es\USERS\irmina\texpython.htm

or email me:
irmina at ctv.es

Something like this :
|||->a
|||  |||->1
|||  |||  |->e
|||  ||-->2
|||  |--->4
||-->b
|--->c

just describing it as:
    a.add(['a','b','c'],'letras', 'letras del abecedario')
    a.add([1,2,4], 'a' )
    a.add(['e'],1)

    a.dibuja('letras')

It's so extremely easy and small ( the python code )
that it doesn't deserve a translation...

TODO:
- Read from a properties file.

"""

import sys

class atree:
    def __init__(self, cabecera, hojas, diccionario, inf):
        self.cabecera = cabecera
        self.inf = inf
        self.hojas = hojas
        self.diccionario = diccionario
        self.anyadido = ""
        self.anyadido_hijo = ""

    def dibuja(self, anyadido=""):
        self.anyadido = anyadido
        if not self.inf is None:
            self.imprimeln( self.cabecera + "("+ self.inf +")")
        else:
            self.imprimeln( self.cabecera)
        k = 0
        cuantas = len(self.hojas)
        for i in self.hojas:
            self.dibuja_hoja(i, k, cuantas)
            k = k + 1

    def dibuja_hoja(self , hoja, pos, cuantas):
        self.anyadido_hijo = ""
        self.imprime( self.anyadido )
        composicion_vert = self.compone_vert(cuantas, pos)
        self.imprime( composicion_vert )
        composicion_vert = self.escribe_flecha(composicion_vert)
        if hoja in self.diccionario.keys():
            self.diccionario[hoja].dibuja(self.anyadido +
self.anyadido_hijo)
        else:
            self.imprimeln( hoja)

    def compone_vert(self, cuantas, pos):
        a = ""
        for i in xrange(0, cuantas):
            if (i < cuantas - pos) :
                b = "|"
                c = "|"
            else:
                b = " "
                c = "-"
            a = a + c
            self.anyadido_hijo = self.anyadido_hijo + b

        return a

    def escribe_flecha(self, anyadido):
        self.imprime( "->")
        self.anyadido_hijo = self.anyadido_hijo + "  "
        return anyadido + "  "


    def imprime(self, s):
        sys.stdout.write(str(s))

    def imprimeln(self, s):
        sys.stdout.write(str(s)+"\n")

class rep:
    def __init__(self):
        self.diccionario  = {}
        #self.anyade()

    def add(self, lista_hojas, cabecera, comentario = None ):
        self.diccionario[cabecera] = atree(cabecera,
                                           lista_hojas,
                                           self.diccionario,
                                           comentario)

    def dibuja(self, l):
        self.diccionario[l].dibuja()

if __name__=='__main__':
    a = rep()
    a.add(['a','b','c'],'letras', 'letras del abecedario')
    a.add([1,2,4], 'a' )
    a.add(['e'],1)

    a.dibuja('letras')

Sorry again, if you get this twice.


Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.




More information about the Python-list mailing list