Στις 16-05-2007, ημέρα Τετ, και ώρα 00:29 +0300, ο/η Αλέξανδρος Διαμαντίδης έγραψε:
- Simos Xenitellis [2007-05-09 12:38]:
Πράγματι, αν δει κανείς το αρχείο http://gitweb.freedesktop.org/?p=xorg/lib/libX11.git;a=blob_plain;f=nls/en_U... υπάρχουν ακολουθίες για τη γραφή χαρακτήρων που είναι ανεξάρτητοι από γλώσσες. (στο παραπάνω σύνδεσμο πρέπει να αλλάξετε την κωδικοποίηση του Firefox σε Προβολή/Κωδικοποίηση Χαρακτήρων/Unicode (UTF-8).
Κάτι που θυμήθηκα σχετικά με το παραπάνω: εδώ και κάποια χρόνια (από το XFree86 4.3 νομίζω) δε χρειάζεται η προτελευταία στήλη... Για παράδειγμα, αντί για:
<dead_acute> <Greek_ALPHA> : "Ά" U0386
αρκεί:
<dead_acute> <Greek_ALPHA> : U0386
Το string μέσα στα εισαγωγικά, που εξαρτάται από το τρέχον locale, παράγεται αυτόματα από την Xlib.
Ack. Θα το διατηρήσω όμως μιας και δεν πειράζει, διότι το κάνει πιο ευανάγνωστο, και επιτρέπει αναζητήσεις.
Όπως καταλαβαίνω, από το αρχείο http://gitweb.freedesktop.org/?p=xorg/lib/libX11.git;a=blob_plain;f=nls/el_G... χρειάζεται να πάρω μόνο το κομμάτι "Part 2", να αλλάξω το στυλ σε αυτό που έχει ήδη το en_US.UTF-8, και να το προσθέσω το en_US.UTF-8. Είναι έτσι;
Ναι, σωστά.
Κοιτώντας το παραπάνω αρχείο βλέπω ότι υπάρχει και Part 3, XCOMM Part 3 XCOMM XCOMM ISO 8859-7 (Greek) multi-key and dead key definitions extracted XCOMM and converted from the iso8859-7/Compose file. Το κομμάτι αυτό περιλαμβάνει το μονοτονικό, ενώ το Part 2 είναι για το πολυτονικό.
Έκανα μια σύγκριση μεταξύ των http://gitweb.freedesktop.org/?p=xorg/lib/libX11.git;a=blob_plain;f=nls/el_G... και http://gitweb.freedesktop.org/?p=xorg/lib/libX11.git;a=blob_plain;f=nls/en_U... όπου παρατηρώ ότι για 1. το (σωστό) el_GR.UTF-8/Compose.pre υπάρχουν 1475 γραμμές για ελληνικούς χαρακτήρες 2. το πιο παλιό en_US.UTF-8/Compose.pre υπάρχουν 2008 γραμμές για ελληνικούς χαρακτήρες
Ωστόσο, για το en_US.UTF-8/Compose.pre, από τις 2008 γραμμές με ελληνικούς χαρακτήρες, οι 365 είναι γραμμές με "combining_xxxxxx", όπως <combining_acute> <Greek_ALPHA> : "Ά" U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS <combining_acute> <Greek_EPSILON> : "Έ" U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS <combining_acute> <Greek_ETA> : "Ή" U0389 # GREEK CAPITAL LETTER ETA WITH TONOS
Όπως είναι τώρα, θεωρώ το κομμάτι για τα ελληνικά ως blob (αχταρμάς;) το οποίο δεν πειράζω. Έχεις φτιάξει ένα πρόγραμμα εντολών σε Perl που να δημιουργεί αυτό το blob, http://hal.csd.auth.gr/~vvas/i18n/xkb/polytonic-compose.pl Το πρόγραμμα εντολών polytonic-compose.pl παράγει 1028 γραμμές ενώ upstream υπάρχουν τουλάχιστον 1400 τέτοιες γραμμές.
Μεταγλώττισα το GTK+ με το en_US.UTF-8/Compose.pre ως πηγή και είχα σημαντικό πρόβλημα στη γραφή ελληνικών (πολυτονικό). Μεταγλώττισα το GTK+ με το el_GR.UTF-8/Compose.pre ως πηγή και το αποτέλεσμα ήταν πιο θετικό. Συγκεκριμένα, από το /etc/X11/xkb/symbols/gr:
key <AD11> { [ dead_tilde, dead_diaeresis, dead_macron ] }; key <AD12> { [ dead_iota, VoidSymbol, dead_breve ] };
key <AC10> { [ dead_acute, dead_horn ] }; key <AC11> { [ dead_grave, dead_ogonek ] };
το αποτέλεσμα είναι dead_tilde, ᾶῧῗ dead_diaeresis, ϊῧῗ dead_macron, ΔΕΝ ΔΟΥΛΕΥΕΙ
dead_iota, ΔΕΝ ΔΟΥΛΕΥΕΙ ΠΑΝΤΑ, ᾃᾁ:ναι, ᾼ: όχι dead_breve, ᾰῠῐ
dead_acute, άἀὰἁἃἄ dead_horn, άἀὰἁἃἄ dead_grave, άἀὰἁἃἄ dead_ogonek, άἀὰἁἃἄ
Δεν μπορώ να καταλάβω γιατί δεν δουλεύουν τα dead_macron και dead_iota, αν και υπάρχουν <dead_macron> <Greek_alpha> : "ᾱ" U1fb1 # GREEK SMALL LETTER ALPHA WITH MACRON <dead_iota> <Greek_alpha> : "ᾳ" U1fb3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
Ακόμα, κατά το νέο αρχείο Compose, τα π.χ. <dead_grave> <U0313> <Greek_alpha> : "ἂ" U1f02 θα αντικατασταθούν με <dead_grave> <U10000313> <Greek_alpha> : "ἂ" U1f02 όπως έχει αλλάξει ήδη από στο en_UTF.UTF-8.
Αυτή η αλλαγή δεν είναι σωστή. Τα Unicode keysyms αποτελούνται από το γράμμα "U" ακολουθούμενο από τον κωδικό Unicode του χαρακτήρα, και είναι ίσα με 0x1000000 + τον κωδικό Unicode. Δηλαδή, ο χαρακτήρας U+0313 έχει keysym "U0313", που είναι ίσο με 0x10000313. To U10000313 δεν είναι έγκυρο keysym - δες ένα παράδειγμα:
$ xmodmap -e 'keycode 96 = U0313'
Το keycode 96 είναι το πλήκτρο F12. Δίνοντας την παραπάνω εντολή, το F12 αρχίζει να βγάζει το χαρακτήρα U+0313, COMBINING COMMA ABOVE. Αντίθετα...
$ xmodmap -e 'keycode 96 = U10000313' xmodmap: commandline:1: bad keysym name 'U10000313' in keysym list xmodmap: 1 error encountered, aborting.
Η αλλαγή που έχει γίνει στο en_US.UTF-8 πρέπει να αντιστραφεί, εκτός κι αν έχει αλλάξει και κάτι άλλο στην Xlib που δεν το ξέρω. Αλλά δε νομίζω...
Μμμμμ... Τώρα έχει αλλάξει το en_US.UTF-8/Compose.pre με πρόσθεση 0x1000000 παντού. Είναι πιθανό το όλο οικοδόμημα γραφής γλωσσών συντηρείται λόγω του GTK+ IM που αγνοεί το Compore.pre. Είναι παράξενο που δεν μιλάνε οι χρήστες KDE που μιλάνε γλώσσες άλλες από αγγλικά και έχουν ρυθμισμένο το en_US.UTF-8/Compose.pre. Φαίνεται να το έχουμε χαλάσει ;-0
Εδώ πρέπει να πω ότι το όνομα του "en_US.UTF-8" δεν είναι κατάλληλο πια μιας και το χρησιμοποιούν (και μπορούν να το χρησιμοποιήσουν) οι υπόλοιπες γλώσσες.
Ναι, λογικό. Αλλά ποιο θα ήταν ένα καλό όνομα; Ίσως απλώς "UTF-8"; Αυτά θα έπρεπε να τα συζητάμε στη λίστα xorg, όχι εδώ. Μήπως έχει συζητηθεί ήδη;
Δεν γνωρίζω να έχει συζητηθεί. Νομίζω ότι είναι απλώς θέμα να κάνει κάποιος μια αναφορά σφάλματος (bug report) με το patch.
Ένα πράγμα που δεν γνωρίζω είναι το αρχείο στο οποίο θα καθορίσουμε ότι τα ελληνικά compose sequences βρίσκονται πια στο "en_US.UTF-8" αντί του "el_GR.UTF-8".
Είναι το nls/compose.dir.pre (από το οποίο παράγεται το X11/locale/compose.dir που εγκαθίσταται τελικά), όπου αναφέρεται ποιο Compose χρησιμοποιείται ανάλογα με το locale. Τώρα λέει:
iso8859-7/Compose: el_GR.ISO8859-7 ... el_GR.UTF-8/Compose: el_GR.UTF-8
Σε ποιο σημείο όμως πρέπει να αλλάξουμε upstream για να διορθώσουμε την παραπάνω ρύθμιση; Κοιτώντας στον πηγαίο κώδικα του Xorg δεν εντόπισα το σημείο. Πρέπει να υπάρχει κάπου upstream αντί να το ρυθμίζουν κάθε φορά οι διανομές.
Φιλικά, Σίμος
trans-el@lists.fedoraproject.org