VNTyper

Mình đã viết thư viện bộ gõ tiếng việt cho Flash bằng Actionsrcipt 3 cách đây cũng đã khá lâu, tuy nhiên chưa bao giờ đóng gói nghiêm chỉnh và phát hành rộng rãi cho mọi người dùng, dù đây là một dự án mã nguồn mở (MIT license), vẫn chưa có nhiều người biết đến và sử dụng do thiếu nguồn tài liệu tham khảo. Để tiện cho các nhà phát triển ứng dụng dựa trên nền tảng flash có thể sử dụng bộ gõ tiếng Việt trực tiếp trong Flash, bài viết này giới thiệu sơ lược về các tính năng và cách sử dụng bộ gõ trong một ứng dụng Flash thông thường.

Thư viện được phát hành dưới dạng file .swc, có thể dùng với Flash Develop hoặc Flash IDE (chưa test với FlashBuilder). Phiên bản mới nhất hiện tại là v.0.5, cập nhật ngày 18.06.2011, bạn có thể tải : source Zip hoặc Compiled SWC. Bạn cũng có thể folk hoặc contribute trên Github

Các tính năng cơ bản :

  1. Hỗ trợ 2 chế độ gõ phổ biến : Telex, Vni, Mix (kiểu loạn)
  2. Hỗ trợ 2 loại bảng mã phổ biến : Unicode, Vni
  3. Bỏ dấu tự do (không nhất thiết phải gõ dấu ngay sau nguyên âm)
  4. Chỉnh dấu tự do (nhảy đến vị trí bất kì và sửa dấu từ)
  5. Tự động sửa vị trí dấu (bỏ dấu kiểu cũ)
  6. Đăng ký tự động tắt bộ gõ với một số Textfield hoặc FontName
  7. Công cụ chuyển mã từ bảng mã VNI sang Unicode và ngược lại
  8. Chế độ tự động đổi bảng mã


Cách sử dụng cơ bản:

  1. Khởi tạo trước khi sử dụng : VNTyper cần một đối tượng đích để lắng nghe sự kiện bàn phím. Thông thường ta sẽ khởi tạo VNTyper với stage hoặc this.
    //khởi tạo VNTyper với stage : tất cả textfield đều gõ được tiếng Việt
    initVNTyper(stage);
    
    //hoặc cũng có thể khởi tạo với this : tất cả các textfield cấp con / cháu của this đều gõ được tiếng Việt
    initVNTyper(this);
    
    //Kích hoạt bộ gõ kèm bảng mã VNI và 2 chế độ gõ Telex + VNI
    initVNTyper2(this);
    
    
  2. Bật/tắt bộ gõ :
    VNTyper.enable();//bật bộ gõ
    VNTyper.disable();//tắt bộ gõ

Kích hoạt bảng mã bổ sung :

Trong đại đa số các ứng dụng chúng ta chỉ cần dùng font Unicode, do đó bộ gõ mặc định chỉ nên import bảng mã Unicode. Nếu bạn cần hỗ trợ các bảng mã khác, bạn sẽ phải kích hoạt bổ sung bảng mã này trước khi có thể sử dụng. Việc chỉ kích hoạt các bảng mã cần thiết không chỉ giúp giảm nhẹ dung lượng của thư viện mà còn giảm thiểu sự tốn kém về bộ nhớ (để lưu trữ bảng thông tin đối chiếu các ký tự)

//đăng ký hỗ trợ bảng mã ABC
VNTyper.addEncoder(ABCEncoder);

//yêu cầu sử chuyển sang sử dụng bảng mã ABC
VNTyper.encodingMethod = ABCEncoder.id;

//yêu cầu quay trở lại sử dụng bảng mã Unicode
VNTyper.useEncoding_Unicode();

Kích hoạt các chế độ gõ khác (Telex và Vni) :

Mặc định thư viện đã kích hoạt chế độ gõ Mix (loạn) thích hợp cho hầu hết người người dùng sử dụng kiểu gõ telex và vni, nếu bạn o thích chế độ gõ này thì bạn có thể đổi sang các chế độ gõ khác, hiện tại thư viện có dựng sẵn 2 chế độ gõ khác là telex và vni. Giống như bảng mã, 2 chế độ gõ này cần được kích hoạt trước khi sử dụng :

//đối với kiểu gõ Telex
VNTyper.addTypingMode(TelexMode)
	.useInputMode_Telex();

//đối với kiểu gõ VNI
VNTyper.addTypingMode(VniMode)
	.useInputMode_VNI();

//yêu cầu chuyển lại sang chế độ gõ mix
VNTyper.useInputMode_Mix();

Chế độ tự động tắt bộ gõ :

Đôi khi trong ứng dụng, bạn có một vài textfield mà nội dung không hỗ trợ tiếng Việt (địa chỉ email, password, username …), chế độ mặc định bật bộ gõ cho các tất cả các field sẽ gây rắc rối cho người dùng do phải chỉnh sửa và xóa dấu không cần thiết, vì vậy đối với những textfield này, tắt bộ gõ đi là tốt nhất. Cũng có khi trong ứng dụng của bạn sử dụng nhiều font, một vài trong số đó không có các ký tự tiếng Việt, việc kiểm tra và tắt bộ gõ bằng tay có thể sẽ phải tốn công tốn sức, trong những trường hợp đó, đăng ký chế độ tự động tắt bộ gõ là cách đơn giản nhất.

//tắt bộ gõ với textfield : user sẽ không thể gõ tiếng Việt vào những textfield này
VNTyper.ignore(textfield);
//với fontName Arial : Khi một textfield bất kỳ sử dụng font Arial, user sẽ không gõ được tiếng Việt vào textfield đó
VNTyper.ignore("Arial");

//gỡ bỏ chế độ tắt bộ gõ với textfield
VNTyper.unIgnore(textfield);
//với fontName Arial
VNTyper.unIgnore("Arial");

Chuyển mã Unicode sang VNI và ngược lại :

//nếu bảng mã đã được đăng ký với VNTyper
VNTyper.getEncoder(VniEncoder.id)
	.fromUnicode("đó là một buổi chiều mùa hạ") //kết quả : ñoù laø moät buoåi chieàu muøa haï
	//.toUnicode("ñoù laø moät buoåi chieàu muøa haï")  //kết quả : đó là một buổi chiều mùa hạ

//nếu chưa đăng ký, và cũng o muốn đăng ký, chỉ muốn convert
VniEncoder.instance
	.fromUnicode("đó là một buổi chiều mùa hạ"); //kết quả : ñoù laø moät buoåi chieàu muøa haï
	//.toUnicode("ñoù laø moät buoåi chieàu muøa haï")  //kết quả : đó là một buổi chiều mùa hạ

Chế độ tự động chuyển bảng mã :

Khi ứng dụng cho phép tải font động từ thư viện bên ngoài, việc kiểm tra và đổi bảng mã nếu cần thiết khi thay đổi font có thể sẽ làm phức tạp hóa ứng dụng. Để giúp nhà phát triển quản lý font và bảng mã VNTyper hỗ trợ chế độ tự động chuyển đổi bảng mã. Nhà phát triển cần đăng ký tên font với bảng mã tương ứng, nếu gặp những font chưa đăng ký, thư viện sẽ chuyển về dùng bảng mã mặc định là Unicode. Tất nhiên, bạn vẫn phải đăng ký tất cả các bảng mã bạn cần dùng thì thư viện mới hoạt động được.

VNTyper.addEncoder(VniEncoder) //đăng ký bảng mã Vni với VNTyper
	.autoFontEncode("Vni-Times", VniEncoder.id); //đăng ký font Vni-Times để dùng với bảng mã Vni

//đăng ký thêm 3 font Vni-thuphap, Vni-win, Vni-roma để dùng với bảng mã vni
VNTyper.autoFontEncode(["Vni-thuphap", "Vni-win", "Vni-roma"], VniEncoder.id);

Các tính năng dự tính sẽ bổ sung :

  1. Hỗ trợ FTE
  2. Phím tắt để bật tắt bộ gõ
  3. Phím tắt khôi phục từ bị sửa dấu / bỏ dấu sai (đổi lại thành tiếng Anh)
  4. Overlay icon
  5. Kiểu gõ VIQR
  6. Các bảng mã thông dụng khác
  7. Công cụ phát hiện bảng mã tự động
  8. Kiểm tra chính tả

Bonus danh sách các ký tự tiếng việt của 2 bảng mã

//font VNI
AØ,AÙ,AÂ,AÕ,EØ,EÙ,EÂ,Ì,Í,OØ,OÙ,OÂ,OÕ,UØ,UÙ,AÊ,Ñ,Ó,UÕ,Ô,aø,aù,aâ,aõ,eø,eù,eâ,ì,í,oø,où,oâ,oõ,uø,uù,aê,ñ,ó,uõ,ô,Ö,AÊ,AÏ,AÛ,AÁ,AÀ,AÅ,AÃ,AÄ,AÉ,AÈ,AÚ,AÜ,AË,EÏ,EÛ,EÕ,EÁ,EÀ,EÅ,ö,aê,aï,aû,aá,aà,aå,aã,aä,aé,aè,aú,aü,aë,eï,eû,eõ,eá,eà,eå,EÃ,EÄ,Æ,Ò,OÏ,OÛ,OÁ,OÀ,OÅ,OÃ,OÄ,ÔÙ,ÔØ,ÔÛ,ÔÕ,ÔÏ,UÏ,UÛ,ÖÙ,ÖØ,eã,eä,æ,ò,oï,oû,oá,oà,oå,oã,oä,ôù,ôø,ôû,ôõ,ôï,uï,uû,öù,öø,ÖÛ,ÖÕ,ÖÏ,YØ,Î,YÙ,YÛ,YÕ,öû,öõ,öï,yù,yø,î,yû,yõ

//font Unicode
À,Á,Â,Ã,È,É,Ê,Ì,Í,Ò,Ó,Ô,Õ,Ù,Ú,Ă,Đ,Ĩ,Ũ,Ơ,à,á,â,ã,è,é,ê,ì,í,ò,ó,ô,õ,ù,ú,ă,đ,ĩ,ũ,ơ,Ư,Ă,Ạ,Ả,Ấ,Ầ,Ẩ,Ẫ,Ậ,Ắ,Ằ,Ẳ,Ẵ,Ặ,Ẹ,Ẻ,Ẽ,Ế,Ề,Ể,ư,ă,ạ,ả,ấ,ầ,ẩ,ẫ,ậ,ắ,ằ,ẳ,ẵ,ặ,ẹ,ẻ,ẽ,ế,ề,ể,Ễ,Ệ,Ỉ,Ị,Ọ,Ỏ,Ố,Ồ,Ổ,Ỗ,Ộ,Ớ,Ờ,Ở,Ỡ,Ợ,Ụ,Ủ,Ứ,Ừ,ễ,ệ,ỉ,ị,ọ,ỏ,ố,ồ,ổ,ỗ,ộ,ớ,ờ,ở,ỡ,ợ,ụ,ủ,ứ,ừ,Ử,Ữ,Ự,Ỳ,Ỵ,Ý,Ỷ,Ỹ,ử,ữ,ự,ý,ỳ,ỵ,ỷ,ỹ

Nếu có ý tưởng hoặc yêu cầu bổ sung nào đó, các bạn có thể để lại góp ý bên dưới, mình sẽ xem xét và chỉnh sửa lại để VNTyper trở thành bộ gõ tiếng Việt tốt nhất cho Flash. Nếu bạn dùng VNTyper trong ứng dụng của mình hãy để lại link bên dưới để mọi người cùng tham khảo, trong quá trình sử dụng nếu phát hiện bug hãy báo về cho thienhaflash@gmail.com mình sẽ cập nhật bản sửa lỗi sớm nhất có thể.

Leave a comment