xlsfonts
предоставляет информацию о шрифтах, когда используется система X Windows (обычно в Linux или аналогичных системах; почти никогда в MSWindows). Его -l
и -m
опции отображают несколько метрик шрифта, включая минимальную ширину символа и максимальную ширину символа. Используя команды оболочки, можно сравнить эти ширины, чтобы обнаружить шрифты фиксированной ширины. Например, xlsfonts -lm '*fang*'
дает
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)
Для обоих этих шрифтов min w равно значению max w - 12, 12 для одного, 16, 16 для другого - что указывает на то, что оба шрифта являются фиксированной шириной. (Обратите внимание, xlsfonts
исходный код включает аналогичные проверки.)
Из моего недавнего поста по usenet, вот программа на Python, checkFixed.py
которая автоматизирует сравнение. Он считывает строки данных в стиле xlsfonts stdin
, сравнивает значения w и печатает результаты, stdout
когда min w равно max w. (Конечно , подобные программы могут быть написаны awk
, perl
и т.д.)
#!/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
Например, xlsfonts -ml | ./checkFixed.py | head -3
на моей системе распечатан
--> 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
В другом примере xlsfonts -ml '*fixed*' | ./checkFixed.py | head -3
распечатан
--> * 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