xlsfonts
fornisce informazioni sui caratteri quando il sistema X Windows è in uso (comunemente su Linux o sistemi simili; quasi mai su MSWindows). Le relative opzioni -l
e -m
opzioni visualizzano diverse metriche dei caratteri, tra cui la larghezza minima del carattere e la larghezza massima del carattere. Usando i comandi di shell, si possono confrontare quelle larghezze per rilevare caratteri a larghezza fissa. Ad esempio, xlsfonts -lm '*fang*'
dà
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)
Per entrambi quei caratteri, il min w è uguale al valore max w - 12, 12 per uno, 16, 16 per l'altro - indicando che entrambi sono caratteri a larghezza fissa. (Nota, xlsfonts
il codice sorgente include controlli simili.)
Da un mio recente post su usenet, ecco un programma Python checkFixed.py
che automatizza il confronto. Legge le righe di dati in stile xlsfonts da stdin
, confronta i valori di w e stampa i risultati stdout
quando minw equivale a max w. (Naturalmente programmi simili potrebbero essere scritti in awk
, perl
ecc)
#!/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
Ad esempio, xlsfonts -ml | ./checkFixed.py | head -3
sul mio sistema stampato
--> 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
In un altro esempio, xlsfonts -ml '*fixed*' | ./checkFixed.py | head -3
stampato
--> * 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