11个稳定版本
1.4.0 | 2023年7月21日 |
---|---|
1.3.1 | 2022年9月17日 |
1.1.2 | 2022年1月23日 |
1.1.0 | 2021年11月15日 |
1.0.0 | 2020年8月8日 |
#121 in 文本处理
904 每月下载量
用于 spongebobizer
215KB
5K SLoC
focaccia
Unicode case folding方法用于不区分大小写的字符串比较。用于在Artichoke Ruby中实现Ruby Core实现中的Symbol
和String
类的case folding操作。
Focaccia支持全、ASCII和土耳其语Unicode case folding等性和顺序比较。
软件开发者最常见的事情之一是“规范化”文本以进行比较。开发者被教导将文本规范化以进行比较的最基本方式之一是进行“不区分大小写”的比较。在其他情况下,开发者希望以区分大小写的方式比较字符串。Unicode定义了字符的大写、小写和标题属性,以及影响特定语言文本使用的特殊情况。(W3C,Case Folding)
focaccia是一种扁平面包。focaccia crate通过将其扁平化为折叠后的小写来比较UTF-8字符串。Artichoke和focaccia很搭。
使用方法
将其添加到您的Cargo.toml
[dependencies]
focaccia = "1.4.0"
然后进行不区分大小写的字符串比较,如下所示
use core::cmp::Ordering;
use focaccia::CaseFold;
let fold = CaseFold::Full;
assert_eq!(fold.casecmp("MASSE", "Maße"), Ordering::Equal);
assert_eq!(fold.casecmp("São Paulo", "Sao Paulo"), Ordering::Greater);
assert!(fold.case_eq("MASSE", "Maße"));
assert!(!fold.case_eq("São Paulo", "Sao Paulo"));
对于已知为ASCII的文本,Focaccia可以进行更高效的比较检查
use core::cmp::Ordering;
use focaccia::CaseFold;
let fold = CaseFold::Ascii;
assert_eq!(fold.casecmp("Crate: focaccia", "Crate: FOCACCIA"), Ordering::Equal);
assert_eq!(fold.casecmp("Fabled", "failed"), Ordering::Less);
assert!(fold.case_eq("Crate: focaccia", "Crate: FOCACCIA"));
assert!(!fold.case_eq("Fabled", "failed"));
ASCII比较可以检查在字节切片上
use core::cmp::Ordering;
use focaccia::{ascii_casecmp, ascii_case_eq};
assert_eq!(ascii_casecmp(b"Artichoke Ruby", b"artichoke ruby"), Ordering::Equal);
assert!(ascii_case_eq(b"Artichoke Ruby", b"artichoke ruby"));
土耳其语case folding类似于全case folding,并为带点和不带点的I添加了额外的映射
use core::cmp::Ordering;
use focaccia::CaseFold;
let fold = CaseFold::Turkic;
assert_eq!(fold.casecmp("İstanbul", "istanbul"), Ordering::Equal);
assert_ne!(fold.casecmp("İstanbul", "Istanbul"), Ordering::Equal);
assert!(fold.case_eq("İstanbul", "istanbul"));
assert!(!fold.case_eq("İstanbul", "Istanbul"));
实现
Focaccia从Unicode数据文件生成转换表。Focaccia按照Unicode标准(见CaseFolding.txt
)实现case folding。
no_std
FOCACCI与std
的依赖性可选并默认启用,兼容no_std
。在no_std
配置下,FOCACCI不链接到alloc
。
库特性
所有特性默认启用。
最低支持的Rust版本
此crate至少需要Rust 1.56.0版本。此版本可以在小版本发布中升级。
Unicode版本
FOCACCI实现了Unicode大小写折叠,遵循Unicode 15.0.0大小写折叠规则集。
Unicode的每个新版本都可能更新此crate中折叠映射的源CaseFolding.txt
,这将是此crate中折叠映射的来源。大小写折叠规则的更新将伴随着小版本号的提升。
许可证
focaccia
在MIT许可证下授权(c)Ryan Lopopolo。
focaccia
包括受Unicode使用条款和Unicode数据文件和软件许可证约束的Unicode数据文件(c)1991-2022 Unicode, Inc.
此存储库中的生成文件带有// @generated
注释和Unicode版权声明。这些生成文件结合了从Unicode数据文件中提取的数据。有关生成过程的更多详细信息,请参阅scripts/gen_case_lookups.rb
。此脚本创建的生成源同时受此存储库中包含的MIT许可证和Unicode数据文件和软件许可证的约束。