xlsfonts
cung cấp thông tin về phông chữ khi Hệ thống X Windows đang được sử dụng (thường là trên Linux hoặc các hệ thống tương tự; hầu như không bao giờ trên MSWindows). Tùy chọn -l
và -m
tùy chọn của nó hiển thị một số số liệu phông chữ, bao gồm chiều rộng ký tự tối thiểu và chiều rộng ký tự tối đa. Sử dụng các lệnh shell, người ta có thể so sánh các độ rộng đó để phát hiện các phông chữ có chiều rộng cố định. Ví dụ, xlsfonts -lm '*fang*'
cho
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)
Đối với cả hai phông chữ đó, min w bằng giá trị w tối đa - 12, 12 cho một, 16, 16 cho cái kia - cho biết cả hai đều là phông chữ có chiều rộng cố định. (Lưu ý, xlsfonts
mã nguồn bao gồm các kiểm tra tương tự.)
Từ một bài đăng gần đây của tôi trên usenet, đây là một chương trình Python checkFixed.py
tự động hóa việc so sánh. Nó đọc các dòng dữ liệu kiểu xlsfonts từ stdin
, so sánh các giá trị w và in kết quả stdout
khi min w bằng max w. (Tất nhiên các chương trình tương tự có thể được viết bằng awk
, perl
vv)
#!/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
Ví dụ, xlsfonts -ml | ./checkFixed.py | head -3
trên hệ thống của tôi được in ra
--> 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
Trong một ví dụ khác, xlsfonts -ml '*fixed*' | ./checkFixed.py | head -3
in ra
--> * 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