xlsfonts
ให้ข้อมูลเกี่ยวกับแบบอักษรเมื่อใช้งาน X Windows System (โดยทั่วไปบน 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 เท่ากับค่าสูงสุด 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