3 个版本

0.1.203 2022年7月26日
0.1.202 2022年7月24日
0.1.201 2022年7月24日

#1817解析器实现

BSD-3-Clause OR Unlicense

13KB
109

CST.rs

crates.io GitHub license GitHub Workflow Status (branch) GitHub commit activity Contributor Covenant

插入符分隔文本(或CST)是一种以数字或单词作为键,以插入符包围的文本作为值的键值对格式。(例如 <key> ^<text>^)任何没有用插入符包围的文本都被视为注释并被忽略。字符串和注释都不能使用插入符字符。CST.NET 是一个用于解析CST格式的库。

要求

安装

[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-ClauseUnlicense 双许可。

依赖项

~0.1–7.5MB
~42K SLoC