2009-05-05 11 views
5

¿Dónde obtiene glibc su base de datos de atributos Unicode, para funciones tales como, por ejemplo, wcwidth()? Estoy interesado en corregir algunas entradas errantes, pero parece que no puedo encontrar dónde está esta información en su distribución fuente.¿Dónde obtiene glibc su base de datos de atributos Unicode?

Si es importante, estoy principalmente interesado en esto en debian o ubuntu linux.

Respuesta

1

bien, así que estoy hurgando mí mismo así que no estoy completamente seguro, pero parece que la tabla que está buscando se encuentra en la ubicación siguiente relativa a la raíz glibc:

localedata/locales/i18n 

Esta parece ser la configuración regional de Unicode (versión 5). Contiene lo siguiente, que es donde yo creo que necesita para realizar sus cambios:

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

En caso de que se esté preguntando, la función ctype_output (ld-ctype.c) llama allocate_arrays que se pide wcwidth_table_init. La función wcwidth_table_init es generada por 3level.h (que también genera otras tablas que siguen la misma plantilla). Esta es la cadena que seguí para rastrear los archivos en localedate/locales.

Como dije, no estoy 100% seguro de que esta sea la tabla correcta, pero pensé en compartir lo que había encontrado.

+1

Los comentarios en ese archivo sugieren que es generado por localedata/gen-unicode-ctype.c, que habla de un archivo UnicodeData, pero ¿dónde está el archivo UnicodeData? que se usa en la distribución de glibc ...? No quiero parchar un archivo generado, parece que se volvería pegajoso la próxima vez que haya una nueva versión. – bdonlan

+0

Hmmm ... ese es un buen punto. ¿Has intentado modificar el archivo generado de todos modos, solo para verificar que wcwidth() devuelve los valores correctos? Esto podría ser útil, ya que demostraría que estamos en el camino correcto. Entonces podríamos esforzarnos más para averiguar cómo se generan los archivos, de modo que el problema se pueda solucionar en su raíz. – Naaff

+0

@bdonlan: ¿Han actualizado eso para volver a ejecutarlo con el archivo UnicodeData de Unicode 6.0.0? Tal vez se ha solucionado en el lanzamiento actual. – tchrist

0

Creo que está definido en el archivo de definición del entorno local. Consulte this page para obtener más información sobre configuraciones regionales. glibc incluye un conjunto de definiciones de configuración regional en localedate/locales, aunque ninguna de ellas parece tener información de ancho.

+0

Sin embargo, las configuraciones regionales son generadas por la aplicación localedef que ... viene con glibc. Estoy más interesado en encontrar la ubicación canónica para editar esta información ... – bdonlan

2

Parece que los datos son generados por localedata/gen-unicode-ctype.c (aparentemente ejecutados manualmente) de los archivos de datos Unicode publicados en http://unicode.org/Public/UNIDATA/. ¡Gracias a Naaff por señalarme en la dirección correcta!

Cuestiones relacionadas