GNU/Linux >> Tutoriels Linux >  >> Linux

Connaître les caractères pris en charge par une police donnée

Le fontconfig les commandes peuvent générer la liste des glyphes sous la forme d'une liste compacte de plages, par exemple :

$ fc-match --format='%{charset}\n' OpenSans
20-7e a0-17f 192 1a0-1a1 1af-1b0 1f0 1fa-1ff 218-21b 237 2bc 2c6-2c7 2c9
2d8-2dd 2f3 300-301 303 309 30f 323 384-38a 38c 38e-3a1 3a3-3ce 3d1-3d2 3d6
400-486 488-513 1e00-1e01 1e3e-1e3f 1e80-1e85 1ea0-1ef9 1f4d 2000-200b
2013-2015 2017-201e 2020-2022 2026 2030 2032-2033 2039-203a 203c 2044 2070
2074-2079 207f 20a3-20a4 20a7 20ab-20ac 2105 2113 2116 2120 2122 2126 212e
215b-215e 2202 2206 220f 2211-2212 221a 221e 222b 2248 2260 2264-2265 25ca
fb00-fb04 feff fffc-fffd

Utilisez fc-query pour un .ttf fichier et fc-match pour un nom de police installé.

Cela n'implique probablement pas l'installation de packages supplémentaires ni la traduction d'un bitmap.

Utilisez fc-match --format='%{file}\n' pour vérifier si la bonne police correspond.


Le programme X xfd peut le faire. Pour voir tous les caractères de la police "DejaVu Sans Mono", exécutez :

xfd -fa "DejaVu Sans Mono"

Il est inclus dans le package x11-utils sur Debian/Ubuntu, xorg-x11-apps sur Fedora/RHEL et xorg-xfd sur Arch Linux.


Voici une méthode utilisant la bibliothèque FontTools Python (que vous pouvez installer avec quelque chose comme pip install fonttools ):

#!/usr/bin/env python
from itertools import chain
import sys

from fontTools.ttLib import TTFont
from fontTools.unicode import Unicode

with TTFont(
    sys.argv[1], 0, allowVID=0, ignoreDecompileErrors=True, fontNumber=-1
) as ttf:
    chars = chain.from_iterable(
        [y + (Unicode[y[0]],) for y in x.cmap.items()] for x in ttf["cmap"].tables
    )
    if len(sys.argv) == 2:  # print all code points
        for c in chars:
            print(c)
    elif len(sys.argv) >= 3:  # search code points / characters
        code_points = {c[0] for c in chars}
        for i in sys.argv[2:]:
            code_point = int(i)   # search code point
            #code_point = ord(i)  # search character
            print(Unicode[code_point])
            print(code_point in code_points)

Le script prend comme arguments le chemin de la police et éventuellement les points de code/caractères à rechercher :

$ python checkfont.py /usr/share/fonts/**/DejaVuSans.ttf
(32, 'space', 'SPACE')
(33, 'exclam', 'EXCLAMATION MARK')
(34, 'quotedbl', 'QUOTATION MARK')
…

$ python checkfont.py /usr/share/fonts/**/DejaVuSans.ttf 65 12622  # a ㅎ
LATIN CAPITAL LETTER A
True
HANGUL LETTER HIEUH
False

fc-query my-font.ttf vous donnera une carte des glyphes pris en charge et de tous les paramètres régionaux pour lesquels la police est appropriée selon fontconfig

Étant donné que presque toutes les applications Linux modernes sont basées sur fontconfig, cela est beaucoup plus utile qu'une liste Unicode brute

Le format de sortie réel est discuté icihttp://lists.freedesktop.org/archives/fontconfig/2013-September/004915.html


Linux
  1. Quelle version de Linux suis-je en cours d'exécution ? Voici comment le savoir

  2. Comment savoir ce que fait une commande Linux

  3. Est-il possible de savoir quel programme ou script a créé un fichier donné ?

  4. Que signifient les caractères spéciaux dans Echo {a..z} ?

  5. Diviser des caractères individuels à l'aide de la chaîne nulle ?

Comment savoir à quel groupe appartient un utilisateur donné ?

Savoir si un message via tcp a été livré

Quelle est la commande unix pour savoir à quel fichier exécutable correspond une commande donnée ?

Qu'est-ce qui pourrait provoquer des caractères étranges dans Vim ?

Découvrir ce qui fait tourner le disque dur

Quel outil peut prévisualiser la police de la console ?