Um gerador de metadados que busca e analisa a API do Google Fonts a ser usada principalmente para o Fontsource Monorepo.
Instale o pacote do npm :
npm install google-font-metadataO projeto exporta os seguintes dados:
import {
APIv1 ,
APIv2 ,
APIVariable ,
APIIconStatic ,
APIIconVariable ,
APILicense ,
APIRegistry ,
} from "google-font-metadata" ;
const {
APIv1 ,
APIv2 ,
APIVariable ,
APIIconStatic ,
APIIconVariable ,
APILicense ,
APIRegistry ,
} = require ( "google-font-metadata" ) ;
console . dir ( APIv2 ) ; Usa o Google Fontes CSS APIV1 que inclui diferentes arquivos de fonte para cada subconjunto, mas não inclui valores de faixa unicode. Isso geralmente não é recomendado.
Ele exporta data/google-fonts-v1.json .
{
...
"abel" : {
"family" : " Abel " ,
"id" : " abel " ,
"subsets" : [ " latin " ],
"weights" : [ 400 ],
"styles" : [ " normal " ],
"variants" : {
"400" : {
"normal" : {
"latin" : {
"url" : {
"woff2" : " https://fonts.gstatic.com/s/abel/v18/MwQ5bhbm2POE2V9BPQ.woff2 " ,
"woff" : " https://fonts.gstatic.com/s/abel/v18/MwQ5bhbm2POE2V9BOw.woff " ,
"truetype" : " https://fonts.gstatic.com/s/abel/v18/MwQ5bhbm2POE2V9BOA.ttf "
}
}
}
}
},
"defSubset" : " latin " ,
"lastModified" : " 2022-04-20 " ,
"version" : " v18 " ,
"category" : " sans-serif "
},
...
} Usa o Google Fontes CSS APIV2 e inclui os valores de faixa unicode para cada subconjunto. No entanto, a API serve arquivos ttf com todos os subconjuntos incluídos em um arquivo e, portanto, todos os links para esses tipos de arquivos no mesmo subconjunto levam ao mesmo link para cada peso e estilo. Os arquivos woff2 e woff são divididos individualmente por subconjunto.
Exporta data/google-fonts-v2.json .
{
...
"abel" : {
"family" : " Abel " ,
"id" : " abel " ,
"subsets" : [ " latin " ],
"weights" : [ 400 ],
"styles" : [ " normal " ],
"unicodeRange" : {
"latin" : " U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD "
},
"variants" : {
"400" : {
"normal" : {
"latin" : {
"url" : {
"woff2" : " https://fonts.gstatic.com/s/abel/v18/MwQ5bhbm2POE2V9BPQ.woff2 " ,
"woff" : " https://fonts.gstatic.com/s/abel/v18/MwQ5bhbm2POE6Vs.woff " ,
"truetype" : " https://fonts.gstatic.com/s/abel/v18/MwQ5bhbm2POE6Vg.ttf "
}
}
}
}
},
"defSubset" : " latin " ,
"lastModified" : " 2022-04-20 " ,
"version" : " v18 " ,
"category" : " sans-serif "
},
...
}Observe que as fontes com grandes glifos como o idioma japonês, coreano ou chinês são divididas em muitos subconjuntos numerados menores que utilizam o seletor de @fontface de alcance unicode. Um exemplo é Noto Sans JP, que retorna o seguinte:
{
...
"noto-sans-jp" : {
"family" : " Noto Sans JP " ,
"id" : " noto-sans-jp " ,
"subsets" : [ " japanese " , " latin " ],
"weights" : [ 100 , 300 , 400 , 500 , 700 , 900 ],
"styles" : [ " normal " ],
"unicodeRange" : {
"[0]" : " U+25ee8,...,U+2f9f4 " ,
"[1]" : " U+1f235-1f23b,...,U+25ed8 " ,
...
"[119]" : " U+20,...,U+ff0e "
},
"variants" : {
"100" : {
"normal" : {
"[0]" : {
"url" : {
"woff2" : " https://fonts.gstatic.com/s/notosansjp/v42/-F6ofjtqLzI2JPCgQBnw7HFQoggPkENvl4B0ZLgOquiXidBa3qHiDcp2RQ.0.woff2 " ,
"woff" : " https://fonts.gstatic.com/s/notosansjp/v42/-F62fjtqLzI2JPCgQBnw7HFoxQII2lcnk-AFfrgQrvWXpdFg3KXxAMsKMbdN.0.woff " ,
"opentype" : " https://fonts.gstatic.com/s/notosansjp/v42/-F6ofjtqLzI2JPCgQBnw7HFQoggM.otf "
}
},
...,
},
...,
}
}
}
...
}Rasa o diretório do Google Fontes e usa a API do Google Fonts para gerar todas as definições relevantes do eixo e baixar metadados variantes. Você pode aprender mais eixo de fonte variável aqui.
Existem 3 variantes padrão:
wght - Links apenas para arquivos de fonte que possuem apenas o eixo wght .standard - Um conjunto padrão de fontes que inclui wght, wdth, slnt, opsz ', se disponível.full - para arquivos de fonte que possuem todo o eixo incluído neles. Além disso, uma variante é gerada para cada eixo exclusivo na fonte, por exemplo, se houver wdth , variants.wdth.normal.latin existirá. Observe que o eixo wght também está incluído em cada variante personalizada exclusiva.
Observe que variantes standard ou full podem não existir se não houver eixos relevantes na fonte para essa classificação. Isso evita variantes duplicadas com nomes diferentes.
Exporta data/variable.json .
{
...
"akshar" : {
"family" : " Akshar " ,
"id" : " akshar " ,
"axes" : {
"wght" : { "default" : " 400 " , "min" : " 300 " , "max" : " 700 " , "step" : " 1 " }
},
"variants" : {
"wght" : {
"normal" : {
"devanagari" : " https://fonts.gstatic.com/s/akshar/v5/Yq6V-LyHWTfz9rGCpR5lhOc.woff2 " ,
"latin-ext" : " https://fonts.gstatic.com/s/akshar/v5/Yq6V-LyHWTfz9rGCqh5lhOc.woff2 " ,
"latin" : " https://fonts.gstatic.com/s/akshar/v5/Yq6V-LyHWTfz9rGCpB5l.woff2 "
}
},
"full" : {
"normal" : {
"devanagari" : " https://fonts.gstatic.com/s/akshar/v5/Yq6V-LyHWTfz9rGCpR5lhOc.woff2 " ,
"latin-ext" : " https://fonts.gstatic.com/s/akshar/v5/Yq6V-LyHWTfz9rGCqh5lhOc.woff2 " ,
"latin" : " https://fonts.gstatic.com/s/akshar/v5/Yq6V-LyHWTfz9rGCpB5l.woff2 "
}
},
"standard" : {
"normal" : {
"devanagari" : " https://fonts.gstatic.com/s/akshar/v5/Yq6V-LyHWTfz9rGCpR5lhOc.woff2 " ,
"latin-ext" : " https://fonts.gstatic.com/s/akshar/v5/Yq6V-LyHWTfz9rGCqh5lhOc.woff2 " ,
"latin" : " https://fonts.gstatic.com/s/akshar/v5/Yq6V-LyHWTfz9rGCpB5l.woff2 "
}
}
}
},
...
} Observe que certas fontes, como inter ou recursivas, têm o eixo SLNT, o que significa que seu font-style em CSS não será normal ou italic na propriedade full , mas oblique x deg x deg . Consulte o equipamento de teste CSS para recursivo. Embora ainda seja exibido como normal em metadados, cabe ao desenvolvedor incluir o estilo oblique se eles estiverem gerando CSS usando os valores min e max da propriedade recursive.axes.slnt .
São matrizes de objetos gerados do comando npx gfm generate [key] . É improvável que você use isso.
import { APIDirect , APIVariableDirect } from "google-font-metadata" ;
const { APIDirect , APIVariableDirect } = require ( "google-font-metadata" ) ; Exporta data/api-response.json e data/variable-response.json respectivamente.
Rasa a página de atribuição do Google Fontes e retorna um objeto legível.
{
...
"abel" : {
"id" : " abel " ,
"authors" : {
"copyright" : " Copyright 2011, Matthew Desmond with Reserved Font Name Abel. " ,
"website" : " http://www.madtype.com " ,
"email" : " [email protected] "
},
"license" : {
"type" : " SIL Open Font License, 1.1 " ,
"url" : " http://scripts.sil.org/OFL "
},
"original" : " Copyright (c) 2011, Matthew Desmond (http://www.madtype.com | [email protected]), with Reserved Font Name Abel. "
},
...
} Exporta data/licenses.json
{
...
{
"name" : " Thick Stroke " ,
"tag" : " XOPQ " ,
"min" : -1000 ,
"max" : 2000 ,
"default" : 88 ,
"precision" : 0
},
...
} Exporta data/axis-registry.json
Você pode se referir a src/index.ts e src/data.ts para ver todas as exportações.
Você pode usar a ferramenta gfm CLI para atualizar os metadados com novos resultados das APIs do Google.
npx gfm generate [key] - busca a API padrão do Google Fonts, que pode ser usada para analisar posteriormente. Isso deve ser chamado antes npx gfm parse .
Bandeiras:
-n, --normal -Obtenha apenas a API normal do desenvolvedor do Google para APIV1 e APIV2.-v, --variable -raspe apenas a página do eixo variável para apivariável. key Nota não precisa ser fornecida se esta opção for passada. Você pode obter um valor key da API do Google Fontes a partir daqui. Como alternativa, você pode usar um arquivo .env com API_KEY=keyvalue em vez de fornecer um argumento -chave no comando.
npx gfm parse - analisa a API CSS do Google Fonts e gera metadados completos usando os dados de comando generate .
Bandeiras:
-1, --v1 -Somente analise e atualize o APIV1.-2, --v2 -Somente analise e atualize o APIV2.-v, --variable -apenas analise e atualize apivariável.-l, --license -apenas analise e atualize a apilicense.-f, --force -Isso pula o cache e forçará todas as fontes.--no-validate -Isso pula a invocando npx gfm validate após o término da análise. npx gfm validate - Comando auxiliar para validar seus metadados existentes com um esquema. Isso é invocado automaticamente com npx gfm parse .
Bandeiras:
-1, --v1 -Valide apenas Apiv1.-2, --v2 -Valide apenas Apiv2.-v, --variable -valida apenas apivariável.