考虑下图中的字母。
第一行显示字母本身,第二行显示字母,第三行显示其编码为三个十六进制UFT-8字节的unicode代码点。例如,字母2是DEVANAGARI LETTER MA,代码点为0x92E (= 2350 decimal)
,编码为三个十六进制UTF-8字节:e0, a4, ae
。
我的问题是关于特定连词的呈现,例如(1)。渲染系统如何处理这种渲染?我们通常输入这个连接字母的方式是首先输入字母2,然后输入字母4(表示我们打算将加入此字母与下一个字母连接起来),然后输入字母3.然后,渲染系统尊重通过删除字母2中的垂直线并将字母4重叠在那里来加入动作。我不清楚两个完整字母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所示。
对于拉丁文脚本,这个字符代码之间的关系 序列和字形相对简单且众所周知;给几个人的 其他脚本,在本标准中有记录。 但总的来说 在这种情况下,精细排版需要一套更精细的规则 这里给出了。 Unicode标准记录了默认关系 在字符序列和字形外观之间的目的 确保相同的文本内容可以存储相同,并且 因此,可互换的字符代码序列。