Ce répertoire contient des outils pour la fonction d'espacement contextuel d'OpenType à demi-largeur pour la typographie japonaise / chinoise / coréenne.
Cette fonctionnalité permet la typographie décrite dans JLREQ 3.1.2 Positionnement des marques de ponctuation (virgules, périodes et supports) moyens de base de placer des marques de ponctuation, des parenthèses, etc. pour le japonais et CLREQ 3.1.6.1 Ajustement de ponctuation SpacePetAppoint Code Ajustement Space pour chinois. Voici une figure de JLREQ:
Une première discussion sur l'article de blog de type Adobe CJK et la partie II peut aider à mieux comprendre la fonctionnalité.
Vous pouvez trouver un exemple de texte ici. Cet exemple de page utilise des polices construites avec cet outil.
OpenType définit 4 balises de fonctionnalité pour les polices pour prendre en charge cette fonctionnalité:
chws " et la balise de fonction " vchw " comme homologue à débit vertical.halt " et la balise de fonction " vhal " comme homologue à débit vertical.Les 4 fonctionnalités sont souhaitées, car chaque fonctionnalité est appliquée dans un contexte différent.
Ce package ajoute ces fonctionnalités à toutes les polices OpenType / TrueType lorsqu'elles sont manquantes, en calculant les tables de fonctionnalité à partir de données telles que les points de code Unicode et les contours de glyphe.
Vous pouvez installer cet outil par PIP ou PIPX.
pipx install east-asian-spacingpip install east-asian-spacingVeuillez noter que si vous installez avec PIP dans l'environnement mondial, ses dépendances peuvent entraîner des conflits avec d'autres packages. Si tout ce dont vous avez besoin est l'outil de ligne de commande, PIPX peut l'installer globalement tout en l'isolement dans un environnement virtuel.
Veuillez également consulter la section Installer Package si vous souhaitez utiliser ce package à partir de votre programme Python, ou la section Clone et Installer si vous souhaitez diagnostiquer les polices ou le code plus en détail.
L'exemple suivant ajoute la fonctionnalité à input-font-file et l'enregistre au répertoire build .
east-asian-spacing -o build input-font-fileLa section de test dispose de ressources pour vérifier les différences et les polices de test que vous avez construites.
Pour d'autres options et usages, l'option --help peut afficher la liste complète des options.
L'algorithme est applicable à toutes les polices CJK. Les polices suivantes sont testées à chaque version:
Les polices CJK sur polices.google.com sont testées dans le package CHWS_TOOL. Plusieurs autres polices ont également été testées pendant le développement.
Lorsque vous ajoutez les fonctionnalités à vos polices, le test HTML est un outil pratique pour vérifier les résultats. Si vous rencontrez des problèmes avec vos polices, veuillez vous présenter aux problèmes.
Veuillez également consulter les sujets avancés ci-dessous si vous souhaitez personnaliser les comportements par défaut pour vos polices.
Lorsque le fichier de police d'entrée est une collection TrueType (TTC), cet outil ajoute la fonctionnalité à toutes les polices du TTC par défaut.
Si vous souhaitez ajouter la fonctionnalité à quelques polices uniquement dans le TTC, vous pouvez spécifier une liste d'indices de police séparée par des virgules. L'exemple suivant ajoute la fonctionnalité à l'indice de police 0 et 1, mais pas aux autres polices dans le TTC.
east-asian-spacing --index=0,1 input-font-file.ttcVous pouvez installer ce package à l'aide de vos outils de gestion des packages préférés tels que la poésie, le pipenv ou le pip.
pip install east-asian-spacingpipenv install east-asian-spacingpoetry add east-asian-spacingVeuillez également consulter la section Clone and Installer si vous souhaitez diagnostiquer les polices ou le code plus en détail.
L'exemple suivant crée une police avec les fonctionnalités du répertoire " build " si les fonctionnalités sont applicables.
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" )Une page HTML de test est disponible pour vérifier le comportement des polices sur les navigateurs.
Il peut tester les polices que vous avez construites localement.
fonts " au début du bloc <script> .Remarque, lorsque vous souhaitez tester un TTC (collection TrueType) mais que votre navigateur ne peut charger que la première police du TTC, la commande suivante extrait toutes les polices OpenType (.otf ou .TTF) à partir d'un fichier de police de collection OpenType (.TTC ou .otc).
east-asian-spacing ttc build/NotoSansCJK-Regular.ttc Le sous-commande dump peut créer différents types de fichiers de vidage de texte.
L'utilisation la plus simple est de montrer une liste de tables. Ceci est similaire à l'option " -l " de TTX, à l'exception des collections TrueType (TTC), cet outil peut afficher des tables de toutes les polices dans le TTC, avec lesquelles les tables sont partagées avec les polices.
east-asian-spacing dump build/NotoSansCJK-Regular.ttc L'option " -o " crée des fichiers de liste de table dans le répertoire spécifié:
east-asian-spacing dump -o build/dump build/ * .ttc L'option " --ttx " crée des vidages de texte TTX de toutes les tables en plus des fichiers de liste de table. Ceci est similaire à l'option " -s " de TTX, sauf qu'il peut vider toutes les tables dans les collections TrueType (TTC).
east-asian-spacing dump -o build/dump --ttx build/ * .ttc Le sous-commande dump peut également créer des fichiers de vidage de deux fichiers de police et les comparer. Cela aide à visualiser les différences de deux polices, en particulier les fichiers de police que vous avez créés à partir des fichiers de police d'origine.
east-asian-spacing dump -o build/diff --diff source_fonts_dir build/NotoSansCJK.ttc L'exemple ci-dessus calcule les différences entre source_fonts_dir/NotoSansCJK.ttc et build/NotoSansCJK.ttc en créant des 3 ensembles de fichiers suivants:
build/NotoSansCJK.ttc dans le répertoire build/diff/dump .source_fonts_dir/NotoSansCJK.ttc dans le répertoire build/diff/src .build/diff .Remarque: L'option "
--diff" est plus efficace que de faire tout cela, en particulier pour les grandes polices, car elle ignore la création de ttx de tables lorsqu'ils sont égaux binaires.
L'option -o est facultative. Lorsqu'il est omis, la sous-commande sortira le DIFF à stdout .
east-asian-spacing dump --diff source_fonts_dir build/NotoSansCJK.ttc | lessPour créer des fichiers Diff pour toutes les polices que vous avez construites, vous pouvez tuer la sortie comme ci-dessous:
east-asian-spacing -p * .otf | east-asian-spacing dump -o build/diff - L'option " -p " imprime les chemins de police d'entrée et de sortie vers stdout au format de valeurs séparées par tab. Le sous-commande dump avec l'argument " - " lit cette liste à partir de stdin et crée leurs fichiers de vidage de texte et de diff dans le répertoire build/diff . L'option " --diff " n'est pas nécessaire dans ce cas, car les chemins de police source sont fournis à partir du tuyau.
Une fois que vous avez examiné les fichiers Diff créés ci-dessus ou testés des polices que vous créez, vous pouvez copier les fichiers Diff dans le répertoire references . Ensuite, lorsque vous souhaitez les recommencer, par exemple lorsque les polices sont mises à jour ou lorsque l'environnement de construction est modifié, vous pouvez comparer les fichiers DIFF avec les fichiers de référence pour savoir en quoi les nouvelles polices sont différentes des versions précédentes.
Avec l'option " -r ", le sous-commande dump crée des fichiers Diff entre deux fichiers de police et comparez les fichiers Diff avec des fichiers Diff révisés dans le répertoire references .
L'utilisation typique de cette option est comme ci-dessous:
east-asian-spacing -p -g=build/glyphs * .otf |
east-asian-spacing dump -o=build/diff -r=references - Veuillez consulter la section Diff pour l'option " -p " et la tuyauterie.
Les scripts build*.sh incluent cette option.
Le test de forme façonne les chaînes de test et vérifie si l'espacement contextuel est appliqué ou non.
L'option --test définit le niveau des tests de forme.
east-asian-spacing --test 2 -v -o build input-font-fileLe niveau 0 désactive les tests de forme. Le niveau 1 exécute un test de fumée à l'aide d'un petit ensemble d'échantillons. Le niveau 2 exécute les tests de forme à l'aide d'un grand ensemble de chaînes de test. La valeur par défaut est 1.
L'algorithme est agnostique linguistique et s'applique à toutes les polices CJK.
Ce package détermine les paires de glyphes pour ajuster les espacements par un ensemble de points de code Unicode définis dans la classe Config .
Ensuite, pour chaque paire, il vérifie si les espacements sont applicables en examinant les contours de glyphe et en calcul des boîtes de délimitation à l'encre des glyphes. Par exemple, lorsque les glyphes sont très épais, les glyphes peuvent ne pas avoir suffisamment d'espace internes et l'application des espacements peut provoquer la collision des glyphes. Ce package détecte automatiquement ces cas et évite d'appliquer des espacements à de telles paires.
Ce comportement automatique peut être désactivé en spécifiant les langages ci-dessous, ou en définissant Config.use_ink_bounds à False dans votre programme Python.
Il existe des conventions spécifiques à la langue pour où les caractères de ponctuation sont placés dans les espaces de glyphes. Par exemple, un arrêt complet idéographique U + 3002 doit être placé dans le coin à fond gauche de l'espace des glyphes en japonais, tandis qu'il doit être placé au centre en chinois traditionnel.
Par défaut, ce package détermine de telles différences par rapport aux contours de glyphes comme décrit dans la section algorithme ci-dessus. Mais vous pouvez spécifier la balise du système de langue OpenType pour permettre à ce package de suivre la convention de langue au lieu d'utiliser les contours Glyph. L'exemple suivant désactive la détermination automatique par les contours de glyphes et spécifie que la police est une police japonaise.
east-asian-spacing --language=JAN input-font-filePour les collections TrueType (TTC), l'option de langue s'applique à toutes les polices dans le TTC par défaut. Lorsque vous souhaitez spécifier différentes langues à chaque police du TTC, il accepte une liste séparée par des virgules. L'exemple suivant spécifie le coréen pour l'indice 1 de la police, le chinois simplifié pour l'indice de police 2 et le automatique pour toutes les autres polices.
east-asian-spacing --language=,KOR,ZHS input-font-file.ttc Vous pouvez combiner ces deux options. L'exemple suivant s'applique JAN à l'index 2, et ZHS à l'index 3. D'autres polices dans le TTC ne sont pas modifiées.
east-asian-spacing --index=2,3 --language=JAN,ZHS input-font-file.ttcVous voudrez peut-être ajuster les paires de personnages devraient ajuster les espacements, dans des cas comme lorsque vos polices peuvent ne pas être attendues pour certains personnages. Actuellement, cela n'est possible que des programmes Python.
Pour un exemple simple, veuillez consulter la fonction test_config dans tests/config_test.py .
Le projet CHWS_Tool est un exemple réel de personnalisation de ce package.
Ce package utilise le moteur de mise en forme HarfBuzz en utilisant une liaisons cython uharfbuzz.
Si vous souhaitez utiliser une version spécifique du HarfBuzz, cet outil peut plutôt invoquer l'outil externe de ligne de commande HB en définissant la variable d'environnement SHAPER .
export SHAPER=hb-shapePour installer la forme HB pour Linux:
sudo apt get libharfbuzz-binPour installer la forme HB pour Mac avec Homebrew:
brew install harfbuzzLes instructions pour d'autres plates-formes peuvent être disponibles sur Command-not-Found.com.
Si vous devrez peut-être diagnostiquer les polices ou le code, le clonage et l'installation à l'aide de la poésie sont recommandés:
git clone https://github.com/kojiishi/east_asian_spacing
cd east_asian_spacing
poetry install
poetry shellCette méthode présente des avantages suivants:
-e " Option ou setuptools "Mode de développement").Vous pouvez également installer le répertoire cloné à l'aide de PIP si vous préférez:
git clone https://github.com/kojiishi/east_asian_spacing
cd east_asian_spacing
pip install .Ce référentiel contient des tests unitaires à l'aide de PyTest. Les tests unitaires couvrent les fonctionnalités de base, y compris les tests de forme, l'ajout de la fonctionnalité à une police de test et la comparant aux références.
Si vous avez suivi la section Clone et d'installation, des outils pour les tests unitaires sont déjà installés. Avant de les exécuter pour la première fois, vous devez télécharger des polices pour les tests:
./tests/download_fonts.pyVous pouvez ensuite exécuter les tests par:
pytestou exécutez-les avec plusieurs versions de Python en utilisant TOX:
tox Le répertoire scripts possède quelques petits scripts shell.
build*.sh Les scripts sont utiles pour créer des polices, calculer DIFF à partir des polices source et comparer les fichiers Diff avec des références. Les suivants sont des exemples d'utilisations.
./scripts/build.sh input-font-file.otf -v
./scripts/build-noto-cjk.sh ~ /fonts/noto-cjk -v