Este diretório contém ferramentas para o recurso de espaçamento contextual de meia largura do OpenType para a tipografia japonesa/chinesa/coreana.
Esse recurso permite a tipografia descrita no JLREQ 3.1.2 Posicionamento de marcas de pontuação (vírgulas, períodos e colchetes) maneira básica de colocar marcas de pontuação, parênteses, etc. para o espaço de ajuste de código japonês e Clreq 3.1.6.1. A seguir, é apresentado um número de JLREQ:
Uma discussão antecipada no artigo do Blog do tipo Adobe CJK e a Parte II pode ajudar a entender melhor o recurso.
Você pode encontrar o texto da amostra aqui. Esta página de amostra usa fontes criadas com esta ferramenta.
OpenType define 4 tags de recursos para fontes para suportar esse recurso:
chws " e a tag " vchw " como sua contraparte de fluxo vertical.halt " e a tag " vhal " como seu contraparte de fluxo vertical.Todos os 4 recursos são desejados, pois cada recurso é aplicado em contexto diferente.
Este pacote adiciona esses recursos a qualquer fontes do OpenType/TrueType quando estiver ausente, calculando as tabelas de recursos de dados como pontos de código Unicode e esboços de glifos.
Você pode instalar esta ferramenta por pip ou pipx.
pipx install east-asian-spacingpip install east-asian-spacingEsteja ciente de que, se você instalar com o PIP no ambiente global, suas dependências poderão causar conflitos com outros pacotes. Se tudo o que você precisa é a ferramenta de linha de comando, o PIPX pode instalá -lo globalmente enquanto o isolando em um ambiente virtual.
Consulte também a seção de pacote de instalação se desejar usar este pacote do seu programa Python, ou a seção Clone and Install, se desejar diagnosticar fontes ou o código em mais detalhes.
O exemplo a seguir adiciona o recurso ao input-font-file e o salva ao diretório build .
east-asian-spacing -o build input-font-fileA seção de teste possui recursos para verificar as diferenças e as fontes de teste que você criou.
Para outras opções e usos, a opção --help pode mostrar a lista completa de opções.
O algoritmo é aplicável a quaisquer fontes CJK. As fontes a seguir são testadas em cada versão:
As fontes CJK em fonts.google.com são testadas no pacote chws_tool. Várias outras fontes também foram testadas durante o desenvolvimento.
Ao adicionar os recursos às suas fontes, o teste HTML é uma ferramenta útil para verificar os resultados. Se você encontrar algum problema com suas fontes, informe -se aos problemas.
Veja também os tópicos avançados abaixo se você deseja personalizar os comportamentos padrão para suas fontes.
Quando o arquivo de fonte de entrada é uma coleção TrueType (TTC), essa ferramenta adiciona o recurso a todas as fontes no TTC por padrão.
Se você deseja adicionar o recurso a apenas algumas fontes no TTC, poderá especificar uma lista separada por vírgula de índices de fonte. O exemplo a seguir adiciona o recurso ao índice de fonte 0 e 1, mas não a outras fontes no TTC.
east-asian-spacing --index=0,1 input-font-file.ttcVocê pode instalar este pacote usando suas ferramentas favoritas de gerenciamento de pacotes, como poesia, pipenv ou pip.
pip install east-asian-spacingpipenv install east-asian-spacingpoetry add east-asian-spacingConsulte também o clone e a seção de instalação se desejar diagnosticar fontes ou o código em mais detalhes.
O exemplo a seguir cria uma fonte com os recursos no diretório " build " se os recursos forem aplicáveis.
import east_asian_spacing
async def main_async ():
builder = east_asian_spacing . Builder ( "fonts/input.otf" )
output_path = await builder . build_and_save ( "build" )
if output_path :
print ( f"Saved to { output_path } " )
else :
print ( "Skipped" )Uma página HTML de teste está disponível para verificar o comportamento das fontes nos navegadores.
Ele pode testar fontes que você construiu localmente.
fonts " no início do bloco <script> .Observe que, quando você deseja testar um TTC (coleção TrueType), mas o seu navegador pode carregar apenas a primeira fonte no TTC, o seguinte comando extrai todas as fontes OpenType (.Otf ou .ttf) de um arquivo de fonte de coleta de openType (.ttc ou .otc).
east-asian-spacing ttc build/NotoSansCJK-Regular.ttc O subcomando dump pode criar vários tipos de arquivos de despejo de texto.
O uso mais simples é mostrar uma lista de tabelas. Isso é semelhante à opção " -l " do TTX, exceto pelas coleções TrueType (TTC), essa ferramenta pode mostrar tabelas de todas as fontes no TTC, juntamente com as quais as tabelas são compartilhadas com as fontes.
east-asian-spacing dump build/NotoSansCJK-Regular.ttc A opção " -o " cria arquivos de lista de tabela no diretório especificado:
east-asian-spacing dump -o build/dump build/ * .ttc A opção " --ttx " cria despejos de texto TTX de todas as tabelas, além dos arquivos da lista de tabela. Isso é semelhante à opção " -s " do TTX, exceto que ele pode despejar todas as tabelas nas coleções TrueType (TTC).
east-asian-spacing dump -o build/dump --ttx build/ * .ttc O sub-comando dump também pode criar arquivos de despejo de dois arquivos de fonte e compará-los. Isso ajuda a visualizar diferenças em duas fontes, especificamente, os arquivos de fonte criados a partir dos arquivos de fontes originais.
east-asian-spacing dump -o build/diff --diff source_fonts_dir build/NotoSansCJK.ttc O exemplo acima calcula as diferenças entre source_fonts_dir/NotoSansCJK.ttc e build/NotoSansCJK.ttc criando seguintes 3 conjuntos de arquivos:
build/NotoSansCJK.ttc no diretório build/diff/dump .source_fonts_dir/NotoSansCJK.ttc no diretório build/diff/src .build/diff .Nota: A opção "
--diff" é mais eficiente do que tudo isso, especialmente para fontes grandes, porque pula a criação de TTX de tabelas quando são iguais binários.
A opção -o é opcional. Quando é omitido, o subcomando produz o diferencial para stdout .
east-asian-spacing dump --diff source_fonts_dir build/NotoSansCJK.ttc | lessPara criar arquivos diff para todas as fontes que você construiu, você pode canalizar a saída como abaixo:
east-asian-spacing -p * .otf | east-asian-spacing dump -o build/diff - A opção " -p " imprime os caminhos de fonte de entrada e saída para stdout no formato de valores separados com TAB. O subcomando dump com o argumento " - " lê esta lista do stdin e cria seus arquivos de despejo de texto e diff no diretório build/diff . A opção " --diff " não é necessária neste caso, porque os caminhos da fonte de origem são fornecidos pelo tubo.
Depois de revisar os arquivos diff criados acima ou as fontes testadas que você criar, você pode copiar os arquivos diff no diretório references . Então, quando você deseja construí -los novamente, como quando as fontes são atualizadas ou quando o ambiente de construção é alterado, você pode comparar os arquivos diff com os arquivos de referência para saber como as novas fontes são diferentes das compilações anteriores.
Com a opção " -r ", o sub-comando dump cria arquivos diff entre dois arquivos de fontes e compare os arquivos diff com os arquivos diff, outrora revisados no diretório references .
O uso típico desta opção está abaixo:
east-asian-spacing -p -g=build/glyphs * .otf |
east-asian-spacing dump -o=build/diff -r=references - Consulte a seção Diff para a opção e a tubulação " -p ".
Os scripts build*.sh incluem esta opção.
O teste de forma forma seqüências de teste e verifica se o espaçamento contextual é aplicado ou não.
A opção --test define o nível do teste de forma.
east-asian-spacing --test 2 -v -o build input-font-fileO nível 0 desativa o teste de forma. O nível 1 executa um teste de fumaça usando um pequeno conjunto de amostras. O nível 2 executa o teste de forma usando um grande conjunto de seqüências de caracteres. O valor padrão é 1.
O algoritmo é agnóstico de idioma e é aplicável a qualquer fonte CJK.
Este pacote determina os pares de glifos para ajustar os espaçamentos por um conjunto de pontos de código Unicode definidos na classe Config .
Em seguida, para cada par, ele verifica se os espaçamentos são aplicáveis examinando os contornos glifos e computando caixas de glifos delimitadores de tinta. Por exemplo, quando os glifos são muito grossos, os glifos podem não ter espaçamentos internos suficientes e a aplicação dos espaçamentos pode fazer com que os glifos colidam. Este pacote detecta automaticamente esses casos e evita aplicar espaçamentos a esses pares.
Esse comportamento automático pode ser desativado especificando os idiomas abaixo ou configurando Config.use_ink_bounds como False no seu programa Python.
Existem convenções específicas para o idioma para onde os caracteres de pontuação são colocados nos espaços de glifos. Por exemplo, o ponto final ideográfico U+3002 deve ser colocado no canto do fundo esquerdo do espaço do glifo em japonês, enquanto deve ser colocado no centro dos chineses tradicionais.
Por padrão, este pacote determina essas diferenças dos esboços de glifos, conforme descrito na seção de algoritmo acima. Mas você pode especificar a tag do sistema de linguagem OpenType para permitir que este pacote siga a convenção de idiomas em vez de usar esboços de glifos. O exemplo a seguir desativa a determinação automática dos esboços de glifos e especifica que a fonte é uma fonte japonesa.
east-asian-spacing --language=JAN input-font-filePara coleções TrueType (TTC), a opção de idioma se aplica a todas as fontes no TTC por padrão. Quando você deseja especificar diferentes idiomas para cada fonte no TTC, ele aceita uma lista separada por vírgula. O exemplo a seguir especifica coreano para o índice de fontes 1, chinês simplificado para o índice da fonte 2 e automático para todas as outras fontes.
east-asian-spacing --language=,KOR,ZHS input-font-file.ttc Você pode combinar essas duas opções. O exemplo a seguir se aplica JAN ao índice 2 e ZHS ao índice 3. Outras fontes no TTC não são alteradas.
east-asian-spacing --index=2,3 --language=JAN,ZHS input-font-file.ttcVocê pode ajustar quais pares de personagens devem ajustar espaçamentos, em casos como quando suas fontes podem não ter esperado espaçamentos para alguns caracteres. Atualmente, isso é possível apenas dos programas Python.
Para um exemplo simples, consulte a função test_config em tests/config_test.py .
O projeto CHWS_TOOL é um exemplo real de personalização deste pacote.
Este pacote usa o mecanismo de modelagem de Harfbuzz usando um Cython Lindings UharfBuzz.
Se você deseja usar uma compilação específica do HarfBuzz, essa ferramenta pode invocar a ferramenta de linha de comando em forma de HB externa, definindo a variável de ambiente SHAPER .
export SHAPER=hb-shapePara instalar a forma de HB para Linux:
sudo apt get libharfbuzz-binPara instalar a forma de HB para Mac com homebrew:
brew install harfbuzzAs instruções para outras plataformas podem estar disponíveis em command-t-found.com.
Se você precisar diagnosticar fontes ou o código, recomenda -se clonagem e instalação usando poesia:
git clone https://github.com/kojiishi/east_asian_spacing
cd east_asian_spacing
poetry install
poetry shellEste método tem as seguintes vantagens:
-e " ou setuptools "Modo de desenvolvimento").Você também pode instalar o diretório clonado usando PIP, se preferir:
git clone https://github.com/kojiishi/east_asian_spacing
cd east_asian_spacing
pip install .Este repositório contém testes de unidade usando pytest. Os testes de unidade cobrem as funcionalidades básicas, incluindo testes de forma, adicionando o recurso a uma fonte de teste e comparando -a com referências.
Se você seguiu o clone e a seção de instalação, as ferramentas para teste de unidade já estão instaladas. Antes de executá -los pela primeira vez, você precisa baixar fontes para testar:
./tests/download_fonts.pyVocê pode executar os testes:
pytestou execute -os com várias versões de Python usando TOX:
tox O diretório scripts possui alguns pequenos scripts de shell.
build*.sh scripts são úteis para criar fontes, calcular as fontes de fonte das fontes de origem e comparar os arquivos diff com as referências. Os seguintes são usos de exemplo.
./scripts/build.sh input-font-file.otf -v
./scripts/build-noto-cjk.sh ~ /fonts/noto-cjk -v