Где 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хотя ни у одного из них нет информации о ширине.

Другие вопросы по тегам