unicode_normalization_alignments/
lib.rs1#![deny(missing_docs, unsafe_code)]
41#![doc(
42 html_logo_url = "https://unicode-rs.github.io/unicode-rs_sm.png",
43 html_favicon_url = "https://unicode-rs.github.io/unicode-rs_sm.png"
44)]
45
46extern crate smallvec;
47
48pub use decompose::Decompositions;
49pub use quick_check::{
50 is_nfc, is_nfc_quick, is_nfc_stream_safe, is_nfc_stream_safe_quick, is_nfd, is_nfd_quick,
51 is_nfd_stream_safe, is_nfd_stream_safe_quick, is_nfkc, is_nfkc_quick, is_nfkd, is_nfkd_quick,
52 IsNormalized,
53};
54pub use recompose::Recompositions;
55use std::str::Chars;
56pub use stream_safe::StreamSafe;
57pub use tables::UNICODE_VERSION;
58
59mod decompose;
60mod lookups;
61mod normalize;
62mod perfect_hash;
63mod quick_check;
64mod recompose;
65mod stream_safe;
66mod tables;
67
68#[doc(hidden)]
69pub mod __test_api;
70#[cfg(test)]
71mod test;
72
73pub mod char {
75 pub use normalize::{compose, decompose_canonical, decompose_compatible};
76
77 pub use lookups::{canonical_combining_class, is_combining_mark};
78}
79
80pub trait UnicodeNormalization<I: Iterator<Item = char>> {
84 #[inline]
87 fn nfd(self) -> Decompositions<I>;
88
89 #[inline]
92 fn nfkd(self) -> Decompositions<I>;
93
94 #[inline]
97 fn nfc(self) -> Recompositions<I>;
98
99 #[inline]
102 fn nfkc(self) -> Recompositions<I>;
103
104 #[inline]
107 fn stream_safe(self) -> StreamSafe<I>;
108}
109
110impl<'a> UnicodeNormalization<Chars<'a>> for &'a str {
111 #[inline]
112 fn nfd(self) -> Decompositions<Chars<'a>> {
113 decompose::new_canonical(self.chars())
114 }
115
116 #[inline]
117 fn nfkd(self) -> Decompositions<Chars<'a>> {
118 decompose::new_compatible(self.chars())
119 }
120
121 #[inline]
122 fn nfc(self) -> Recompositions<Chars<'a>> {
123 recompose::new_canonical(self.chars())
124 }
125
126 #[inline]
127 fn nfkc(self) -> Recompositions<Chars<'a>> {
128 recompose::new_compatible(self.chars())
129 }
130
131 #[inline]
132 fn stream_safe(self) -> StreamSafe<Chars<'a>> {
133 StreamSafe::new(self.chars())
134 }
135}
136
137impl<I: Iterator<Item = char>> UnicodeNormalization<I> for I {
138 #[inline]
139 fn nfd(self) -> Decompositions<I> {
140 decompose::new_canonical(self)
141 }
142
143 #[inline]
144 fn nfkd(self) -> Decompositions<I> {
145 decompose::new_compatible(self)
146 }
147
148 #[inline]
149 fn nfc(self) -> Recompositions<I> {
150 recompose::new_canonical(self)
151 }
152
153 #[inline]
154 fn nfkc(self) -> Recompositions<I> {
155 recompose::new_compatible(self)
156 }
157
158 #[inline]
159 fn stream_safe(self) -> StreamSafe<I> {
160 StreamSafe::new(self)
161 }
162}