Este repositório define um método de criação e implantação de fontes para uso com drivers de exibição do Micropython. Um utilitário de PC renderiza os arquivos de fonte padrão do setor como um bitmap na forma de python sourcecode. Um módulo Micropython permite que esses arquivos sejam exibidos em dispositivos com drivers de dispositivo adequados. Isso inclui monitores OLED usando o chip SSD1306 e o driver oficial do dispositivo. Os drivers compatíveis para uma variedade de tecnologias de exibição estão disponíveis como parte do repositório nano-gui.
As plataformas Micropython geralmente têm RAM limitada, mas armazenamento mais abundante na forma de memória flash. Os arquivos de fonte tendem a ser relativamente grandes. A técnica convencional de renderizar seqüências para um dispositivo envolve carregar toda a fonte na RAM. Isso é rápido, mas Ram intensivo. A alternativa de armazenar a fonte como um arquivo de acesso aleatório e carregar glifos individuais na RAM sob demanda é muito lento para um desempenho razoável na maioria dos dispositivos de exibição.
Essa alternativa implementa uma fonte como um arquivo de origem Python, com os dados sendo declarados como objetos bytes . Esse arquivo pode ser congelado como bytecode: envolve a criação do firmware a partir da fonte com o arquivo python em um diretório específico. Na importação muito pouca RAM é usada, mas os dados podem ser acessados rapidamente. Observe que o uso de bytecode congelado é totalmente opcional: os arquivos de font podem ser importados da maneira normal se o uso da RAM não for um problema.
O arquivo resultante é utilizável com duas variedades de drivers de dispositivo de exibição:
framebuffer .Isso compreende quatro componentes, links para documentos abaixo:
Writer . Este utilitário de linha de comando é escrito no Python 3 e é executado em um PC. Para converter uma fonte escalável em python, o utilitário recebe a entrada de um arquivo de fonte no formulário ttf ou otf , juntamente com uma altura em pixels e produz um arquivo de origem Python que contém a fonte como um bitmap. A renderização de afinação fixa e variável é suportada. O design tem os seguintes objetivos:
O primeiro é alcançado fornecendo argumentos específicos de hardware ao utilitário. Estes definem o mapeamento horizontal ou vertical e a ordem de bits para dados de fonte.
O segundo é alcançado usando o Freetype e as ligações do Freetype Python. Seu uso está documentado aqui. Isso também detalha as medidas do uso da RAM ao importar fontes armazenadas como bytecode congelado.
A conversão de arquivos ttf ou otf escalável funciona programaticamente melhor para fontes maiores. Para fontes pequenas, é melhor usar arquivos de fonte de bitmandes projetados à mão. Agora, eles são suportados: os arquivos de fonte bdf ou pcf podem ser convertidos em fonte Python no mesmo formato que os arquivos originários de fontes escaláveis. Consulte também Micropyezfonts, que inclui pequenas fontes compatíveis (em examples/fonts ).
Kerning não é suportado. As fontes são um pouco por pixel. Os monitores de cores são suportados pela classe CWriter , que adiciona informações de cores no estágio de renderização. Isso pressupõe que todos os pixels de um personagem são coloridos de forma idêntica.
Por padrão, o utilitário font_to_py.py produz o conjunto de caracteres ASCII de chr(32) para chr(126) inclusive. As opções de linha de comando permitem que o conjunto de caracteres seja modificado para incluir caracteres unicode arbitrários. Conjuntos alternativos podem ser especificados, como para idiomas não ingleses. O suporte eficiente agora é fornecido para conjuntos de caracteres esparsos.
Um arquivo de fonte é importado da maneira usual, por exemplo, import font14 . Os arquivos de fonte Python contêm as seguintes funções. Esses valores de retorno definidos pelos argumentos que foram fornecidos para font_to_py.py :
height retorna a altura em pixels.
max_width retorna a largura máxima de um glifo em pixels.
Deslocamento da baseline do topo do glifo para a linha de base.
hmap retorna True se a fonte for mapeada horizontalmente.
Retornos reverse True se a reversão do bit foi especificada.
Retorna monospaced é True se a renderização monoescada foi especificada.
min_ch retorna o valor ordinal do caractere mais baixo do arquivo.
max_ch retorna o valor ordinal do caractere mais alto do arquivo.
Os glifos são retornados com a função get_ch . Seu argumento é um caráter unicode e retorna os seguintes valores:
memoryview que contém os bytes glifos. O utilitário font_to_py.py permite que um glifo padrão seja especificado (normalmente ? ). Se chamado com um caractere indefinido, este glifo será devolvido.
As funções min_ch e max_ch são principalmente relevantes para conjuntos de caracteres contíguos.
Todo o código é liberado sob a licença do MIT.