您如何正确/有效地管理调整包含组合字符的字符串的视觉宽度?

很容易拉伸SVG字形以获得所需的字体规格,例如here。您必须放弃字体文件并直接使用SVG。然后,您可以拉伸字形的某些部分。

但是要弄清楚如何来拉伸字形,并且需要拉伸特定于一行的字形,您必须跟踪很多位置和宽度信息(边界框) 。就我而言,在非变音符号的语言中,像希伯来语这样的可伸缩字符,每个字母都绝对位于行上。您将获得该行下一个字符位置的当前偏移量,并为其添加字形的宽度。然后下一个字符将在那之后。您可以根据需要添加一些额外的间距,但这就是要点。

之所以能够工作,是因为每个字符都有特定的宽度,并使用整个宽度。

但是,据我所知,当您需要支持变音符号时,它会完全崩溃。

我想制作可伸缩的Devanagari字符,例如and和ग。我只需要拉伸水平臂的一部分即可。但是,您可以在这些基本字形的顶部添加 vowel diacritics。例如,或ॆ。我还不知道在字体实现级别如何“组合字符”,但是我认为这与字体字形区域内的否定定位有关。如果您使用字体插入变音符号,那一切都很好。但是,如果我们想直接使用从字体中导出的SVG字形怎么办?

导出的变音符号的SVG字形具有宽度。明显。在JavaScript中,如果您在定义组合字符的SVG路径上执行el.getBoundingClientRect(),它将为您提供最终宽度。回到基础,这里没有消极的空间。

因此,在我没有变音符号的原始实现中,它将字符的宽度附加到行偏移量上,因此下一个字符将放置在该位置。这对变音符号不起作用,因为它将仅测量变音符号并将其放置在下一个位置,然后移过去。例如,这只会给我留下类似 + + आइ...这样的字符串。 进行线偏移量测量时,我需要某种方式来使用并跟踪变音符号。

如果我从字体的SVG导出中使用JavaScript中的字形,如何在行偏移示例中计算SVG组合字符的正确位置?

我首先要考虑的是,跟踪作为一个单元的字符的“块”。因此,在藏文中,一个字形似乎可以附加4或5个组合字符。因此,将有一个1 + 4至5个字符的块。看起来像这样:

[ '123','foo','b','a','r' ]

其中1是基本字符,23组合在其上。我可以看到这种方法已经不够用了,因为它不通用,如何反向组合或在两个字符之间进行组合,等等?

我尝试过的唯一其他方法是将示例字符串附加到DOM并测量最终宽度。因此,您将所有组合字符(或其他字符)应用于一个跨度或某物,并获得宽度。我不确定,这种方法太硬且太慢。

想知道是否有更好的方法可以做到这一点。

adolfe5 回答:您如何正确/有效地管理调整包含组合字符的字符串的视觉宽度?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3123958.html

大家都在问