Normalmente, uma fonte é desenhada à mão num editor: o designer coloca pontos e puxa curvas. As fontes de destaque do Ipak — Bannai, Ganch, Metro e Kalam — foram feitas de outro jeito. Cada letra é construída por um pequeno programa em Python segundo uma única regra para a fonte inteira. A regra é uma só, por isso espessuras, cortes e ritmo coincidem em todos os sinais — de A a Ҳ e de 0 a №.
Neste artigo: como é a regra de cada fonte, como das letras desenhadas se monta o arquivo da fonte e onde estão, por enquanto, os limites da versão 0.1.

Primeiro o motivo, depois as letras
Cada fonte de destaque começa não pela letra, e sim pelo motivo, reconhecível à primeira vista: o tijolo do bannai, a faca do entalhador de ganch, as letras metálicas do metrô de Tashkent, a pena do kalam (sobre a história dessas técnicas — no artigo «Bannai, ganch, kalam»). O motivo vira regra, e a regra vira o programa que constrói por ela qualquer letra.
Para comparar os motivos em ação, a palavra TOSHKENT foi colocada na foto do aeroporto de Tashkent no lugar do letreiro verdadeiro.

Bannai: tijolos com juntas desencontradas
A letra é primeiro registrada como uma imagem de células — linhas de quadradinhos e pontos, como num caderno quadriculado. A maiúscula ocupa 10 fiadas. A célula é quadrada: 70 unidades. O traço tem duas células; o vão interno da letra, no mínimo duas: assim as letras não se fundem à distância.
Depois o programa assenta os tijolos. O tijolo tem duas células, e nas fiadas vizinhas as juntas avançam meio tijolo. É a alvenaria com juntas desencontradas: as juntas de uma fiada não coincidem com as da vizinha. Entre os tijolos resta uma junta de 9 unidades. As diagonais de K, N, Z correm em degraus de alvenaria, não em rampa lisa. Os pontos de Ö, o breve de Ў e o sinal ʻ ficam em fiadas acima da maiúscula; as caudas de Қ Ҳ e as cedilhas de Ş Ç, em fiadas abaixo da linha.

Ganch: o chanfro do entalhador e a luz
O contorno é construído com retângulos e octógonos. O traço vertical tem 168 unidades; o horizontal, 140: assim eles parecem iguais. As letras «redondas» O, C, G, Q são octógonos.
A última passada é o chanfro do entalhador. O programa percorre o contorno e, em cada ângulo externo que seja reto ou mais agudo (até 100°), apara a ponta: recua 40 unidades ao longo de cada um dos dois lados e liga os pontos com uma reta. No ângulo reto, isso é um corte a 45°. Os ângulos internos permanecem agudos: é por ali que a faca entra. As faces obtusas dos octógonos não são tocadas.
O volume é calculado à parte, a partir da imagem da letra. Para cada ponto interno da letra encontra-se a distância até a borda mais próxima. Resulta um «campo de distâncias»: zero na borda, maior rumo ao meio do traço. Se esse campo for imaginado como altura, sai uma crista no meio do traço e duas encostas para as bordas — o corte em V. Em seguida, o programa vê para onde cada encosta está virada. A encosta voltada para a luz, do alto à esquerda, clareia; a oposta escurece. Por cima acrescenta-se uma sombra suave para baixo e para a direita: a letra salta da parede. Para a parede de pedra, o mesmo campo é invertido, e a letra torna-se uma incisão.

Metro: maiúsculas finas e serifas em cunha
O modelo é a inscrição «КОСМОНАВТЛАР» na plataforma da estação de 1984 (arquitetos Серго Сутягин e Сергей Соколов). O traço é fino: 48 unidades nas linhas principais, 40 nas horizontais. As letras são largas, cerca de 600 unidades para uma altura de 700.
Nas pontas dos traços, pequenas serifas em cunha. A base da cunha é 40 unidades mais larga que o traço de cada lado; a altura da cunha é 34 unidades, e o topo converge exatamente para as bordas do traço. A palavra é composta com grande espaçamento. O Л, «em casinha», como na estação. O desenho é nosso, pelo princípio; o alfabeto latino foi construído pelo mesmo sistema.

Kalam: a pena larga em ângulo
Para cada letra define-se um esqueleto — a linha mediana feita de pontos. A pena é um segmento de 150 unidades de comprimento, a 65° em relação à linha. O programa coloca a pena em cada ponto do esqueleto, liga as posições vizinhas num quadrilátero e une todos os quadriláteros. Ninguém define a espessura: ela sai sozinha da direção do traço. A 65°, as horizontais ficam pesadas e as verticais, leves.
Quando o traço corre quase ao longo da pena, ele se afina até virar um fio. Por isso as diagonais se afastam do ângulo da pena em pelo menos 9–10°: assim, a linha mais fina não fica mais estreita que 25 unidades. Todos os sinais — letras, pontos, algarismos, pontuação — são escritos com a mesma pena.

Os sinais ʻ e ʼ em cada estilo
Os sinais não são tomados prontos das aspas: cada um foi desenhado segundo a regra da sua fonte. Uma coisa é comum: no ʻ a massa fica embaixo, no ʼ, em cima; por isso os silhuetas olham para lados diferentes e não se confundem.
| Fonte | ʻ | ʼ |
|---|---|---|
| Bannai | «seis» de alvenaria: cabeça de 2×2 células embaixo, cauda para cima e para a direita | o mesmo, girado em 180° |
| Ganch | cunha com a massa embaixo, inclinação de 10° | cunha com a massa em cima, inclinação de 23° |
| Metro | cunha com a base embaixo e a ponta para cima e para a direita | cunha com a base em cima e a ponta para baixo e para a esquerda |
| Kalam | gesto da pena: fio de cima para baixo e para a esquerda, embaixo uma volta com pressão | o mesmo gesto, girado em 180° |
É o kerning por medição que aproxima o sinal de O e G (sobre ele, mais abaixo): o ʻ deve ler-se como parte da letra, e não como aspa à parte.
Da imagem à fonte
Imagem ainda não é fonte. Uma fonte precisa compor letras com as distâncias corretas, conhecer as regras uzbeques e abrir em qualquer programa.
Montagem. O programa de cada estilo entrega um dicionário: símbolo, contorno, largura, afastamentos à esquerda e à direita. A montagem converte as curvas para o formato TrueType, uniformiza a direção dos contornos e grava o arquivo pelo FontBuilder. As minúsculas apontam para as mesmas maiúsculas: as fontes são de destaque, para inscrições em maiúsculas. Os caracteres ' ‘ ’ ` digitados no teclado apontam para os sinais ʻ e ʼ.
Distâncias por medição. O programa toma um par de letras e mede a distância branca entre elas linha por linha, em toda a altura da maiúscula; os mergulhos profundos são descartados, porque o olho não olha para eles. O padrão de referência é a média dos pares HH, HO, OH e OO da mesma fonte. Cada par é puxado ao padrão, mas apenas pela metade: senão, pares abertos como LT se grudam. Esse ajuste para um par específico de letras chama-se kerning. O alfabeto latino recebe kerning com o alfabeto latino, o cirílico com o cirílico. Os algarismos não recebem kerning, para que as colunas de números permaneçam alinhadas.
Os sinais ʻ e ʼ, à parte. O sinal é pequeno e fica no alto, por isso é medido apenas na faixa do sinal — nos 38% superiores da altura da maiúscula (em detalhe, no artigo «A faixa do sinal»). O ʻ fica colado a O e G: 0,45 do vão HH. Depois do ʻ, o vão HH comum. O ʼ fica exatamente no meio: 0,8 do vão dos dois lados.
Proibição de toques. Depois de todos os ajustes, o programa verifica o ponto mais estreito do par em toda a altura, incluindo as caudas abaixo da linha. Nenhum par pode chegar a menos de 5% do corpo. O ajuste também é limitado: no máximo 15% do corpo para qualquer lado. Ajustes menores que 20 unidades não são gravados.
A substituição uzbeque. As pessoas digitam Oʻzbekiston com o apóstrofo comum. A própria fonte o troca pelo sinal necessário, com uma regra gravada dentro do arquivo; no formato OpenType, essa regra chama-se calt. Depois de O, antes de letra — ʻ. Depois de G — ʻ, inclusive no fim da palavra (BOGʻ), mas não na sequência ng no fim da palavra e não antes de s no fim da palavra (o possessivo inglês 's). Entre duas letras, nos demais casos — ʼ, como em MAʼNO. A lógica é a mesma da fonte de trabalho Ipak Davlat; sobre ela há o artigo «o' → oʻ».

No fim, a montagem imprime uma prova: o conjunto inteiro de sinais e as palavras de controle — OʻZBEKISTON RESPUBLIKASI, ҚЎҚОН · ҒАЛЛАОРОЛ · ҲАЁТ, ÖZBEKISTON · TOŞKENT.

Os limites da versão 0.1
- Só maiúsculas e um único estilo. As minúsculas são compostas pelas mesmas maiúsculas. Ainda não há pesos.
- O Bannai é para inscrições grandes. A alvenaria quadrada fica perto de uma fonte pixelada; para placas e corpo pequeno ele não se destina.
- O ângulo da pena do Kalam é a nossa escolha. Os 65° foram definidos por comparação numa mesma palavra; não é citação de fonte.
- As distâncias foram ajustadas automaticamente. Para um letreiro, vale conferi-las a olho na palavra específica.
- A substituição não distingue idiomas. Nas fontes de destaque, a regra funciona para qualquer texto: no inglês DON'T, o apóstrofo também virará ʼ. Para texto não uzbeque, convém desativar a substituição no programa de diagramação.
O resultado
Em cada uma das quatro fontes de destaque há 94 sinais: alfabeto latino com Ö Ğ Ş Ç, cirílico com Ў Қ Ғ Ҳ, sinais ʻ e ʼ, algarismos e pontuação. Todos foram construídos com uma única regra por fonte e são distribuídos sob a licença aberta SIL OFL 1.1, como toda a biblioteca.
Fontes
A descrição baseia-se no código de construção das fontes de destaque do Ipak e na documentação das ferramentas: fontTools, skia-pathops, SciPy, HarfBuzz, especificação OpenType; sobre o modelo do Metro — Wikipedia «Kosmonavtlar (Tashkent Metro)».
Links:
- fontTools: FontBuilder. https://fonttools.readthedocs.io/en/latest/fontBuilder/fontBuilder.html
- skia-pathops — operações booleanas sobre contornos. https://github.com/fonttools/skia-pathops
- SciPy: distance_transform_edt — campo de distâncias. https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.distance_transform_edt.html
- HarfBuzz — motor de composição de texto. https://harfbuzz.github.io/
- OpenType: o recurso calt (Contextual Alternates). https://learn.microsoft.com/en-us/typography/opentype/spec/features_ae#tag-calt
- OpenType: o recurso kern (Kerning). https://learn.microsoft.com/en-us/typography/opentype/spec/features_ko#tag-kern
- Wikipedia: Kosmonavtlar (Tashkent Metro). https://en.wikipedia.org/wiki/Kosmonavtlar_(Tashkent_Metro)