[Fedora-el-list] Re: [Open-source] Πρόγραμμα εντολών που να μετατρέπει αρχείο
by Simos Xenitellis
2009/7/16 Jennie Petoumenou <epetoumenou(a)gmail.com>:
> Σόρι, αγνοήστε το προηγούμενο, πάτησα αποστολή κατά λάθος.
>
> 2009/7/16 Jennie Petoumenou <epetoumenou(a)gmail.com>
>>
>>
>> 2009/7/16 Simos Xenitellis <simos.lists(a)googlemail.com>
>>>
>>> Κάνω μια γενικότερη περίληψη για το θέμα με το τελικό σίγμα
>>> και όλα τα βήματα που χρειάζεται για να επιλύσουμε το θέμα.
>>>
>>> Στην ελληνική διάταξη στο X.Org (Linux) είχαμε πάντα το πρόβλημα, όταν
>>> το CapsLock
>>> ήταν πατημένο και πατούσαμε «ς», να παίρνουμε «ς» αντί το κεφαλαίο «Σ».
>>> Μπορείτε να το δοκιμάσετε και να επιβεβαιώσετε τώρα·
>>> 1. Πατήστε CapsLock
>>> 2. Γράψτε ελληνικά, π.χ. ΣΔΛΚΦΞΕΟΡΙΞΓ
>>> 3. Πατήστε «ς» και λαμβάνετε «ς» αντί για Σ.
>>>
>>> Η πηγή του προβλήματος είναι στον τρόπο που ο κώδικας του X.Org
>>> αξιολογεί πότε ένας χαρακτήρας
>>> είναι αλφαβητικός, ώστε για να το επιτρέπει να λειτουργεί το CapsLock.
>>> Ως τώρα, το X.Org βλέπει τους χαρακτήρες στη διάταξη, π.χ. το γ και Γ
>>> που είναι στο ίδιο πλήκτρο,
>>> και δοκιμάζει τη μετατροπή κεφαλαίο προς πεζό για «Γ». Αν πράγματι
>>> βγάλει «γ», τότε είναι αλφαβητικός χαρακτήρας
>>> και έχει και σωστή αντιστοιχία πεζού-κεφαλαίου, οπότε ενεργοποιεί τη
>>> λειτουργία CapsLock.
>>>
>>> Το «Σ» παράγει «σ», οπότε το ς/Σ αγνοείται όταν έχουμε πατημένο το
>>> CapsLock και παράγει μόνο «ς».
>>>
>>> Η πηγή του προβλήματος είναι ότι θα ήταν καλύτερο να ελέγχαμε απλά αν
>>> οι χαρακτήρες είναι απλά αλφαβητικοί αντί να επιβεβαιώνουμε ότι με
>>> κάποιο τρόπο ότι η μετατροπή από πεζό σε κεφαλαίο (και ανάποδα).
>>> Όπως είναι τώρα το X.Org δεν έχει ούτως ή άλλως τη δυνατότητα για
>>> σωστή επιβεβαίωση για πεζά/κεφαλαία διότι δεν περιλαμβάνει στις
>>> εξαρτήσεις κάποια βιβλιοθήκη Unicode.
>>>
>>> Έτσι, αρκεί να γράψουμε μια συνάρτηση σε γλώσσα C που να μπορεί να
>>> λέει αν ένας χαρακτήρας Χ είναι αλφαβητικός ή όχι.
>>> Στο πρότυπο Unicode έχουμε μια σειρά από βασικούς χαρακτήρες με κωδικό
>>> από 0-65535, και περιγράφονται στο αρχείο
>>> http://unicode.org/Public/UNIDATA/UnicodeData.txt (είναι αρχείο CSV).
>>> Όπως αναφέρθηκε παραπάνω στη συζήτηση, ένα από τα πεδία του CSV είναι
>>> Ll/Lu (Letter Lower, Letter Upper), οπότε χρειάζεται ένα πρόγραμμα
>>> εντολών που να κάνει «parsing» το CSV και να ελέγχει αν πρόκειται για
>>> Ll ή Lu, και να παράγει ένα πίνακα της μορφής
>>
>> Είχα γράψει στο προηγούμενο μέιλ:
>>>
>>> Σύμφωνα με το Unicode5.1.0 - clarification of lowercase and uppercase, το
>>> τρίτο πεδίο κάθε κειμένου είναι Lu για κεφαλαία, Ll για πεζά, και
>>> διαφορετικό για άλλους χαρακτήρες.
>>> Νομίζω όμως ότι το πιο αξιόπιστο κριτήριο είναι ότι για τους πεζούς
>>> χαρακτήρες το 13ο και το 15ο πεδίο κάθε εγγραφής περιέχει το κεφαλαίο που
>>> αντιστοιχεί στον χαρακτήρα. Αντίστοιχα, για τα κεφαλαία, το 14ο πεδίο
>>> περιέχει το πεζό γράμμα που τους αντιστοιχεί. Μια τέτοια κατάταξη καλύπτει
>>> π.χ. το τελικό σίγμα:
>>> 03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;
>>> 03A3
>>> ενώ δεν καλύπτει π.χ. αυτά:
>>> 1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
>>> 1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
>>
>> Δηλαδή, δεν αρκεί να διαπιστώσει κανείς αν ένας χαρακτήρας είναι π.χ.
>> αλφαβητικός και πεζός, πρέπει να επαληθεύσει και ότι έχει κεφαλαίο που να
>> του αντιστοιχεί. Γιατί π.χ. το ελληνικό θ ως μαθηματικό σύμβολο σε αγγλική
>> διάταξη πληκτρολογίου, δεν διαθέτει αντίστοιχο κεφαλαίο.
>>
>> Είπα να τσεκάρω και το αντίστροφο:
>> Αν ένας έχει συμπληρωμένο το 13ο/15ο πεδίο, είναι οπωσδήποτε πεζός
>> αλφαβητικός; Η απάντηση είναι όχι. Παράδειγμα:
>> 0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA
>> BELOW;;0399;;0399
>> (Προφανώς, η υπογεγραμμένη δεν μπορεί να γίνει κεφαλαίο).
>>
>> Κάτι τελευταίο:
>> Αν ο χαρακτήρας είναι πεζός αλφαβητικός, το κεφαλαίο του είναι στο 13ο ή
>> 15ο πεδίο;
>> Η απάντηση είναι: στο 13ο.
>> Στο παρακάτω παράδειγμα, το 01C6 (dž) έχει το 01C4 (DŽ) στο 13ο πεδίο, και
>> το 01C5 (Dž) στο 15ο. Άρα, το 13ο πεδίο ορίζει τη συμπεριφορά του capslock
>> (αυτό μας ενδιαφέρει), και το 15ο του shift.
>>>
>>> 01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044
>>> 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
>>> 01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH
>>> CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z
>>> HACEK;;01C4;01C6;01C5
>>> 01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064
>>> 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
>>>
>>> Από τη wikipedia (I know, αξιόπιστη πηγή):
>>> Dž (titlecase form; all-capitals form DŽ, lowercase dž)
>>
>>
>> Συμπερασματικά, εγώ νομίζω ότι οι έλεγχοι στη συνάρτηση πρέπει να είναι ως
>> εξής:
>>
>>>
>>>
>>>
>>> static void
>>> UCSIsAlphabetic( register unsigned codepoint)
>>> {
>>
>> Αντί για αυτό:
>>>
>>> /* Check if character is alphabetic, as in Unicode Data version 5.1.0
>>> */
>>> /* NB: Checks if character is either Ll or Lu (Letter lower/upper).
>>> */
>>
>> /*Check if character is alphabetic, and if its corresponding opposite case
>> character exists */
>> /*If 3rd field is Ll, 13th field must be non-void*/
>> /*If 3rd field is Lu, 14th field must be non-void*/
>> if (character is Ll && field13 != void)
>> return 1;
>> else if (character is Lu && field14 != void)
>>
>> return 1;
>>
>> else
>>
>> return 0;
Έφτιαξα ένα απλό πρόγραμμα που υλοποιεί τα παραπάνω,
http://github.com/simos/extract-alphabetic
και βρίσκει 1935 έγκυρους χαρακτήρες.
Πρέπει να είναι σχετικά εύκολο να δοκιμάσει κάποιος το παραπάνω πρόγραμμα.
Αν υπάρχουν σχόλια για την ορθότητα των αποτελεσμάτων, παρακαλώ σχολιάστε,
ή και συνεχίστε με τα επόμενα βήματα.
Σίμος
>>>
>>> /* Currently using flat array where index corresponds to codepoint
>>> value. */
>>> /* Value is 1 if codepoint is alphabetic, 0 otherwise. */
>>>
>>> static unsigned char const UCSAlphabetic[] = {
>>> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
>>> ...
>>> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
>>> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
>>> };
>>>
>>> if ( UCSAlphabetic[codepoint] == 0 )
>>> return 0;
>>> else
>>> return 1;
>>> }
>>>
>>> Τη συνάρτηση αυτή την προσθέτουμε στο ίδιο αρχείο με
>>> http://cgit.freedesktop.org/xorg/lib/libX11/tree/src/KeyBind.c#n294
>>>
>>> Έχοντας τη συνάρτηση αυτή, τότε είμαστε σε θέση να τροποποιήσουμε τον
>>> κώδικα στο
>>> http://bugs.freedesktop.org/show_bug.cgi?id=22145#c11
>>> ώστε να κοιτάει αν απλά οι χαρακτήρες sym[0], sym[1] (και sym[2],
>>> sym[3]) είναι αλφαβητικοί.
>>>
>>> Σίμος
>>>
>>> 2009/6/13 Simos Xenitellis <simos.lists(a)googlemail.com>:
>>> > 2009/6/13 Savvas Radevic <vicedar(a)gmail.com>:
>>> >> Το UnicodeData.txt είναι και σωστά διαμορφωμένο, δείχνει το αντίστοιχο
>>> >> κεφαλαίο γράμμα δίπλα από κάθε μικρό (και vice versa):
>>> >>
>>> >> 03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
>>> >> 03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
>>> >>
>>> >> 03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
>>> >> 03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
>>> >> 03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
>>> >>
>>> >> Προσέξτε το "03A3;;03A3" στο "FINAL SIGMA" και "SIGMA".
>>> >> Επίσης, τα κεφαλαία το έχουν το αντίστοιχο μικρό στην πρότελευταια
>>> >> τιμή, ενώ
>>> >> τα μικρά έχουν το αντίστοιχο κεφαλαίο
>>> >>
>>> >> Σύμφωνα με αυτό που πρόσθεσε η Jennie ("Lu" και "Ll"), επισύναψα ένα
>>> >> καινούργιο sh/perl script:
>>> >>
>>> >> (Πρόσθεσα τα quotes "" στις τιμές για να φαίνεται η διαφορά)
>>> >> Για κεφαλαία:
>>> >>>
>>> >>> perl -nle 'print if /^.*?;.*?;Lu;/' UnicodeData.txt | perl -pe
>>> >>> 's/(.*?);(.*?);(.*?);.*;(.*?);$/"$1" "$3" "$4"/'
>>> >>>
>>> >>> "03A6" "Lu" "03C6" "GREEK CAPITAL LETTER PHI"
>>> >>> "03A7" "Lu" "03C7" "GREEK CAPITAL LETTER CHI"
>>> >>> "03A8" "Lu" "03C8" "GREEK CAPITAL LETTER PSI"
>>> >>> "03A9" "Lu" "03C9" "GREEK CAPITAL LETTER OMEGA"
>>> >>> "03AA" "Lu" "03CA" "GREEK CAPITAL LETTER IOTA WITH DIALYTIKA"
>>> >>> "03AB" "Lu" "03CB" "GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA"
>>> >>> "03CF" "Lu" "03D7" "GREEK CAPITAL KAI SYMBOL"
>>> >>> "03D2" "Lu" "" "GREEK UPSILON WITH HOOK SYMBOL"
>>> >>> "03D3" "Lu" "" "GREEK UPSILON WITH ACUTE AND HOOK SYMBOL"
>>> >>> "03D4" "Lu" "" "GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL"
>>> >>
>>> >> Για μικρά:
>>> >>>
>>> >>> perl -nle 'print if /^.*?;.*?;Ll;/' UnicodeData.txt | perl -pe
>>> >>> 's/(.*?);(.*?);(.*?);.*;(.*?)$/"$1" "$3" "$4" "$2"/'
>>> >>>
>>> >>> "03DF" "Ll" "03DE" "GREEK SMALL LETTER KOPPA"
>>> >>> "03E1" "Ll" "03E0" "GREEK SMALL LETTER SAMPI"
>>> >>> "03F0" "Ll" "039A" "GREEK KAPPA SYMBOL"
>>> >>> "03F1" "Ll" "03A1" "GREEK RHO SYMBOL"
>>> >>> "03F2" "Ll" "03F9" "GREEK LUNATE SIGMA SYMBOL"
>>> >>> "03F3" "Ll" "" "GREEK LETTER YOT"
>>> >>>
>>> >>> [...]
>>> >>> "1FE2" "Ll" "" "GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA"
>>> >>> "1FE3" "Ll" "" "GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA"
>>> >>> "1FE4" "Ll" "" "GREEK SMALL LETTER RHO WITH PSILI"
>>> >>> "1FE5" "Ll" "1FEC" "GREEK SMALL LETTER RHO WITH DASIA"
>>> >>
>>> >> Τώρα μπορείτε εύκολα να βρείτε το αντίστοιχο κεφαλαίο/μικρό :)
>>> >
>>> > Νομίζω ότι έχουμε μια καλή εξέλιξη.
>>> > Πράγματι, φαίνεται ότι τα LI, Lu, κτλ επιτρέπουν να βρίσκουμε τους
>>> > αλφαβητικούς χαρακτήρες.
>>> >
>>> > Υπήρξε ένα ερώτημα προηγουμένως γιατί τα θέλουμε όλα αυτά.
>>> > Ο λόγος είναι για να διορθώσουμε κάτι στο X.Org για τα ελληνικά (και
>>> > μαζί με αυτό και για όλες τις άλλες γλώσσες).
>>> > Η αναφορά σφάλματος που περιγράφει το ζήτημα είναι στο
>>> > http://bugs.freedesktop.org/show_bug.cgi?id=22145
>>> > όπως έχει αναφερθεί ήδη.
>>> > Αυτό που είναι σημαντικό είναι ότι προσωπικά δε θα ασχοληθώ με το
>>> > ζήτημα τούτο.
>>> > Αυτό που μπορώ να κάνω είναι να καθοδηγήσω κάποιους που θα ήθελαν να
>>> > βοηθήσουν,
>>> > και νομίζω ότι το όλο έργο είναι σχετικά βατό.
>>> >
>>> > Για τα
>>> >>> "03DF" "Ll" "03DE" "GREEK SMALL LETTER KOPPA"
>>> >>> "03E1" "Ll" "03E0" "GREEK SMALL LETTER SAMPI"
>>> >>> "03F0" "Ll" "039A" "GREEK KAPPA SYMBOL"
>>> >>> "03F1" "Ll" "03A1" "GREEK RHO SYMBOL"
>>> >>> "03F2" "Ll" "03F9" "GREEK LUNATE SIGMA SYMBOL"
>>> >>> "03F3" "Ll" "" "GREEK LETTER YOT"
>>> >
>>> > Θέλουμε να παράγουμε πίνακα
>>> >
>>> > int myarray[] = {
>>> >
>>> > 0x03DF, 1, // είναι αλφαβητικό
>>> > 0x03E0, 0
>>> > 0x03E1, 1,
>>> > 0x03E2, 0,
>>> > 0x03E3, 0,
>>> > 0x03E4, 0,
>>> > 0x03E5, 0,
>>> > ...
>>> > 0x03F0, 1,
>>> > 0x03F1, 1,
>>> > 0x03F2, 1,
>>> > 0x03F3, 1
>>> > };
>>> >
>>> > Σίμος
>>> >
>>> _______________________________________________
>>> Open-source mailing list
>>> Open-source(a)ellak.gr
>
>
14 years, 8 months
[Fedora-el-list] Re: [Open-source] Πρόγραμμα εντολών που να μετατρέπει αρχείο
by Simos Xenitellis
2009/7/16 Faidon Liambotis <paravoid(a)debian.org>:
> Simos Xenitellis wrote:
>> Έτσι, αρκεί να γράψουμε μια συνάρτηση σε γλώσσα C που να μπορεί να
>> λέει αν ένας χαρακτήρας Χ είναι αλφαβητικός ή όχι.
>> Στο πρότυπο Unicode έχουμε μια σειρά από βασικούς χαρακτήρες με κωδικό
>> από 0-65535, και περιγράφονται στο αρχείο
>> http://unicode.org/Public/UNIDATA/UnicodeData.txt (είναι αρχείο CSV).
>> Όπως αναφέρθηκε παραπάνω στη συζήτηση, ένα από τα πεδία του CSV είναι
>> Ll/Lu (Letter Lower, Letter Upper), οπότε χρειάζεται ένα πρόγραμμα
>> εντολών που να κάνει «parsing» το CSV και να ελέγχει αν πρόκειται για
>> Ll ή Lu, και να παράγει ένα πίνακα της μορφήςΚοίταξα τον κώδικα που έκανες link· δεν είναι τυχαίο που υπάρχει αυτό το
> bug με το «ς», κάποιος έκανε το λάθος να προσπαθήσει να υλοποιήσει ένα
> πολύπλοκο standard (το Unicode) νομίζοντας, με αφέλεια, ότι θα είναι
> εξαιρετικά εύκολο.
>
> Το ίδιο λάθος πας να κάνεις και εσύ. Διαβάζω αυτό που προτείνεις, το
> parsing του CSV του Unicode, και μου σηκώνεται η τρίχα.
>
> Δεκάδες άλλοι έχουν κάνει σωστές υλοποιήσεις του Unicode επί πολλά
> iterations επί πολλά χρόνια. Μου φαίνεται λίγο NIH syndrom, γιατί δεν
> μπορεί να χρησιμοποιηθεί (έστω και conditionally) κάποια από τις
> βιβλιοθήκες εκεί έξω που κάνουν αυτή τη δουλειά, π.χ. η ICU, ή (πιο
> δύσκολα), η glib;
>
> Τα παραπάνω μου φαίνονται πολύ προφανή, τόσο που πιστεύω πως σίγουρα τα
> έχουν σκεφθεί και άλλοι. Γιατί δεν έχει γίνει κάτι τέτοιο, έχεις κάτι
> υπ' όψιν σου;
Το να βάλεις ICU ή glib ως εξάρτηση στον κώδικα του X.Org είναι λίγο
δύσκολο και όπως καταλαβαίνω
δεν είναι κάτι που θα γίνει ούτε μεσοπρόθεσμα. Αν εξαιρέσουμε ζητήματα
με την άδεια διάθεσης,
θα χρειαστούν προγραμματιστές που να υποστηρίξουν την κατεύθυνση αυτή.
Αν θέλεις να συζητήσουμε
περισσότερο για αυτό, ξεκίνησε νέα συζήτηση ώστε να μην έχουμε ζήτημα
για thread hijacking.
Όπως είναι τώρα, έχουμε έναν developer του X.Org που υποστηρίζει την
τρέχουσα απλή λύση,
που είναι κάτι αρκετά σημαντικό.
Αν γίνουν οι απαραίτητες ενέργειες, πιστεύω ότι στην επόμενη έκδοση του X.Org
θα περάσουμε τη βελτίωση στις διανομές.
Σίμος
14 years, 8 months
[Fedora-el-list] Re: Πρόγραμμα εντολών που να μετατρέπει αρχείο
by Simos Xenitellis
Κάνω μια γενικότερη περίληψη για το θέμα με το τελικό σίγμα
και όλα τα βήματα που χρειάζεται για να επιλύσουμε το θέμα.
Στην ελληνική διάταξη στο X.Org (Linux) είχαμε πάντα το πρόβλημα, όταν
το CapsLock
ήταν πατημένο και πατούσαμε «ς», να παίρνουμε «ς» αντί το κεφαλαίο «Σ».
Μπορείτε να το δοκιμάσετε και να επιβεβαιώσετε τώρα·
1. Πατήστε CapsLock
2. Γράψτε ελληνικά, π.χ. ΣΔΛΚΦΞΕΟΡΙΞΓ
3. Πατήστε «ς» και λαμβάνετε «ς» αντί για Σ.
Η πηγή του προβλήματος είναι στον τρόπο που ο κώδικας του X.Org
αξιολογεί πότε ένας χαρακτήρας
είναι αλφαβητικός, ώστε για να το επιτρέπει να λειτουργεί το CapsLock.
Ως τώρα, το X.Org βλέπει τους χαρακτήρες στη διάταξη, π.χ. το γ και Γ
που είναι στο ίδιο πλήκτρο,
και δοκιμάζει τη μετατροπή κεφαλαίο προς πεζό για «Γ». Αν πράγματι
βγάλει «γ», τότε είναι αλφαβητικός χαρακτήρας
και έχει και σωστή αντιστοιχία πεζού-κεφαλαίου, οπότε ενεργοποιεί τη
λειτουργία CapsLock.
Το «Σ» παράγει «σ», οπότε το ς/Σ αγνοείται όταν έχουμε πατημένο το
CapsLock και παράγει μόνο «ς».
Η πηγή του προβλήματος είναι ότι θα ήταν καλύτερο να ελέγχαμε απλά αν
οι χαρακτήρες είναι απλά αλφαβητικοί αντί να επιβεβαιώνουμε ότι με
κάποιο τρόπο ότι η μετατροπή από πεζό σε κεφαλαίο (και ανάποδα).
Όπως είναι τώρα το X.Org δεν έχει ούτως ή άλλως τη δυνατότητα για
σωστή επιβεβαίωση για πεζά/κεφαλαία διότι δεν περιλαμβάνει στις
εξαρτήσεις κάποια βιβλιοθήκη Unicode.
Έτσι, αρκεί να γράψουμε μια συνάρτηση σε γλώσσα C που να μπορεί να
λέει αν ένας χαρακτήρας Χ είναι αλφαβητικός ή όχι.
Στο πρότυπο Unicode έχουμε μια σειρά από βασικούς χαρακτήρες με κωδικό
από 0-65535, και περιγράφονται στο αρχείο
http://unicode.org/Public/UNIDATA/UnicodeData.txt (είναι αρχείο CSV).
Όπως αναφέρθηκε παραπάνω στη συζήτηση, ένα από τα πεδία του CSV είναι
Ll/Lu (Letter Lower, Letter Upper), οπότε χρειάζεται ένα πρόγραμμα
εντολών που να κάνει «parsing» το CSV και να ελέγχει αν πρόκειται για
Ll ή Lu, και να παράγει ένα πίνακα της μορφής
static void
UCSIsAlphabetic( register unsigned codepoint)
{
/* Check if character is alphabetic, as in Unicode Data version 5.1.0 */
/* NB: Checks if character is either Ll or Lu (Letter lower/upper). */
/* Currently using flat array where index corresponds to codepoint value. */
/* Value is 1 if codepoint is alphabetic, 0 otherwise. */
static unsigned char const UCSAlphabetic[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
...
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
if ( UCSAlphabetic[codepoint] == 0 )
return 0;
else
return 1;
}
Τη συνάρτηση αυτή την προσθέτουμε στο ίδιο αρχείο με
http://cgit.freedesktop.org/xorg/lib/libX11/tree/src/KeyBind.c#n294
Έχοντας τη συνάρτηση αυτή, τότε είμαστε σε θέση να τροποποιήσουμε τον
κώδικα στο
http://bugs.freedesktop.org/show_bug.cgi?id=22145#c11
ώστε να κοιτάει αν απλά οι χαρακτήρες sym[0], sym[1] (και sym[2],
sym[3]) είναι αλφαβητικοί.
Σίμος
2009/6/13 Simos Xenitellis <simos.lists(a)googlemail.com>:
> 2009/6/13 Savvas Radevic <vicedar(a)gmail.com>:
>> Το UnicodeData.txt είναι και σωστά διαμορφωμένο, δείχνει το αντίστοιχο
>> κεφαλαίο γράμμα δίπλα από κάθε μικρό (και vice versa):
>>
>> 03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
>> 03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
>>
>> 03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
>> 03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
>> 03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
>>
>> Προσέξτε το "03A3;;03A3" στο "FINAL SIGMA" και "SIGMA".
>> Επίσης, τα κεφαλαία το έχουν το αντίστοιχο μικρό στην πρότελευταια τιμή, ενώ
>> τα μικρά έχουν το αντίστοιχο κεφαλαίο
>>
>> Σύμφωνα με αυτό που πρόσθεσε η Jennie ("Lu" και "Ll"), επισύναψα ένα
>> καινούργιο sh/perl script:
>>
>> (Πρόσθεσα τα quotes "" στις τιμές για να φαίνεται η διαφορά)
>> Για κεφαλαία:
>>>
>>> perl -nle 'print if /^.*?;.*?;Lu;/' UnicodeData.txt | perl -pe
>>> 's/(.*?);(.*?);(.*?);.*;(.*?);$/"$1" "$3" "$4"/'
>>>
>>> "03A6" "Lu" "03C6" "GREEK CAPITAL LETTER PHI"
>>> "03A7" "Lu" "03C7" "GREEK CAPITAL LETTER CHI"
>>> "03A8" "Lu" "03C8" "GREEK CAPITAL LETTER PSI"
>>> "03A9" "Lu" "03C9" "GREEK CAPITAL LETTER OMEGA"
>>> "03AA" "Lu" "03CA" "GREEK CAPITAL LETTER IOTA WITH DIALYTIKA"
>>> "03AB" "Lu" "03CB" "GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA"
>>> "03CF" "Lu" "03D7" "GREEK CAPITAL KAI SYMBOL"
>>> "03D2" "Lu" "" "GREEK UPSILON WITH HOOK SYMBOL"
>>> "03D3" "Lu" "" "GREEK UPSILON WITH ACUTE AND HOOK SYMBOL"
>>> "03D4" "Lu" "" "GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL"
>>
>> Για μικρά:
>>>
>>> perl -nle 'print if /^.*?;.*?;Ll;/' UnicodeData.txt | perl -pe
>>> 's/(.*?);(.*?);(.*?);.*;(.*?)$/"$1" "$3" "$4" "$2"/'
>>>
>>> "03DF" "Ll" "03DE" "GREEK SMALL LETTER KOPPA"
>>> "03E1" "Ll" "03E0" "GREEK SMALL LETTER SAMPI"
>>> "03F0" "Ll" "039A" "GREEK KAPPA SYMBOL"
>>> "03F1" "Ll" "03A1" "GREEK RHO SYMBOL"
>>> "03F2" "Ll" "03F9" "GREEK LUNATE SIGMA SYMBOL"
>>> "03F3" "Ll" "" "GREEK LETTER YOT"
>>>
>>> [...]
>>> "1FE2" "Ll" "" "GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA"
>>> "1FE3" "Ll" "" "GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA"
>>> "1FE4" "Ll" "" "GREEK SMALL LETTER RHO WITH PSILI"
>>> "1FE5" "Ll" "1FEC" "GREEK SMALL LETTER RHO WITH DASIA"
>>
>> Τώρα μπορείτε εύκολα να βρείτε το αντίστοιχο κεφαλαίο/μικρό :)
>
> Νομίζω ότι έχουμε μια καλή εξέλιξη.
> Πράγματι, φαίνεται ότι τα LI, Lu, κτλ επιτρέπουν να βρίσκουμε τους
> αλφαβητικούς χαρακτήρες.
>
> Υπήρξε ένα ερώτημα προηγουμένως γιατί τα θέλουμε όλα αυτά.
> Ο λόγος είναι για να διορθώσουμε κάτι στο X.Org για τα ελληνικά (και
> μαζί με αυτό και για όλες τις άλλες γλώσσες).
> Η αναφορά σφάλματος που περιγράφει το ζήτημα είναι στο
> http://bugs.freedesktop.org/show_bug.cgi?id=22145
> όπως έχει αναφερθεί ήδη.
> Αυτό που είναι σημαντικό είναι ότι προσωπικά δε θα ασχοληθώ με το ζήτημα τούτο.
> Αυτό που μπορώ να κάνω είναι να καθοδηγήσω κάποιους που θα ήθελαν να βοηθήσουν,
> και νομίζω ότι το όλο έργο είναι σχετικά βατό.
>
> Για τα
>>> "03DF" "Ll" "03DE" "GREEK SMALL LETTER KOPPA"
>>> "03E1" "Ll" "03E0" "GREEK SMALL LETTER SAMPI"
>>> "03F0" "Ll" "039A" "GREEK KAPPA SYMBOL"
>>> "03F1" "Ll" "03A1" "GREEK RHO SYMBOL"
>>> "03F2" "Ll" "03F9" "GREEK LUNATE SIGMA SYMBOL"
>>> "03F3" "Ll" "" "GREEK LETTER YOT"
>
> Θέλουμε να παράγουμε πίνακα
>
> int myarray[] = {
>
> 0x03DF, 1, // είναι αλφαβητικό
> 0x03E0, 0
> 0x03E1, 1,
> 0x03E2, 0,
> 0x03E3, 0,
> 0x03E4, 0,
> 0x03E5, 0,
> ...
> 0x03F0, 1,
> 0x03F1, 1,
> 0x03F2, 1,
> 0x03F3, 1
> };
>
> Σίμος
>
14 years, 8 months
[Fedora-el-list] provlima me to update
by John T. Margaritopoulos
Καλημέρα,
Εδώ και δυο μέρες υπάρχει πρόβλημα στα updates.
Παίρνω το παρακάτω:
Error Downloading Packages:
alsa-plugins-pulseaudio-1.0.20-2.fc11.i586: failure:
alsa-plugins-pulseaudio-1.0.20-2.fc11.i586.rpm from updates: (256, 'No
more mirrors to try.')
Έχετε παρατηρήσει κάτι αντίστοιχο? υπάρχει κάποιο προσωρινό πρόβλημα
στους mirrors?
Dr. John T. Margaritopoulos,FRES
Department of Biochemistry and Biotechnology,
University of Thessaly,
26 Ploutonos & Aiolou Str., 412 21 Larissa,
Greece,
Tel.: +302410565283
email: johnmargaritopoulos(a)gmail.com
email: jmarg(a)uth.gr
14 years, 8 months
[Fedora-el-list] provlima me samba server sto Fedora 11
by John T. Margaritopoulos
Καλησπέρα,
Πρόσφατα αναβάθμισα σε Fedora 11, laptop kai PC.
Παρουσιάζεται ένα πρόβλημα με τον samba server. Από το λαπτοπ βλέπω το
share sto PC, το αντίθετο όχι. Μου ζητάει συνεχώς το password το δίνω
αλλά δεν το δέχεται.
Οι ρυθμίσεις είναι ίδιες και στα δυο μηχανάκια (passwords, usernames,
smb.conf). Πριν την αναβάθμιση όλα ήταν ΟΚ.
Καμιά ιδέα προς τα που να το ψάξω? Αν χρειάζεται να δώσω κάποια επιπλέον
πληροφορία πείτε μου.
Ευχαριστώ,
Γιάννης
--
Dr. John T. Margaritopoulos,FRES
Department of Biochemistry and Biotechnology,
University of Thessaly,
26 Ploutonos & Aiolou Str., 412 21 Larissa,
Greece,
Tel.: +302410565283
email: johnmargaritopoulos(a)gmail.com
email: jmarg(a)uth.gr
14 years, 8 months
[Fedora-el-list] (no subject)
by John T. Margaritopoulos
Καλησπέρα,
Πρόσφατα αναβάθμισα σε Fedora 11, laptop kai PC.
Παρουσιάζεται ένα πρόβλημα με τον samba server. Από το λαπτοπ βλέπω το
share sto PC, το αντίθετο όχι. Μου ζητάει συνεχώς το password το δίνω
αλλά δεν το δέχεται.
Οι ρυθμίσεις είναι ίδιες και στα δυο μηχανάκια (passwords, usernames,
smb.conf).
Καμιά ιδέα προς τα που να το ψάξω? Αν χρειάζεται να δώσω κάποια επιπλέον
πληροφορία πείτε μου.
Ευχαριστώ,
Γιάννης
--
Dr. John T. Margaritopoulos,FRES
Department of Biochemistry and Biotechnology,
University of Thessaly,
26 Ploutonos & Aiolou Str., 412 21 Larissa,
Greece,
Tel.: +302410565283
email: johnmargaritopoulos(a)gmail.com
email: jmarg(a)uth.gr
14 years, 8 months