2009-05-05 17 views
5

Skąd glibc pobiera bazę atrybutów Unicode dla takich funkcji jak np. wcwidth()? Interesuje mnie poprawienie kilku błędnych wpisów, ale nie mogę znaleźć miejsca, w którym ta informacja znajduje się w źródłowej dystrybucji.Skąd glibc pobiera bazę atrybutów Unicode?

Jeśli to ważne, to przede wszystkim interesuję się tym pod linkiem debian lub ubuntu.

Odpowiedz

1

Ok, więc ja tylko grzebie wokół siebie, więc nie jestem absolutnie pewien, ale wydaje się, że tabela szukasz znajduje się w następującej lokalizacji w stosunku do korzenia glibc:

localedata/locales/i18n 

Wygląda na to, że jest to ustawienie regionalne w Unicode (wersja 5). Zawiera on następujące, czyli tam, gdzie uważam, trzeba dokonać zmian:

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

W przypadku, gdy zastanawiasz się, ctype_output function (ld-ctype.c) wywołuje allocate_arrays który wzywa wcwidth_table_init. Funkcja wcwidth_table_init jest generowana przez 3level.h (która również generuje inne tabele, które podążają za tym samym szablonem). To jest łańcuch, który śledziłem, aby wyśledzić pliki w localedate/locales.

Tak jak powiedziałem, nie jestem w 100% pewien, czy to właściwy stół, ale pomyślałem, że podzielę się tym, co znalazłem.

+1

Komentarze w tym pliku sugerują, że jest on generowany przez localedata/gen-unicode-ctype.c, który mówi o pliku UnicodeData, ale gdzie jest plik UnicodeData który jest używany w dystrybucji glibc ...? Nie chcę łatać wygenerowanego pliku, wydaje się, że przy następnym pojawieniu się nowej wersji stanie się on lepki. – bdonlan

+0

Hmmm ... to dobra uwaga. Czy mimo to próbowałeś zmodyfikować wygenerowany plik, tylko w celu sprawdzenia, czy funkcja wcwidth() zwraca poprawne wartości? Może to być przydatne, ponieważ udowodni, że jesteśmy na dobrej drodze. Następnie możemy włożyć więcej wysiłku, aby dowiedzieć się, jak generowane są pliki, aby problem mógł zostać naprawiony w katalogu głównym. – Naaff

+0

@bdonlan: Czy zaktualizowali to, aby ponownie uruchomić plik Unicode 6.0.0 UnicodeData? Może zostało to naprawione w obecnej wersji. – tchrist

0

Uważam, że jest zdefiniowany w pliku definicji ustawień narodowych. Aby uzyskać więcej informacji o ustawieniach regionalnych, patrz this page. glibc zawiera kilka definicji ustawień narodowych w localedate/locales, chociaż żaden z nich nie ma żadnych informacji o szerokości.

+0

Lokacje są generowane przez aplikację localedef, która ... jest dostarczana z glibc. Jestem bardziej zainteresowany znalezieniem kanonicznej lokalizacji do edycji tych informacji ... – bdonlan

2

Wygląda na to, że dane są generowane przez (prawdopodobnie uruchamiane ręcznie) localedata/gen-unicode-ctype.c z plików danych w Unicode opublikowanych pod numerem http://unicode.org/Public/UNIDATA/. Dzięki Naaffowi za wskazanie mnie we właściwym kierunku!