Fontconfig, freetype i una mica de teoria de fonts
February 13, 2007 – 11:29 pmEl tema de les fonts, és una d'aquelles coses que porten cua, ja no només per les nomenclatures si no per comprendre com aquestes són renderitzades i com i qui aporta les llibreries per a manejar-les. No és habitual que algú s'hagi de bregar amb fonts, és ara mateix un món exclusivament reservat a desenvolupadors d'aplicacións que han de renderitzar de forma "crua" les fonts sobre alguna "lona" - canvas - com ara Cairo, o be per desenvolupadors que han de manejar i submiistrar a les aplicacions primerament esementades les fonts que ells reclament.
Fins al dia d'avui poca cosa en sabia del tema, tenia una idea superficial resumida basicament en el primer paràgraf. A causa d'una nova incorporació a la classe PdfDocument::CreateFont que accepta instancies de fonts fetes de forma interna i d'alguns dels problemes de la seva primera versió he intentat ampliar una mica més els meus coneixaments de les fonts i de les eines que actualment aporta el programari lliure per a manejarles i per que no per a renderitzarles.
Pero primer de tot fem una mica de repas de la teoria bàsica. Existeixen diferents formats de fonts segons la forma de renderització, la més acceptada actualment és el tipus de font que autocontenen "matematicament" la renderització i a l'altre costat trobem altres formes més arcaiques com ara les vectorials o les de renderització pura.
Les fonts autocontingudes - sempre parlant de renderització matemàtica - són les més habituals, algunes d'elles son les True Type o les Type 1 , la primera de Appel i la segona de Adobe, que difereixen entrre elles en les formes de representar la renderització.
Amb independència de si són una o altre, totes dues utilizen els anomenats glyphs per a representar les diferentes formes dels diferents mapes de caracters. Un arxiu que conté una font contindrà per tant com a mínim un conjunt de glyphs per a un conjutn de caracters i podrà també contenir diferents faces, tot i que no és molt habitual en les fonts de linux en altres sistemes operatius com Mac és comú trobar els diferents estils d'una mateixa font en un mateix arxiu, que anomenarem faces.
Un cop vist una sintesis de les teories de fonts ens podrem concentrar en les dues operacions bàsiques, la localització i la renderització.
Justament de la localització s'en encarga el projecte fontconfig. Aquest és lencarregat donar un punt d'entrada únic per a la cerca de fonts per als programes - diguis desenvolupadors - que cerquen alguna font. Això ho fa mitjançant les següents features :
- Manteniment d'una cache per a la cerca ràpida de fonts
- Manteniment d'un directori de links simbolics als arxius de fonts originals
- Proporcionar una API codificada en C per a poder fer cerques a la cache de forma transparent
La API que proporciona fontconfig incorpora algunes de les seguents features més importants:
- Busqueda de fonts mitjançant la construcció de patrons
- Patrons configurables per style, size o nom entre d'altres
- Hashing de patrons per a donar al desenvolupador un mecanisme per a mantenir centenars de referencies a cerques de fonts
- Re configuracío del patró en cas de cerca fallida per a cerca de fonts semblant
En definitiva fontconfig ens proporciona un punt d'entrada únic a totes les fonts del sistema i la seva funcionalitat final és donar al desenvolupador un apuntador a l'arxiu de font que cercava.
Un cop tenim l'arxiu de font ens fa falta poder-lo manejar, d'això s'en ocupa el projecte freetype. FreeType serà el punt d'entrada i API per a obrir, triar faces i si volem renderitzar glyphs.
Com recordarem un arxiu de fonts pot estar composat de diferents faces, diferents glyphs i diferents charmaps, tot això queda representat per FT_Face, el tipus de dada base sobre el que treballem amb freeType, i sobre el qual es faran servir la majoria de les funcions.
Cal destacar aquí potser el que s'anomena com a hinting, el procés de renderització mitjançant una màquina virtual de les fonts, la interpretació dels glyphs com a concepte matemàtic de representació de una font s'introdueix a la màquina virtual per extreuren una representacio en format bitmap de la font, aquest procés està patentat per la gent de Appel, això ha portat a la gent de FreeType a fer una reinterpretació del procés.
En l'exemple d'aqui podeu veure un exemple de com funciona fontconfig i freetype, aquest codi fa la cerca d'una font per nom i si es vol per estil i seguidament es carrega en memòria per a ser renderitzat posteriorment.