analisador ttf — é uma biblioteca para analisar fontes TrueType/OpenType.
A nova versão oferece suporte completo a fontes variáveis.
(fontes variáveis) e API C, razão pela qual decidi anunciá-la no Lore.
Até recentemente, se você precisasse trabalhar com fontes TrueType, havia apenas duas opções: FreeType e stb_truetype. O primeiro é um pacote enorme, enquanto o segundo oferece um número relativamente limitado de recursos.
O ttf-parser fica em algum lugar no meio. Ele suporta as mesmas tabelas TrueType (o formato TrueType consiste em muitas tabelas binárias individuais) que o FreeType, mas não renderiza os glifos em si.
Ao mesmo tempo, o ttf-parser apresenta muitas outras diferenças significativas:
- O analisador ttf foi escrito em Rust sem usar `unsafe`. `FreeType` e `stb_truetype` foram escritos em C.
- O analisador TTF é a única implementação segura em termos de memória. Ler memória arbitrária é impossível. O FreeType está constantemente corrigindo vulnerabilidades, e o stb_truetype não foi projetado para ler fontes arbitrárias.
- O ttf-parser é a única implementação thread-safe. Todos os métodos de análise são constantes. A única exceção é a definição de coordenadas para fontes variáveis, mas essa função é reentrante. O FreeType é essencialmente de thread única. O stb_truetype é reentrante (cópias separadas podem ser usadas em threads diferentes, mas não apenas uma entre várias).
- O ttf-parser é a única implementação que não usa alocações de memória heap. Isso acelera a análise sintática e evita problemas de falta de memória (OOM).
- Além disso, quase todas as operações aritméticas e conversões de tipos numéricos são verificadas (inclusive estaticamente).
- Na pior das hipóteses, a biblioteca pode lançar uma exceção. Na API C, as exceções serão capturadas e a função retornará um erro, mas não causará uma falha.
Apesar de todas as garantias de segurança, o ttf-parser também é a implementação mais rápida. Por exemplo, a análise de CFF2 é 3.5 vezes mais rápida que a do FreeType. A análise de Glyf, por sua vez, é 10% mais lenta que a do stb_truetype, mas isso se deve à sua falta de suporte para fontes variáveis, que exigem o armazenamento de informações adicionais. Mais detalhes em README.
Fonte: linux.org.ru
