该目录包含用于日语/中文/韩国排版的Opentype上下文半径间距功能的工具。
此功能使JLREQ 3.1.2标点符号(逗号,周期和括号)放置标点符号,括号,括号等的基本方法。以下是JLREQ的数字:
Adobe CJK类型博客文章和第二部分的早期讨论可能有助于更好地理解该功能。
您可以在此处找到示例文本。此示例页面使用此工具构建的字体。
Opentype定义了4个用于字体的功能标签以支持此功能:
chws ”功能标签和“ vchw ”功能标签作为其垂直流。halt ”功能标签和“ vhal ”功能标签作为其垂直流对应。需要所有4个功能,因为每个功能都在不同的上下文中应用。
该软件包通过计算来自Unicode代码点和Glyph大纲等数据的功能表时,将这些功能添加到任何Opentype/TrueType字体时。
您可以通过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字体。在每个版本上测试了后字体:
fonts.google.com上的CJK字体在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页面检查浏览器上字体的行为。
它可以测试您本地构建的字体。
<script>块开头的“ fonts ”列表中。请注意,当您要测试TTC(TRUETYPE COLLECTION),但是您的浏览器只能加载TTC中的第一个字体时,以下命令从Opentype Collection Font Font File(.TTC或.OTC)提取所有OpenType字体(.OTF或.TTF)。
east-asian-spacing ttc build/NotoSansCJK-Regular.ttcdump子命令可以创建各种类型的文本转储文件。
最简单的用法是显示表格列表。这类似于TTX的“ -l ”选项,除了TrueType Collections(TTC),此工具可以显示TTC中所有字体的表,并与该表与该字体共享表。
east-asian-spacing dump build/NotoSansCJK-Regular.ttc “ -o ”选项在指定目录中创建表列表文件:
east-asian-spacing dump -o build/dump build/ * .ttc “ --ttx ”选项除表列表文件外,还创建了所有表的TTX文本转储。这类似于TTX的“ -s ”选项,除了它可以将所有表转储在TrueType Collections(TTC)中。
east-asian-spacing dump -o build/dump --ttx build/ * .ttcdump子命令还可以创建两个字体文件的转储文件并对其进行比较。这有助于可视化两个字体中的差异,特别是您从原始字体文件创建的字体文件。
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表列表和TTX文本转储文件在build/diff/dump目录中。build/diff/src目录中的source_fonts_dir/NotoSansCJK.ttc的表列表和TTX文本转储文件。build/diff目录中两组转储文件的差异文件。注意:“
--diff”选项比所有这些选项更有效,尤其是对于大字体而言,因为它会在二进制二进制时跳过ttx。
-o选项是可选的。省略时,子命令将差异输出到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 ”选项将输入和输出字体路径打印到tab-epared-values格式中的stdout 。带有“ - ”参数的dump子命令从stdin读取此列表,并在build/diff目录中创建其文本转储和diff文件。在这种情况下,没有必要的“ --diff ”选项,因为源字体路径是从管道提供的。
一旦查看了上面创建的差异文件或构建的测试字体,就可以将diff文件复制到references目录中。然后,当您要再次构建它们时,例如字体更新时或更改构建环境时,您可以将DIFF文件与参考文件进行比较,以了解新字体与以前的构建的不同。
使用“ -r ”选项, dump子命令在两个字体文件之间创建差异文件,并将DIFF文件与references目录中曾经经过的diff文件进行比较。
此选项的典型用法如下:
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字体。
该软件包确定字形对通过在Config类中定义的一组Unicode代码点调整间距。
然后,对于每对,它可以检查间距是否适用,通过检查字形轮廓和计算墨水边界盒的字形盒。例如,当字形非常厚时,字形可能没有足够的内部间距,并且施加间距可能会导致字形碰撞。该包装自动检测到此类情况,并避免将间距施加到此类对。
可以通过指定下面的语言或将Config.use_ink_bounds设置为False在您的Python程序中来禁用此自动行为。
有针对标点符号在字形空间中放置标点符号的特定惯例。例如,u+3002意识形态的全停止应放置在日语的字形空间的左下角,而应将其放在传统的中文中。
默认情况下,此软件包确定了上述算法部分所述的字形大纲的差异。但是您可以指定Opentype语言系统标签,以使此软件包遵循语言约定,而不是使用字形大纲。以下示例禁用字形概述的自动确定,并指定字体是日本字体。
east-asian-spacing --language=JAN input-font-file对于TrueType Collections(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程序中才有可能。
对于一个简单的示例,请参阅tests/config_test.py中的test_config 。
CHWS_Tool项目是自定义此软件包的实际示例。
该软件包通过使用Cython Bindings Uharfbuzz使用Harfbuzz塑造引擎。
如果要使用harfbuzz的特定构建,则此工具可以通过设置SHAPER Environment变量来调用外部HB形命令行工具。
export SHAPER=hb-shape为Linux安装HB形状:
sudo apt get libharfbuzz-bin要使用Homebrew安装Mac的HB形状:
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:
toxscripts目录具有一些小的外壳脚本。
build*.sh脚本对于构建字体,计算源字体的差异和将diff文件与引用进行比较。以下是示例用法。
./scripts/build.sh input-font-file.otf -v
./scripts/build-noto-cjk.sh ~ /fonts/noto-cjk -v