2009-05-05 5 views
5

Da dove viene che glibc ottiene il proprio database di attributi unicode, per funzioni come ad esempio wcwidth()? Sono interessato a correggere alcune voci errate, ma non riesco a trovare dove questa informazione è nella sua distribuzione di origine.Da dove arriva a glibc il suo database di attributi unicode?

Se è importante, sono principalmente interessato a questo sotto linux debian o ubuntu.

risposta

1

Okay, sto solo rovistando me stesso, quindi non sono assolutamente sicuro, ma sembra che la tabella si sta cercando si trova nella seguente posizione relativo alla radice glibc:

localedata/locales/i18n 

Questo sembra essere il locale Unicode (versione 5). Esso contiene la seguente, che è dove credo è necessario apportare le modifiche:

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

Nel caso in cui vi state chiedendo, la funzione ctype_output (LD-ctype.c) chiama allocate_arrays che invita wcwidth_table_init. La funzione wcwidth_table_init è generata da 3level.h (che genera anche altre tabelle che seguono lo stesso modello). Questa è la catena che ho seguito per rintracciare i file in localedate/locales.

Come ho detto, non sono sicuro al 100% che questo sia il tavolo giusto, ma ho pensato di condividere ciò che avevo trovato.

+1

I commenti in quel file suggeriscono che è generato da localedata/gen-unicode-ctype.c, che parla di un file UnicodeData, ma dov'è il file UnicodeData è usato nella distribuzione di glibc ...? Non voglio patchare un file generato, sembra che diventerebbe sempre più appiccicoso la prossima volta che ci sarà una nuova versione. – bdonlan

+0

Hmmm ... questo è un buon punto. Hai provato a modificare comunque il file generato, solo per verificare che wcwidth() restituisca i valori corretti? Questo potrebbe essere utile in quanto proverebbe che siamo sulla strada giusta. Quindi potremmo fare uno sforzo maggiore per scoprire come vengono generati i file in modo che il problema possa essere risolto alla radice. – Naaff

+0

@bdonlan: l'hanno aggiornato per eseguirlo nuovamente con il file UnicodeData Unicode 6.0.0? Forse è stato corretto nella versione attuale. – tchrist

0

Credo che sia definito nel file di definizione delle impostazioni internazionali. Vedere this page per ulteriori informazioni sulle impostazioni locali. glibc include un gruppo di definizioni di locale in localedate/locales, anche se nessuno di loro sembra avere alcuna informazione di larghezza.

+0

Tuttavia, le localizzazioni vengono generate dall'applicazione localedef che ... viene fornita con glibc. Sono più interessato a trovare la posizione canonica per modificare queste informazioni ... – bdonlan

2

Sembra che i dati siano generati dal (localmente gestito manualmente) localedata/gen-unicode-ctype.c dai file di dati Unicode pubblicati allo http://unicode.org/Public/UNIDATA/. Grazie a Naaff per avermi indicato nella giusta direzione!