ttf-parser 0.5 - unha nova biblioteca para traballar con fontes TrueType

analizador ttf é unha biblioteca para analizar fontes TrueType/OpenType.
A nova versión ten soporte total para fontes variables
(fontes variables) e C API, como resultado do cal decidín anuncialo na tradición.

Ata hai pouco, se había que traballar con fontes TrueType, había exactamente dúas opcións: FreeType e stb_truetype. O primeiro é unha gran combinación, o segundo admite un número bastante pequeno de funcións.

ttf-parser está nalgún lugar no medio. Soporta todas as mesmas táboas TrueType (o formato TrueType consta de moitas táboas binarias separadas) que FreeType, pero non debuxa os propios glifos.

Ao mesmo tempo, ttf-parser contén moitas outras diferenzas significativas:

  1. ttf-parser está escrito en Rust sen usar unsafe. FreeType e stb_truetype están escritos en C.
  2. ttf-parser é a única implementación segura para a memoria. Non é posible ler memoria aleatoria. As vulnerabilidades están a ser corrixidas constantemente en FreeType e, en principio, stb_truetype non está deseñado para ler fontes arbitrarias.
  3. ttf-parser é a única implementación segura para fíos. Todos os métodos de análise son constantes. A única excepción é establecer coordenadas para fontes variables, pero esta función é reentrante. FreeType é basicamente dun só fío. stb_truetype - reentrant (podes usar copias individuais en diferentes fíos, pero non unha das moitas).
  4. ttf-parser é a única implementación que non usa asignacións de montón. Isto permítelle acelerar a análise e evitar problemas con OOM.
  5. Ademais, compróbanse case todas as operacións aritméticas e conversións de tipos numéricos (incluída a estática).
  6. No peor dos casos, a biblioteca pode lanzar unha excepción. Neste caso, na API C, capturaranse excepcións e a función devolverá un erro, pero non fallará.

E a pesar de todas as garantías de seguridade, ttf-parser tamén é a implementación máis rápida. Por exemplo, analizar CFF2 é 3.5 veces máis rápido que FreeType. A análise de glyf, pola súa banda, é un 10 % máis lenta que en stb_truetype, pero isto débese a que non admite fontes variables, cuxa implementación require almacenar adicionais. información. Máis detalles en README.

Fonte: linux.org.ru

Engadir un comentario