2009-05-05 22 views
5

Glibc lấy cơ sở dữ liệu thuộc tính unicode của nó ở đâu, cho các chức năng như ví dụ, wcwidth()? Tôi quan tâm đến việc sửa chữa một số mục nhập sai, nhưng tôi dường như không thể tìm thấy thông tin này ở đâu trong bản phân phối nguồn của nó.Glibc lấy cơ sở dữ liệu thuộc tính unicode ở đâu?

Nếu nó quan trọng, tôi chủ yếu quan tâm đến điều này dưới Linux debian hoặc ubuntu.

Trả lời

1

Được rồi, vì vậy tôi chỉ chọc xung quanh bản thân mình vì vậy tôi không hoàn toàn chắc chắn, nhưng có vẻ như các bảng mà bạn đang tìm kiếm được tìm thấy ở vị trí sau liên quan đến gốc glibc:

localedata/locales/i18n 

Có vẻ như đây là ngôn ngữ Unicode (phiên bản 5). Nó chứa thông tin sau, đó là nơi tôi tin rằng bạn cần phải thực hiện những thay đổi của bạn:

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

Trong trường hợp bạn đang tự hỏi, hàm ctype_output (ld-ctype.c) gọi allocate_arrays trong đó kêu gọi wcwidth_table_init. Hàm wcwidth_table_init được tạo bởi 3level.h (cũng tạo ra các bảng khác theo cùng một khuôn mẫu). Đây là chuỗi mà tôi theo dõi để theo dõi các tập tin trong localedate/locale.

Như tôi đã nói, tôi không chắc chắn 100% rằng đây là bảng bên phải, nhưng tôi nghĩ tôi sẽ chia sẻ những gì tôi đã tìm thấy.

+1

Nhận xét trong tệp đó đề xuất tệp được tạo bởi localedata/gen-unicode-ctype.c, nói về tệp UnicodeData, nhưng tệp UnicodeData ở đâu được sử dụng trong phân phối glibc ...? Tôi không muốn vá một tập tin được tạo ra, có vẻ như nó sẽ bị dính trong lần phát hành mới. – bdonlan

+0

Hmmm ... đó là một điểm tốt. Bạn đã thử sửa đổi tệp đã tạo chưa, chỉ để xác minh rằng wcwidth() trả về các giá trị chính xác? Điều này có thể hữu ích vì nó sẽ chứng minh rằng chúng ta đang đi đúng hướng. Sau đó, chúng tôi có thể nỗ lực nhiều hơn để tìm hiểu cách các tệp được tạo ra để vấn đề có thể được khắc phục ở gốc của nó. – Naaff

+0

@bdonlan: Họ đã cập nhật để chạy lại bằng tệp UnicodeData Unicode 6.0.0 chưa? Có thể nó đã được sửa trong bản phát hành hiện tại. – tchrist

0

Tôi tin rằng nó được xác định trong tệp định nghĩa miền địa phương. Xem this page để biết thêm thông tin về ngôn ngữ. glibc bao gồm một loạt các định nghĩa địa phương trong localedate/locales, mặc dù không có định nghĩa nào trong số chúng dường như có bất kỳ thông tin chiều rộng nào.

+0

Tuy nhiên, ngôn ngữ được tạo bởi ứng dụng localedef mà ... đi kèm với glibc. Tôi quan tâm nhiều hơn trong việc tìm kiếm vị trí chuẩn để chỉnh sửa thông tin này ... – bdonlan

2

Dường như dữ liệu được tạo bởi (rõ ràng theo cách thủ công) localedata/gen-unicode-ctype.c từ các datafiles unicode được xuất bản tại http://unicode.org/Public/UNIDATA/. Cảm ơn Naaff đã chỉ cho tôi đúng hướng!

Các vấn đề liên quan