转换表(translation table)是一种字符表(see 字符表), 用于指定字符到字符的映射。这类表用于编码、解码及其他用途。 部分编码系统会指定自身专用的转换表;同时也存在适用于所有其他编码系统的默认转换表。
转换表包含两个额外槽位。第一个为 nil 或执行反向转换的转换表;
第二个为转换字符序列时最多查找的字符数量(参见下方 make-translation-table-from-alist 的说明)。
该函数根据参数 translations 返回一个转换表。
translations 中的每个元素应为形如 (from . to) 的列表;
表示将字符 from 转换为 to。
参数及各参数内的映射按顺序处理,若先前的映射已将 to 转换为其他字符(记为 to-alt), 则 from 也会被转换为 to-alt。
解码时,转换表的映射会作用于普通解码得到的字符。
若某个编码系统具有 :decode-translation-table 属性,
该属性指定要使用的转换表,或按顺序应用的一组转换表。
(该属性属于编码系统本身,由 coding-system-get 返回,
而非编码系统名称符号的属性。See 编码系统基础概念. )
最后,若 standard-translation-table-for-decode 非 nil,
所得字符会通过该表进行转换。
编码时,转换表的映射会作用于缓冲区中的字符,转换结果会被实际编码。
若某个编码系统具有 :encode-translation-table 属性,
该属性指定要使用的转换表,或按顺序应用的一组转换表。
此外,若变量 standard-translation-table-for-encode 非 nil,
则指定用于转换最终结果的转换表。
解码操作的默认转换表。若编码系统指定了自身的转换表,
且该变量值非 nil,则其对应的表会在之后应用。
编码操作的默认转换表。若编码系统指定了自身的转换表,
且该变量值非 nil,则其对应的表会在之后应用。
自动插入的字符在插入缓冲区前会通过该转换表进行转换。 搜索命令也会通过该表转换其输入,以便与缓冲区内容更可靠地进行比较。
该变量在设置时会自动变为缓冲区局部变量。
该函数根据 vec 返回一个转换表,vec 为包含 256 个元素的数组,
用于将字节(取值 0 至 #xFF)映射为字符。无需转换的字节对应元素可为 nil。
返回的表在第一个额外槽位中存放反向映射转换表,第二个额外槽位值为 1。
该函数提供了便捷方式创建私有编码系统,实现单个字节到指定字符的映射。
你可在 define-coding-system 的 props 参数中,
分别通过 :decode-translation-table 与 :encode-translation-table 属性
指定返回的表及其反向转换表。
该函数与 make-translation-table 类似,
但返回复杂转换表而非简单的一对一映射。
alist 中的每个元素形如 (from . to),
其中 from 与 to 可为字符或指定字符序列的向量。
若 from 为字符,则该字符转换为 to(即单个字符或字符序列)。
若 from 为字符向量,则该序列转换为 to。
返回的表在第一个额外槽位存放反向映射转换表,
第二个额外槽位存放所有 from 字符序列的最大长度。