Unicode代码点到字体符号映射?

Pav*_*mar 3 unicode fonts

我们知道代码点65代表A.有一对一的映射,因此很容易渲染.从字体文件中取符号A并进行渲染.

65 == A
Run Code Online (Sandbox Code Playgroud)

现在让我们考虑一下印地语.代码点0x0924代表?,再次易于映射.

0x0924 == ?
Run Code Online (Sandbox Code Playgroud)

但是,如果码点0x0924后面紧接着码点0x094d0x0930它代表??分别表示不是这些3的组合中,而且新的符号???

0x0924 0x094d 0x0930 != ? ? ?
Run Code Online (Sandbox Code Playgroud)

0x0924 0x094d 0x0930 == ???
Run Code Online (Sandbox Code Playgroud)

我的问题是.

  1. 哪个程序负责指示分组代码点将创建新符号,但不创建符号连接.
  2. 在键入时,相同的程序监视器和输入在由于键入而附加新的代码点时动态地改变已经呈现的符号
  3. 如何为这些规则创建字体?

Mik*_*ans 7

欢迎使用现代字体:它们不是您的想法."一个代码点映射到一个字母"的日子是20年前的样子,现代字体在过去的几十年里一直在做更多的事情.我将用OpenType字体解释这个问题(大多数人称之为"ttf"和"otf"字体.是的,它们都是OpenType字体),因为那是你最有可能使用的那种,在这种情况下:字体几乎可以控制所有内容,而您所依赖的文本引擎只是遵循其指示.

OpenType字体有一个"字符映射",它提供(所有)从输入字节代码到可用字形列表中某处的某些字形("形状")的简单一对一映射.

并且它们可以有多个映射,因为ASCII中的代码与某些Windows代码页中的代码,或Mac语言/编码对或Unicode(仅覆盖前127个字符的ASCII,甚至不完全相同)中的代码不同).

但是,将二进制代码映射到其他二进制代码非常简单.现代字体的真正力量,特别是OpenType,接下来会发生什么.

  1. OpenType具有完全的连字控制,因为代码X产生字形GX而代码Y产生字形GY,绝不意味着X + Y将产生GX + GY.可能存在相当多种不同的连字(一对一,多对一,上下文,基于位置等),并且它们全部由GSUB表控制,("GSUB"表示"G" "lyph"SUB"stitution".当你键入多个印地语共振峰并形成一个单独的"字母"时,这就是GSUB所做的.例如,如果我键入"f"+"i",那么很有可能在设计良好的字体中,您会看到单个连字.同样地,如果您正在编写阿拉伯语,其中字母具有不同的形状,具体取决于它们在一个单词中的位置,这也是GSUB所涵盖的.GSUB表可以包含数百种不同的规则集,以确保所有语言都能正确呈现.
  2. 是的,但这不是一个"程序",而是字体.现代字体有点像游戏ROM,因为你需要一个引擎来执行它们,但它们会调用所有镜头并包含所有逻辑.文本渲染引擎只是"嘿字体,我有这个字节序列作为输入,请指导我如何将其转换为轮廓向量",字体包含所有需要发生的信息.
  3. "使用字体软件".这是一个明显的答案:良好的字体是用软件制作的,它可以让你做所有你需要做的事情,以便你的语言支持工作.FontForge,FontStudio,FontCreator等等,还有其他工具可以优化字体所需的所有OpenType功能(有很多令人难以置信的功能).

制作好的字体,甚至只是对它们进行编程(因此根本不考虑字体设计)是一项非常专业的工作.

  • 第一个错误是假设这是一个“公正”,第二个错误是 GSUB 规则与映射代码点无关。第三,您绝对不需要更改字形的字符映射。忽略所有这些,这将是疯狂的,任何链接的工具都有自己的方式让您编辑 OpenType 功能,并且它们都有自己的做事方式,这些方式都同样“您需要学习如何做到这一点” ”。所以,选择吧,祝你好运。 (3认同)