[I18NGR] qt-x11-opensource-4.1.3 BUG?
Leonidas Vomvoridis
vomvoridis at yahoo.gr
Sat Jun 10 01:15:49 EEST 2006
Με συγχωρείτε αν το προηγούμενο μήνυμα φάνηκε λίγο... κουφό, αλλά απ'ότι φαίνεται δεν έφτασε ποτέ το προηγούμενο...
-------- Original Message --------
From: - Fri Jun 09 15:36:00 2006
X-Mozilla-Status: 0003
X-Mozilla-Status2: 00800000
Message-ID: <4489874D.7080501 at yahoo.gr>
Date: Fri, 09 Jun 2006 15:35:57 +0100
From: Leonidas Vomvoridis <vomvoridis at yahoo.gr>
User-Agent: Debian Thunderbird 1.0.2 (X11/20060423)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: i18ngr.hellug.gr
Subject: qt-x11-opensource-4.1.3 BUG?
References: <4488F458.3090307 at yahoo.gr>
In-Reply-To: <4488F458.3090307 at yahoo.gr>
Content-Type: text/plain; charset=ISO-8859-7
Content-Transfer-Encoding: base64
Καλησπέρα, πριν από λίγο εγκατέστησα το qt-x11-opensource-4.1.3 και
βρήκα ένα bug στο linguist
Συγκεκριμένα, όταν η εγγλέζικη φράση τελειώνει σε '?', δεν επιτρέπει την
ελληνική να τελειώνει σε ';'
Έχει ξανασυναντήσει κανείς αυτό το πρόβλημα και πώς το αντιμετώπισε;
Παρ'όλα αυτά, όπως φαίνεται στη γραμμή 134 του
tools/linguist/linguist/trwindow.cpp η περίπτωση του ελληνικού
ερωτηματικού λαμβάνεται υπόψιν, αλλά όχι και του semicolon. Έτσι,
χρησιμοποιώ το ακόλουθο patch, μόνο που πρέπει οι ελληνικές ερωτήσεις να
περιέχουν τουλάχιστον ένα ελληνικό γράμμα. Χωρίς το if, υπάρχει η
πιθανότητα το εγγλέζικο string να τελειώνει σε semicolon, που δεν
εμπίπτει με τίποτα στην κατηγορία ερωτηματικά / θαυμαστικά / interrobang.
---
qt-x11-opensource-src-4.1.3/tools/linguist/linguist/trwindow.orig.cpp
2006-05-14 11:47:05.000000000 +0100
+++
qt-x11-opensource-src-4.1.3/tools/linguist/linguist/trwindow.cpp
2006-06-09 15:08:04.000000000 +0100
@@ -109,6 +109,16 @@
enum Ending {End_None, End_FullStop, End_Interrobang, End_Colon,
End_Ellipsis};
+int is_greek(QString str)
+{
+ int i, c, len = str.length();
+ for (i = 0; i < len; i++) {
+ c = str.left(len - 1)[i].unicode();
+ if(c > 0x036f && c < 0x03d0)
+ return 1;
+ return 0;
+}
+
static Ending ending(QString str)
{
str = str.simplified();
@@ -139,6 +149,9 @@
case 0x2049: // exclamation question mark
case 0x2762: // heavy exclamation mark ornament
return End_Interrobang;
+ case 0x003b: // greek "compatibility" question mark
+ if(is_greek(str))
+ return End_Interrobang;
case 0x003a: // colon
return End_Colon;
case 0x2026: // horizontal ellipsis
Μήπως θα έπρεπε όμως στις utf-8 υλοποιήσεις (xkb, kbd, console-tools και
libiconv) να χρησιμοποιούνται τα ελληνικά σημεία στίξης (U+037e και
U+0378) και όχι τα ascii 3b και d7 που μας... κληροδότησαν τα 8μπιτα
codepage; Οι χαρακτήρες αυτοί ρεντάρονται ήδη σωστά σε debian sarge και
ubuntu breezy badger, καθώς και στο εμπορικώς επιτυχές (δυς)λειτουργικό
σύστημα (δεν ξέρω για mac, bsd ή άλλες διανομές του linux).
Το unicode βέβαια (κακώς κατά την άποψή μου) ορίζει ως "canonical
equivalent" και "preferred character", τα 3d και b7 - η σημασιολογία
τους (όπως φαίνεται στο παράδειγμα του qt linguist) είναι διαφορετική.
Όπως το ελληνικό Άλφα κεφαλαίο έχει διαφορετική σημασιολογία από το
αγγλικό A, παρόλο που ρεντάρονται με ίδιο (ή σχεδόν ίδιο) glyph, έχουν
άλλο codepoint, για να τονίσει αυτή τη διαφορά (πχ για το LC_COLLATE).
Και για τα σημεία στίξης μας που δεν έχουν την ίδια σημασιολογία με των
εγγλέζων (αντίθετα με την τελεία, το κόμμα και το θαυμαστικό που έχουν
την ίδια σημασιολογία), έχουν φτιαχτεί τα U+037e και U+0378, που θα
έπρεπε, κατά την άποψή μου, να τα χρησιμοποιούμε.
Βέβαια, θα μπερδευόμαστε όταν γράφουμε πχ:
# for f in μάικροσοφτ*; do rm -rf $f; ln -s /dev/null $f; done
αν και το ελληνικό ερωτηματικό με το semicolon είναι σε αντίθετες άκρες
του πληκτρολογίου, όχι όπως τα γράμματα που έχουνε ίδιο glyph και είναι
και στις ίδιες θέσεις.
Ο λόγος που αναφέρεται εδώ:
http://ptolemy.tlg.uci.edu/~opoudjis/unicode/punctuation.html το _γιατί_
χρησιμοποιείται το semicolon σαν ελληνικό ερωτηματικό, είναι ο εξής:
" The Greek mark has ended up identical in shape to the Latin semicolon;
and Unicode has taken the inevitable decision that, since they look
identical, they are identical, and the semantics can take care of itself
("If the text is Greek, this is an interrogative..."): U+37E canonically
decomposes to U+003B Semicolon, which means that the two are not
underlyingly differentiated. It's just as well Greek has never attempted
to introduce the Latin semicolon into the language."
Η αιτιολογία του unicode μου φαίνεται παράλογη, διότι καταρχήν δεν
υπάρχει 100% σίγουρος τρόπος να προσδιορίσεις αν ένα string είναι στα
ελληνικά ή όχι, και επισης, γιατί δεν κάνανε το ίδιο και με τα γράμματα
("if the text is Greek, this is a capital Alpha...")
Ο λόγος για τον οποίο "δικαιολογεί" αυτό το συμβιβασμό ο συγγραφέας της
παραπάνω σελίδας, είναι επίσης ανεπαρκής, γιατί το ότι δεν υπάρχει
semicolon στα ελληνικά, δε σημαίνει ότι δεν πρέπει να γίνεται διάκριση.
Το όλο νόημα του unicode είναι να έχεις πολυγλωσσική υποστήριξη, και
συναρτήσεις όπως η ending() που πάτσαρα, κοιτάνε strings σε όλες τις
γλώσσες.
Αν συνεχίσουμε να μη χρησιμοποιούμε τα σωστά ελληνικά σημεία στίξης
(U+037e και U+0378), πάντα θα παρουσιάζονται προβλήματα όχι μόνο με
poedit/qt-linguist κλπ, αλλά συντακτικό έλεγχο, αυτόματη μετάφραση,
λεξικά, και γενικά οποιοδήποτε λογισμικό όπου να παίζει ρόλο η
σημασιολογία των σημείων στίξης.
Θα χαρώ να ακούσω τις απόψεις σας γύρω από το θέμα.
Λεωνίδας Β.
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿa¨h£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû)joÿÿöÿ1¨¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþm§ÿÿ¨¥ÿ&¡¢à
More information about the I18ngr
mailing list