xlsfonts
fournit des informations sur les polices lorsque le système X Windows est en cours d'utilisation (généralement sous Linux ou des systèmes similaires; presque jamais sous MSWindows). Ses options -l
et -m
affichent plusieurs métriques de police, y compris la largeur minimale et la largeur maximale. En utilisant des commandes shell, on peut comparer ces largeurs pour détecter les polices à largeur fixe. Par exemple, xlsfonts -lm '*fang*'
donne
DIR MIN MAX EXIST DFLT PROP ASC DESC NAME
--> * 33 *119 some 8481 25 10 1 -isas-fangsong ti-medium-r-normal--0-0-72-72-c-0-gb2312.1980-0
min(l,r,w,a,d) = (0,12,12,11,2)
max(l,r,w,a,d) = (0,12,12,11,2)
--> * 33 *119 some 8481 21 14 2 -isas-fangsong ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0
min(l,r,w,a,d) = ( 0, 0,16, 0,-13)
max(l,r,w,a,d) = (12,16,16,14, 2)
Pour ces deux polices, le min w est égal à la valeur max w - 12, 12 pour l'une, 16, 16 pour l'autre - indiquant que les deux sont des polices à largeur fixe. (Remarque, xlsfonts
le code source comprend des vérifications similaires.)
Dans un article récent sur usenet, voici un programme Python checkFixed.py
qui automatise la comparaison. Il lit les lignes de données de style xlsfonts stdin
, compare les valeurs w et affiche les résultats stdout
lorsque min w est égal à w max. (Bien sûr , des programmes similaires pourraient être écrits en awk
, perl
etc.)
#!/usr/bin/env python
# jiw - 2016
# This program reads `xlsfonts -lm`-style lines from stdin, and tests
# for cases where the w elements of min and max tuples are the same
from sys import stdout
while True:
try:
r = raw_input()
if r[0] == '-': # Font-lines start with -->
m1 = int((raw_input().split(','))[6])
m2 = int((raw_input().split(','))[6])
if m1==m2:
print r
stdout.flush()
except:
break
Par exemple, xlsfonts -ml | ./checkFixed.py | head -3
sur mon système imprimé
--> 0 255 some 0 29 14 5 -bitstream-courier 10 pitch-bold-i-normal--0-0-0-0-m-0-adobe-standard
--> 0 255 some 0 29 15 5 -bitstream-courier 10 pitch-bold-i-normal--0-0-0-0-m-0-ascii-0
--> * 0 *255 some 0 29 15 5 -bitstream-courier 10 pitch-bold-i-normal--0-0-0-0-m-0-iso10646-1
Dans un autre exemple, xlsfonts -ml '*fixed*' | ./checkFixed.py | head -3
imprimé
--> * 33 *116 some 8481 25 11 1 -jis-fixed-medium-r-normal--0-0-75-75-c-0-jisx0208.1983-0
--> * 33 *116 some 8481 21 14 2 -jis-fixed-medium-r-normal--16-150-75-75-c-160-jisx0208.1983-0
--> * 33 *116 some 8481 21 14 2 -jis-fixed-medium-r-normal--16-150-75-75-c-160-jisx0208.1983-0