10 个版本 (6 个稳定)

1.2.0 2024年1月18日
1.1.0 2023年6月23日
1.0.3 2022年12月5日
1.0.2 2022年11月26日
0.1.8 2022年8月20日

#238 in 文本处理

每月下载 27 次
用于 betaconvert

MIT 许可证

25KB
364

betacode

A rust library for Betacode conversion.

转换

示例

use betacode::converter;

let input = String::from("mh=nin a)/eide qea\\ *phlhi+a/dew *a)xilh=os");
let output = String::from("μῆνιν ἄειδε θεὰ Πηληϊάδεω Ἀχιλῆος");
let result = betacode::converter::convert(input);
assert_eq!(result, output);

验证

验证 Betacode 文本是否遵循规则

  • 它仅由 ASCII 字符组成,否则返回 ValidationError::NotASCII 包含无效字符;
  • 其字符由转换模块处理,否则返回 ValidationError::InvalidChars 包含无效字符;
  • 其字符的排列顺序可由转换模块解释,否则返回 ValidationError::InvalidDiacriticOrder 包含无效序列。

后者可能更容易恢复,通过函数 converter::reorder_diacritics。前者可能通过忽略无效字符来恢复。

详细信息

如果文本以正确的 ASCII Betacode 输入(并且转换器可以转换它),它返回 Ok().

let input = String::from("mh=nin a)/eide qea\\ *phlhi+a/dew *a)xilh=os");
assert!(betacode::validator::validate(input).is_ok());

否则,它指定发生了什么错误。

例如,如果传递包含非 ASCII 字符的字符串,如“ἄλγεα”,则在枚举 ValidationError::NotASCII 中存储所有违反验证的字符列表。

let input = String::from("ἄλγεα");
let result = betacode::validator::validate(input);
assert!(result.is_err());
match result {
    Ok(_) => (),
    Err(e) => {
        if let betacode::validator::ValidationError::NotASCII(b) = e {
            assert_eq!(b, vec!['', 'λ','γ','ε','α']);
        }
    }
}

如果字符串是 ASCII,但尚未实现正确的转换规则,则在枚举 ValidationError::InvalidChars 中存储无法转换的字符列表。

let input = String::from("9");
let result = betacode::validator::validate(input);
assert!(result.is_err());
match result {
    Ok(_) => (),
    Err(e) => {
        if let betacode::validator::ValidationError::InvalidChars(b) = e {
            assert_eq!(b, vec!['9']);
        }
    }
}

如果文本包含无法直接转换的变音符号顺序,它将返回不合法的序列列表。转换模块仍然可以转换它,但这样做是为了确保语料库正确构建,以便其他工具操作。它将所有违反 BREATH/DIAIRESIS + ACCENT + SUB-IOTA 顺序的样式存储在 ValidationError::InvalidDiacriticOrder

let input = String::from("h\\( a/)ndra");
let result = betacode::validator::validate(input);
assert!(result.is_err());
match result {
    Ok(_) => (),
    Err(e) => {
        if let betacode::validator::ValidationError::InvalidDiacriticOrder(b) = e {
            assert_eq!(b, vec!["\\(".to_string(), "/)".to_string()]);
        }
    }
}

依赖项

~2.7–4MB
~94K SLoC