ไฟล์ CFF2 คืออะไร??
รูปแบบไฟล์ CFF2 เป็นเวอร์ชัน 2.0 ของรูปแบบไฟล์ CFF และช่วยให้จัดเก็บโครงร่างสัญลักษณ์และข้อมูลเมตาได้อย่างมีประสิทธิภาพซึ่งคล้ายกับรูปแบบไฟล์ CFF CFF2 แตกต่างจาก CFF ตรงที่มีจุดประสงค์เพื่อใช้ในบริบทของฟอนต์ OpenType เป็นตาราง ‘sfnt’ ที่มีแท็ก CFF2 ไม่สามารถใช้เป็นโปรแกรมแบบสแตนด์อโลนและขึ้นอยู่กับข้อมูลในตาราง OpenType อื่นๆ
รูปแบบไฟล์ CFF2
ข้อกำหนดเฉพาะของรูปแบบไฟล์ CFF2 มีรายละเอียดเกี่ยวกับการจัดวางข้อมูลภายใน ประเภทข้อมูล ตาราง และข้อมูลภายในอื่นๆ เกี่ยวกับรูปแบบไฟล์ สามารถอ้างอิงสำหรับการอ้างอิงของนักพัฒนา รายละเอียดบางส่วนเกี่ยวกับสิ่งเหล่านี้มีดังต่อไปนี้
เค้าโครงข้อมูล
ข้อมูลไบนารีของรูปแบบไฟล์ CFF2 ได้รับการจัดระเบียบอย่างมีเหตุผลเป็นโครงสร้างข้อมูลที่แยกจากกันจำนวนหนึ่ง เค้าโครงภายในข้อมูลไบนารีแสดงไว้ในตารางต่อไปนี้
รายการ | ความคิดเห็น |
---|---|
ส่วนหัว | ตำแหน่งคงที่ |
สุดยอด DICT | ตำแหน่งคงที่ |
ดัชนีย่อยทั่วโลก | ตำแหน่งคงที่ |
รูปแบบ | ร้านค้า |
FDSelect | นำเสนอต่อเมื่อมี Font DICT มากกว่าหนึ่งตัวใน Font DICT INDEX |
แบบอักษร DICT INDEX | |
อาร์เรย์ของฟอนต์ DICT | รวมอยู่ในแบบอักษร DICT INDEX. |
DICT ส่วนตัว | หนึ่งตัวต่อฟอนต์ DICT. |
เฉพาะสามโครงสร้างแรกเท่านั้นที่ยึดตามตำแหน่งที่แน่นอน เข้าถึงส่วนที่เหลือได้ผ่านออฟเซ็ตและสามารถเปลี่ยนแปลงลำดับได้
ประเภทข้อมูล
รูปแบบไฟล์ CFF2 ใช้ประเภทข้อมูลต่อไปนี้
ชื่อ | ช่วง | คำอธิบาย |
---|---|---|
uint8 | 0 ถึง 255 | หมายเลขที่ไม่ได้ลงนาม 8 บิต |
uint16 | 0 ถึง 65535 | หมายเลขที่ไม่ได้ลงนาม 16 บิต |
uint32 | 0 ถึง 4294967295 | หมายเลขที่ไม่ได้ลงนาม 32 บิต |
ออฟเซ็ต | แตกต่างกันไป | ออฟเซ็ต 1, 2, 3 หรือ 4 ไบต์ (ระบุโดยฟิลด์ OffSize ในตารางดัชนี) |
OffSize | 1 ถึง 4 | ตัวเลขที่ไม่ได้ลงนาม 1 ไบต์ระบุขนาดของฟิลด์ออฟเซ็ตหรือฟิลด์ |
มันเก็บข้อมูลตัวเลขหลายไบต์และฟิลด์ออฟเซ็ตทั้งหมดตามลำดับไบต์ขนาดใหญ่ รูปแบบ CFF2 ไม่มีการเติมไบต์เนื่องจากไม่เป็นไปตามข้อจำกัดการจัดตำแหน่ง
ข้อมูล DICT
ไฟล์ CFF2 มีข้อมูลพจนานุกรมแบบอักษรเป็นคู่คีย์-ค่าในรูปแบบโทเค็นขนาดกะทัดรัด คีย์พจนานุกรมถูกเข้ารหัสเป็นตัวดำเนินการ 1 หรือ 2 ไบต์ และค่าพจนานุกรมจะถูกเข้ารหัสเป็นตัวถูกดำเนินการตัวเลขขนาดตัวแปร มีสามโครงสร้างที่ใช้รูปแบบข้อมูล DICT: Top DICT
, Font DICT
และ Private DICT
จำนวนของตัวถูกดำเนินการจำนวนเต็มที่มีขนาดแตกต่างกันถูกกำหนดและเข้ารหัสตามที่แสดงในตารางต่อไปนี้ (ไบต์แรกของตัวถูกดำเนินการคือ b0, วินาทีคือ b1 และอื่น ๆ )
ขนาด | ช่วง b0 | ช่วงค่า | การคำนวณค่า |
---|---|---|---|
1 | 32 ถึง 246 | -107 ถึง +107 | b0 - 139 |
2 | 247 ถึง 250 | +108 ถึง +1131 | (b0 - 247) * 256 + b1 + 108 |
2 | 251 ถึง 254 | -1131 ถึง -108 | -(b0 - 251) * 256 - b1 - 108 |
3 | 28 | -32768 ถึง +32767 | b1 « 8 |
5 | 29 | -(2^31) ถึง +(2^31 - 1) | b1 « 24 | b2 « 16 | b3 « 8 | b4 |
หัวข้อ
ข้อมูลไบนารีจะขึ้นต้นด้วยส่วนหัวที่มีรูปแบบดังตารางด้านล่าง
พิมพ์ | ชื่อ | คำอธิบาย |
---|---|---|
uint8 | รุ่นใหญ่ | จัดรูปแบบเวอร์ชันหลัก ตั้งค่าเป็น 2. |
uint8 | รุ่นรอง | จัดรูปแบบเวอร์ชันรอง ตั้งค่าเป็นศูนย์ |
uint8 | ขนาดส่วนหัว | ขนาดส่วนหัว (ไบต์). |
uint16 | topDictLength | ความยาวของโครงสร้าง DICT สูงสุดหน่วยเป็นไบต์ |