Где glibc получает свою базу данных атрибутов Юникода?
Где glibc получает свою базу данных атрибутов Юникода для таких функций, как, например, wcwidth()
? Я заинтересован в исправлении нескольких ошибочных записей, но я не могу найти, где эта информация находится в исходном распределении.
Если это имеет значение, меня это интересует в первую очередь под Debian или Ubuntu Linux.
3 ответа
Итак, я просто копаюсь в себе, поэтому я не совсем уверен, но похоже, что таблица, которую вы ищете, находится в следующем месте относительно корня glibc:
localedata/locales/i18n
Похоже, это локаль Unicode (версия 5). Он содержит следующее, и я считаю, что вам нужно внести изменения:
% ENCLOSED ALPHANUMERICS/
<U24D0>..<U24E9>;/
Если вам интересно, функция ctype_output (ld-ctype.c) вызывает allocate_arrays, который вызывает wcwidth_table_init. Функция wcwidth_table_init генерируется 3level.h (которая также генерирует другие таблицы, которые следуют тому же шаблону). Это цепочка, за которой я следил, чтобы отслеживать файлы в localedate / locales.
Как я уже сказал, я не уверен на 100%, что это правильный стол, но я решил поделиться тем, что нашел.
Похоже, что данные генерируются (очевидно, вручную) localedata/gen-unicode-ctype.c из файлов данных Unicode, опубликованных по адресу http://unicode.org/Public/UNIDATA/. Спасибо Нааффу за то, что он указал мне правильное направление!
Я считаю, что это определено в файле определения локали. Смотрите эту страницу для получения дополнительной информации о локалях. Glibc включает в себя кучу определений локалей в localedate/locales
хотя ни у одного из них нет информации о ширине.