Đối tượng: Bài viết này được viết cho các kỹ sư firmware, quản lý chương trình bản địa hóa và người mua B2B đang tìm nguồn cung các phiên bản tiếng Ả Rập, Hebrew, Urdu hoặc Ba Tư của các bút đọc B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 và Y6 trên 47 quốc gia mà chúng tôi hiện đang xuất khẩu đến. Bài viết giả định bạn đã hiểu language pack là gì, nhưng muốn biết chính xác hai engine văn bản trên thiết bị của chúng tôi — RTL (cũ) và RTL2 (bidi tuân thủ Unicode có shaping) — khác nhau như thế nào về chi phí, dung lượng RAM, kích thước OTA và phạm vi kiểm thử.
Khi một nhà phân phối tại vùng Vịnh tiếp nhận gói thầu trường học 12.000 chiếc và hỏi: “Phiên bản tiếng Ả Rập này có xử lý ghép chữ đúng cách, các dạng ngữ cảnh và thứ tự số hai chiều không?” thì câu trả lời không phải là “có, nó hỗ trợ tiếng Ả Rập”. Câu trả lời trung thực là pipeline build nào, engine nào, font subset nào và chuỗi ký số nào. Chúng tôi đã triển khai hai stack right-to-left khác nhau kể từ khi lược đồ phiên bản firmware đạt 1.6.x, và khoảng cách giữa chúng — về chi phí, thời gian kiểm thử, kích thước trên flash và chất lượng hiển thị — chính là chi tiết quyết định triển khai 40.000 chiếc có thất bại ngay từ ngày kiểm tra đầu tiên hay vận hành trơn tru suốt sáu năm mà không một RMA nào liên quan đến font.
Hướng dẫn này phân tích cách RTL và RTL2 được kiến trúc bên trong firmware bút đọc, chúng khác nhau ở đâu, mỗi language pack được ký và đóng gói ra sao, tác động BOM đối với MOQ màu tùy chỉnh 2.000 chiếc như thế nào, và người mua cần thử áp lực phiên bản Ả Rập/Hebrew/Urdu/Ba Tư trước khi ký PO ra sao. Hãy chờ đợi các sơ đồ khối, số liệu thực tế từ telemetry sản xuất của chúng tôi (47.000+ bút đã xuất, 86 bản phát hành firmware, 12 phiên bản ngôn ngữ đang hoạt động) và checklist 30 giây bạn có thể dán vào email kế tiếp.
1. Tại sao hỗ trợ Right-to-Left là một engine riêng chứ không chỉ là font
Một hiểu lầm phổ biến là RTL chỉ là cờ hướng glyph. Không phải vậy. Tiếng Ả Rập, Hebrew, Urdu và Ba Tư đều yêu cầu:
- Thuật toán hai chiều (bidi) — Unicode UAX #9. Các chuỗi hỗn hợp như “Chapter 3 - الفصل الثالث” cần hướng cơ sở, cấp nhúng và xử lý ghi đè tường minh.
- Ghép chữ / shaping ngữ cảnh — Chữ Ả Rập có tới 4 dạng (đứng riêng, đầu, giữa, cuối) tùy thuộc vào ký tự lân cận. Nếu không có shaping, “كتاب” sẽ hiển thị thành bối glyph rời rạc.
- Hợp chữ Lam-Alef — لا phải là một glyph duy nhất, nếu không thứ tự trực quan sẽ sai.
- Shaping chữ số — Chữ số Ả Rập-Ấn (٠١٢) so với Đông Ả Rập-Ấn (۰۱۲) so với chữ số Latin (012) trong cùng một đoạn văn.
- Xếp chồng dấu phụ — Tashkil và niqqud Hebrew có thể xếp chồng 2–4 dấu cho mỗi ký tự gốc.
Chúng tôi coi đây là bài toán engine, không phải bài toán font. Font chỉ là bảng glyph mà engine truy vấn. Engine quyết định khi nào và glyph nào được sử dụng.
2. RTL (Engine cũ) — Cách nó được xây dựng và lý do nó vẫn tồn tại
2.1 Tóm tắt kiến trúc
RTL là engine bidi thế hệ đầu tiên của chúng tôi, được viết năm 2019 dựa trên tham chiếu bidi giấy phép MIT. Nó hoạt động trên luồng codepoint UTF-16 2 byte, không có shaping, và sử dụng bitmap được raster sẵn cho 256 từ Ả Rập/Hebrew phổ biến nhất.
| Hạng mục | Thông số |
|---|---|
| Mô hình codepoint | UTF-16, đơn vị mã đơn |
| Thuật toán hai chiều | UAX #9 đơn giản hóa (không có cấp L4–L7 tường minh) |
| Nối chữ | Không — dạng đứng riêng cố định theo từng chữ cái |
| Chữ ghép Lam-Alef | Bảng tra cứu, 4 dạng (لا, لأ, لإ, لٱ) |
| Chữ số | Chỉ ASCII 0–9, dòng LTR trong đoạn RTL |
| Định dạng phông chữ | Chỉ số 8-bit vào bảng bitmap 224KB (chỉ 1 kích thước) |
| Dung lượng engine (flash) | 312 KB |
| Dung lượng engine (RAM) | Tập làm việc 18 KB |
| Ký số | MD5 + khóa nhà cung cấp (phiên bản cũ) |
| SKU đang hoạt động | B1 (firmware 2.4.7), B2 (2.4.7), P2 (2.0.3) |
| Số gói ngôn ngữ đang hoạt động | 4 (ar-SA phiên bản cũ, ar-EG phiên bản cũ, he-IL, ur-PK) |
2.2 Vì sao nó vẫn được xuất xưởng trên B1, B2 và P2
Có ba lý do giữ RTL tiếp tục vận hành. Chi phí: B1 và B2 dùng flash NOR 4 MB, và engine RTL để trống 1,1 MB cho nội dung. Chuyển sang RTL2 sẽ tiêu tốn thêm 540 KB, buộc chúng tôi phải bỏ khe sách OID thứ 4. Điện năng: B1 tiêu thụ 700 mAh, và engine phiên bản cũ chỉ thêm 0,4 mA dòng trung bình so với 1,1 mA của RTL2 — đáng kể ở mốc thời lượng 5,0 giờ. Tương thích: 14 nhà phân phối hiện hữu tại các quốc gia vùng Vịnh đang vận hành đội xe B1; chúng tôi sẽ không làm gián đoạn họ.
Mẹo cho người mua: Nếu kênh của bạn nhạy giá (chi phí đến tay dưới 8 USD) và nội dung của bạn là Alif-Baa và sách truyện cơ bản với những câu ngắn, bản RTL kế thừa B1\/B2 là lựa chọn thương mại đúng đắn. Đừng chi tiền cho RTL2 nếu bạn không sử dụng.
3. RTL2 (Engine Tuân Thủ Unicode) — Phiên Bản Thay Thế 2024
3.1 Tóm Tắt Kiến Trúc
RTL2 là engine thế hệ thứ hai của chúng tôi, được xây dựng trên lõi shaping HarfBuzz mã nguồn mở (giấy phép BSD) bao bọc bởi một lớp vỏ nhà cung cấp mỏng. Nó xử lý đầy đủ UAX #9 cấp L1–L7, shaping OpenType GSUB\/GPOS, dự phòng bốn font, cùng bộ đệm shaping 32 KB.
| Hạng mục | Thông số kỹ thuật |
|---|---|
| Mô hình codepoint | UTF-8 nội bộ, codepoint 0–0x10FFFF |
| Thuật toán hai chiều | UAX #9 đầy đủ với các cấp L1–L7 tường minh |
| Kết nối chữ | Shaping OpenType đầy đủ, 4 dạng ngữ cảnh |
| Liên kết Lam-Alef | OpenType GSUB lookup, 12 dạng bao gồm nhận biết dấu phụ |
| Chữ số | Cấu hình ASCII \/ Arabic-Indic \/ Eastern Arabic-Indic theo từng đoạn |
| Định dạng font | WOFF2 subset, 4 cỡ cắt (24\/32\/40\/56 px) |
| Kích thước engine (flash) | 852 KB |
| Kích thước engine (RAM) | Tập làm việc 46 KB, bộ đệm shaping 32 KB |
| Ký số | Ed25519 + vendor root + per-region subkey |
| SKU đang hoạt động | F8 (3.1.2), K7 (1.9.5), KF1 (1.9.5), L5 (4.2.0), Q6 (3.3.1), Q8 (3.3.1), T2 (2.6.4), Y6 (2.6.4) |
| Số lượng gói ngôn ngữ đang hoạt động | 8 (ar-SA hiện đại, ar-AE hiện đại, he-IL hiện đại, ur-PK hiện đại, fa-IR, ps-AF, sd-IN, dvu-NP) |
3.2 Tại Sao RTL2 Thay Thế RTL Trên Tám Model
Động lực của chúng tôi là chu kỳ kiểm tra SFDA Ả Rập Saudi năm 2023. Một đợt triển khai 9.000 thiết bị của nhà phân phối tại Ả Rập Saudi xuất hiện lỗi hình dạng chữ cái rõ ràng ở cỡ chữ thân bút 11 mm, và chúng tôi đã phát hành bản OTA khắc phục trong vòng 21 ngày. Cuộc điều tra truy nguyên về việc thiếu các dạng contextual trên engine thế hệ cũ. Từ firmware 3.x trở đi, mọi gói ngôn ngữ Arabic/Hebrew/Urdu/Farsi đều là RTL2.
4. So sánh song song: RTL và RTL2 trên nội dung thực tế
Chúng tôi đã đo hiệu năng cả hai engine trên cùng một bộ nội dung — 12 cuốn sách OID tiếng Ả Rập (bìa, 18 trang, trung bình 240 từ) và 4 cuốn sách nhập môn tiếng Do Thái.
| Chỉ số | RTL (thế hệ cũ) | RTL2 (hiện đại) | Chênh lệch |
|---|---|---|---|
| Dung lượng flash engine | 312 KB | 852 KB | +540 KB |
| Đỉnh RAM engine | 18 KB | 78 KB | +60 KB |
| Khởi động lạnh đến từ đầu tiên | 0,41 s | 0,62 s | +0,21 s |
| Tra cứu từ trung bình | 6,2 ms | 4,8 ms | -22% |
| Độ phủ lựa trình hình thái | 64% dạng | 100% dạng | +36 điểm |
| Dung lượng font bitmap | 224 KB | 1,12 MB (WOFF2 subset) | +896 KB |
| Tổng chi phí flash cho mỗi ngôn ngữ | 0.54 MB | 1.97 MB | +1.43 MB |
| Chi phí pin cho mỗi giờ sử dụng | 0.4 mA | 1.1 mA | +0.7 mA |
| Payload OTA | 0.6 MB | 2.1 MB | +250% |
Cột "delta" chính xác là điều quản lý chương trình của bạn sẽ hỏi. Trên B1, bộ engine nặng thêm +540 KB buộc phải đánh đổi dung lượng nội dung; trên T2 (Li-ion 2500 mAh 18650, thời lượng 14 h) thì +0.7 mA gần như không đáng kể. Hãy chọn engine theo SKU, không phải theo quốc gia.
5. Định dạng tệp gói ngôn ngữ và chuỗi chữ ký
Mọi gói ngôn ngữ xuất cho sản xuất đều là một bundle đã được ký. Bố cục bên trong giống nhau trên tất cả các engine; chỉ trường engine-binding là thay đổi.
LP-AR-SA-RTL2-v3.2.1.spenlp
├── header.bin (256 B, version, sku_mask, engine_flag)
├── manifest.json (engine_id, fonts[], shaping_tables[])
├── font_24.woff2 (subset, ~280 KB)
├── font_32.woff2 (~310 KB)
├── font_40.woff2 (~340 KB)
├── font_56.woff2 (~410 KB)
├── shaping.bin (HarfBuzz tables, ~520 KB)
├── dictionary.dict (sorted lemma list, 12–88 MB depending on language)
├── voice_tts_en.bin (optional cross-language TTS fallback, 1.8 MB)
└── signature.sig (Ed25519, 64 B)
Chuỗi chữ ký được neo tại HSM của chúng tôi ở Thâm Quyến. Các khóa phụ theo khu vực được cấp cho Ả Rập Xê-út (SFDA), UAE (TDRA), Israel (IMOC) và Pakistan (PTA). Một nhà phân phối không thể cài đặt gói ngôn ngữ chưa được ký cho khu vực của họ — bootloader sẽ từ chối chữ ký sau 38 ms kể từ lúc mount, và thiết bị chuyển về gói tiếng Anh 17 ngôn ngữ.
Mẹo cho người mua: Luôn yêu cầu cung cấp SHA-256 của gói ngôn ngữ và ID khóa công khai phụ trước khi nhận mẫu. Chúng tôi gửi kèm cả hai trong phiếu đóng gói.
6. Bố cục lưu trữ theo từng model — Gói ngôn ngữ nằm ở đâu
Vị trí đặt dictionary.dict trên flash ảnh hưởng đến độ trễ đọc và chi phí retry OTA. Dưới đây là bố cục thực tế chúng tôi xuất trong firmware 3.3.1 (Q6/Q8).
| Model | Loại flash | Phân vùng LP | Phân vùng dự phòng | Ngân sách ghi xóa |
|---|---|---|---|---|
| B1 | 4 MB NOR | 0x000C0000–0x003F0000 | 0x003F0000–0x00400000 (64 KB A/B) | 10K chu kỳ |
| B2 | 4 MB NOR | 0x000C0000–0x003F0000 | 0x003F0000–0x00400000 (64 KB A/B) | 10K chu kỳ |
| F8 | 8 MB NAND | partition 4 (1.9 MB) | partition 5 (1.9 MB A/B) | 60K chu kỳ |
| K7 / KF1 | 8 MB NAND | partition 4 (1.9 MB) | partition 5 (1.9 MB A/B) | 60K chu kỳ |
| L5 | 16 MB NAND | partition 6 (3.6 MB) | partition 7 (3.6 MB A/B) | 100K chu kỳ |
| P2 | 4 MB NOR | 0x000C0000–0x003F0000 | 0x003F0000–0x00400000 (64 KB A/B) | 10K chu kỳ |
| Q6 / Q8 | 16 MB NAND | partition 6 (3,6 MB) | partition 7 (3,6 MB A/B) | 100K chu kỳ |
| T2 / Y6 | 32 MB NAND | partition 8 (6,4 MB) | partition 9 (6,4 MB A/B) | 100K chu kỳ |
A/B có nghĩa là bootloader giữ bản gói ngôn ngữ tốt trước đó trên phân vùng dự phòng để khi cài đặt lỗi sẽ tự khôi phục trong 0,6 giây.
7. Danh sách kiểm tra 30 giây trước khi bạn mua phiên bản tiếng Ả Rập / Hebrew / Urdu
Hãy dùng danh sách này trong cuộc gọi với nhà cung cấp tiếp theo của bạn. Đây cũng chính là danh sách mà đội ngũ OEM của chúng tôi dùng để đánh giá mẫu trước khi ký duyệt.
- Phiên bản engine — Mở Cài đặt → Giới thiệu → Engine. Phải hiển thị
RTL2-3.xtrên F8/K7/KF1/L5/Q6/Q8/T2/Y6. B1/B2/P2 có thể hiển thịRTL-2.x. - Kiểm tra tạo hình — Chạm vào từ "كتاب". Các chữ cái phải nối liền: kaaf, beh ở dạng cuối từ, alef nối liền. Nếu bạn thấy bốn chữ cái tách rời, RTL2 chưa được kích hoạt.
- Kiểm tra Lam-Alef — Chạm "لا". Phải là một glyph duy nhất với đường baseline đúng chuẩn, không phải hai ký tự xếp chồng.
- Kiểm tra hướng hỗn hợp — Chạm "الدرس 3". Các chữ số phải hiển thị theo chiều LTR trong đoạn văn RTL, với thứ tự trực quan là "الدرس 3".
- Kiểm tra dạng số — Chuyển sang "Chữ số Ả Rập-Ấn Độ" trong Cài đặt → Hiển thị. Các số ٠-٩ phải xuất hiện với hình dạng chữ số chính xác.
- Mã khóa công khai con — Đối chiếu với khóa con mà chúng tôi công bố trên cổng OEM. Không khớp = gói ngôn ngữ giả.
Nếu cả sáu mục đều đạt, đơn PO của bạn an toàn. Bất kỳ mục nào không đạt đều là căn cứ để từ chối lô hàng theo điều khoản AQL Major 1,0% của chúng tôi.
8. Kiến trúc đang hướng tới đâu (Lộ trình firmware 4.x)
Ba thay đổi sẽ được triển khai trong khoảng từ quý 4 năm 2026 đến quý 2 năm 2027:
- Dấu right-to-left trong tra cứu từ điển — RTL2 hiện đang dùng thứ tự sắp xếp Latin cho chỉ mục từ điển. Chúng tôi đang chuyển sang ICU collator có sắp xếp theo locale, dự kiến rút thời gian tra cứu từ tiếng Ả Rập từ 4,8 ms xuống 3,1 ms.
- Bộ nhớ đệm glyph theo từ — Bộ nhớ đệm liên tục 64 KB sẽ loại bỏ việc tạo hình lại các từ phổ biến, tiết kiệm ~0,3 mA mỗi phút hoạt động.
- Font biến đổi WOFF2 — Một file biến đổi 540 KB duy nhất thay thế cho bốn kích thước cố định, tiết kiệm ~580 KB trên L5/Q6/Q8/T2/Y6.
Engine RTL kế thừa sẽ chỉ nhận bảo trì bảo mật đến hết năm 2027. Sau đó, firmware B1/B2/P2 ≥3.0 sẽ cung cấp RTL2 dưới dạng flash lại có trả phí.
9. Tác động đến giá và thời gian giao hàng khi chọn RTL2
Các gói ngôn ngữ được cấp phép theo khu vực, không theo thiết bị. Chênh lệch chi phí nhà máy giữa gói RTL và RTL2 trên cùng phần cứng nằm ở các hạng mục BOM, không phải ở giá đơn vị.
| Hạng mục | RTL (kế thừa) | RTL2 (hiện đại) |
|---|---|---|
| Giấy phép gói ngôn ngữ trên mỗi đơn vị | bao gồm trong firmware | bao gồm trong firmware |
| Phí cấp khóa ký (một lần) | miễn | 480 USD mỗi khu vực |
| Thời gian giao mẫu (khu vực hiện có) | 7 ngày | 7 ngày |
| Thời gian giao mẫu (khu vực mới) | 21 ngày | 21 ngày |
| Thời gian sản xuất hàng loạt | 28 ngày | 28 ngày |
| Add-on từ điển tùy chỉnh (10K từ) | 1.400 USD một lần | 1.400 USD một lần |
| Ký lại khi cập nhật từ điển | $0 (MD5) | $0 (Ed25519, quy trình miễn phí) |
Phí $480 bao gồm nghi thức ký phía HSM của chúng tôi. Đây là chi phí một lần, theo phạm vi khu vực và được phân bổ cho toàn bộ lô sản phẩm bạn xuất sang khu vực đó.
10. Phân Bố Trực Quan Của Các Gói Ngôn Ngữ Trên 11 SKU Đang Lưu Hành
Biểu đồ bên dưới thể hiện gói RTL/RTL2 nào nằm trên SKU nào trong số 11 SKU đang bán ra. Ba trong số các SKU (K7, KF1, Q6/Q8) chỉ sử dụng RTL2. Bộ ba B1/B2/P2 hướng đến phân khúc tiết kiệm chi phí sử dụng engine thế hệ cũ. F8, L5, T2 và Y6 tích hợp cả hai engine cho khách hàng vận hành đội sản phẩm song ngữ (ví dụ: tiếng Ả Rập + tiếng Urdu).
11. Phụ Lục: Số Liệu Telemetry Hiệu Năng RTL2 Chi Tiết Từ Các Lô Sản Xuất
Từ tháng 1 năm 2024 đến tháng 8 năm 2026, chúng tôi đã thu thập dữ liệu thời gian ẩn danh từ 11.420 thiết bị trang bị RTL2 qua các kênh phân phối tại Ả Rập Xê Út, UAE, Israel, Pakistan và Iran. Các số liệu dưới đây không phải tổng hợp — chúng được lấy trực tiếp từ khối chẩn đoán perfmon.dump mà firmware ghi vào phân vùng dự phòng mỗi khi phiên đọc kết thúc mà không có lỗi. Đây là những số liệu mà đội ngũ đánh giá độ tin cậy của chúng tôi xem xét vào mỗi sáng thứ Hai.
11.1 Phân Bố Thời Gian Khởi Động Nguội Theo Model
| Model | số thiết bị | khởi động nguội p50 | khởi động nguội p95 | khởi động nguội p99 |
|---|---|---|---|---|
| F8 | 2.840 | 0,58 s | 0,79 s | 1,12 s |
| K7 / KF1 | 3.120 | 0,61 s | 0,83 s | 1,18 s |
| L5 | 1.460 | 0,55 s | 0,74 s | 1,04 s |
| Q6 / Q8 | 2.210 | 0,60 s | 0,81 s | 1,15 s |
| T2 / Y6 | 1.790 | 0,64 s | 0,88 s | 1,27 s |
Khởi động nguội được định nghĩa là khoảng thời gian từ lúc người dùng nhấn nút nguồn đến khi từ đầu tiên của cuốn sách OID đầu tiên hiển thị chính xác trên màn hình, bao gồm cả dấu phụ. Các thiết bị vượt ngưỡng p99 sẽ được đánh dấu để thay thế bảo hành phân vùng khởi động NOR.
11.2 Độ Trễ Tra Từ Theo Ngôn Ngữ
Chúng tôi lấy mẫu mỗi lần tra từ thông qua tracepoint bidi.lookup. Bảng dưới đây thể hiện trung bình trong một phiên đọc 30 phút.
| Ngôn ngữ | p50 | p95 | p99 |
|---|---|---|---|
| Tiếng Ả Rập (ar-SA, ar-AE) | 4,6 ms | 7,1 ms | 12,4 ms |
| Tiếng Hebrew (he-IL) | 4,2 ms | 6,6 ms | 11,0 ms |
| Tiếng Urdu (ur-PK) | 5,1 ms | 7,8 ms | 13,6 ms |
| Tiếng Ba Tư (fa-IR) | 4,9 ms | 7,5 ms | 13,1 ms |
| Tiếng Pashto (ps-AF) | 6,3 ms | 9,4 ms | 16,2 ms |
| Tiếng Sindhi (sd-IN) | 6,7 ms | 9,9 ms | 17,0 ms |
| Tiếng Divehi (dvu-NP) | 7,4 ms | 10,8 ms | 18,5 ms |
Pashto, Sindhi và Divehi nằm ở phía đuôi phải vì từ điển của chúng nhỏ hơn 18–34% so với bộ gói tiếng Ả Rập được đầu tư tốt, nghĩa là chỉ mục lemma có locality bộ nhớ cache thấp hơn. Chúng tôi đang nhắm mục tiêu ba ngôn ngữ này trong chu kỳ firmware 4.x bằng một lược đồ nén tiền tố tùy chỉnh, dự kiến sẽ đưa p99 xuống dưới 13 ms.
11.3 Chi phí pin khi sử dụng RTL2 liên tục
Chúng tôi đã gắn cảm biến shunt dòng điện nối tiếp lên 240 thiết bị (60 thiết bị mỗi dòng model) và cho chạy bài kiểm tra gõ liên tục 60 phút mô phỏng, giả lập trẻ em đọc 40 từ mỗi phút. Kết quả là mức tiêu thụ dòng trung bình tính trên mức idle cơ sở.
| Model | Idle cơ sở | RTL2 hoạt động | Delta |
|---|---|---|---|
| F8 | 38 mA | 39,1 mA | +1,1 mA |
| K7 / KF1 | 41 mA | 42,2 mA | +1,2 mA |
| L5 | 36 mA | 37,0 mA | +1,0 mA |
| Q6 / Q8 | 39 mA | 40,0 mA | +1,0 mA |
| T2 / Y6 | 33 mA | 34,0 mA | +1,0 mA |
Trên viên pin B1 700 mAh, +1,1 mA tương đương mức giảm thời lượng 5%. Trên viên pin T2 2500 mAh, con số này nằm dưới ngưỡng nhiễu đo. Đây là cơ sở kỹ thuật để giữ B1, B2 và P2 trên engine RTL cũ ngay cả sau khi RTL2 được xác nhận hoàn toàn.
11.4 Các loại lỗi hiển thị gặp ngoài thực tế
Trên hơn 47.000 cây bút đã xuất xưởng, tỷ lệ thu hồi thực tế 0,21% đối với các thiết bị RTL2 được phân thành bốn loại. Hiểu rõ các loại này giúp các nhà phân phối xây dựng quy trình kiểm tra đầu vào của riêng mình.
- Trôi baseline Lam-Alef (0,06%) — chỉ thấy được ở kích thước cắt 56 px, do thiếu dấu GPOS trong bảng shaping v3.0.x. Đã sửa trong v3.1.0.
- Cắt chồng dấu phụ (0,05%) — tổ hợp kasra + shadda + fatha trên 4 dấu làm cắt phần đỉnh glyph. Đã sửa bằng cách nâng metric line-box trong v3.1.2.
- Thứ tự số hai chiều trong tiêu đề đa hệ chữ viết (0,04%) — hiếm gặp, chỉ xảy ra khi sách OID được tạo bằng phông chữ tùy chỉnh bị thiếu tính năng GSUB
Direction. Sách sẽ bị từ chối ngay khi nhập nội dung. - Treo khi shaping cache miss (0,06%) — độ trễ lần gõ đầu tiên trên 800 ms đối với Divehi và Sindhi. Đã giảm thiểu trong v3.2.0 bằng cách làm nóng cache khi khởi động.
Cả bốn loại đều đã có bản vá phát hành và có thể phát hiện bằng checklist 30 giây ở Phần 7.