Browser aus Tkinter und re (nur eine dumme Idee)

Du hast eine Idee für ein Projekt?
Antworten
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

Ich hatte eine dumme Idee die aber vieleicht möglich wäre:
Könnte man bzw. wer würde sich die mühe machen aus dem Modul Tkinter (Canvas) und re einen Internet Browser zu schreiben?

Allein alle (X)HTML, CSS Befehle und eine gesamte Javascript Engine einzubauen wäre wahrscheihnlich ungeheure Programmierarbeit, na ja wozu gibt es DLL's :D
[url=http://www.pc-tutos.de/Tutorials/Tutorials.htm]Wie verändert man Spiele oder Computer nach Wunsch? www.PC-Tutos.de[/url]
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Natürlich kann man das. Das will nur sicher niemand für dich übernehmen.
Das Leben ist wie ein Tennisball.
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

Das will nur sicher niemand für dich übernehmen.
Ich habe nicht gesagt das das jemand machen soll!
[url=http://www.pc-tutos.de/Tutorials/Tutorials.htm]Wie verändert man Spiele oder Computer nach Wunsch? www.PC-Tutos.de[/url]
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Man könnte die Webkit-Engine portieren. Ich glaube aber, dass es den meisten Leuten reichter erstmal Webkit bei den beiden "Großen" GTK und Qt zu haben.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Und warum sollte man das wollen?

Sofern du bei RegExp bleibst, und keinen echten Parser benutzt/implementierst, wuerde ich aber auch die Machbarkeit anzweifeln und gerade wenn man sich die Massen, an nicht-standardkonformen Websites anschaut, stellt sich auch die Frage, ob man den Teil selbst uebernehmen will.
krisi12345 hat geschrieben:Allein alle (X)HTML, CSS Befehle und eine gesamte Javascript Engine einzubauen wäre wahrscheihnlich ungeheure Programmierarbeit, na ja wozu gibt es DLL's :D
Ich hoffe du meinst mit DLLs Module ?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

krisi12345 hat geschrieben:Könnte man bzw. wer würde sich die mühe machen aus dem Modul Tkinter (Canvas) und re einen Internet Browser zu schreiben?
Gibts doch schon, nennt sich Grail und wurde unter anderem von Fred L. Drake (bekannt von der Python-Dokumentation) geschrieben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
stuhlbein
User
Beiträge: 89
Registriert: Freitag 9. Januar 2009, 16:08

Leonidas hat geschrieben:
krisi12345 hat geschrieben:Könnte man bzw. wer würde sich die mühe machen aus dem Modul Tkinter (Canvas) und re einen Internet Browser zu schreiben?
Gibts doch schon, nennt sich Grail und wurde unter anderem von Fred L. Drake (bekannt von der Python-Dokumentation) geschrieben.
... Welcher aber mit modernen Pythonversionen (2.4, 2.5, 2.6, 3.*) nicht ausführbar ist ;)

@OP: Ich würde einen in Python geschriebenen webbrowser Interessant finden, vorallem da man es sicher durch skripte erweitern kann - gute Code-basis vorrausgesetzt. Aber Tk, geschweige denn reguläre ausdrücke würd ich dafür nicht verwenden, sondern eher Webkit.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Natürlich kann man prinzipiell einen XHTML-Parser und -Renderer bauen. Das wäre noch nicht einmal sonderlich schwer, wenn man nicht die vielen in der Praxis vorkommenden Abweichungen und "Quirks" zur Kompatibilität mit Fehlern diverser anderer Browser (sprich IE) berücksichtigt, sondern exakt den Standard implementiert. Lässt man auch noch CSS weg, ist das Projekt übersichtlich (will sagen, habe ich schon mal vor einigen Jahren für ein Hilfesystem in Java gemacht).

Stefan
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

Man könnte ja eine Datei/Modul schreiben das sich um die GUI Basis und um das downloden und zerlegen der Seite kümmert. Die HTML/CSS Befehle werden in Strings unterteilt, weitere Dateien/Module in der jede Funktion ein HTML/CSS Befehl ist könnten dann die Strings ausernander nehmen und GUI Befehle ausgeben.

Der Vorteil dieses Vorgehens wäre das man/Welt immer eine HTML/CSS Funktion nach der anderen in die Module einbaut.
[url=http://www.pc-tutos.de/Tutorials/Tutorials.htm]Wie verändert man Spiele oder Computer nach Wunsch? www.PC-Tutos.de[/url]
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

"Befehle in Strings unterteilen" klingt falsch. Lassen wir CSS außer Acht, kannst du XHTML mit einem XML-Parser in einen DOM verwandeln. Aus

Code: Alles auswählen

<body>
    <h1>Überschrift</h1>
    <p>Absatz mit <strong>etwas Fettschrift</strong>.</p>
</body>
wird dann

Code: Alles auswählen

Body(
    H1(Text("Überschrift")),
    P(Text("Absatz mit "), Strong(Text("etwas Fettschrift")), Text(".")))
Mein Ziel ist, dass jedes Objekt seine eigene Größe bestimmen kann und weiß, wie seine Kinder angeordnet werden müssen. HTML kennt zwei Arten von Elementen: Block-Elemente und Inline-Elemente. Erstere werden bei vorgegebener Breite einfach untereinander dargestellt und sind so hoch, wie sie eben sein müssen. Letztere sind in Block-Elementen enthalten und passen sich in ihrer Höhe an die Zeilenhöhe an, sind so breit wie sie es eben sein müssen und brechen außerdem in der durch das Block-Element vorgegebenen Breite um. H1 und P sind Block-Elemente, Text und Strong Inline-Elemente und Body ein Container für Block-Elemente.

Damit ich den Umbruch abbilden kann, definiere ich noch Line-Elemente. Angenommen, die vorgegebene Breite wäre so, dass das "etwas", nicht aber das "Fettschrift" in die erste Zeile passen würde. Dann muss der Umbruch folgende Objekte erzeugen:

Code: Alles auswählen

Lines(
    Line(Text("Absatz mit "), Strong(Text("etwas"))),
    Line(Strong(Text("Fettschrift")), Text(".")))
Möglicherweise wäre es einfacher, jedes Wort als Objekt zu repräsentieren und es nur noch wissen zu lassen, ob hinter ihm ein Umbruch möglich ist oder nicht. In HTML (außer bei PRE) werden ja beliebig viele Leerzeichen und Leerzeilen zu nur einem Leerzeichen zusammengefasst.

Wenn ich eine Funktion "text_width(font, text)" habe, mit der ich unter Angabe eines Fonts die Breite eines Textes in Pixeln berechnen kann, dann kann ich damit aus der ersten direkt aus dem XML abgeleiteten Form die zweite Zeilenform berechnen.

Danach kann ich einen relativ einfachen Layout-Algorithmus auf das Objektmodell loslassen. Ein Text-Elemente definiert seine Höhe und Breite durch die Schrift und den Text. Ein Line-Element und jedes Inline-Element, das selbst wieder Kinder hat wie z.B. Strong, ordnet seine Kinder von links nach rechts nebeneinander an und bestimmt seine Breite also als Summe aller Breiten und seine Höhe als das Maximum der vorgegebenen Höhe oder der Höhen der Kinder. Bei der Position ist noch die Grundlinie zu berücksichtigen. Block-Elemente ordnen ihre Line-Elemente nun untereinander an. Die Breite ist das Maximum aller Breiten und die Höhe die Summe aller Höhen. Und das Body-Container-Element macht das selbe für seine Kinder.

Stefan
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Interessant ist in diesem Zusammenhang vielleicht auch:

http://webkit.org/blog/114/webcore-rend ... he-basics/
Antworten