การค้นหาแบบอักษรบน Linux (ใน C ++)

ฉันต้องการที่จะได้รับเส้นทางที่แน่นอนไปยังไฟล์ฟอนต์ ttf บน Linux เมื่อได้รับชื่อฟอนต์ (ถ้ามี) มีคำสั่งหรือ API ที่จะส่งคืนข้อมูลนั้นหรือไม่?

ตัวอย่างเช่น เมื่อระบุ "arial.ttf" ฉันต้องการค้นหาเส้นทางที่แน่นอน (เช่น /usr/share/fonts/truetype/msttcorefonts/arial.ttf) ไม่ว่าจะอยู่ที่ไหน


person Kazade    schedule 03.12.2010    source แหล่งที่มา
comment


คำตอบ (2)


วิธีที่ง่ายที่สุดน่าจะเป็นการใช้ fontconfig กับตัวเลือก --format:

$ fc-match --format=%{file} LiberationSans-Regular.ttf

จะส่งผลให้มีเอาท์พุต

/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf

แทนที่จะใส่ชื่อไฟล์ฟอนต์ คุณยังสามารถระบุคำอธิบายฟอนต์ที่อาจมีลักษณะเช่น mono, DejaVu, :weight=bold, DejaVu-12 หรือ DejaVu:weight=bold ได้อีกด้วย ตัวอย่างเช่น

$ fc-match --format=%{file} :weight=bold

ผลลัพธ์ใน

/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf

ในระบบของฉัน สิ่งเดียวที่ดูเหมือนจะใช้งานไม่ได้คือการให้เส้นทางที่สมบูรณ์ของไฟล์ฟอนต์

person cmaster - reinstate monica    schedule 23.04.2014
comment
คุณจะระบุคำอธิบายแบบอักษรได้อย่างไร? กรุณาช่วยยกตัวอย่างหน่อยได้ไหม? - person Mohan; 18.11.2016
comment
@Mohan อย่างที่ฉันพูดไป: เพียงเปลี่ยนชื่อไฟล์ด้วยคำอธิบายแบบอักษร ฉันได้เพิ่มตัวอย่างการทำงานสำหรับคำอธิบายแบบอักษรแล้ว หวังว่ามันจะช่วยได้ - person cmaster - reinstate monica; 21.11.2016

อาจเป็นไปได้ว่าเป็นความคิดที่ไม่ดีนักที่จะพยายามเข้าถึงแบบอักษรตามเส้นทาง สแต็คแบบอักษร linux ไม่ได้ได้รับการออกแบบในลักษณะนี้ ตำแหน่งต่างๆ จะไม่มีเสถียรภาพ และผู้ใช้ "แบบอักษร" จำนวนมากคาดหวังในรายการแบบอักษรไม่ได้แมปกับไฟล์แบบอักษรเดียว แต่เป็นการรวมไฟล์แบบอักษรหลายไฟล์

หากคุณต้องการให้สอดคล้องกับแอปเดสก์ท็อปอื่นๆ ทั้งหมด (และผู้ใช้คาดหวังว่าตัวเลือกแบบอักษรจะทำงานในลักษณะเดียวกันในแอปทั้งหมด) คุณต้องเข้าถึงแบบอักษรตามรูปแบบผ่านเลเยอร์ทางอ้อมของ fontconfig (โดยใช้ pango-cairo หรือ QT) และ ยอมรับว่าผลลัพธ์อาจซับซ้อนและไม่เป็นไปตามสัญชาตญาณ

ไม่สำคัญว่ามันจะดูไม่ค่อยเข้าใจสำหรับคุณ แต่สำคัญแค่ว่าการเลือกแบบอักษรจะทำงานในลักษณะเดียวกับในแอปอื่นๆ ทั้งหมด และมักจะมีเหตุผลที่ดีสำหรับตัวเลือกการแมปฟอนต์คอนฟิก

person nim    schedule 24.04.2014