Seite 1 von 1

Zeilenumbruch nach bestimmter Anzahl Zeichen

Verfasst: Montag 16. März 2009, 16:01
von mzh
Hallo zusammen
Ich baue eine Dokumentation zu unserem Programm auf. Dazu extrahiere ich von allen Modulen die Methoden und schreibe rechts daneben ihren zugehörigen __doc__-String hin. Das klappt schon ganz gut (fürs erste) mit der folgenden Funktion:

Code: Alles auswählen

def info(object, spacing=40, collapse=1):
    """Print methods and doc strings.
    
    Takes module, class, list, dictionary
    or string."""
    methodList = [method for method in dir(object) if hasattr(getattr(object, method), '__call__')]
    processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
    print("\n".join(["%s %s" %
                     (method.ljust(spacing),
                      processFunc(str(getattr(object, method).__doc__)))
                     for method in methodList]))
    print()
    print()
    print("*************************************************************")

Es kommt dann ungefähr so etwas raus:
*************************************************************
printIterativeDeterminants------------------Prints out determinant information for debugging
printResidues---------------------------------Prints out determinant information for debugging


*************************************************************
Determinant----------------------------------Determinant class - set up for later structurization
addCoulombAcidPair-------------------------Adding the Coulomb interaction (an acid pair): the higher pKa is raised
addCoulombBasePair------------------------Adding the Coulomb interaction (a base pair): the lower pKa is lowered

Was ich jetzt noch versuche einzubauen ist, dass der __doc__-String nach etwa 100 Zeichen umgebrochen wird (einfach, dass es auf A4 passen würde), so dass er nicht bis an sein Ende auf einer Zeile steht und das ganze ein bisschen lesbarer wird.
Wäre froh, wenn mir jemand einen Tipp geben könnte, wie ich das machen könnte. Dort wo die Strichreihen sind, sind im Output Abstände, die mit spacing übergeben werden. Diesen rechten Teil wollte ich halt als Block haben (ich hoffe, man versteht was ich meine).

Verfasst: Montag 16. März 2009, 16:06
von DasIch
Du hättest auch einfach fragen können wie man eine brauchbare Dokumentation erstellt und man hätte dir mit Sphinx geantwortet.

Verfasst: Montag 16. März 2009, 16:15
von mzh
Hm danke.
Im Code könnte man das nicht machen?

Verfasst: Montag 16. März 2009, 16:16
von Dauerbaustelle

Code: Alles auswählen

def split_text(text, n=100):
    """ Split text in lines, breaking after `n` chars """
    i = 0
    while i < len(text):
        yield text[i:i+n]
        i += n
    yield text[i:]

print '\n'.join(split_text(deintext, zeilenlänge))
@DasIch: Naja, Sphinx ist einfach zu komplex für kleinere Sachen.

Verfasst: Montag 16. März 2009, 16:17
von mzh
genau, das habe ich auch gedacht.
Schaus mir gerne mal genauer an, aber vorläufig reicht mir die einfache Version

Verfasst: Montag 16. März 2009, 16:23
von lunar
@dauerbaustelle
textwrap existiert.

Außerdem ist Sphinx nicht kompliziert. Zumindest bezweifele ich, dass man mit einer Eigenentwicklung schneller zu ansehnlichen Ergebnissen kommt als wenn man Sphinx benutzen würde, vor allem, wenn man noch nicht mal alleine das Umbrechen von Text implementieren kann. Nichts für ungut ...

Verfasst: Montag 16. März 2009, 16:25
von Dauerbaustelle
Die Lernkurve ist aber imho ziemlich steil, zumindest am Anfang - und darauf hat nicht jeder Lust, inklusive mir :-)

Verfasst: Montag 16. März 2009, 16:29
von lunar
Dauerbaustelle hat geschrieben:Die Lernkurve ist aber imho ziemlich steil, zumindest am Anfang - und darauf hat nicht jeder Lust, inklusive mir :-)
Was ist an der Lernkurve denn steil? sphinx-quickstart ausführen, und losschreiben ... mehr gibt es da doch nicht zu lernen (außer vielleicht, wie man Erweiterungen wie autodoc nutzt).

Verfasst: Montag 16. März 2009, 17:01
von Dauerbaustelle
Richtig, und gerade autodoc ist das wichtigste, finde ich.

Verfasst: Montag 16. März 2009, 17:33
von lunar
Dauerbaustelle hat geschrieben:Richtig, und gerade autodoc ist das wichtigste, finde ich.
Autodoc wird von Sphinx-quickstart automatisch aktiviert, dass einzige, was man wirklich lernen muss, ist die Verwendung der Direktiven. Und die sind gut dokumentiert ...