Allsorts é um analisador de fontes, moldando o motor e o subconjunto do OpenType, Woff e Woff2 escrito inteiramente em ferrugem. Este repositório contém ferramentas desenvolvidas para depurar e testar a AllSorts e fornecer exemplos de seu uso.
Nota: Essas ferramentas são para fins de demonstração, referência e depuração. Você não deve confiar neles para fluxos de trabalho de produção.
Ferramentas disponíveis:
bitmaps - Bitmaps despejados de fontes de bitmapcmap - Personagem imprimor para mapeamentos de glifosdump - Informações da fonte do dumphas-table -Verifique se uma fonte tem uma tabela específicainstance - Crie uma instância estática de uma fonte de uma fonte variávellayout-features -Imprima uma lista dos recursos GSub e GPOs de uma fonteshape - aplique a modelagem aos glifos de uma fontespecimen - gerar um espécie de fonte HTML para uma fontesubset - subconjunto uma fontevalidate - analise a fonte fornecida, relatando quaisquer falhasvariations - Liste os eixos de variação de uma fonte variávelview - Gere SVGs a partir de glifosbitmaps A ferramenta bitmaps extrai bitmaps de fontes contendo bitmaps de glifos nas tabelas EBLC / EBDT ou CBLC / CBDT .
-o é o caminho para o diretório para escrever os bitmaps. Será criado se não existir. As imagens são escritas como PNGs em um subdiretório para cada ataque (tamanho). O formato é {ppem_x}x{ppem_y}@{bit_depth} , os arquivos são nomeados {glyph_id}.png :
terminus
├── 12x12@1
│ ├── 0.png
│ ├── 1.png
│ ├── 2.png
│ ├── 3.png
│ ├── 4.png
│ ├── 5.png
│ ├── 6.png
│ ├── 7.png
⋮ ⋮
├── 14x14@1
│ ├── 0.png
⋮ ⋮
└── 32x32@1
⋮ ⋮
allsorts bitmaps -o noto-color-emoji NotoColorEmoji.ttf
cmap A ferramenta cmap escolhe uma sub-tabela cmap preferida e despeja o caractere nas entradas do índice glifo. Se a codificação da tabela for unicode, os caracteres serão impressos junto com o ponto de código, caso contrário, apenas o valor numérico do caractere será impresso.
-f , --font Especifica o caminho para o arquivo de fonte.-i , --index é o índice da fonte para despejar (para TTC, woff2) (padrão: 0). $ allsorts cmap --font profontn.otb
cmap sub-table encoding: Unicode
'' U+0000 -> 0
'' U+0001 -> 1
'' U+0002 -> 2
⋮
'?' U+003F -> 63
'@' U+0040 -> 64
'A' U+0041 -> 65
'B' U+0042 -> 66
⋮
'»' U+00BB -> 187
'¼' U+00BC -> 188
'½' U+00BD -> 189
'¾' U+00BE -> 190
'¿' U+00BF -> 191
'À' U+00C0 -> 192
'Á' U+00C1 -> 193
'Â' U+00C2 -> 194
'Ã' U+00C3 -> 195
'Ä' U+00C4 -> 196
⋮
dump A ferramenta dump imprime ou extrai informações de um arquivo de fonte.
allsorts dump path/to/font imprime informações sobre a fonte.
--name inclui os metadados contidos na tabela name na saída.-c pode ser usado para imprimir informações sobre uma fonte CFF ou tabela não embrulhada em um contêiner TrueType ou OpenType.-t extrai a tabela nomeada da fonte fornecida. A saída deve ser redirecionada para um arquivo. Por exemplo, allsorts dump -t glyf > glyf.bin-g imprime informações sobre um glifo específico em uma fonte.-l imprime todas as compensações na tabela loca na fonte. $ allsorts dump noto-subset.otd | head
TTF
- version: 0x4f54544f
- num_tables: 9
CFF (checksum: 0x625ba831, offset: 156, length: 166505)
OS/2 (checksum: 0x9f6306c8, offset: 166664, length: 96)
cmap (checksum: 0x131b2742, offset: 166760, length: 274)
head (checksum: 0x09e560e8, offset: 167036, length: 54)
hhea (checksum: 0x0c1109cf, offset: 167092, length: 36)
hmtx (checksum: 0x1b9b0310, offset: 167128, length: 52)
maxp (checksum: 0x000d5000, offset: 167180, length: 6)
name (checksum: 0x1f3037ad, offset: 167188, length: 418)
post (checksum: 0xff860032, offset: 167608, length: 32)
- CFF:
- version: 1.0
- name: NotoSansJP-Regular
- num glyphs: 13
- charset: Custom
- variant: CID
has-table A ferramenta has-table verifica se o arquivo de fonte fornecido contém a tabela passada através do argumento -t . Se a fonte contiver a tabela, ele sairá com o sucesso do status (0), se a fonte não conter a tabela, ele sairá com o status 1.
Esta ferramenta é útil combinada com find , para localizar fontes que possuem a tabela desejada.
-t , --table TABLE Tabela para verificar-i , --index INDEX da fonte para verificar (para TTC, woff2) (padrão: 0)-p , --print-file Imprima o caminho para a fonte se ela contiver a tabela.-v , --invert-match seleciona fontes que não têm a tabela fornecida Neste exemplo, pesquisamos o diretório atual por arquivos que terminam em ttf , otf ou otc e verificamos se eles contêm uma tabela EBLC . Se a tabela for encontrada, o caminho para a fonte for impresso.
find . -regextype posix-extended -type f -iregex '.*.(ttf|otf|otc)$' -exec allsorts has-table -t EBLC -p {} ;
instance A ferramenta instance aplica um conjunto de valores (tupla) aos eixos de variação de uma fonte variável para produzir uma fonte estática e não variável com essas configurações.
-t , --tuple é uma lista separada por vírgula de valores um para cada eixo de variação da fonte. A ferramenta variations listará os eixos, sua ordem e limites.-o , --output é o caminho para a fonte de saída. Neste exemplo, a fonte possui dois eixos: UNDO e UNDS . Fornecemos um valor de 500 para cada um e escrevemos a fonte de saída para UnderlineTest.ttf .
allsorts instance --tuple 500,500 UnderlineTest-VF.ttf -o UnderlineTest.ttf
layout-featuresImprime uma lista recuada dos recursos GSub e GPOs de uma fonte.
$ layout-features fonts/devanagari/AnnapurnaSIL-Regular.ttf
Table: GSUB
Script: DFLT
Language: default
Feature: aalt
Lookups: 56
Feature: abvs
Lookups: 27,28,29,30
Feature: akhn
Lookups: 4
Feature: blwf
Lookups: 9
# additional output omitted
shape A ferramenta shape molda o texto fornecido de acordo com a fonte, idioma e script fornecidos. Ele imprime os glifos antes e depois da modelagem.
-f , --font PATH para o arquivo-i , --index INDEX da fonte para moldar (para TTC, woff2) (padrão: 0)-s , --script SCRIPT para moldar-l , --lang LANG Langus para moldar--vertical vertical vertical, o padrão é horizontal $ shape -f fonts/devanagari/AnnapurnaSIL-Regular.ttf -s deva -l HIN 'शब्दों और वाक्यों की तरह'
# output omitted
specimen A ferramenta specimen gera uma folha de amostra de fonte HTML contendo texto de amostra definido na fonte, bem como informações sobre a fonte e seus recursos suportados.
-i , --index INDEX da fonte para subconjunto (para TTC, woff2) (padrão: 0)--sample-text TEXT de texto de amostra para usar na amostra de fonte $ allsorts specimen ../allsorts/tests/fonts/bengali/Lohit-Bengali.ttf
subset A ferramenta subset pega uma fonte de origem e algum texto e grava uma nova versão da fonte de origem que contém apenas os glifos necessários para o texto fornecido.
-t , --text TEXT subconjunto A fonte para incluir glifos do texto-a , --all incluem todos os glifos na fonte do subconjunto-i , --index INDEX da fonte para subconjunto (para TTC, woff2) (padrão: 0) $ allsorts subset -t 'This a subsetting test' NotoSansJP-Regular.otf noto-subset.otf
Number of glyphs in new font: 13
validate A ferramenta validate tenta analisar todos os glifos (ou vários ditos no caso de CFF) na fonte fornecida. Ele relata quaisquer erros encontrados, mas de outra forma é silencioso. Este comando foi útil para testar a granel Allsorts contra um grande repertório de fontes do mundo real.
$ allsorts validate ../allsorts/tests/fonts/bengali/Lohit-Bengali.ttf
$ fd '.(ttf|otf|ttc)$' /usr/share/fonts | sort | parallel --bar allsorts validate {}
variations A ferramenta variations lista informações sobre uma fonte variável. As informações incluem:
Este exemplo imprime informações de variação para a fonte em ../text-rendering-tests/fonts/TestHVARTwo.ttf .
$ allsorts variations ../text-rendering-tests/fonts/TestHVARTwo.ttf
Axes: (2)
- wght = min: 0, max: 1000, default: 0
- cntr = min: 0, max: 100, default: 0
Instances:
Subfamily: ExtraLight
PostScript Name: TestFont-ExtraLight
Coordinates: [0.0, 0.0]
Subfamily: Light
PostScript Name: TestFont-Light
Coordinates: [150.0, 0.0]
Subfamily: Regular
PostScript Name: TestFont-Regular
Coordinates: [394.0, 0.0]
Subfamily: Semibold
PostScript Name: TestFont-Semibold
Coordinates: [600.0, 0.0]
Subfamily: Bold
PostScript Name: TestFont-Bold
Coordinates: [824.0, 0.0]
Subfamily: Black
PostScript Name: TestFont-Black
Coordinates: [1000.0, 0.0]
Subfamily: Black Medium Contrast
PostScript Name: TestFont-BlackMediumContrast
Coordinates: [1000.0, 50.0]
Subfamily: Black High Contrast
PostScript Name: TestFont-BlackHighContrast
Coordinates: [1000.0, 100.0]
view A ferramenta view molda o texto ou lista de pontos de código fornecidos de acordo com a fonte, idioma e script fornecidos. Em seguida, gera um SVG dos glifos.
-f , --font PATH para o arquivo-s , --script SCRIPT para moldar-l , --lang LANG Langus para moldar--mark-origin marca a origem de cada glifo com um cruzamento--margin num ou top,right,bottom,left Especifique uma margem a ser adicionada à borda do SVG--fg-colour rrggbbaa Defina a cor de preenchimento dos glifos--bg-colour rrggbbaa Defina a cor de fundo do SVG gerado--fg-color rrggbbaa alias para --fg-colour--bg-color rrggbbaa Alias para --bg-colour-t , --text TEXT para renderizar-c , --codepoints CODEPOINTS Lista separada por vírgula de pontos de código (como números hexadecimais) para renderizar-i , --indices GLYPH_INDICES Lista separada por vírgula de índices de glifos para renderizar-F , --features FEATURES Apresenta lista de recursos de OpenType a ser separada por vírgula (Nota: Ativa apenas esses recursos) $ view -f fonts/devanagari/NotoSerifDevanagari-Regular.ttf -s deva -t 'खि'
# output omitted
$ allsorts view -f fonts/devanagari/NotoSerifDevanagari-Regular.ttf -s deva -c '916,93f'
# output omitted
Neste exemplo, o recurso OpenType pres está ativado, o que permite que o Glyph 30 seja substituído por seu formulário de apresentação especial (Glyph 547).
$ view -f fonts/devanagari/NotoSerifDevanagari-Regular.ttf -s deva --features pres -i '30,54'
# output omitted
Versão mínima de ferrugem suportada: 1.70.0
Para construir as ferramentas, verifique se você tem ferrugem instalada.
cargo build --releasecargo install --path . Existe um pacote AUR para allsorts-tools :
git clone https://aur.archlinux.org/allsorts-tools.git
cd allsorts-tools
makepkg -si
As contribuições são bem -vindas, consulte o guia contribuinte da AllSorts para obter mais detalhes.
Nosso objetivo é defender os padrões da comunidade de ferrugem:
Estamos comprometidos em fornecer um ambiente amigável, seguro e acolhedor para todos, independentemente de gênero, orientação sexual, deficiência, etnia, religião ou características pessoais semelhantes.
Seguimos o Código de Conduta Rust.
AllSorts e essas ferramentas são distribuídas nos termos da licença Apache (versão 2.0).
Consulte a licença para obter detalhes.