如何呈现梵文中的连线字母?

时间:2017-01-16 22:50:19

标签: unicode fonts text-rendering devanagari

考虑下图中的字母。

第一行显示字母本身,第二行显示字母,第三行显示其编码为三个十六进制UFT-8字节的unicode代码点。例如,字母2是DEVANAGARI LETTER MA,代码点为0x92E (= 2350 decimal),编码为三个十六进制UTF-8字节:e0, a4, ae

我的问题是关于特定连词的呈现,例如(1)。渲染系统如何处理这种渲染?我们通常输入这个连接字母的方式是首先输入字母2,然后输入字母4(表示我们打算将加入此字母与下一个字母连接起来),然后输入字母3.然后,渲染系统尊重通过删除字母2中的垂直线并将字母4重叠在那里来加入动作。我不清楚两个完整字母2及其垂直线擦除一半(用淡红色椭圆显示)的字体是否可用所选字体。

有人能解释一下这是如何运作的吗?

enter image description here

2 个答案:

答案 0 :(得分:1)

字体文件不仅仅是每个字母的一堆形状。它们包含各种表格,用于指示字形的行为方式。

有:

  • 用于定位字形的表格
  • 替换字形的表格
  • 用于分类字形和提供连字插入符表的表
  • 基线布局表
  • ...

另请参阅:https://fontforge.github.io/gposgsub.html

需要哪些字体功能取决于书写系统(拉丁文,西里尔文,阿拉伯文,梵文)以及它们的字形应如何表现。使用什么表取决于字体设计者的字体文件类型(设计的内容和可以存储的内容)。显示的功能取决于字体渲染器(有时渲染器会忽略字体指令)。

回到你的问题。这是一种替代。字体文件本身的表格中的信息描述了究竟发生了什么。如果你真的想知道发生了什么,你必须在编辑器中打开字体并检查各种表格。我建议使用FontForge(免费和免费)。

故事的寓意是字体文件不仅仅是美学字母形状,还有软件。

答案 1 :(得分:1)

了解Unicode® Standard Annex #15 - UNICODE NORMALIZATION FORMS中的分解和规范化;例如,在[Unicode] - The Unicode Standard中的第2章一般结构和第3章一致性中更详细地解释了规范和兼容性等价:

  

字体及其关联的渲染过程定义任意一个   从Unicode字符映射到字形。一些字形   字体可以是单个字符的独立形式;其他人可能会   渲染不直接对应任何单个的表单   字符。

     

文本渲染要求将内存中的字符映射到字形。   渲染文本的最终外观可能取决于上下文   (存储器表示中的相邻字符),变化   所用字体的排版设计和格式信息   (点大小,上标,下标等)。屏幕上的结果   或纸张可能与a的原型形状有很大不同   字母或字符,如图2-3所示。

     

Figure 2-3

     

对于拉丁文脚本,这个字符代码之间的关系   序列和字形相对简单且众所周知;给几个人的   其他脚本,在本标准中有记录。 但总的来说   在这种情况下,精细排版需要一套更精细的规则   这里给出了。 Unicode标准记录了默认关系   在字符序列和字形外观之间的目的   确保相同的文本内容可以存储相同,并且   因此,可互换的字符代码序列。