ttf-parser 0.5 - thư viện mới để làm việc với phông chữ TrueType

trình phân tích cú pháp ttf là thư viện để phân tích phông chữ TrueType/OpenType.
Phiên bản mới có hỗ trợ đầy đủ các phông chữ có thể thay đổi
(phông chữ biến đổi) và C API, do đó tôi quyết định quảng cáo nó trong truyền thuyết.

Cho đến gần đây, nếu có nhu cầu làm việc với phông chữ TrueType thì có đúng hai lựa chọn: FreeType và stb_truetype. Cái đầu tiên là một sự kết hợp khổng lồ, cái thứ hai hỗ trợ một số lượng chức năng khá nhỏ.

ttf-parser nằm ở đâu đó ở giữa. Nó hỗ trợ tất cả các bảng TrueType giống nhau (định dạng TrueType bao gồm nhiều bảng nhị phân riêng biệt) như FreeType, nhưng không tự vẽ các glyph.

Đồng thời, ttf-parser chứa nhiều điểm khác biệt đáng kể khác:

  1. ttf-parser được viết bằng Rust mà không sử dụng không an toàn. FreeType và stb_truetype được viết bằng C.
  2. ttf-parser là cách triển khai an toàn bộ nhớ duy nhất. Không thể đọc bộ nhớ ngẫu nhiên. Các lỗ hổng liên tục được sửa trong FreeType và về nguyên tắc, stb_truetype không được thiết kế để đọc các phông chữ tùy ý.
  3. ttf-parser là cách triển khai an toàn theo luồng duy nhất. Tất cả các phương pháp phân tích cú pháp đều không đổi. Ngoại lệ duy nhất là cài đặt tọa độ cho các phông chữ có thể thay đổi, nhưng chức năng này được sử dụng lại. FreeType về cơ bản là đơn luồng. stb_truetype - reentrant (bạn có thể sử dụng các bản sao riêng lẻ trong các chủ đề khác nhau, nhưng không được sử dụng một trong nhiều chủ đề).
  4. ttf-parser là cách triển khai duy nhất không sử dụng phân bổ vùng heap. Điều này cho phép bạn tăng tốc độ phân tích cú pháp và tránh các vấn đề với OOM.
  5. Ngoài ra, hầu hết tất cả các phép tính số học và chuyển đổi kiểu số đều được kiểm tra (bao gồm cả tĩnh).
  6. Trong trường hợp xấu nhất, thư viện có thể đưa ra một ngoại lệ. Trong trường hợp này, trong API C, các ngoại lệ sẽ bị phát hiện và hàm sẽ trả về lỗi nhưng không gặp sự cố.

Và bất chấp tất cả các đảm bảo về bảo mật, ttf-parser cũng là cách triển khai nhanh nhất. Ví dụ: phân tích cú pháp CFF2 nhanh hơn 3.5 lần so với FreeType. Trong khi đó, phân tích cú pháp glyf chậm hơn 10% so với stb_truetype, nhưng điều này là do nó không hỗ trợ các phông chữ có thể thay đổi, việc triển khai phông chữ này yêu cầu phải lưu trữ bổ sung. thông tin. Thêm chi tiết trong README.

Nguồn: linux.org.ru

Thêm một lời nhận xét