ไดเรกทอรีนี้มีเครื่องมือสำหรับคุณสมบัติระยะห่างครึ่งความกว้างของ Opentype สำหรับการพิมพ์ภาษาญี่ปุ่น/จีน/เกาหลี
คุณลักษณะนี้ช่วยให้การพิมพ์ที่อธิบายไว้ใน JLREQ 3.1.2 การวางตำแหน่งเครื่องหมายวรรค ตอน (เครื่องหมายจุลภาคระยะเวลาและวงเล็บ) วิธีพื้นฐานในการวางเครื่องหมายวรรคตอน, วงการวัยไร, และอื่น ๆ สำหรับญี่ปุ่นและ CLREQ 3.1.6.1 ต่อไปนี้เป็นตัวเลขจาก JLREQ:
การอภิปรายเบื้องต้นที่ Adobe CJK Type Blog บทความและส่วนที่สองอาจช่วยให้เข้าใจคุณสมบัติที่ดีขึ้น
คุณสามารถค้นหาข้อความตัวอย่างได้ที่นี่ หน้าตัวอย่างนี้ใช้แบบอักษรที่สร้างขึ้นด้วยเครื่องมือนี้
Opentype กำหนดแท็กคุณสมบัติ 4 แท็กสำหรับแบบอักษรเพื่อรองรับคุณสมบัตินี้:
chws " และแท็กคุณสมบัติ " vchw " เป็นคู่ในแนวตั้งhalt " และแท็กคุณสมบัติ " vhal " เป็นคู่ในแนวตั้งคุณลักษณะทั้ง 4 เป็นที่ต้องการเนื่องจากแต่ละคุณสมบัติจะถูกนำไปใช้ในบริบทที่แตกต่างกัน
แพ็คเกจนี้จะเพิ่มคุณสมบัติเหล่านี้ลงในแบบอักษร Opentype/Truetype ใด ๆ เมื่อหายไปโดยการคำนวณตารางคุณสมบัติจากข้อมูลเช่นจุดรหัส Unicode และโครงร่าง Glyph
คุณสามารถติดตั้งเครื่องมือนี้ด้วย PIP หรือ PIPX
pipx install east-asian-spacingpip install east-asian-spacingโปรดทราบว่าหากคุณติดตั้งด้วย PIP ในสภาพแวดล้อมทั่วโลกการพึ่งพาอาจทำให้เกิดความขัดแย้งกับแพ็คเกจอื่น ๆ หากสิ่งที่คุณต้องการคือเครื่องมือบรรทัดคำสั่ง PIPX สามารถติดตั้งได้ทั่วโลกในขณะที่ยังคงแยกได้ในสภาพแวดล้อมเสมือนจริง
โปรดดูส่วนแพ็คเกจการติดตั้งหากคุณต้องการใช้แพ็คเกจนี้จากโปรแกรม Python ของคุณหรือส่วนโคลนและการติดตั้งหากคุณต้องการวินิจฉัยแบบอักษรหรือรหัสในรายละเอียดเพิ่มเติม
ตัวอย่างต่อไปนี้เพิ่มคุณสมบัติลงใน input-font-file และบันทึกลงในไดเรกทอรี build
east-asian-spacing -o build input-font-fileส่วนการทดสอบมีทรัพยากรสำหรับการตรวจสอบความแตกต่างและแบบอักษรทดสอบที่คุณสร้างขึ้น
สำหรับตัวเลือกและการใช้งานอื่น ๆ ตัวเลือก --help สามารถแสดงรายการตัวเลือกทั้งหมดได้
อัลกอริทึมใช้กับแบบอักษร CJK ใด ๆ แบบอักษรต่อไปนี้จะถูกทดสอบในแต่ละรุ่น:
CJK Fonts ที่ fonts.google.com ได้รับการทดสอบในแพ็คเกจ CHWS_Tool ฟอนต์อื่น ๆ อีกหลายตัวได้รับการทดสอบในระหว่างการพัฒนา
เมื่อเพิ่มคุณสมบัติลงในแบบอักษรของคุณการทดสอบ HTML เป็นเครื่องมือที่มีประโยชน์ในการตรวจสอบผลลัพธ์ หากคุณพบปัญหาใด ๆ กับแบบอักษรของคุณโปรดรายงานไปยังปัญหา
โปรดดูหัวข้อขั้นสูงด้านล่างหากคุณต้องการปรับแต่งพฤติกรรมเริ่มต้นสำหรับแบบอักษรของคุณ
เมื่อไฟล์ตัวอักษรอินพุตเป็นคอลเลกชัน Truetype (TTC) เครื่องมือนี้จะเพิ่มคุณสมบัติให้กับแบบอักษรทั้งหมดใน TTC โดยค่าเริ่มต้น
หากคุณต้องการเพิ่มฟีเจอร์ลงในแบบอักษรบางส่วนใน TTC คุณสามารถระบุรายการดัชนีฟอนต์ที่คั่นด้วยเครื่องหมายจุลภาค ตัวอย่างต่อไปนี้เพิ่มคุณสมบัติลงในดัชนีตัวอักษร 0 และ 1 แต่ไม่ใช่แบบอักษรอื่น ๆ ใน TTC
east-asian-spacing --index=0,1 input-font-file.ttcคุณสามารถติดตั้งแพ็คเกจนี้ได้โดยใช้เครื่องมือการจัดการแพ็คเกจที่คุณชื่นชอบเช่นบทกวี, PipenV หรือ PIP
pip install east-asian-spacingpipenv install east-asian-spacingpoetry add east-asian-spacingโปรดดูส่วนโคลนและติดตั้งหากคุณต้องการวินิจฉัยแบบอักษรหรือรหัสในรายละเอียดเพิ่มเติม
ตัวอย่างต่อไปนี้สร้างแบบอักษรด้วยคุณสมบัติในไดเรกทอรี " build " หากคุณสมบัติมีผลบังคับใช้
import east_asian_spacing
async def main_async ():
builder = east_asian_spacing . Builder ( "fonts/input.otf" )
output_path = await builder . build_and_save ( "build" )
if output_path :
print ( f"Saved to { output_path } " )
else :
print ( "Skipped" )หน้าทดสอบ HTML สามารถตรวจสอบพฤติกรรมของแบบอักษรบนเบราว์เซอร์
สามารถทดสอบแบบอักษรที่คุณสร้างขึ้นในพื้นที่
fonts " ที่จุดเริ่มต้นของบล็อก <script>หมายเหตุเมื่อคุณต้องการทดสอบ TTC (truetype collection) แต่เบราว์เซอร์ของคุณสามารถโหลดได้เฉพาะตัวอักษรแรกใน TTC คำสั่งต่อไปนี้แยกฟอนต์ Opentype ทั้งหมด (.OTF หรือ. TTF) จากไฟล์ฟอนต์ Opentype (.ttc หรือ .OTC)
east-asian-spacing ttc build/NotoSansCJK-Regular.ttc คำสั่งย่อย dump สามารถสร้างไฟล์การถ่ายโอนข้อมูลประเภทต่าง ๆ
การใช้งานที่ง่ายที่สุดคือการแสดงรายการตาราง สิ่งนี้คล้ายกับตัวเลือก " -l " ของ TTX ยกเว้นคอลเลกชัน Truetype (TTC) เครื่องมือนี้สามารถแสดงตารางของแบบอักษรทั้งหมดใน TTC พร้อมกับตารางที่ใช้แบบอักษร
east-asian-spacing dump build/NotoSansCJK-Regular.ttc ตัวเลือก " -o " สร้างไฟล์รายการตารางในไดเรกทอรีที่ระบุ:
east-asian-spacing dump -o build/dump build/ * .ttc ตัวเลือก " --ttx " สร้างการถ่ายโอนข้อความ TTX ของตารางทั้งหมดนอกเหนือจากไฟล์รายการตาราง สิ่งนี้คล้ายกับตัวเลือก " -s " ของ TTX ยกเว้นว่าสามารถทิ้งตารางทั้งหมดในคอลเลกชัน Truetype (TTC)
east-asian-spacing dump -o build/dump --ttx build/ * .ttc คำสั่งย่อย dump ยังสามารถสร้างไฟล์ถ่ายโอนข้อมูลของไฟล์ตัวอักษรสองไฟล์และเปรียบเทียบได้ สิ่งนี้ช่วยให้เห็นภาพความแตกต่างในสองฟอนต์โดยเฉพาะไฟล์ตัวอักษรที่คุณสร้างจากไฟล์ตัวอักษรดั้งเดิม
east-asian-spacing dump -o build/diff --diff source_fonts_dir build/NotoSansCJK.ttc ตัวอย่างด้านบนคำนวณความแตกต่างระหว่าง source_fonts_dir/NotoSansCJK.ttc และ build/NotoSansCJK.ttc โดยการสร้างไฟล์ 3 ชุดต่อไปนี้:
build/NotoSansCJK.ttc ในไดเรกทอรี build/diff/dumpsource_fonts_dir/NotoSansCJK.ttc ในไดเรกทอรี build/diff/srcbuild/diffหมายเหตุ: ตัวเลือก "
--diff" มีประสิทธิภาพมากกว่าการทำสิ่งเหล่านี้โดยเฉพาะอย่างยิ่งสำหรับแบบอักษรขนาดใหญ่เพราะมันข้ามการสร้าง TTX ของตารางเมื่อพวกเขาเป็นไบนารีเท่ากัน
ตัวเลือก -o เป็นตัวเลือก เมื่อถูกละเว้นคำสั่งย่อยจะส่งออก diff ไปยัง stdout
east-asian-spacing dump --diff source_fonts_dir build/NotoSansCJK.ttc | lessในการสร้างไฟล์ DIFF สำหรับแบบอักษรทั้งหมดที่คุณสร้าง
east-asian-spacing -p * .otf | east-asian-spacing dump -o build/diff - ตัวเลือก " -p " พิมพ์เส้นทางฟอนต์อินพุตและเอาต์พุตไปยัง stdout ในรูปแบบค่าที่คั่นด้วยแท็บ คำสั่งย่อย dump ที่มีอาร์กิวเมนต์ " - " อ่านรายการนี้จาก stdin และสร้างไฟล์การถ่ายโอนข้อมูลข้อความและไฟล์ต่าง ๆ ในไดเรกทอรี build/diff ตัวเลือก " --diff " ไม่จำเป็นในกรณีนี้เนื่องจากเส้นทางตัวอักษรต้นทางมาจากท่อ
เมื่อคุณตรวจสอบไฟล์ DIFF ที่สร้างขึ้นข้างต้นหรือทดสอบแบบอักษรที่คุณสร้างคุณสามารถคัดลอกไฟล์ DIFF ลงในไดเรกทอรี references จากนั้นเมื่อคุณต้องการสร้างอีกครั้งเช่นเมื่อฟอนต์ได้รับการอัปเดตหรือเมื่อมีการเปลี่ยนแปลงสภาพแวดล้อมการสร้างคุณสามารถเปรียบเทียบไฟล์ DIFF กับไฟล์อ้างอิงเพื่อทราบว่าฟอนต์ใหม่แตกต่างจากการสร้างก่อนหน้านี้อย่างไร
ด้วยตัวเลือก " -r " คำสั่งย่อย dump จะสร้างไฟล์ DIFF ระหว่างไฟล์ตัวอักษรสองไฟล์และเปรียบเทียบไฟล์ DIFF กับไฟล์ DIFF ที่ผ่านการตรวจสอบครั้งหนึ่งในไดเรกทอรี references
การใช้งานทั่วไปของตัวเลือกนี้คือด้านล่าง:
east-asian-spacing -p -g=build/glyphs * .otf |
east-asian-spacing dump -o=build/diff -r=references - โปรดดูส่วนต่าง ๆ สำหรับตัวเลือก " -p " และท่อ
สคริปต์ build*.sh รวมตัวเลือกนี้
การทดสอบรูปร่างรูปแบบการทดสอบสตริงและตรวจสอบว่าระยะห่างตามบริบทถูกนำไปใช้หรือไม่
ตัวเลือก --test ตั้งค่าระดับการทดสอบรูปร่าง
east-asian-spacing --test 2 -v -o build input-font-fileระดับ 0 ปิดใช้งานการทดสอบรูปร่าง ระดับ 1 ดำเนินการทดสอบควันโดยใช้ชุดตัวอย่างเล็ก ๆ ระดับ 2 เรียกใช้การทดสอบรูปร่างโดยใช้ชุดทดสอบขนาดใหญ่ ค่าเริ่มต้นคือ 1
อัลกอริทึมเป็นผู้ไม่เชื่อเรื่องพระเจ้าและใช้กับแบบอักษร CJK ใด ๆ
แพ็คเกจนี้กำหนดคู่ของ Glyph เพื่อปรับระยะห่างโดยชุดจุดรหัส Unicode ที่กำหนดไว้ในคลาส Config
จากนั้นสำหรับแต่ละคู่จะตรวจสอบว่ามีการใช้เว้นวรรคโดยตรวจสอบโครงร่างของ Glyph และการคำนวณกล่องหมึกของร่ายมนตร์หรือไม่ ตัวอย่างเช่นเมื่อร่ายมนตร์หนามากร่ายมนตร์อาจมีระยะห่างภายในไม่เพียงพอและการใช้ระยะห่างอาจทำให้ร่ายมนตร์ชนกัน แพ็คเกจนี้จะตรวจจับกรณีดังกล่าวโดยอัตโนมัติและหลีกเลี่ยงการใช้ระยะห่างกับคู่ดังกล่าว
พฤติกรรมอัตโนมัตินี้สามารถปิดใช้งานได้โดยการระบุภาษาด้านล่างหรือโดยการตั้งค่า Config.use_ink_bounds เป็น False ในโปรแกรม Python ของคุณ
มีการประชุมเฉพาะภาษาที่มีการวางอักขระเครื่องหมายวรรคตอนในช่องว่าง Glyph ตัวอย่างเช่น U+3002 Ideographic Full Stop ควรวางไว้ที่มุมซ้ายล่างของพื้นที่ Glyph ในภาษาญี่ปุ่นในขณะที่ควรวางไว้ที่ศูนย์ในภาษาจีนดั้งเดิม
โดยค่าเริ่มต้นแพ็คเกจนี้จะกำหนดความแตกต่างดังกล่าวจาก Glyph โครงร่างตามที่อธิบายไว้ในส่วนอัลกอริทึมด้านบน แต่คุณสามารถระบุแท็กระบบภาษา Opentype เพื่อให้แพ็คเกจนี้เป็นไปตามการประชุมภาษาแทนที่จะใช้โครงร่าง Glyph ตัวอย่างต่อไปนี้ปิดใช้งานการกำหนดอัตโนมัติโดย Glyph โครงร่างและระบุว่าตัวอักษรเป็นแบบอักษรญี่ปุ่น
east-asian-spacing --language=JAN input-font-fileสำหรับคอลเลกชัน Truetype (TTC) ตัวเลือกภาษาใช้กับแบบอักษรทั้งหมดใน TTC โดยค่าเริ่มต้น เมื่อคุณต้องการระบุภาษาที่แตกต่างกันกับตัวอักษรแต่ละตัวใน TTC จะยอมรับรายการที่คั่นด้วยเครื่องหมายจุลภาค ตัวอย่างต่อไปนี้ระบุเกาหลีสำหรับดัชนีตัวอักษร 1, ภาษาจีนง่ายๆสำหรับดัชนีตัวอักษร 2 และอัตโนมัติสำหรับแบบอักษรอื่น ๆ ทั้งหมด
east-asian-spacing --language=,KOR,ZHS input-font-file.ttc คุณสามารถรวมสองตัวเลือกนี้ ตัวอย่างต่อไปนี้ใช้ JAN กับดัชนี 2 และ ZHS กับดัชนี 3 แบบอักษรอื่น ๆ ใน TTC จะไม่เปลี่ยนแปลง
east-asian-spacing --index=2,3 --language=JAN,ZHS input-font-file.ttcคุณอาจต้องการปรับคู่อักขระที่ควรปรับระยะห่างในกรณีเช่นเมื่อแบบอักษรของคุณอาจไม่ได้รับการคาดหวังสำหรับตัวละครบางตัว ปัจจุบันสิ่งนี้เป็นไปได้เฉพาะจากโปรแกรม Python
สำหรับตัวอย่างง่ายๆโปรดดูฟังก์ชั่น test_config ใน tests/config_test.py
โครงการ CHWS_Tool เป็นตัวอย่างที่แท้จริงของการปรับแต่งแพ็คเกจนี้
แพ็คเกจนี้ใช้เอ็นจิ้นการสร้าง Harfbuzz โดยใช้การผูก cython uharfbuzz
หากคุณต้องการใช้งานสร้างเฉพาะของ Harfbuzz เครื่องมือนี้สามารถเรียกใช้เครื่องมือบรรทัดคำสั่ง HB-shape ภายนอกแทนโดยการตั้งค่าตัวแปรสภาพแวดล้อม SHAPER
export SHAPER=hb-shapeในการติดตั้ง HB-shape สำหรับ Linux:
sudo apt get libharfbuzz-binในการติดตั้ง HB-shape สำหรับ Mac ด้วย Homebrew:
brew install harfbuzzคำแนะนำสำหรับแพลตฟอร์มอื่น ๆ อาจมีให้ที่ command-not-found.com
หากคุณอาจจำเป็นต้องวินิจฉัยแบบอักษรหรือรหัสการโคลนนิ่งและการติดตั้งโดยใช้บทกวีแนะนำ:
git clone https://github.com/kojiishi/east_asian_spacing
cd east_asian_spacing
poetry install
poetry shellวิธีนี้มีข้อดีตาม:
-e " หรือ setuptools "โหมดการพัฒนา")นอกจากนี้คุณยังสามารถติดตั้งไดเรกทอรีโคลนโดยใช้ PIP หากคุณต้องการ:
git clone https://github.com/kojiishi/east_asian_spacing
cd east_asian_spacing
pip install .ที่เก็บนี้มีการทดสอบหน่วยโดยใช้ pytest การทดสอบหน่วยครอบคลุมฟังก์ชันพื้นฐานรวมถึงการทดสอบรูปร่างเพิ่มคุณสมบัติลงในแบบอักษรทดสอบและเปรียบเทียบกับการอ้างอิง
หากคุณทำตามส่วนโคลนและติดตั้งเครื่องมือสำหรับการทดสอบหน่วยได้รับการติดตั้งแล้ว ก่อนที่คุณจะเรียกใช้ครั้งแรกคุณต้องดาวน์โหลดแบบอักษรเพื่อทดสอบ:
./tests/download_fonts.pyจากนั้นคุณสามารถเรียกใช้การทดสอบโดย:
pytestหรือเรียกใช้ด้วย Python หลายรุ่นโดยใช้ TOX:
tox ไดเรกทอรี scripts มีสคริปต์เชลล์ขนาดเล็ก
build*.sh สคริปต์มีประโยชน์ในการสร้างแบบอักษรคำนวณ Diff จากแบบอักษรต้นทางและเปรียบเทียบไฟล์ DIFF กับการอ้างอิง สิ่งต่อไปนี้เป็นตัวอย่างการใช้งาน
./scripts/build.sh input-font-file.otf -v
./scripts/build-noto-cjk.sh ~ /fonts/noto-cjk -v