Crates.io | cst |
lib.rs | cst |
version | 0.1.203 |
source | src |
created_at | 2022-07-24 11:43:25.807877 |
updated_at | 2022-07-26 23:21:51.216126 |
description | Parser for the CST format. |
homepage | |
repository | https://github.com/tonytins/cstrs |
max_upload_size | |
id | 631940 |
size | 31,930 |
Caret-Separated Text (or CST) is a key-value pair format represented by digits or words as keys and the value as text enclosed between carets. (e.g. <key> ^<text>^
) Any text which is not enclosed with carets is considered a comment and ignored. Neither strings nor comments may use the caret character. CST.NET is a library for parsing the CST format.
[dependencies]
cst = "0.1"
[dependencies]
cst = { git = "https://github.com/tonytins/cst.rs", branch = "develop" }
At it's core, CST.rs uses the get_entry() function to parse the CST format.
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);
}
Based on FreeSO's APIs, the UIText struct takes care of the heavy lifting of locating and parsing CST files.
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 required each translation file be prefixed with a number and underscores, known as the ID, that are located in uitext/[language].dir
. The IDs were used to locate the file, regardless the name. CST.rs follows this convention because it's the only known use of the format.
uitext/english.dir/_154_miscstrings.cst
uitext/swedish.dir/_154_miscstrings.cst
Note that that UIText
struct is simply a wrapper around the the above mentioned get_entry()
function.
More complex stuff can be found in the examples directory.
For the most part, this is to be a architecturally similar port of CST.NET. With some changes to make it more idiomatic in Rust.
This project is dual-licensed under the BSD-3-Clause or the UNLICENSE.