[GELÖST] umlaute in docstrings

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.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Ist es möglich, das die umlaute in docstrings angezeigt werden? Bei mir werden immer stattdessen kryptische Zeichen angezeigt. Auch die Magicline im header scheint das nicht zu beeinflussen. Wäre toll wenn man vielleicht durch eine Trick pydoc dazu bewegen könnte umlaute richtig auszuwerten.

Es sieht einfach besser aus, bei einem generierten HTML-File wenn da üs statt ues angezeigt werden. Eigentlich müsste man pydoc nur dazu bringen das er statt ü ein ü ins HTML-File generiert. genau so das aus ä ein ä usw. gemacht wird. Jemand ne Idee wie man das lösen könnte ohne selber jetzt einen parser zu schreiben?

lg
Zuletzt geändert von sape am Montag 30. Oktober 2006, 16:36, insgesamt 1-mal geändert.
BlackJack

Wenn Du das nicht selber schreiben willst, könntest Du im Bugtracker einen Feature-Request absetzen, das Du gerne hättest, das `pydoc` die Kodierungszeile berücksichtigt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

XtraNine hat geschrieben:Es sieht einfach besser aus, bei einem generierten HTML-File wenn da üs statt ues angezeigt werden. Eigentlich müsste man pydoc nur dazu bringen das er statt ü ein ü ins HTML-File generiert. genau so das aus ä ein ä usw. gemacht wird. Jemand ne Idee wie man das lösen könnte ohne selber jetzt einen parser zu schreiben?
Es ist sogar noch einfacher: man sollte nur im HTML-File ein Encoding angeben müssen und dann sollten die Umlaute korrekt angezeigt werden. Entities sind out ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Hi, danke euch für die Vorschläge :)

@BlackJack:
Das mit dem Bugtracker klingt nicht schlecht. Leider ist mein Englisch nicht besonders gut aber ich werde mal sehen ob ich da was Verständliches formuliert bekomme. Da ja pydoc zum Lieferumfang von python gehört, müsste ich dann auf der offiziellen HP die frage stellen oder auf sourceforge? Sry, kenne mich mit dem Vorgang leider absolut nicht aus.

@Leonidas:
Die Idee ist ja echt nicht schlecht. Das wäre auch schnell zu erledigen, nachträglich ein encoding in die HTML-Files einzutragen. Ich geh mal nachher mal schauen wie das geht und teste das mal.

lg
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Leonidas hat geschrieben:Es ist sogar noch einfacher: man sollte nur im HTML-File ein Encoding angeben müssen und dann sollten die Umlaute korrekt angezeigt werden. Entities sind out ;)
Puuh, und ich dachte schon ich wäre der einzige, der das so kennt, sieht und nutzt.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

@yogi:
Naja entities sind tatsächlich out, aber leider hat sich das och nicht so überall rum gesprochen ^^ Viele benutzen das immer noch. OK, die "pros" sicherlich nicht aber es gibt da ja auch vereinzelt welche.

Genauso mit HTML: Das ist ja auch schon längst Schnee von gestern und das Zauberwort heißt hier XHTML! Aber auch das ist noch nicht zum Standard geworden bzw. hat sich noch nicht rum gesprochen, wenn ich mir da einige HPs im Netz anschaue ^^

lg
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

XtraNine hat geschrieben:Genauso mit HTML: Das ist ja auch schon längst Schnee von gestern und das Zauberwort heißt hier XHTML! Aber auch das ist noch nicht zum Standard geworden bzw. hat sich noch nicht rum gesprochen, wenn ich mir da einige HPs im Netz anschaue ^^
Da hast du recht - zumindest teilweise, jedoch wird XHTML immer populärer und ich selbst schreibe schon seit langer Zeit kein HTML mehr, welches nicht als XHTML validiert werden kann.
Die Ausrede "Die anderen nutzen doch auch HTML", bzw. "Die anderen nutzen doch auch Entities" zieht nicht.. mehr ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

"Die anderen" sind gewöhnlich auch die, die es selbst nicht drauf haben und damit ganz schlechte Vorbilder ;)
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

@Leonidas:
Hi, ich hab jetzt in der HTML im den <HTML>-Tag folgendermaßen umgeändert:
<html xmlns=http://www.w3.org/1999/xhtml>

Der ganze header sieht so aus:
<!doctype html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">


Damit wird mir jetzt die umlaute samt ß richtig angezeigt :) Eine frage hätte ich aber noch dazu. Ist das so I.O. oder sollte man zwecks Kompatibilität noch was hinzufügen? Ich kenne mich nur ein wenig mit HTML aus und fange erst jetzt an mich mit XHTML auseinander zu setzen.

Auch wäre es nicht schlecht wenn die Entwickler das in ihren nächsten release berücksichtigen. Vielleicht sollte ich mal wirklich eine Anfrage bei den zuständigen stellen (wenn ich weiß wie man das macht ^^).

Der einzige nachteil ist halt nur der, das es in der Konsole weiterhin Kryptisch angezeigt wird und bei Aufruf von pydoc.py mit Option -g weiterhin kryptisch aussieht. Aber das sol mich nicht weiter stören xD

Hmm, ich denke langfristig werde ich wohl doch nen eigenen Docstring-Parser der dann ein HTML-File generiert schreiben müssen, da mir das Styling von dem durch pydoc erzeugten HTML-File nicht zusagt. Oder sotte ich mal lieber selber versuchen in pydoc.py das so abzuändern, das im HTML-Tag das xmlns="http://www.w3.org/1999/xhtml" eingefügt wird? :D Hmm, sollte man einfach so in den Libs "Fuschen"?? 0_o Was meint ihr dazu?

BTW: Doxygen (http://de.wikipedia.org/wiki/Doxygen) scheint aber auch probs mit umlauten zu haben. Die generierten HTML-Files sind auch ein wenig...naja...Kann das einer bestätigen?
BlackJack

Kennst Du epydoc, pudge oder PythonDoc? Solltest Du jedenfalls mal reinschauen bevor Du auch so etwas anfängst. :-)

Bei epydoc die 3.0alpha nehmen, weil bei den Neuheiten steht:

Full unicode support, including support for the encoding directive.
Zuletzt geändert von BlackJack am Montag 30. Oktober 2006, 14:18, insgesamt 1-mal geändert.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Hab nal die pydoc.py gesucht und nach der entsprechenden Zeile gesucht und auch gleich gefunden xD Für alle interesierten, es ist die Zeile 424. Dort steht dann <html><head><title>Python: %s</title>.

So hab den <html>-Tag nun in <html xmlns="http://www.w3.org/1999/xhtml"> geändert.
Das proble ist nun wenn die HTML-Datei erzeugt wird und ich sie im browser öffnen dan wird mir das wie vorher angezeigt! Wenn ich die datei im editor öffne und dann einmal abspeichere ohne was zu ändern wird mir das dan so angezeigt wie gewollt. Woran liegt das den nun?? Die Datei ist in UTF-8 gespeichert…

EDIT: Danke BlackJack werde ihch mir anschauen.

Aber woran liegt das den nun das ich erst die Datei einmal öffnen muss dan Speichern, damit mir die umlaute angezeigt werden?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

XtraNine hat geschrieben:Hi, ich hab jetzt in der HTML im den <HTML>-Tag folgendermaßen umgeändert:
<html xmlns=http://www.w3.org/1999/xhtml>

Der ganze header sieht so aus:
<!doctype html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
Huch, einen HTML 4 Doctype mit einem XHTM-Namespace verbinden? Das ist auf keinen Fall sauber.

Mein XHTML-Template fängt so an:

Code: Alles auswählen

<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
Wobei das die Strict-Variante ist (eigentlich müüste da noch die XML-Deklatation ganz vorne dran sein). Die Transitional-Variante sieht eher so aus:

Code: Alles auswählen

<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
Aber da Pydoc vermutlich HTML 4 generiert müsstest du das mit dem Encoding eher so lösen (statt den HTML-Code als XHTML ausgeben zu wollen):

Code: Alles auswählen

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
XtraNine hat geschrieben:Damit wird mir jetzt die umlaute samt ß richtig angezeigt :) Eine frage hätte ich aber noch dazu. Ist das so I.O. oder sollte man zwecks Kompatibilität noch was hinzufügen? Ich kenne mich nur ein wenig mit HTML aus und fange erst jetzt an mich mit XHTML auseinander zu setzen.
Eigentlich ist es die Sache des Webservers das richtige Encoding im Header mitzuschicken, daher ist es bei mir quasi nie nötig, das Encoding explizit anzugeben.
XtraNine hat geschrieben:Auch wäre es nicht schlecht wenn die Entwickler das in ihren nächsten release berücksichtigen. Vielleicht sollte ich mal wirklich eine Anfrage bei den zuständigen stellen (wenn ich weiß wie man das macht ^^).
Ein Eintrag im Bugtracker, oder gleich einen Patch einschicken, sowas wirkt manchmal Wunder :)
XtraNine hat geschrieben:Hmm, ich denke langfristig werde ich wohl doch nen eigenen Docstring-Parser der dann ein HTML-File generiert schreiben müssen, da mir das Styling von dem durch pydoc erzeugten HTML-File nicht zusagt.
Oder einfach epydoc verwenden, mit der Version 3.0 soll es inzwischen ziemlich gut geworden sein.
XtraNine hat geschrieben:Oder sotte ich mal lieber selber versuchen in pydoc.py das so abzuändern, das im HTML-Tag das xmlns="http://www.w3.org/1999/xhtml" eingefügt wird? :D Hmm, sollte man einfach so in den Libs "Fuschen"?? 0_o Was meint ihr dazu?
Nein, solltest du nicht, weil das XMLNS nicht teil des HTML 4 Standards ist. XMLNS gilt nur für XML Dokumente, welches HTML aber nicht ist. HTML ist SGML.
XtraNine hat geschrieben:BTW: Doxygen (http://de.wikipedia.org/wiki/Doxygen) scheint aber auch probs mit umlauten zu haben. Die generierten HTML-Files sind auch ein wenig...naja...Kann das einer bestätigen?
Möglich. Aber wer braucht schon Doxygen, wenn es epydoc gibt ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

XtraNine hat geschrieben:Aber woran liegt das den nun das ich erst die Datei einmal öffnen muss dan Speichern, damit mir die umlaute angezeigt werden?
Das liegt daran, dass die Datei vorher in einem anderen Encoding gespeichert ist und du sie durch das öffnen und speichern in UTF-8 verwandelst.

Aber wie gesagt, deine Lösung ist ein Hack, der eigentlich das Problem nur zufällig (wenn überhaupt) löst.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

OK danke, ich lade mir mal epydoc runter und teste das mal. Aber vorher probiere ich im meta das encoding zu setzen. Vielleicht klappt das ja auch wenn ich das direkt im pydoc.py reinsetze, dann kann ich beim bugtracker das ja mal als Vorschlag schicken :D

Danke euch für eure Hilfe :) Ich melde mich später nochmal.

lg
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

XtraNine hat geschrieben:OK danke, ich lade mir mal epydoc runter und teste das mal. Aber vorher probiere ich im meta das encoding zu setzen. Vielleicht klappt das ja auch wenn ich das direkt im pydoc.py reinsetze, dann kann ich beim bugtracker das ja mal als Vorschlag schicken :D
Problem ist, dass man das Encoding nicht "einfach so" auf ISO-8859-1 oder ISO-8859-15 setzen kann, weil es ja noch sein kann, dass das Programm in ISO-8859-2 gespeichert sein kann oder in UTF-8 oder in.. whatever. Da müsste man wohl erstmal das ggf. vorhandene Emacs-Cookie auslesen (# -*- coding -*-) und danach erst entscheiden welches Encoding die HTML-Datei haben soll.

Irgendwie finde ich das nun recht interessant, mal gucken wie pydoc implementiert ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Danke Leute ihr seit Genial!! Ich hab epydoc jetzt installiert und ausprobiert! Einfach Genial! Umlaute, etc werden richtig übernommen und das Styling ist auch einfach spitze!

Da hab ich auch ne kurze frage, wie gebe ich für eine Variable einen Docstring an? Sehe gerad das sowas auch geht, da mir bei description für eine Varibale none angezeigt wird. Wuste ich bis her nicht. Bin davon ausgegangen das man nur Header, Klassen, Methoden und Funktionen mit docstrings versehen kann.

LG und nochmals vielen dank :)

EDIT:
Leonidas hat geschrieben:
XtraNine hat geschrieben:OK danke, ich lade mir mal epydoc runter und teste das mal. Aber vorher probiere ich im meta das encoding zu setzen. Vielleicht klappt das ja auch wenn ich das direkt im pydoc.py reinsetze, dann kann ich beim bugtracker das ja mal als Vorschlag schicken :D
Problem ist, dass man das Encoding nicht "einfach so" auf ISO-8859-1 oder ISO-8859-15 setzen kann, weil es ja noch sein kann, dass das Programm in ISO-8859-2 gespeichert sein kann oder in UTF-8 oder in.. whatever. Da müsste man wohl erstmal das ggf. vorhandene Emacs-Cookie auslesen (# -*- coding -*-) und danach erst entscheiden welches Encoding die HTML-Datei haben soll.

Irgendwie finde ich das nun recht interessant, mal gucken wie pydoc implementiert ist.
Ist schon komisch, hab mich noch par Minuten rangesetzt aber es ging irgendwie nicht auch nicht mit den meta-tag. Liegt vielleicht daran wie die datei gespeichert wird, wie du schon meintest.

EDIT2: Entschuldigt meine Euphorie aber epydoc ist der pure Wahnsinn!! :) Der zeigt sogar den source code an und bietet ne collaps funktion von Classen/Methoden :shock:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

XtraNine hat geschrieben:Da hab ich auch ne kurze frage, wie gebe ich für eine Variable einen Docstring an? Sehe gerad das sowas auch geht, da mir bei description für eine Varibale none angezeigt wird. Wuste ich bis her nicht. Bin davon ausgegangen das man nur Header, Klassen, Methoden und Funktionen mit docstrings versehen kann.
Stimmt: Variablen (d.h. 'Namen') haben in der Regel keine Docstrings. Du kannst allerdings versuchen über die Variable einen Kommentar zu schrieben, vielleicht übernimmt Epydoc ja diesen Text mit in die Dokumentation (Wild guess).

Naja, noch zu den Docstrings die Variablen haben oder nicht haben:

Code: Alles auswählen

In [13]:text = 'abc'
In [14]: print text.__doc__
str(object) -> string

Return a nice string representation of the object.
If the argument is a string, the return value is the same object.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

XtraNine hat geschrieben:wie gebe ich für eine Variable einen Docstring an?
Hi XtraNine!

http://epydoc.sourceforge.net/whatsnew.html

Code: Alles auswählen

>>> #: docstring for x
... x = 22
>>> x = 22 #: docstring for x
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Leonidas hat geschrieben:Problem ist, dass man das Encoding nicht "einfach so" auf ISO-8859-1 oder ISO-8859-15 setzen kann, weil es ja noch sein kann, dass das Programm in ISO-8859-2 gespeichert sein kann oder in UTF-8 oder in.. whatever. Da müsste man wohl erstmal das ggf. vorhandene Emacs-Cookie auslesen (# -*- coding -*-) und danach erst entscheiden welches Encoding die HTML-Datei haben soll.
Oder man dekodiert entsprechend dem Coding-Cookie und schreibt dann grundsätzlich UTF-8 raus. Das macht es auch einfacher Docstrings aus verschiedenen Dateien in verschiedenen Kodierungen auf einer HTML-Seite auszugeben. Zum Beispiel eine Übersichtsseite über alle Module in einem Package.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

@gerold:
Danke, Super das funktioniert :)

Ich habe glaube ich gerade einen Bug (?) entdeckt in epydoc.

Wenn ich z.B. folgenden Code habe...:

Code: Alles auswählen

a = 2
b = 4
c = a*b
Dan steht bei Variables Details unter Value zur variable c eine 8 anstatt a*b. :? Warum ist das so und kann man das abstellen? Auf die schnelle habe ich da nichts gefunden.
Antworten