#![no_std]
#![forbid(unsafe_code)]
#![warn(missing_docs)]
extern crate alloc;
mod buffer;
mod decompose;
mod props;
mod quick_check;
mod recompose;
#[rustfmt::skip]
mod tables;
pub mod char;
pub use crate::decompose::Decompositions;
pub use crate::quick_check::{
is_nfc, is_nfc_quick, is_nfd, is_nfd_quick, is_nfkc, is_nfkc_quick, is_nfkd, is_nfkd_quick,
IsNormalized,
};
pub use crate::recompose::Recompositions;
pub use crate::tables::UNICODE_VERSION;
use crate::decompose::Kind;
pub trait UnicodeNormalization<I: Iterator<Item = char>> {
fn nfd(self) -> Decompositions<I>;
fn nfkd(self) -> Decompositions<I>;
fn nfc(self) -> Recompositions<I>;
fn nfkc(self) -> Recompositions<I>;
}
impl<'a> UnicodeNormalization<core::str::Chars<'a>> for &'a str {
fn nfd(self) -> Decompositions<core::str::Chars<'a>> {
Decompositions::new(self.chars(), Kind::Canonical)
}
fn nfkd(self) -> Decompositions<core::str::Chars<'a>> {
Decompositions::new(self.chars(), Kind::Compatible)
}
fn nfc(self) -> Recompositions<core::str::Chars<'a>> {
Recompositions::new(self.nfd())
}
fn nfkc(self) -> Recompositions<core::str::Chars<'a>> {
Recompositions::new(self.nfkd())
}
}
impl<I: Iterator<Item = char>> UnicodeNormalization<I> for I {
fn nfd(self) -> Decompositions<I> {
Decompositions::new(self, Kind::Canonical)
}
fn nfkd(self) -> Decompositions<I> {
Decompositions::new(self, Kind::Compatible)
}
fn nfc(self) -> Recompositions<I> {
Recompositions::new(self.nfd())
}
fn nfkc(self) -> Recompositions<I> {
Recompositions::new(self.nfkd())
}
}