huyphan / NAKL

A Vietnamese input keyboard for Mac OS
GNU General Public License v3.0
83 stars 36 forks source link

lỗi bỏ dấu sau chữ viết #6

Open FOK12 opened 12 years ago

FOK12 commented 12 years ago

không thể bỏ cả 2 dấu cho "ươ" mà chỉ bỏ dấu được 1 chữ "uơ" , kiểu gõ VNI

trungdq88 commented 8 years ago

@huyphan Anh ơi xin hỏi project này còn được maintain không ạ? Rất cảm ơn anh đã xây dựng app này và open source nó.

trungdq88 commented 8 years ago

@huyphan nếu anh không còn thời gian để maintain project, anh có thể hướng dẫn cho em một số chỗ trong source code mà em đang không hiểu được không? VD chỗ này:

File: utf8.h

ushort vniModifiersMap[] = {
    191, 63, 31, 127, 95,  31, 256
};

Các con số trong mảng này có ý nghĩa gì vậy ạ?

trungdq88 commented 8 years ago

@huyphan em đã hiểu tác dụng của mảng vniModifiersMap, tuy nhiên em không rành về các toán tử bitwise lắm, anh có thể chia sẻ cách anh tính toán ra các số trong mảng này được không?

ushort vniModifiersMap[] = {
    // Valid chars for:
    //a   e  i    o   u   y   d
    191, 63, 31, 127, 95, 31, 256
};
huyphan commented 8 years ago

Hi @trungdq88,

Mảng vniModifiersMap được dùng kèm với ba mảng sau để xác định có nên tiến hành bỏ dấu khi một phím vừa được bấm:

char modifiedChars[] = "aeiouyd";
char vniModifierKeys[] =  "123456789";
char telexModifierKeys[] = "sfrxjaeowd";

Đúng như bạn comment ở trên, giá trị trong mảng vniModifiersMap tương ứng với các ký tự có thể bị thay đổi trong quá trình gõ ('a', 'e', 'i', 'o', 'y', 'u', 'd'). Trong đó, giá trị tương ứng với ký tự X sẽ đại diện cho những phím có khả năng thay đổi ký tự X.

Về cách tính các giá trị đó, mình ví dụ với trường hợp của chữ 'a'. Nếu dùng bit 1 và 0 để biểu diễn khả năng một ký tự có thểkhông thể thay đổi ký tự 'a' thì mình sẽ được mảng bit sau:

Ký tự: 1 2 3 4 5 6 7 8 9 
Bit:   1 1 1 1 1 1 0 1 0

Nếu xem mảng bit này là biểu diễn một số nhị phân từ bit thấp đến bit cao, mình sẽ nhận được một số nhị phân là 010111111, tức là 191 ở hệ thập phân.

trungdq88 commented 8 years ago

Hi anh @huyphan,

Cảm ơn anh đã reply, em đã hiểu cách xây dựng các mảng modifiersMap, rất hay, nhưng quả thực là em không tài nào đoán ra được nếu chỉ đọc code mà không có thêm lời giải thích phía trên của anh.

Cuối tuần vừa rồi em xem bộ source này thì thấy nó còn khá nhiều thứ bất cập như cách đặt vị trí dấu thanh, xử lý buffer khi nhấn phím backspace và nhiều behavior khác mà NAKL xử lý rất khác với các bộ gõ chuẩn như Unikey hay Vietkey mà em dùng trước đây. Em có cố gắng fix thử một số lỗi nhưng có vài lỗi khác nằm ngoài khả năng vọc code của em.

Không biết hiện tại anh có kế hoạch gì cho project này có thể chia sẻ được không? NAKL là project bộ gõ Tiếng Việt open source trên OSX duy nhất tồn tại theo như em tìm hiểu, nếu bị bỏ dở thì rất buồn.

Cám ơn anh.