我可以使用没有AAT等效的CoreText访问OpenType功能吗?

时间:2015-01-03 11:48:16

标签: ios core-text opentype

我想创建一个iOS应用程序,该应用程序使用OpenType的字体功能,这些字体在AAT字体中没有等效字体。具体来说,我想使用" ssty" OpenType-Math字体的功能。这是一种替换功能,可以通过稍微大胆的变体替换字形,这些变体在子/上标和分数中看起来更好,并且要以更小的尺寸渲染。理想情况下,我不想使用任何第三方库,例如harfbuzz,只要它可以仅使用CoreText执行此操作。

我尝试了以下代码

CTFontRef font = ...; // this is the font I already set up without the ssty feature
// ...
NSArray *ssty_setting = @[ @"ssty", @1 ];
NSDictionary *font_attributes = @{ (__bridge NSString *)kCTFontFeatureSettingsAttribute : @[ssty_setting ] };
CTFontDescriptorRef font_feature_descriptor = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)font_attributes);
CTFontRef font_with_features = CTFontCreateCopyWithAttributes(font, 0.0, NULL, font_feature_descriptor);

但是当我使用新的font_with_features来检索我想渲染的字形索引时(使用CTLineRef),我仍然可以找回未替换的字形代码,因此看起来这种方法并不起作用。

" ssty" -feature的另一个问题是它只适用于OpenType-Script with tag" math"使用默认的OpenType语言。但是我没有看到CoreText中有任何改变OpenType脚本的可能性。我很想被证明是错的。

除此之外认为它应该有效,因为在CTFontDescriptor.h标题中(虽然不在文档中)Apple说:

Starting with OS X 10.10 and iOS 8.0, settings are also accepted (but not returned) 
in the following simplified forms:
An OpenType setting can be either an array pair of tag string and value 
number, or a tag string on its own. For example: @[ @"c2sc", @1 ] or 
simply @"c2sc". An unspecified value enables the feature and a value of 
zero disables it.

好像他们不接受任意字符串标签......

我希望有一种方法可以使用CoreText,我非常感谢您的帮助,谢谢。

0 个答案:

没有答案