O DritaShapepy é uma extensão Python construída usando Cython. Ele fornece ligações simplificadas para o mecanismo de modelagem direta. O modelo é semelhante ao modelo fornecido pelo UharfBuzz, mas algumas diferenças devido a diferenças nos modelos de API entre o Directwrite e o HarfBuzz.
O DritaShePepy foi desenvolvido inicialmente para suportar um ambiente de teste de fonte baseado em Python, onde testes semelhantes são executados usando o Directwrite e o HarfBuzz.
O repo contém dois métodos para construir a extensão. O método Python/Cython padrão usando setup.py e uma solução do Visual Studio. Setup.py é usado para criar, instalar e criar pacotes de distribuição. A solução do Visual Studio é para a depuração do modo cruzado da extensão e do cliente.
Setup.py constrói o pacote com o nome da extensão "dritaShePepy". As linhas de comando úteis ao usar o setup.py para criar, instalar e criar pacotes de distribuição são:
Construa a extensão na máquina local. Python setup.py build
Instale a extensão construída no ambiente python atual. Python setup.py install
Crie pacote de distribuição. Python setup.py bdist_wheel
O diretório Dwriteshape no repositório contém a solução e os projetos do Visual Studio. A solução Dwriteshape contém dois projetos. O projeto Dwriteshape e o projeto do cliente. O projeto Dwriteshape constrói o pacote como o nome da extensão "Dwriteshape". Observe a diferença entre a construção de extensão usando o setup.py. Isso é necessário porque o Visual Studio não tem o mesmo nível de controle que o Setup.py e parece exigir que o nome da extensão seja o mesmo que o do arquivo .pyx. Também pode ser útil para evitar colisões de nomes. O projeto do Visual Studio deve ser usado apenas para criar construções de depuração da extensão para o desenvolvimento. O projeto do cliente é um cliente de teste simples para o projeto Dwriteshape.
Para criar a extensão com o projeto Visual Studio, você deve primeiro usar o Cython para criar o arquivo .cpp dos arquivos .pyx e .pxd. Existe uma compilação.Bat no diretório SRC Dwriteshapepy para fazer isso. O arquivo gerado dwriteshape.cpp deve ser excluído se a mudança da construção com o Visual Studio ou Setup.py ou Visa Versa. Ao construir com setup.py, o arquivo .cpp é gerado automaticamente, para que o Build.bat não seja necessário.
O diretório src cpp contém a camada de abstração DWRITE da extensão basicamente encanamento entre a API exportada e o DWRITE. Este código é comum entre os métodos de construção.
import sys
import dwriteshapepy as dw
from pathlib import Path
with open ( sys . argv [ 1 ], 'rb' ) as fontfile :
fontdata = fontfile . read ()
text = sys . argv [ 2 ]
face = dw . Face ( fontdata )
font = dw . Font ( face )
upm = font . upem
print ( upm )
buf = dw . Buffer ()
buf . add_str ( text )
features = { "kern" : True , "liga" : True }
dw . shape ( font , buf , features )
glyph_names = [ font . glyph_to_string ( g . codepoint ) for g in buf . glyph_infos ]
infos = [( g . codepoint , g . cluster ) for g in buf . glyph_infos ]
print ( glyph_names )
print ( infos )
advance = [( adv . x_advance , adv . y_advance , adv . x_offset , adv . y_offset ) for adv in buf . glyph_positions ]
print ( advance )
infos = buf . glyph_infos
positions = buf . glyph_positions
for info , pos in zip ( infos , positions ):
gid = info . codepoint
cluster = info . cluster
x_advance = pos . x_advance
x_offset = pos . x_offset
y_offset = pos . y_offset
print ( f"gid { gid } = { cluster } @ { x_advance } , { x_offset } + { y_offset } " )Este projeto recebe contribuições e sugestões. A maioria das contribuições exige que você concorde com um Contrato de Licença de Colaborador (CLA) declarando que você tem o direito e, na verdade, concede -nos os direitos de usar sua contribuição. Para detalhes, visite https://cla.opensource.microsoft.com.
Quando você envia uma solicitação de tração, um BOT do CLA determina automaticamente se você precisa fornecer um CLA e decorar o PR adequadamente (por exemplo, verificação de status, comentar). Simplesmente siga as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios usando nosso CLA.
Este projeto adotou o Código de Conduta Open Microsoft. Para obter mais informações, consulte o Código de Conduta Perguntas frequentes ou entre em contato com [email protected] com quaisquer perguntas ou comentários adicionais.
Este projeto pode conter marcas comerciais ou logotipos para projetos, produtos ou serviços. O uso autorizado de marcas comerciais ou logotipos da Microsoft está sujeito e deve seguir as diretrizes de marca registrada e marca da Microsoft. O uso de marcas comerciais da Microsoft ou logotipos em versões modificadas deste projeto não deve causar confusão ou implicar o patrocínio da Microsoft. Qualquer uso de marcas comerciais ou logotipos de terceiros estão sujeitas às políticas de terceiros.