如何使用 Perl 查找包含特定字符的字体?

10

这里已经有问题:

我有许多不同的字体。其中很多是“仅ASCII”,我需要检查哪些字体包含几个带重音符号的字符。(拉丁 - Unicode代码点 - 文本以utf8编码) 例如:(áäčďéěíĺľňóôöőŕřšťúůüűýž)

主要有:

  • TrueType字体(扩展名为.ttf)
  • TrueType字体集合(扩展名ttc)
  • OpenType字体(.otf)

用Perl通常(正确)的方法是什么? (由于C语言是上述问题的解决方案,因此在安装包含“font”的所有CPAN模块之前先询问)。

我在OS X上(如果这很重要),并且可以安装任何macports包 - 如果有帮助。


1
看看我对这个问题的回答。 - nwellnhof
很遗憾,我无法在OS X上安装Font::FreeType。编译FreeType.xs时出现错误。幸运的是,@mob提供的建议Font::TTF成功安装。无论如何,感谢您的帮助,好知道还有另一种解决方案。 - cajwine
不是Perl,但为了SEO的缘故,这个Python脚本非常好用:http://unix.stackexchange.com/a/268286/26952 - Skippy le Grand Gourou
1个回答

3

对于.ttf文件,您可以使用Font::TTF及其相关模块:

use Font::TTF::Font;
my $font = Font::TTF::Font->open( "C:/Windows/Fonts/ariali.ttf" );
my @supported_codepoints = sort { $a <=> $b } $font->{cmap}->reverse;

我已经超出了我的专业范围,但是在Font::TTF分发中还有一个Font::TTF::Ttc模块,您可以深入了解并查看是否可以提取有关受支持代码点的更多信息。

(Font::TTF建议来自这里)


Font::TTF 是一个不错的模块,但需要一些对 TrueType 和 OpenType 格式的了解。顺便说一下,$font->{cmap}->ms_table 返回一个哈希表,将 Unicode 码点映射到字形 ID。这个哈希表应该比 ->reverse 返回的数组更容易使用。 - nwellnhof

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接