「IRC」- 彩色化消息内容(为消息添加颜色、字体加粗、斜体、背景色)

问题描述

最开始,我们只想寻找一个 IRC 客户端,该客户端具有高亮字体、设置背景色等等特性。但是,却有了意外收获。

IRC Colors,是一个轻量级子协议,需要客户端的支持。该协议定义了一系列“特殊字符序列”,当客户端遇到这些特殊序列时,需要对文本内容进行处理(比如字体加粗、倾斜等等),然后再进行显示。

如下示例,^BHello World^B 将显示为加粗的 Hello World 消息(其中 ^B 为 Ctrl+B 即 STX 字符):

该笔记将记录:在 IRC 中,发送彩色消息的相关问题。

解决方案

控制字体样式

正如最开始的介绍,我们还可以发送其他样式的字体,比如下划线、斜体等等。

Format Code Point Shortcuts Description
Bold 0x02 Ctrl+B 粗体
Italics 0x1D Ctrl+I 斜体
Underline 0x1F Ctrl+U 下划线
Reverse 0x16 Ctrl+R 反转背景与前景色(字体颜色)
Plain 0x0F Ctrl+O 恢复默认样式

控制字体颜色

除了控制字体样式,还可以控制字体颜色,Code Point = 0x03,快捷键为 Ctrl+K 或 Ctrl+C(取决于客户端,有的客户端将 Ctrl+K 绑定到 0x03,有的客户端将 Ctrl+C 绑定到 0x03)。为了演示,我们使用 ^K(也代指 ^C 字符)。

使用 ^KN 设置字体颜色,使用 ^KN,M 设置字体颜色与背景色,其中 N M 为如下表格的色值(Value)。例如 ^K0,4 表示白色字体、红色背景。

Value Name RGB HTML
0 White 255,255,255 #FFFFFF
1 Black 0,0,0 #000000
2 Navy 0,0,127 #00007F
3 Green 0,147,0 #009300
4 Red 255,0,0 #FF0000
5 Maroon 127,0,0 #7F0000
6 Purple 156,0,156 #9C009C
7 Orange 252,127,0 #FC7F00
8 Yellow 255,255,0 #FFFF00
9 Light Green 0,252,0 #00FC00
10 Teal 147,147 #009393
11 Cyan 255,255 #00FFFF
12 Royal blue 0,0,252 #0000FC
13 Magenta 255,0,255 #FF00FF
14 Gray 127,127,127 #7F7F7F
15 Light Gray 210,210,210 #D2D2D2

补充说明

输入控制字符表示设置开始,再次输入控制字符表示设置停止。比如 ^BHello^B World 将显示加粗的 Hello 与普通的 World 样式。

在颜色设置中,如果未指定,后面的设置将“继承”前面的设置。比如 ^K0,1Hello ^4There! 将显示为「背景黑色、Hello 为白色、There! 为红色」样色。

^K 只能清除字体颜色,如果需要清除样色,需要使用 ^O 序列。

在编程语言中,使用转义序列

在 Groovy 或 Java 中,我们应该关注 Code Point 字段。比如,我们想要控制颜色,需要发送 0x03 ETX 字符,应该使用 String color = "\u00030,4Hello World" 来定义白色字体、红色背景的 Hello World 消息。

参考文献

Colors – IRC – WikiChip