xlsfonts
proporciona información sobre las fuentes cuando el sistema X Windows está en uso (comúnmente en Linux o sistemas similares; casi nunca en MSWindows). Sus opciones -l
y -m
muestran varias métricas de fuente, incluido el ancho mínimo de caracteres y el ancho máximo de caracteres. Usando comandos de shell, uno puede comparar esos anchos para detectar fuentes de ancho fijo. Por ejemplo, xlsfonts -lm '*fang*'
da
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)
Para ambas fuentes, la min w es igual al valor máximo de w - 12, 12 para una, 16, 16 para la otra - lo que indica que ambas son fuentes de ancho fijo. (Tenga en cuenta que el xlsfonts
código fuente incluye comprobaciones similares).
De una publicación reciente mía en Usenet, aquí hay un programa de Python checkFixed.py
que automatiza la comparación. Lee líneas de datos de estilo xlsfonts stdin
, compara los valores de w e imprime los resultados stdout
cuando min w es igual a max w. (Por supuesto programas similares podrían ser escritos 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
Por ejemplo, xlsfonts -ml | ./checkFixed.py | head -3
en mi sistema impreso
--> 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
En otro ejemplo, xlsfonts -ml '*fixed*' | ./checkFixed.py | head -3
impreso
--> * 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