2009-05-05 8 views
5

Woher erhält Glibc seine Datenbank mit Unicode-Attributen für Funktionen wie zB wcwidth()? Ich bin daran interessiert, einige fehlerhafte Einträge zu korrigieren, aber ich kann nicht finden, wo diese Informationen in ihrer Quellverteilung sind.Woher erhält Glibc seine Datenbank mit Unicode-Attributen?

Wenn es darauf ankommt, interessiert mich das in erster Linie unter debian oder ubuntu linux.

Antwort

1

Okay, also bin ich Stossen nur um mich, also bin ich nicht ganz sicher, aber es scheint, dass die Tabelle die Sie suchen, ist in der folgenden Position in Bezug auf die glibc Wurzel gefunden:

localedata/locales/i18n 

Dies scheint das Unicode-Gebietsschema (Version 5) zu sein. Es enthält die folgende, das ist, wo ich glaube, dass Sie Ihre Änderungen vornehmen müssen:

% ENCLOSED ALPHANUMERICS/ 
    <U24D0>..<U24E9>;/ 

Falls Sie sich fragen, ist die Funktion ctype_output (ld-ctype.c) ruft allocate_arrays die wcwidth_table_init nennt. Die Funktion wcwidth_table_init wird von 3level.h generiert (die auch andere Tabellen generiert, die derselben Vorlage folgen). Dies ist die Kette, die ich verfolgt habe, um die Dateien in lokalisierten/locales zu finden.

Wie gesagt, ich bin mir nicht 100% sicher, dass dies der richtige Tisch ist, aber ich dachte, ich würde teilen, was ich gefunden habe.

+1

Die Kommentare in dieser Datei deuten darauf hin, dass es von localedata/gen-unicode-ctype.c generiert wird, die über eine UnicodeData-Datei spricht, aber wo ist die UnicodeData-Datei das wird in der Glibc-Distribution verwendet ...? Ich möchte keine generierte Datei patchen, es sieht so aus, als würde sie beim nächsten Release kleben bleiben. – bdonlan

+0

Hmmm ... das ist ein guter Punkt. Haben Sie schon versucht, die generierte Datei zu modifizieren, nur um zu überprüfen, ob wcwidth() die richtigen Werte liefert? Dies könnte nützlich sein, da es beweisen würde, dass wir auf dem richtigen Weg sind. Dann könnten wir uns mehr Mühe geben, herauszufinden, wie die Dateien erzeugt werden, damit das Problem an der Wurzel behoben werden kann. – Naaff

+0

@bdonlan: Haben sie das aktualisiert, um es mit der UnicodeData-Datei von Unicode 6.0.0 erneut auszuführen? Vielleicht wurde es in der aktuellen Version behoben. – tchrist

0

Ich glaube, dass es in der Länderdefinitionsdatei definiert ist. Weitere Informationen zu Gebietsschemata finden Sie unter this page. Glibc enthält eine Reihe von Gebietsschemadefinitionen in localedate/locales, obwohl keine von ihnen scheinen, Breite Informationen zu haben.

+0

Allerdings werden Locales von der localedef-Anwendung generiert, die ... mit glibc geliefert wird. Ich bin mehr daran interessiert, den kanonischen Ort zu finden, um diese Informationen zu bearbeiten ... – bdonlan

2

Es sieht so aus, als ob die Daten vom (scheinbar manuell ausgeführten) localedata/gen-unicode-ctype.c aus den Unicode-Datendateien, die unter http://unicode.org/Public/UNIDATA/ veröffentlicht wurden, generiert werden. Danke an Naaff, dass er mich in die richtige Richtung gelenkt hat!