前言
qtail.js (以下简称qtail)是一个开源的用于生成带有小尾巴的 qq 昵称的 JavaScript 库。
本文将对 qtail 的原理进行分析。
分析
废话少说, 直接看代码吧。
注释已经很详细了, 这里只对关键代码进行分析。
return nick + '\u2067' + retail(tail.trim()) + '\u2066';
/* 这里的 `\u2067` 和 `\u2066` 是 Unicode 编码
* 用于控制尾巴的显示方向
* 在终端中会显示为 [RLI] 和 [LRI]
*/
那么问题来了, 为什么 qtail 会用 [RLI] 和 [LRI] 来控制尾巴的位置而不是 [RLO] (unicode 编码 \u202d
) 和 [LRO] (unicode 编码 \u202e
) 呢?
这是因为 qq 不允许一些字符出现在昵称中, 比如 [RLO] 和 [LRO]。俗称被和谐了
所以 qtail 选择了 [RLI] 和 [LRI] 来代替 [RLO] 和 [LRO]。
但是 [RLI] + [LRI] 和 [RLO] + [LRO] 两者的效果是不太一样的。根据我的测试, [RLI] + [LRI] 并不会影响非英文符号和英文字母的位置, 而 [RLO] + [LRO] 会影响非英文符号和英文字母的位置。这太炸裂了
此处不再赘述测试过程, 若有兴趣, 可以自行测试。
所以, 我重新调整了整理尾巴的位置的代码(见retail
函数)。让尾巴前后的英文符号交换, 而不是简单的反转字符串。
总结
qtail 的原理很简单, 就是用 [RLI] 和 [LRI] 来控制尾巴的显示方向。但是 [RLI] + [LRI] 和 [RLO] + [LRO] 两者的效果是不太一样的, 所以 qtail 不是简单的反转字符串, 而是交换前后英文符号的位置。
另外, 在线使用 qtail 请出门左转。