Zeilenumbruch nach bestimmter Anzahl Zeichen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

Montag 16. März 2009, 16:01

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).
Zuletzt geändert von mzh am Montag 16. März 2009, 16:10, insgesamt 1-mal geändert.
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Montag 16. März 2009, 16:06

Du hättest auch einfach fragen können wie man eine brauchbare Dokumentation erstellt und man hätte dir mit Sphinx geantwortet.
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

Montag 16. März 2009, 16:15

Hm danke.
Im Code könnte man das nicht machen?
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Montag 16. März 2009, 16:16

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.
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

Montag 16. März 2009, 16:17

genau, das habe ich auch gedacht.
Schaus mir gerne mal genauer an, aber vorläufig reicht mir die einfache Version
lunar

Montag 16. März 2009, 16:23

@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 ...
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Montag 16. März 2009, 16:25

Die Lernkurve ist aber imho ziemlich steil, zumindest am Anfang - und darauf hat nicht jeder Lust, inklusive mir :-)
lunar

Montag 16. März 2009, 16:29

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).
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Montag 16. März 2009, 17:01

Richtig, und gerade autodoc ist das wichtigste, finde ich.
lunar

Montag 16. März 2009, 17:33

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 ...
Antworten