J'ai écrit un indicateur Python3 qui appelle fortune
et capture la sortie pour l'afficher dans la notification à l'écran.
Certaines fortunes contiennent des carrés avec un nombre hexadécimal lorsque le glyphe correspondant n'existe pas dans la police actuelle. Chaque carré est la représentation du point de code Unicode hexadécimal pour le glyphe manquant.
Je souhaite supprimer le texte hexadécimal avant de l'afficher à l'utilisateur. J'espérais trouver une API Python qui me permettrait d'inspecter le texte, caractère par caractère, pour déterminer quelque chose de similaire char.isValidCodePoint()
ou similaire, mais je ne peux pas le trouver en tant que tel.
J'ai trouvé une solution possible que je voulais étudier ici, mais après l'installation fonttools
via le terminal, mon programme Python n'a pas pu importer fonttools/fontTools
.
Des idées - en utilisant l'API Python ou en appelant à un terminal?
Mise à jour # 1: J'ai depuis réalisé que l' fonttools
exemple de code du lien ci-dessus ne fonctionnera pas pour moi car il s'agit de Python2. Je suppose que si je fonttools
pouvais en quelque sorte être utilisé, je pourrais invoquer un interpréteur Python2 à partir de mon script Python3.
Mise à jour # 2: Après beaucoup de lecture (voir références ci-dessous), j'ai depuis trouvé fc-match
mais il ne peut pas toujours identifier de manière unique la police utilisée. J'obtiens la police actuelle en Python:
from gi.repository import Gio
fontName = Gio.Settings( "org.gnome.desktop.interface" ).get_string( "font-name" )
résultant en Ubuntu 11
. En passant ce résultat pango-view
avec le caractère hexadécimal, j'obtiens une liste de polices, y compris Ubuntu
. À mon avis, si le glyphe n'était PAS rendu par la police, la police ne devrait pas apparaître dans le résultat de pango-view
!
Références:
Moteur de mise en forme Unicode
Utilisez un moteur de mise en forme Unicode comme Harfbuzz pour détecter les glyphes manquants. Voici un exemple de travail:
Production
Voici la sortie dans IDLE3 lors de la vérification:
Vérifiez le chemin de police correct, je viens de choisir le premier que j'ai vu dans ma machine actuelle.
Remarque:
la source