Re: Πρόγραμμα εντολών που να μ ετατρέπει αρχείο

2009-07-16 ϑεμα 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 :
> 2009/6/13 Savvas Radevic :
>> Το UnicodeData.txt είναι και σωστά διαμορφωμένο, δείχνει το αντίστοιχο
>> κεφαλαίο γράμμα δίπλα από κάθε μικρό (και vice versa):
>>
>> 03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;N03C1;
>> 03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;N03C3;
>>
>> 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

Re: Πρόγραμμα εντολών που να μ ετατρέπει αρχείο

2009-06-13 ϑεμα Simos Xenitellis
2009/6/13 Savvas Radevic :
> Το UnicodeData.txt είναι και σωστά διαμορφωμένο, δείχνει το αντίστοιχο
> κεφαλαίο γράμμα δίπλα από κάθε μικρό (και vice versa):
>
> 03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;N03C1;
> 03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;N03C3;
>
> 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
};

Σίμος
-- 
Ubuntu-gr mailing list
Ubuntu-gr@lists.ubuntu.com

If you do not want to receive any more messages from the ubuntu-gr mailing 
list, please follow this link and choose unsubscribe:
https://lists.ubuntu.com/mailman/listinfo/ubuntu-gr


Re: Πρόγραμμα εντολών που να μ ετατρέπει αρχείο

2009-06-13 ϑεμα Savvas Radevic
Το UnicodeData.txt είναι και σωστά διαμορφωμένο, δείχνει το αντίστοιχο
κεφαλαίο γράμμα δίπλα από κάθε μικρό (και vice versa):

03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;N03C1;
03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;N03C3;

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"
>

Τώρα μπορείτε εύκολα να βρείτε το αντίστοιχο κεφαλαίο/μικρό :)


unicodetest2.sh
Description: Bourne shell script
-- 
Ubuntu-gr mailing list
Ubuntu-gr@lists.ubuntu.com

If you do not want to receive any more messages from the ubuntu-gr mailing 
list, please follow this link and choose unsubscribe:
https://lists.ubuntu.com/mailman/listinfo/ubuntu-gr


Re: Πρόγραμμα εντολών που να μ ετατρέπει αρχείο

2009-06-13 ϑεμα Savvas Radevic
Νομίζω κατάλαβα γιατί δεν το έχει το τελικό σίγμα, βλέποντας το "Greek code
chart ", το αντίστοιχο κεφαλαίο
είναι "Reserved":

http://www.unicode.org/charts/

[image: Screenshot.png]

03C0 π
03A0 Π
03C1 ρ
03A1 Ρ
03C2 ς
03A2 ???

[image: Screenshot-1.png]



Το script που θα φτιάχνατε, θα έπρεπε να βρίσκει τέτοιες "ατέλειες" και να
τις συνδέει με το σωστό χαρακτήρα, δεν είναι;
-- 
Ubuntu-gr mailing list
Ubuntu-gr@lists.ubuntu.com

If you do not want to receive any more messages from the ubuntu-gr mailing 
list, please follow this link and choose unsubscribe:
https://lists.ubuntu.com/mailman/listinfo/ubuntu-gr


Re: Πρόγραμμα εντολών που να μ ετατρέπει αρχείο

2009-06-12 ϑεμα Jennie Petoumenou
Καλημέρα,
Σύμφωνα με το 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; 03B8N;
1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L; 03B9N;

Τζένη

2009/6/13 Konstantinos Togias 

> 2009/6/12 Simos Xenitellis :
> > Καλησπέρα,
> > Υπάρχει η ανάγκη για να μετατρέψουμε ένα αρχείο κειμένου σε ένα πίνακα,
> > http://bugs.freedesktop.org/show_bug.cgi?id=22145#c16
> >
> > Η δουλειά είναι:
> > 1. Ανάγνωση του ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
> > Θέλει κατανόηση των πεδίων για να εντοπίσουμε ποιοι χαρακτήρες είναι
> > αλφαβητικοί.
> > Αλφαβητικοί εδώ είναι τα γράμματα που είναι είτε πεζά ή κεφαλαία.
> > 2. Κάθε χαρακτήρας Unicode έχει ένα αύξων αριθμό, από 1-. Εδώ μάς
> > αρκεί μέχρι 65535.
> > 3. Το αποτέλεσμα θέλουμε να είναι κάτι σαν
> >
> > 1όχι
> > 2όχι
> > 3όχι
> > ...
> > 65  ναι
> > 66  ναι
> > ...
> > κτλ
> >
> > 4. Όταν το φτιάξουμε αυτό, μετά μπορούμε να το βελτιστοποιήσουμε διότι
> > οι περισσότεροι χαρακτήρες
> > δεν είναι αλφαβητική. Ωστόσο ας φτάσουμε στο σημείο αυτό.
> >
> > Η όλη δουλειά γίνεται για το ς (σίγμα τελικό).
> >
> > Σίμος
> > --
> > Ubuntu-gr mailing list
> > Ubuntu-gr@lists.ubuntu.com
> >
> > If you do not want to receive any more messages from the ubuntu-gr
> mailing list, please follow this link and choose unsubscribe:
> > https://lists.ubuntu.com/mailman/listinfo/ubuntu-gr
> >
>
> Κοιτώντας στο ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
> βλέπω γραμμές σαν τις παρακάτω (παραθέτω ενδεικτικά ένα τμήμα που
> αφορά ελληνικούς χαρακτήρες):
> [...]
> 03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399
> 0308N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
> 03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5
> 0308N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
> 03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301N;GREEK
> SMALL LETTER ALPHA TONOS;;0386;;0386
> 03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301N;GREEK
> SMALL LETTER EPSILON TONOS;;0388;;0388
> 03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301N;GREEK
> SMALL LETTER ETA TONOS;;0389;;0389
> 03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301N;GREEK
> SMALL LETTER IOTA TONOS;;038A;;038A
> 03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB
> 0301N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS
> 03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;N;;;0391;;0391
> 03B2;GREEK SMALL LETTER BETA;Ll;0;L;N;;;0392;;0392
> 03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;N;;;0393;;0393
> 03B4;GREEK SMALL LETTER DELTA;Ll;0;L;N;;;0394;;0394
> [...]
> 03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;N03D7;
> 03D0;GREEK BETA SYMBOL;Ll;0;L; 03B2N;GREEK SMALL LETTER
> CURLED BETA;;0392;;0392
> 03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8N;GREEK SMALL LETTER
> SCRIPT THETA;;0398;;0398
> 03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L; 03A5N;GREEK
> CAPITAL LETTER UPSILON HOOK
> 03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2
> 0301N;GREEK CAPITAL LETTER UPSILON HOOK TONOS
> 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2
> 0308N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS
> 03D5;GREEK PHI SYMBOL;Ll;0;L; 03C6N;GREEK SMALL LETTER
> SCRIPT PHI;;03A6;;03A6
> 03D6;GREEK PI SYMBOL;Ll;0;L; 03C0N;GREEK SMALL LETTER
> OMEGA PI;;03A0;;03A0
> 03D7;GREEK KAI SYMBOL;Ll;0;L;N;;;03CF;;03CF
> 03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;N;;*;;03D9;
> [...]
>
> αν έχω καταλάβει καλά και αυτό που χρειάζεσαι είναι να ξεχωρίσεις
> ποιες γραμμές αφορούν αλφαβητικούς χαρακτήρες, τότε παρατηρώ ότι για
> τους αλφαβητικούς χαρακτήρες αναφέρεται η λέξη "LETTER", οπότε είναι
> εύκολο να ξεχωριστούν. Παρατηρώντας πιο προσεκτικά βλέπω όμως και
> γραμμές όπως η
>
> 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2
>
> το οποίο απ' ότι καταλαβαίνω μιλάει για το ύψηλον με διαλυτικά και
> "hook" (τι είναι αυτό άραγε;) ... Το ερώτημα είναι θέλουμε και αυτό;
> το θεωρούμε και αυτό αλφαβητικό; Γενικά πες μας ποιους χαρακτήρες
> θεωρούμε αλφαβητικούς. Αν είναι μόνο τα γράμματα Α-Ω, α-ω , τότε
> μαζεύουμε ότι περιέχει τη λέξη "LETTER" και τελειώσαμε. Αν θέλουμε όλα
> τα γράμματα A-Ω, α-ω μαζί με όλους τους συνδυασμούς τους με τα σημεία
> στίξης (καθένα με τόνο, με διαλυτικά, ... με δεν ξέρω τι άλλο) τότε
> είναι λίγο πιο περίπλοκα τα πράγματα. Μια πρώτη σκέψη είναι το parsing
> να γίνει 

Re: Πρόγραμμα εντολών που να μ ετατρέπει αρχείο

2009-06-12 ϑεμα Konstantinos Togias
2009/6/12 Simos Xenitellis :
> Καλησπέρα,
> Υπάρχει η ανάγκη για να μετατρέψουμε ένα αρχείο κειμένου σε ένα πίνακα,
> http://bugs.freedesktop.org/show_bug.cgi?id=22145#c16
>
> Η δουλειά είναι:
> 1. Ανάγνωση του ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
> Θέλει κατανόηση των πεδίων για να εντοπίσουμε ποιοι χαρακτήρες είναι
> αλφαβητικοί.
> Αλφαβητικοί εδώ είναι τα γράμματα που είναι είτε πεζά ή κεφαλαία.
> 2. Κάθε χαρακτήρας Unicode έχει ένα αύξων αριθμό, από 1-. Εδώ μάς
> αρκεί μέχρι 65535.
> 3. Το αποτέλεσμα θέλουμε να είναι κάτι σαν
>
> 1    όχι
> 2    όχι
> 3    όχι
> ...
> 65  ναι
> 66  ναι
> ...
> κτλ
>
> 4. Όταν το φτιάξουμε αυτό, μετά μπορούμε να το βελτιστοποιήσουμε διότι
> οι περισσότεροι χαρακτήρες
> δεν είναι αλφαβητική. Ωστόσο ας φτάσουμε στο σημείο αυτό.
>
> Η όλη δουλειά γίνεται για το ς (σίγμα τελικό).
>
> Σίμος
> --
> Ubuntu-gr mailing list
> Ubuntu-gr@lists.ubuntu.com
>
> If you do not want to receive any more messages from the ubuntu-gr mailing 
> list, please follow this link and choose unsubscribe:
> https://lists.ubuntu.com/mailman/listinfo/ubuntu-gr
>

Κοιτώντας στο ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
βλέπω γραμμές σαν τις παρακάτω (παραθέτω ενδεικτικά ένα τμήμα που
αφορά ελληνικούς χαρακτήρες):
[...]
03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399
0308N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5
0308N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301N;GREEK
SMALL LETTER ALPHA TONOS;;0386;;0386
03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301N;GREEK
SMALL LETTER EPSILON TONOS;;0388;;0388
03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301N;GREEK
SMALL LETTER ETA TONOS;;0389;;0389
03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301N;GREEK
SMALL LETTER IOTA TONOS;;038A;;038A
03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB
0301N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS
03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;N;;;0391;;0391
03B2;GREEK SMALL LETTER BETA;Ll;0;L;N;;;0392;;0392
03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;N;;;0393;;0393
03B4;GREEK SMALL LETTER DELTA;Ll;0;L;N;;;0394;;0394
[...]
03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;N03D7;
03D0;GREEK BETA SYMBOL;Ll;0;L; 03B2N;GREEK SMALL LETTER
CURLED BETA;;0392;;0392
03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8N;GREEK SMALL LETTER
SCRIPT THETA;;0398;;0398
03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L; 03A5N;GREEK
CAPITAL LETTER UPSILON HOOK
03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2
0301N;GREEK CAPITAL LETTER UPSILON HOOK TONOS
03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2
0308N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS
03D5;GREEK PHI SYMBOL;Ll;0;L; 03C6N;GREEK SMALL LETTER
SCRIPT PHI;;03A6;;03A6
03D6;GREEK PI SYMBOL;Ll;0;L; 03C0N;GREEK SMALL LETTER
OMEGA PI;;03A0;;03A0
03D7;GREEK KAI SYMBOL;Ll;0;L;N;;;03CF;;03CF
03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;N;;*;;03D9;
[...]

αν έχω καταλάβει καλά και αυτό που χρειάζεσαι είναι να ξεχωρίσεις
ποιες γραμμές αφορούν αλφαβητικούς χαρακτήρες, τότε παρατηρώ ότι για
τους αλφαβητικούς χαρακτήρες αναφέρεται η λέξη "LETTER", οπότε είναι
εύκολο να ξεχωριστούν. Παρατηρώντας πιο προσεκτικά βλέπω όμως και
γραμμές όπως η

03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2

το οποίο απ' ότι καταλαβαίνω μιλάει για το ύψηλον με διαλυτικά και
"hook" (τι είναι αυτό άραγε;) ... Το ερώτημα είναι θέλουμε και αυτό;
το θεωρούμε και αυτό αλφαβητικό; Γενικά πες μας ποιους χαρακτήρες
θεωρούμε αλφαβητικούς. Αν είναι μόνο τα γράμματα Α-Ω, α-ω , τότε
μαζεύουμε ότι περιέχει τη λέξη "LETTER" και τελειώσαμε. Αν θέλουμε όλα
τα γράμματα A-Ω, α-ω μαζί με όλους τους συνδυασμούς τους με τα σημεία
στίξης (καθένα με τόνο, με διαλυτικά, ... με δεν ξέρω τι άλλο) τότε
είναι λίγο πιο περίπλοκα τα πράγματα. Μια πρώτη σκέψη είναι το parsing
να γίνει ως εξής:

1. Μαζεύουμε όλες τις γραμμές που περιέχουν τη συμβολοσειρά "LETTER".
2. Για καθεμία από αυτές βρίσκουμε το όνομα του γράμματος μέσα της
(π.χ. η λέξη που βρίσκεται ακριβώς μετά το "GREEK CAPITAL LETTER", και
ξανασαρώνουμε τις γραμμές που έχουν απομείνει ψάχνοντας για το όνομα.

Δεν ξέρω αν το έχω καταλάβει καλά, και ότι προτείνω είναι με μια
γρήγορη επισκόπηση του αρχείου. Πάντως πρέπει να ξέρουμε ακριβώς τι
ψάχνουμε και μετά να βρούμε κάποια patterns μέσα στο κείμενο και
κάποιο αλγόριθμο για να το βρούμε. Απο κεί και πέρα το να γραφτεί ο
parser σε μια perl ή python είναι το ευκολότερο κομμάτι.

Αν έχω χρόνο ίσως ασχοληθώ κάποια από τις επόμενες ημέρες πιο
μεθοδικά... Αν έχω κάτι θα σας ενημερώσω. Μέχρι τότε ας προσπαθήσουν ή
ας ρίξουν ιδέες και άλλοι.

-- 
Konstantinos Togias
Dipl.-Math., M.Sc.
Hellenic Open University
and Research Academic Computer Technology Institute

Ubuntu-gr LoCo team member
-- 
Ubuntu-gr mailing list
Ubuntu-gr@lists.ubuntu.com

If you do not want

Re: Πρόγραμμα εντολών που να μ ετατρέπει αρχείο

2009-06-12 ϑεμα Savvas Radevic
Κάτι σαν το επισυνημμένο;

> Η δουλειά είναι:
> 1. Ανάγνωση του ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
> Θέλει κατανόηση των πεδίων για να εντοπίσουμε ποιοι χαρακτήρες είναι
> αλφαβητικοί.
> Αλφαβητικοί εδώ είναι τα γράμματα που είναι είτε πεζά ή κεφαλαία.
> 2. Κάθε χαρακτήρας Unicode έχει ένα αύξων αριθμό, από 1-. Εδώ μάς
> αρκεί μέχρι 65535.

Δεν κατάλαβα όμως.. αυτόν τον αύξων αριθμό που τον βρίσκουμε; Το μόνο που
βλέπω είναι hexadecimal. :)

> 3. Το αποτέλεσμα θέλουμε να είναι κάτι σαν
>
> 1όχι
> 2όχι
> 3όχι
> ...
> 65  ναι
> 66  ναι
> ...
> κτλ

α) όχι = "δεν είναι γράμμα κεφαλαίο ούτε μικρό" και ναι = "είναι γράμμα
κεφαλαίο ή μικρό"
β) Για τους "GREEK" χαρακτήρες μόνο ή για όλους τους χαρακτήρες;

> 4. Όταν το φτιάξουμε αυτό, μετά μπορούμε να το βελτιστοποιήσουμε διότι
> οι περισσότεροι χαρακτήρες
> δεν είναι αλφαβητική. Ωστόσο ας φτάσουμε στο σημείο αυτό.
>
> Η όλη δουλειά γίνεται για το ς (σίγμα τελικό).
>
> Σίμος

Η εφαρμογή Character Map έχει αρκετές πληροφορίες σχετικά με τον κάθε
χαρακτήρα στο "Character Details":
*
Σ

U+03A3 GREEK CAPITAL LETTER SIGMA

General Character Properties

In Unicode since: 1.1
Unicode category: Letter, Uppercase

Various Useful Representations

UTF-8: 0xCE 0xA3
UTF-16: 0x03A3

C octal escaped UTF-8: \316\243
XML decimal entity: Σ

Annotations and Cross References

See also:
 • U+01A9 LATIN CAPITAL LETTER ESH
 • U+2211 N-ARY SUMMATION
*


unicodetest.sh
Description: Bourne shell script
-- 
Ubuntu-gr mailing list
Ubuntu-gr@lists.ubuntu.com

If you do not want to receive any more messages from the ubuntu-gr mailing 
list, please follow this link and choose unsubscribe:
https://lists.ubuntu.com/mailman/listinfo/ubuntu-gr