CatCode1前往 CatCode 查看。
猫猫码是一个具有特定格式的字符串格式编码,它看上去是这个样子的 👉 [CAT:xxx,param1=value1,param2=value2]
- 以
[
开头,]
结尾。 - 首先是猫猫码的头标识(大小写数字或下划线,标准应为
CAT
) - 头标识后是猫猫码的类型(大小写数字或下划线),与头标识之间使用冒号
:
分割。 - 参数为多个key不重复的键值对,一对参数使用
=
连接键与值,多对参数使用,
分割。 - 可以没有参数。
- 区分大小写。
为了避免混淆整个存在猫猫码的文本中不允许出现:[
、]
、&
字符和制表符与换行符,猫猫码文本内中除了上述字符外,还不允许出现 ,
与 =
字符。
因此,猫猫码的转义规则为:
源 | 转 |
---|---|
& |
& |
[ |
[ |
] |
] |
, |
, |
= |
= |
\n |
|
\r |
|
\t |
	 |
任何符合规则 [HEAD:type,param=value,param=value,...]
的特殊码均可以视为猫猫码,尽管 HEAD
可能并不是 CAT
。
CatCode2 核心库基于 Kotlin Multiplatform 支持多平台(JVM、JS、Native), 并且 CatCode2 提供了基于 kotlinx-serialization 的多平台序列化模块支持, 你可以借助 kotlinx-serialization 来自定义结构来描述你的猫猫码、序列化/反序列化你的猫猫码。
核心库 提供了针对猫猫码字符串的解析、读写与封装的核心基础功能,是最主要也是最基本的模块。
Note
👉 前往 核心库模块 获取更多信息。
CatCode2 提供了一些允许通过实体类作为载体来对猫猫码进行描述的模块, 例如对 kotlinx-serialization 的实现。
Note
👉 前往 序列化模块 获取更多信息。
walkCatCodeContinuously(
"[CAT:code,k1=v1,name=forte,tar=foo]",
true,
{ head: String -> println("head = $head") },
{ type: String -> println("type = $type") }
) { key: String, value: String -> println("$key: $value") }
val cat = catOf("[CAT:at,code=123]")
cat.code
cat.toCode("CQ")
cat.head
cat.type
cat.keys
val code: Int by cat.provider.int
val cat = buildCat("foo", "CAT") {
"key" - "value"
set("foo", "bar", false)
this["age"] = "18"
key("name") value "forte"
}
val catCode = buildCatLiteral("foo") {
"key" - "value"
set("foo", "bar", false)
this["age"] = "18"
key("name") value "forte"
}
@Serializable
@SerialName("at") // or use @CatCodeTypeName("at")
data class At(val code: Long, val name: String)
fun sample() {
val at = At(123456L, "forte")
val catcode = CatCode.encodeToString(At.serializer(), at)
val newAt = CatCode.decodeFromString(At.serializer(), catcode)
// ...
}