3 个版本
0.1.203 | 2022年7月26日 |
---|---|
0.1.202 | 2022年7月24日 |
0.1.201 | 2022年7月24日 |
#1817 在 解析器实现
13KB
109 行
CST.rs
插入符分隔文本(或CST)是一种以数字或单词作为键,以插入符包围的文本作为值的键值对格式。(例如 <key> ^<text>^
)任何没有用插入符包围的文本都被视为注释并被忽略。字符串和注释都不能使用插入符字符。CST.NET 是一个用于解析CST格式的库。
要求
- Rust 2021 版或更新版
- IDE 或编辑器
安装
[dependencies]
cst = "0.1"
开发
[dependencies]
cst = { git = "https://github.com/tonytins/cst.rs", branch = "develop" }
使用
基本解析
CST.rs 使用 get_entry() 函数来解析 CST 格式。
use cst::get_entry;
fn main() {
let input = "1 ^The quick brown fox jumps over the lazy dog.^";
let expect = "The quick brown fox jumps over the lazy dog.";
let entry = get_entry(input, 1);
assert_eq!(entry.unwrap(), expect);
}
在生产环境中
基于 FreeSO 的 API,UIText 结构体负责寻找和解析 CST 文件的重负载工作。
use cst::UIText;
fn main() {
let expect = "The quick brown fox jumps over the lazy dog.";
let ui_text = UIText::new("example"); // uitext/example.dir
let entry = ui_text.get_text(101, 1); // Entry 1 of _101_[name].cst
assert_eq!(entry.unwrap(), expect);
}
The Sims Online 要求每个翻译文件以一个数字和下划线为前缀,称为 ID,这些 ID 位于 uitext/[language].dir
。ID 用于定位文件,不管其名称如何。CST.rs 遵循此约定,因为这是已知此格式的唯一用法。
uitext/english.dir/_154_miscstrings.cst
uitext/swedish.dir/_154_miscstrings.cst
注意,UIText 结构体仅仅是上述提到的 get_entry()
函数的包装。
示例
更复杂的示例可以在 示例目录 中找到。
注意
这基本上是将 CST.NET 端口的结构类似。做了一些改变使其在 Rust 中更加惯用。
许可证
本项目采用 BSD-3-Clause 或 Unlicense 双许可。
依赖项
~0.1–7.5MB
~42K SLoC