Unicode Titlecase

Unicode titlecasing operations for chars and strings. The crate supports additional

functionality for the TR/AZ locales.

GitHub Workflow Status docs.rs Crates.io Crates.io

Installation

Add this to your Cargo.toml:

toml [dependencies] unicode_titlecase = "2.0.0"

Usage

Chars

To turn a char into its titlecase equivalent [char; 3]array:

```rust use unicodetitlecase::totitlecase;

asserteq!(totitlecase('A'), ['A', '\0', '\0']); asserteq!(totitlecase('DŽ'), ['Dž', '\0', '\0']); asserteq!(totitlecase('ffl'), ['F', 'f', 'l']); ```

Or use the iterator version that follows the same format as the std library. The crate defines a Trait that is implemented on char:

rust use unicode_titlecase::TitleCase; assert_eq!('i'.to_titlecase().to_string(), "I"); assert_eq!('A'.to_titlecase().to_string(), "A"); assert_eq!('DŽ'.to_titlecase().to_string(), "Dž"); assert_eq!('ffl'.to_titlecase().to_string(), "Ffl");

Strings

A similar trait is defined on str. This will titlecase the first char of the string, leave the rest unchanged, and return a newly allocated String.

rust use unicode_titlecase::StrTitleCase; assert_eq!("iii".to_titlecase(), "Iii"); assert_eq!("ABC".to_titlecase(), "ABC"); assert_eq!("DŽDŽ".to_titlecase(), "DžDŽ"); assert_eq!("fflabc".to_titlecase(), "Fflabc");

Alternatively, you could lowercase the rest of the str:

rust use unicode_titlecase::StrTitleCase; assert_eq!("iIi".to_titlecase_lower_rest(), "Iii"); assert_eq!("ABC".to_titlecase_lower_rest(), "Abc"); assert_eq!("DŽDŽ".to_titlecase_lower_rest(), "Dždž"); assert_eq!("fflabc".to_titlecase_lower_rest(), "Fflabc");

Testing a char or str

To see if the char is already titlecase, is_titlecase is provided:

```rust use unicodetitlecase::TitleCase; assert!('A'.istitlecase()); assert!('Dž'.istitlecase()); assert!('İ'.istitlecase());

assert!(!'a'.istitlecase()); assert!(!'DŽ'.istitlecase()); assert!(!'ffl'.is_titlecase()); ```

To test if a str is already titlecase, two options are provided. The first, starts_titlecase returns true if the first character is titlecased--ignoring the rest of the str. The second starts_titlecase_rest_lower only returns true if the first char is titlecase and the rest of the str is lowercase.

```rust use unicodetitlecase::StrTitleCase; assert!("Abc".startstitlecase()); assert!("ABC".startstitlecase()); assert!(!"abc".startstitlecase());

assert!("Abc".startstitlecaserestlower()); assert!("İbc".startstitlecaserestlower()); assert!(!"abc".startstitlecaserestlower()); assert!(!"ABC".startstitlecaserestlower()); assert!(!"İİ".startstitlecaserest_lower()); ```

All testing functions work the same regardless of locale.

Locale

The TR and AZ locales have different rules for how to titlecase certain characters. The to_titlecase functions assume the locale is neither of these locations. A "troraz" version of each function is provided instead.

rust use unicode_titlecase::{to_titlecase_tr_or_az, StrTitleCase}; assert_eq!(to_titlecase_tr_or_az('i'), ['İ', '\0', '\0']); assert_eq!('i'.to_titlecase_tr_or_az().to_string(), "İ"); assert_eq!("iIi".to_titlecase_tr_or_az(), "İIi"); assert_eq!("iIi".to_titlecase_tr_or_az_lower_rest(), "İii");

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.