ubuntuusers.de

Font Rendering in TCL/TK

Status: Gelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

roland_s

Anmeldungsdatum:
16. Juli 2012

Beiträge: 5

Ziel: Einfaches Tool zur Transliteration von Umschrift in Devanagari als TCL/TK Applikation.

Problem: Das Font-Rendering funktioniert nicht.

Erläuterung/eigene Erklärung: In Devanagari wird die auf dem Bildschirm dargestellte Glyphe meist aus mehreren Teilglyphen erstellt. Die Regeln, wie dies geschieht, werden im Font codiert. Der Font-Renderer des Systems liest diese Regeln und stellt die Glyphe aus den einzelnen Teilglyphen zusammen. Die Teilglyphen sind als Unicode-Codepoints hinterlegt und müssen nur in der richtigen Reihenfolge angegeben werden.

Im Browser (Firefox) funktioniert das einwandfrei, wenn ich mit Javascript die Unicodezeichen angebe. Bei TCL funktioniert es nicht. Es kann also doch nur am System Font Renderer von Ubuntu-Linux liegen, denn der ist für das Fontrendering in TCL verantwortlich. Gebe ich die Unicodepoints in der TCL-Shell oder der wish ein, funktioniert das ebenfalls nicht.

Frage(n): Ist meine Schlußfolgerung richtig? Wenn ja, gibt es eine Möglichkeit, einen anderen Font Renderer zu verwenden? Wenn nein, gibt es eine andere Lösung für das Problem?

Viele Grüße, roland s

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Servus,

meine erste Idee wäre, dass dein Tk vielleicht ohne Xft-Unterstützung kompiliert wurde.

Und lass’ uns mal ein Beispiel zum Ausprobieren posten. Von Devanagari habe ich absolut keine Ahnung, aber ich vermute mal, dass das Prinzip durch Unicode überall gleich und daher auch auf’s Tibetische übertragbar ist. Here we go:

#!/usr/bin/env tclsh

package require Tk

label .l1 -text "Jetzt wird’s ernst: ཡག་པོ་" -padx 20 -pady 20 -font {-size 48}
grid .l1 -row 0

(Das „པོ“ hinten ist so ein zusammengesetztes Zeichen.)

Das habe ich einfach als UTF-8-Datei hier liegen. Das korrekte Ergebnis beim Ausführen siehst du im Screenshot im Anhang.

Vielleicht funktioniert das bei dir nicht, weil man spezielle Fonts für’s Tibetische braucht. Und natürlich bin ich hier nicht auf Ubuntu sondern Arch Linux. Aber was ich demonstrieren möchte: Es ist machbar. Da Tcl/Tk ja schon ein bisschen älter ist, war ich persönlich mir da gar nicht so sicher und musste es erstmal „beweisen“.

Vorschlag als ersten Schritt: Eliminiere alle Störquellen. Mach’ so ein einfaches Beispiel mit Devanagari. Wenn das funktioniert, dann liegt der Fehler vermutlich nicht bei Tcl/Tk. Wenn’s aber nicht geht, dann müssen wir schauen, was mit deinem Setup los ist.

Poste vielleicht auch mal einen Screenshot, wie dein Fehler aussieht. Mit Tests in irgendwelchen Shells wäre ich vorsichtig, weil da immer noch das Terminal mit reinspielt. Hier an meinem XTerm sehe ich meine Zeichen auch nicht. Wohl aber im Programm, wenn es läuft.

Bilder

roland_s

(Themenstarter)

Anmeldungsdatum:
16. Juli 2012

Beiträge: 5

Hallo Vain!

Danke, dass Du Dich so schnell gemeldet hast. Sieht gut aus, das Tibetische. Ob das mit dem Devanagari-Rendering vergleichbar ist weiß ich nicht. Vom Tibetischen habe ich wiederum keine Ahnung. Aber ich denke, es ist auch ein Rendering nötig. Als Bilddatei habe ich Deine Vorlage mit der falsch gerenderten Devanagari-Glyphe angehängt. So sähe sie richtig aus: क्रि. Man erhält sie durch Eingabe folgender "Teilglyphen": क + ् + र + ि. (Ich weiß nicht, welchen Browser Du verwendest, aber Firefox zeigt alles richtig an.)

#!/usr/bin/wish
set s "\u0915\u094D\u0930\u093F"
label .l1 -text "Jetzt wird’s ernst: $s" -padx 20 -pady 20 -font {-size 48}
grid .l1 -row 0

Dein Hinweis zum tauglichen Font ist klar. Es gibt einige Unicodetaugliche Devanagari-TTF-Schriften. Unter den von Ubuntu vorinstallierten Schriften ist z. B. Lohit Hindi geeignet. Ich habe auch einige andere durchprobiert, aber das Ergebnis ist immer dasselbe. An der Schrift liegt es also nicht.

Was Xft-Unterstützung bedeutet, weiß ich nicht. Mit den Interna eines Linuxsystems kenne ich mich nicht wirklich aus. Ich habe TCL/TK 8.5 aus den Ubuntuquellen über Synaptic installiert.

Viele Grüße, roland

Bilder

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Hmm, verstehe. Klappt bei mir auch nicht. Im Browser (luakit) ist alles in Ordnung.

Ich habe jetzt auch mit Tibetisch noch etwas experimentiert und bekomme da teilweise auch Probleme. Die Schrift scheint aber auch nicht so kompliziert zu sein, deswegen stieß ich nicht sofort auf Schwierigkeiten. Zum Beispiel ist dein ि das letzte Zeichen in der Kette, erscheint aber ganz vorne.

Vielleicht hat Lysander als Unicode-besser-Kennender noch eine Idee dazu. Ansonsten ist das wohl eine gute Gelegenheit, mal etwas mehr über Unicode zu lernen. Bis jetzt kann ich da keine qualifizierte Aussage dazu machen – wie so oft scheint es nicht so einfach zu sein, wie es auf den ersten Blick wirkt. ☺

roland_s

(Themenstarter)

Anmeldungsdatum:
16. Juli 2012

Beiträge: 5

Angeregt durch Deinen xft-Hinweis habe ich ein wenig recherchiert. Es gibt ein Paket "libxft2" und darin eine "libxrender1" library:

http://packages.ubuntu.com/precise/libxft2

Beides ist bei mir laut synaptic installiert.

Dann habe ich diesen Post von 2009 gefunden http://ubuntuforums.org/showthread.php?t=1160630

Vielleicht muß man die TCL-Installation unter die Lupe nehmen?

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

roland s schrieb:

Vielleicht muß man die TCL-Installation unter die Lupe nehmen?

Ich denke eher, dass es an Tk liegt. Es klappt nämlich auch von Python aus nicht, wenn man Tk verwendet. Das ergibt genau dasselbe Ergebnis:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/usr/bin/env python2.7

from Tkinter import *

root = Tk()

w = Label(root, text=u'\u0915\u094d\u0930\u093f')
w.pack()

root.mainloop()

Aber mit Gtk als GUI-Bibliothek geht es:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/usr/bin/env python2.7

import pygtk
pygtk.require('2.0')
import gtk

window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("delete_event", gtk.main_quit)
window.connect("destroy", gtk.main_quit)
window.set_border_width(10)
label = gtk.Label(u'\u0915\u094d\u0930\u093f')
window.add(label)
window.show_all()

gtk.main()

Ich bin über das hier gestolpert:

http://www2.tcl.tk/3158

Das letzte Update der Seite ist von 2011 und es geht um Windows. Ich befürchte fast, Tk ist zumindest unter Linux nicht wirklich fit für diese komplexen Schriften.

roland_s

(Themenstarter)

Anmeldungsdatum:
16. Juli 2012

Beiträge: 5

Ich befürchte fast, Tk ist zumindest unter Linux nicht wirklich fit für diese komplexen Schriften.

Hm, das sehe ich auch so. Gibt es denn eine Möglichkeit, GTK+ mit TCL zu verwenden? Ich vermute mal nicht. Bisher habe ich nur Webseiten oder Browseranwendungen mit Javascript und PHP geschrieben. Da war der Browser mein GUI. ☺ In TCL/TK hatte ich mich jetzt gerade neu eingearbeitet, weil es mir recht einfach erschien und eben plattformunabhängig ist. Wie ich sehe, verwendest Du Python für GTK+. Kannst Du Python empfehlen?

Zunächst aber vielen Dank für Deine Hilfe! Das Problem ist zwar (mit TK) nicht lösbar, aber identifiziert.

Gruß, Roland

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

roland s schrieb:

Gibt es denn eine Möglichkeit, GTK+ mit TCL zu verwenden?

Weiß ich nicht so genau. Das beste, was ich finden konnte, ist wohl das:

http://www.gnocl.org/

Scheint aber auch keine reine Gtk-Anbindung zu sein, sondern hat auch GNOME-Abhängigkeiten mit an Board.

Wie ich sehe, verwendest Du Python für GTK+. Kannst Du Python empfehlen?

Python hab’ ich eigentlich nur genommen, weil ich wusste, dass man damit auch sehr leicht Tk ansprechen kann – wollte sehen, ob das Problem an Tcl oder Tk liegt. Aber unabhängig davon ist Python schon eine vernünftige Wahl. Wenn du die Möglichkeit dazu hast, dann ist es IMHO auf jeden Fall auch sinnvoller als Tcl/Tk, was mir schon stark so verkommt, als würde das heute kaum ein Mensch mehr verwenden. In der Folge ist es nicht mehr gut gepflegt. 😐 Ich habe Tk nur noch für genau zwei Programme installiert: TkSol (Solitär) und gitk (grafischer Browser für Git-Repositories).

Die deutschen Python-Freaks sitzen übrigens dort drüben – hier ist nur ein kleiner Teil von ihnen vertreten:

http://www.python-forum.de/

roland_s

(Themenstarter)

Anmeldungsdatum:
16. Juli 2012

Beiträge: 5

Ok. Ich werde mir das alles noch mal durch den Kopf gehen lassen. Ein Test mit Java und Swing war übrigens auch erfolgreich. Ich schließe das Thema jetzt hier ab.

Danke für Deine Hilfe und Tipps!

Viele Grüße, Roland

Antworten |