• Thứ Ba, 16/03/2004 14:12 (GMT+7)

    Tổng quan về phần mềm chữ Hán và chữ Nôm

    Các phần mềm chữ Hán, chữ Nôm có điểm giống với các bộ phần mềm tiếng Việt, bao gồm 3 cột trụ cơ bản là:
        1. Bộ gõ và các quy ước gõ (là một chương trình quản lý bàn phím, chữ Hán gọi là Thâu nhập pháp - viết tắt là TNP, tiếng Anh là Input Method Editor - viết tắt là IME).
        2. Bộ font chữ theo một chuẩn mã nào đó và chương trình để hiển thị font chữ.
        3. Các tiện ích bổ trợ khác để tra cứu (ví dụ từ điển), hay đổi mã v.v.
        Trong ba cột trụ đó thì TNP (IME, gọi nôm na là bộ gõ), là căn bản nhất về phương diện kỹ thuật. Cái khác giữa TNP để đánh tiếng Hoa với các bộ gõ tiếng Việt chủ yếu là hình thức: TNP chữ Hán hay Nôm luôn phải hiển thị một cửa sổ chọn chữ nhỏ để chọn chữ cần đánh, chứ không thể đánh trực tiếp ngay vào văn bản như khi đánh tiếng Việt. (hình 1)
    Về việc hiển thị font chữ: các bộ tiếng Việt dùng font TTF của Windows khoán trắng cho hệ điều hành khâu hiển thị, trong khi các phần mềm chữ Hán dùng font FNT thì tác vụ này phải có chương trình riêng thực hiện, các phần mềm chữ Hán dùng font TTF 2 byte như Song Kiều NT cũng không bỏ mặc Windows quản lý hiển thị mà có can thiệp một phần, ví dụ nó có thể hiển thị các font FNT của các phiên bản Song Kiều trước, hay ánh xạ các font tiếng Anh thành font chữ Hán.
    Trong các tiện ích bổ trợ thì thông thường nhất là các bộ đổi mã và tự điển. Các phần mềm đánh chữ thường phải làm cả nhiệm vụ xử lý ngôn ngữ, ví dụ như phần mềm tiếng Việt VNI có cả khâu hỗ trợ tự điển, nhưng ABC, Vietware còn để trắng khâu này. Các phần mềm chữ Hán thường phải kèm thêm một tiện ích vẽ font để vẽ một số chữ ít dùng không có sẵn trong các bộ font chuẩn, một tiện ích để đổi chữ Hán thành hình vẽ (các trang Web tiếng Hoa rất hay dùng 'chiêu' này để hiển thị những font chữ mỹ thuật mà máy khách ít có). Ngoài ra có thể còn có tiện ích khai báo TNP riêng do người dùng tự định nghĩa và một tiện ích bản đồ font (charmap.exe) để xem mã font và copy từng chữ khi cần, vì charmap.exe của Windows không thể hiển thị font FNT.

    KHÁI NIỆM VỀ THÂU NHẬP PHÁP 
    Để có thể đánh hàng vạieät nam chữ hánhay chữ nôm chỉ với vài chục phím trên bàn phím của máy tính người ta phải đưa ra cái gọi là Thâu nhập pháp (TNP). Cơ sở của mỗi TNP là một tự điển cho phép đối ứng một hay nhiều chữ Hán hay Nôm với một số tương đối ít các chữ cái trên bàn phím, gọi là 'mã nhập', thường không quá 7 phím, theo những quy tắc nhất định có thể là theo mã phiên âm hay mã tự hình của con chữ. Hình 2 là ví dụ định dạng đoạn đầu của tự điển TNP (IME) Bính âm của Song Kiều, cho phép đánh chữ Hán theo âm phổ thông Trung Quốc.
    Nhiệm vụ của các phần mềm đánh chữ Hán hay Nôm là từ các tổ hợp phím do người sử dụng đánh vào (mã nhập) và căn cứ tự điển TNP hiện dùng mà đưa ra tất cả các chữ Hán hay Nôm tương ứng mã nhập đó, hiển thị trong một cửa sổ nhỏ cho phép người sử dụng chọn chữ cần đánh bằng bàn phím hay chuột.
    Để giải quyết nhiệm vụ nói trên chương trình TNP phải có khả năng bắt giữ bàn phím tương tự như các bộ gõ tiếng Việt VietKey, VNI, ABC ... Kĩ thuật thông thường là viết một thư viện động (dạng *.DLL)  gọi hàm KeyboardHook của Windows API để 'móc nối' nắm quyền xử  lý bàn phím rồi gửi các phím đã bắt giữ về cho cửa sổ chương trình bằng các hàm SendMessage hay PostMessage, để chương trình xử lý phím gõ và hiển thị các chữ đồng mã cho người dùng chọn...

    Song Kiều, Windows tiếng Hoa và các bộ tiếng Hoa khác như Chinese Star đều cung cấp khả năng khai báo TNP do người dùng tự soạn bằng cách soạn tập tin từ điển TNP (IME) dạng văn bản sau đó chạy tiện ích du nhập TNP (IME) mới vào chương trình. Song Kiều chỉ cho khai báo thêm 3 tập tin từ điển TNP (IME)  đặt tên là univers1.txt, univers2.txt và univers3.txt. Windows tiếng Hoa và Chinese Star 2.0 cũng có khả năng này nhưng Chinese Star 2.5 thì đã giấu đi, phải có 'mẹo' mới dùng được. 'Phát minh' ra khả năng này của Song kiều là các ông Lê Anh Minh, Lê Quý Ngưu và đã công bố trên tập san Thông tin KHKT của Sở KHCNMT Thừa Thiên-Huế. Nhóm chúng tôi đã nắm vững vấn đề này từ hơn một năm trước đó và đã tạo được TNP đánh chữ Hán theo phiên âm Hán Việt mã telex không những khai báo cho Song Kiều mà cả Windows tiếng Hoa và Chinese Star. Tuy nhiên các TNP 'kí gửi' này không có khả năng hiển thị tường minh dấu tiếng Việt, bị hạn chế về số phím bấm và quan trọng nhất là không có khả năng chạy độc lập với các phần mềm tiếng Hoa tương ứng. Vì vậy chúng tôi đã ấp ủ ý tưởng viết chương trình phần mềm độc lập cho phép đánh chữ Hán và chữ Nôm có hiển thị tường minh dấu tiếng Việt và đánh được cả mã tiếng Việt thông dụng hiện nay như Unicode, VNI, TCVN3, Vietware... cùng nhiều khả năng tuỳ biến khác.
    Xin giới thiệu với các bạn Website về các phần mềm thâu nhập pháp tiếng Hoa: http://input.foruto.com. Chỉ từ tháng 1 tới tháng 8/2002 đã có gần 30 phiên bản thâu nhập pháp mới đủ loại được giới thiệu trên Website này.

    KHÁI NIỆM CHUNG VỀ FONT CHỮ VÀ MÃ FONT TIẾNG HOA
    Hiện nay trên hệ điều hành Windows tồn tại hai kiểu Font chữ phổ biến là Postscript hay Adobe Type của hãng Adobe và True Type theo chuẩn của hãng Microsoft. Font của Adobe vốn có danh tiếng từ lâu và được nhận định là đẹp hơn font của Microsoft, tuy nhiên có lẽ việc giữ bí mật định dạng và bản quyền khắt khe của Adobe khiến nó trở nên thất thế, trong lúc chuẩn True Type của Microsoft ngày càng phổ biến và chất lượng ngày càng nâng cao. Theo nhận định của chúng tôi thì Song Kiều và Chinese Star dùng font Adobe Type (file có đuôi *.FNT) còn font chữ Hán của Windows tiếng Hoa, Windows 2000 là True Type (file có đuôi *.TTF).
    Font 2 byte có khả năng quản lý được 256x256=65.536 kí tự, font 1 byte chỉ quản lý được 256 kí tự, font tiếng Hoa dầu là phồn thể hay giản thể cũng đều là font 2 byte thực sự, có thế mới quản lý được hàng vạn chữ Hán. Còn vấn đề mã của các ký tự chữ Hán cũng khá phức tạp vì hiện tại chữ Hán dùng tới hai hệ thống font phồn thể (thông dụng ở Đài loan, Hồng Công, Mỹ... cơ sở là hệ font mã BIG5) và giản thể (dùng ở CHND Trung hoa, Singapore, cơ sở là hệ font mã BG), mỗi hệ thống đều có biến thể mở rộng khác nhau, liên tục được bổ sung và hiện nay đều được chấp nhận vào bộ mã Unicode quốc tế.
    Trong hệ mã BIG5 và BG mỗi kí tự 2 byte được coi là tổ hợp của 2 kí tự 1byte trong đó kí tự đầu luôn luôn nằm ở khu vực mã cao của font 1byte (mã ASCII>159), kí tự sau có thể nằm ở khu vực mã cao (đối với mã BG) hay có thể nằm lấn sang cả khu vực mã thấp (đối với mã BIG5), đây là điều cần chú ý khi lập trình để nhận biết chữ Hán.
    Trước đây chỉ có hệ điều hành Windows NT và Windows tiếng Hoa có khả năng nhận diện và xử lý font 2 byte, còn Windows 3x, 9x tiếng Anh không hỗ trợ nên bắt buộc phải cài các trình hỗ trợ tiếng Hoa như Song Kiều hay Chinese Star... Nhưng từ Windows2000 trở lên, hệ điều hành đã có khả năng quản lý font Unicode 2 byte. Có một điều thú vị cần biết là tuy nền Windows 9x chưa có khả năng hỗ trợ font 2 byte nhưng nhiều ứng dụng của nó như Internet Explorer version 4.0/5.0/6.0 và MS Word 97/2000 đã có khả năng nhận diện và hiển thị được các font 2 byte, đáng tiếc đó chỉ là các font TTF của họ nhà Microsoft chứ không phải là font FNT. Phát hiện rất có giá trị này đã giúp chúng tôi giải quyết được bài toán đánh và hiển thị chữ Hán, chữ Nôm Unicode ngay trong hệ điều hành Win9x mà không cần nâng cấp lên Win2000, 'chiêu' này chúng tôi phải nghĩ tới vì hệ điều hành Win9x hiện vẫn còn phổ biến trong các máy tính để bàn ở nước ta. Giải pháp kĩ thuật của chúng tôi là phối hợp sử dụng cơ cấu hiển thị font 2 TTF byte của IE5.0/6.0, MS Office 97, và cả Visual Basic để xử lý vấn đề này.
    Hệ điều hành và các chương trình đời mới (sau năm 2000) nếu có khả năng quản lý font 2byte chữ Hán thì thường có thể nhận diện được cả hai dạng mã chữ Hán là mã Unicode và mã tổ hợp 2 kí tự như mã BIG5 và GB, một số chương trình có thể tự động đổi mã giữa hai dạng mà không cần dùng phần mềm đổi mã nào cả. Ví dụ chữ 'nhất', mã Unicode là 19968, mã BIG5 là A440 được coi là tổ hợp hai kí tự mã Hexa &HA4(164) tức chữ  'í' và &H40(64) tức chữ '@' trong các font tiếng Anh, khi không khởi động Song Kiều ta trông thấy chữ 'nhất' có dạng là hai kí tự 'í@' trong các font tiếng Anh.
        Sau đây là ví dụ một đoạn tự điển đối ứng mã BIG5 với mã Unicode:
    A440 19968
    A441 20057
    A442 19969
    A443 19971
    A444 20035
    v.v...
    Các bảng đối chiếu mã này chúng tôi đã soạn ra cho mục đích lập trình các tiện ích đổi mã chữ Hán và hỗ trợ chức năng tự động nhận biết chữ Hán trong thao tác kéo và thả chữ vào các chương trình tự điển, và chức năng hỗ trợ phiên âm tự động trong chương trình của chúng tôi.
    Chú ý: một số chương trình của Microsoft  hiển thị mã Unicode trong đoạn từ &HFFFF/2 (32768) tới &HFFFF(65536) thành mã âm, quy tắc đổi mã âm sang mã dương đơn giản là cộng với số Hexa &HFFFF.

    VẤN ĐỀ MÃ UNICODE CHỮ NÔM
    Unicode là đề tài đang được quan tâm sôi nổi của giới công nghệ thông tin để chuẩn mã cho tiếng Việt, có thể xem các bài viết về vấn đề này trên mạng hay PC World VN, đặc biệt là các bài viết của TS Ngô Trung Việt ở Viện Công nghệ Thông tin, ở đây chúng tôi không dám lạm bàn mà chỉ điểm qua một số khía cạnh liên quan tới chữ Nôm và vấn đề đưa chữ Nôm vào chuẩn Unicode mà chúng tôi nắm được.
    Trước hết xin thông báo một tin vui: Chữ Nôm đã được chấp nhận vào bộ mã Unicode quốc tế, phần cơ bản nhất gồm 9.299 chữ Nôm trong đó có khoảng một nửa là các chữ Nôm trùng hình với chữ Hán hay là mượn ngay chữ Hán, chỉ có chưa tới 5.000 chữ là thuần Nôm (Số lượng chữ Nôm đang được tiếp tục bổ sung thêm, nhưng theo thiển ý của chúng tôi thì với 9.299 chữ này đã có thể chế bản giới thiệu nhiều tác phẩm Nôm kinh điển của Việt Nam).
    Nhưng kèm theo là một tin buồn: Các chữ thuần Nôm của Việt Nam đã bị đẩy lên khu vực mặt phẳng mã hoá bổ sung thứ hai (hay là mặt phẳng thứ 3 nếu tính mặt phẳng đa ngữ cơ sở là thứ 1) chứ không được ở trong mặt phẳng đa ngữ cơ sở, tức là trong khu vực mã Unicode 2 byte thông thường, tức 65536 kí tự đầu tiên (mỗi mặt phẳng chứa 256x256=65536 kí tự). Xin xem thêm các bài viết về Unicode để hiểu rõ hơn, ở đây chỉ nói ra một sự thật không vui là các chữ thuần Nôm của ta không có chỗ trong các font unicode 2 byte thông thường! Trên lý thuyết thì cũng là mã Unicode cả, nhưng trong các ứng dụng thiết thực trước mắt thì có sự khác nhau rất lớn giữa các chữ ở trong hai mặt phẳng trên. Để biểu diễn các ký tự ở mặt phẳng bổ sung thứ 2 cần dùng 3 hay 4 byte. Theo bài của TS Ngô Trung Việt và TS Trần Lưu Chương thì việc dùng Unicode tới nay chỉ tập trung ở mặt phẳng cơ sở, các cơ chế khác để sử dụng chữ ở các mặt phẳng cao hơn đã có nhưng chưa có nhiều công ty phần mềm thực hiện. Chúng tôi không rõ các phần mềm Windows thông thường hiện nay có phần mềm nào đã hỗ trợ truy cập Unicode ở các mặt phẳng cao? chẳng hạn khi lập trình VB6 mà cho một đối số lớn hơn 65535 vào hàm ChrW(), chắc chắn chương trình của bạn sẽ bị 'dội bom'.

    Do vấn đề trên, để đánh và hiển thị chữ thuần Nôm trong văn bản MS Office và IE, các nhà chuyên môn đề cập cách giải quyết tạm thời là đưa các chữ thuần Nôm vào khu vực mã được tự do định nghĩa trong Unicode 2 byte, khu vực này có hơn 6000 mã từ E000 tới F800, thừa đủ cho các chữ thuần Nôm. Tuy nhiên để dễ 'đánh lừa' MS Word và các trình duyệt như Internet Explorer (IE), chúng tôi chọn cách giải quyết là cho các chữ thuần Nôm chiếm dụng các mã mở rộng của khu vực CJK, là khu vực dành riêng cho chữ Hán từ mã 19968 tới 40868, ứng với số hexa 4E00 tới 8000. Nói cho chính xác thì CJK là khu vực các chữ Hán (C=Chinese) dùng chung cho cả chữ Nhật (J=Japan) và chữ Hàn (K=Korea). Chúng tôi chỉ chiếm dụng các mã mở rộng của CJK chứ không xâm phạm gì tới các chữ tiêu chuẩn trong khu vực này, cho nên có thể dùng bộ font chữ Nôm Unicode của chúng tôi để xem các trang tiếng Hoa thông thường (cả giản lẫn phồn thể). Đây là cách giải quyết 'cực chẳng đã', vì cho đến nay chúng tôi cũng chưa có trong tay các tập tin dữ liệu về các chữ Nôm của Unicode3.1 và bảng dự kiến ánh xạ mã chữ thuần Nôm vào khu vực mã tự do định nghĩa của Unicode 2 byte, còn một lý do nữa là các chữ thuần Nôm của chúng tôi chọn có lẽ chỉ trùng 80% với các chữ do Viện Hán Nôm chọn.
    Có thể bạn thắc mắc tại sao phải đi 'đánh lừa' MS Office và các trình duyệt như trên? việc này không có lý do biện minh gì về lý thuyết mà chỉ do kinh nghiệm thực tế của chúng tôi khi 'đánh vật' với MS Word để hiển thị các chữ Nôm... cũng có thể là do chúng tôi chưa biết cách giải bài toán này. Nhưng một khi chuẩn Unicode chữ Nôm được công bố chính thức, chúng tôi sẽ sửa chương trình và font chữ của mình theo đúng chuẩn.
    Theo thiển ý của chúng tôi, muốn thống nhất việc sử dụng chữ Nôm trong máy tính thì phải mạnh dạn tinh giản, chỉ tuyển khoảng dưới 10.000 chữ cho bộ font chữ Nôm 'công nghiệp', ngay cả TQ cũng hiện đang dùng bộ chữ giản thể có khoảng 6.700 chữ. Trong số 10.000 chữ Nôm đó thì chưa tới 5.000 chữ là khác chữ Hán - tức là thuần Nôm, còn lại là mượn hay là trùng với chữ Hán. Việc trùng lặp này không có gì ngạc nhiên lắm vì các quy cách cấu tạo chữ Nôm mới cũng theo như quy cách tạo chữ Hán mới, chẳng hạn phép cơ bản là phép hình thanh (lấy một chữ đồng âm hay gần âm, thêm bộ thủ chỉ nghĩa để khu biệt) rất dễ tạo ra sự trùng lặp ngẫu nhiên với một chữ Hán đã có mà hiếm dùng nên người tạo chữ cũng không biết.

    VẼ FONT CHỮ NÔM
    Theo các tài liệu do TS Ngô Trung Việt cung cấp thì các chữ Nôm gửi cho tổ chức Unicode do Viện Hán Nôm thực thiện dưới dạng bitmap 96x96, dạng này chủ yếu để hiển thị trên màn hình chứ khó dùng để chế bản. Hội Văn tự kính ở Tokyo Nhật bản có vẽ giúp cho Việt Nam một bộ font chữ Nôm, và công ty DynaLab của Trung Quốc cũng có thực hiện vẽ font chữ Nôm (nhưng phải thương lượng để có bản quyền sử dụng), cả hai tổ chức này đều vẽ font TTF dựa trên bộ 9299 chữ Nôm do VN gửi cho tổ chức Unicode, đã được chấp nhận trong SuperCJK. Ngoài ra, Thiền Viện Viên Chiếu ở Đồng Nai cũng đã tổ chức vẽ một bộ font chữ Nôm rất đồ sộ, rất tiếc là tất cả các bộ font này chỉ mới nghe danh chứ người cần dùng không biết tìm ở đâu (dù là freeware hay bỏ tiền mua), và thực sự chúng tôi không biết họ dùng cách nào để ánh xạ mã số cho các chữ thuần Nôm (?), các chương trình vẽ font mà chúng tôi biết đều không cho phép gán mã quá 65535.
    Công việc vẽ font mất nhiều công sức và thời gian, khó có thể lợi dụng tốc độ của máy tính, và khó san sẻ cho nhiều người làm do vấn đề quản lý các chữ  đã vẽ rồi tập hợp đưa vào bộ font. Người vẽ cũng không thể chỉ là nhân viên đồ hoạ máy tính thông thường mà phải biết khá nhiều chữ Hán, chữ Nôm và các quy tắc tạo chữ, như vậy mới hiệu chỉnh được các chữ sai sót, các nét bút sai, các chữ trùng lặp... Các chương trình vẽ font thông thường nói chung không thể vẽ được font 2 byte dung lượng lớn, ví dụ Font Creator 2.0 không tải được các font TTF chữ Hán, Font Creator 3.0 thì có thể tải nhưng nếu máy cấu hình yếu (dưới 300MHz) thì khó mà chạy nổi.
    Phần mềm Hán Nôm của chúng tôi dự kiến trang bị bước đầu hai bộ font chữ Nôm cơ bản là Chữ Nôm Khải và Chữ Nôm Minh True Type 2 byte, chỉ từng đó cũng phải tốn chừng 320 ngày công vẽ (một người làm suốt một năm). Chúng tôi cũng suy nghĩ nhiều để tìm giải pháp cải tiến kỹ thuật có hiệu quả cho công việc này, nhưng vẫn phải lấy hai chữ 'lao động' làm chính. Hiện nay chúng tôi có thể mạnh dạn công bố là đã làm xong hai font chữ đó, dù có thể còn có một số sai sót.

    Nhóm làm phần mềm Hán nôm 2002
    Phan Anh Dũng
    Email:fanzung@pmail.vnn.vn

    ID: A0306_81