Fonts 启用阿拉伯语的排版设置是什么;完";字形结尾处的上下文形式?

Fonts 启用阿拉伯语的排版设置是什么;完";字形结尾处的上下文形式?,fonts,arabic,directwrite,Fonts,Arabic,Directwrite,以下内容使用尺寸为250x100的IDWriteTextLayout进行布局。它只包含150个阿拉伯字母U+062A,没有空格,使用Calibri 24(正常重量/样式/拉伸)。蓝色框显示250x100布局区域(文本溢出,因为我没有设置修剪模式),绿色框显示度量中的布局尺寸,粉色框考虑悬垂度量,灰色框来自命中测试每个字符 将其与以下内容进行比较,其中唯一的区别是我调用了IDWriteTextLayout::setPlayout并传递了一个空的idWriteType对象,该对象是由IDWrite

以下内容使用尺寸为250x100的
IDWriteTextLayout
进行布局。它只包含150个阿拉伯字母U+062A,没有空格,使用Calibri 24(正常重量/样式/拉伸)。蓝色框显示250x100布局区域(文本溢出,因为我没有设置修剪模式),绿色框显示度量中的布局尺寸,粉色框考虑悬垂度量,灰色框来自命中测试每个字符

将其与以下内容进行比较,其中唯一的区别是我调用了
IDWriteTextLayout::setPlayout
并传递了一个空的
idWriteType
对象,该对象是由
IDWriteFactory::CreatePlayout
创建的,并且根本没有修改

只要看看文本的外观,每行的最后一个字符都采用了阿拉伯语的“end”上下文形式,我相信这通常适用于单词的最后一个字符(我不懂阿拉伯语)。我目前只能猜测DirectWrite中有一个bug,这导致文本实际上挂在指定的布局区域和度量返回的区域之外(挂在框外的数量似乎等于上下文形式更改所增加的额外宽度)

从其他实验来看,设置空的
IDWriteTypography
对象似乎可以禁用所有可能的字体功能。因此,通过禁用某些排版字体功能(这显然是默认启用的),我已经使它对行尾的字符使用“结束”形式,即使它们不在单词的末尾。哪个字体功能控制此行为?我尝试过调整
IDWriteTypography
实例,以一次启用(将其值设置为1)该实例中列出的每个字体功能,但它们都不会产生旧的外观。相关功能是否是实际使用整数值而不是布尔值的功能之一


我的目标是在我的
IDWriteTextLayout
上使用
idWriteTopography
对象,但避免文本挂在版面区域之外。或者,还有其他方法来解决这种行为吗?

这里有很多事情让我觉得这有点像是一个问题,但我至少可以回答一个特定的问题:哪种字体功能控制阿拉伯语的词尾形式。这就是问题所在。它是阿拉伯文脚本的一个基本、非可选功能,不仅“默认打开”,而且无法使用Windows文本布局禁用它。这就是为什么在与之对应的DWRITE\u FONT\u FEATURE\u标记枚举中看不到任何内容


关于XY问题,我的初始观点是:您是否实际期望出现这样的情况(单个重复字符占据文本框的全部内容)?也许您最好使用更真实的文本进行测试:例如,从?虽然DWrite相当健壮,但我非常怀疑它的设计师是否在这种极端情况下寻求完美。你可能会发现很多奇怪的案例都是使用完全不现实的文本编写的“bug”。

这肯定回答了问题,谢谢。事实上,它不是API公开的特性,这让我对找不到它感觉更好。然而,我很困惑为什么DirectWrite在这个特性上表现出不同的行为,这取决于我是否设置了排版对象。如果这是阿拉伯语的一个必需功能,那么听起来无论我做什么DirectWrite都应该启用它,但实际上我必须做额外的工作(设置一个排版对象)才能启用它。Re XY问题:不,我通常不希望在实际使用中出现这种情况。但是,我正在呈现用户输入的文本(这基本上是一个文本编辑器),所以我必须考虑它们。对于一个只是到处玩的人来说,输入没有空格的胡言乱语(我将其简化为一个字符)并不罕见,而且这样做很容易导致文本溢出边界,这在我的应用程序中非常明显,这有点令人不安。我的核心问题是在避免这种行为的同时使用排版对象,我希望通过重置相关字体功能的值来实现这一点。如果失败了(存在行尾终端形式的重叠边界),我相信您已经禁用了类似换行的功能(其阿拉伯语等价物)。在初始情况下(默认成形),它似乎做了正确的事情(考虑到非常不寻常的输入)。我同意人们可能会在这上面玩;我不同意让它对每一种可能的情况都绝对完美是正确的方法。你可能会花费大量时间来“修复”一个完全不现实的案例;白费力气,伊姆霍。你知道我可能会禁用什么样的阿拉伯语单词包装吗?似乎它一定是另一个无法访问的字体功能。我同意在这一点上尝试某种修复可能是徒劳的,特别是因为它必须非常黑客,但我认为花时间调查到目前为止是值得的。我只需要决定这个溢出问题是否值得我从使用排版对象中获得收益。不过,最后,我并不认为期望呈现的文本保持在边界内并与返回的度量相匹配是不合理的,即使有这样不寻常的输入