#![forbid(unsafe_code)]
#![warn(missing_docs)]
pub mod casemap;
pub mod collate;
pub mod datetime;
#[cfg(feature = "fonts")]
pub mod font_select;
pub mod list;
pub mod normalize;
pub mod number;
pub mod plural;
pub mod properties;
pub mod segment;
pub use casemap::CaseMapper;
pub use collate::{CollateError, CollationStrength, IcuCollator};
pub use datetime::{DateLength, IcuDateTimeFormatter, TimeLength};
#[cfg(feature = "fonts")]
pub use font_select::LocaleFontSelector;
pub type IcuError = CollateError;
pub use list::{IcuListFormatter, ListType};
pub use normalize::{NormalizationForm, Normalizer};
pub use number::IcuNumberFormatter;
pub use plural::{IcuPluralRules, PluralCategory};
pub use properties::{CharProperties, ScriptRun, TextScript};
pub use segment::{IcuSegmenter, Segment, SegmentIter, SegmentKind};
pub fn cldr_line_breaks(text: &str) -> Vec<usize> {
IcuSegmenter::new().line_break_opportunities(text)
}
#[cfg(test)]
mod tests {
#[test]
fn test_icu_data_size_report() {
use icu_segmenter::options::LineBreakOptions;
use icu_segmenter::LineSegmenter;
let seg = LineSegmenter::new_auto(LineBreakOptions::default());
let breaks: Vec<usize> = seg.segment_str("Hello World").collect();
assert!(
!breaks.is_empty(),
"ICU LineSegmenter must produce break points"
);
eprintln!("ICU compiled data initialized successfully");
eprintln!("Break count for 'Hello World': {}", breaks.len());
eprintln!("Note: ICU4X compiled_data can add 5-15 MB to binary size.");
eprintln!("Use icu_provider_blob to load data at runtime and reduce binary size.");
}
#[test]
fn test_icu_segmenter_initializes() {
use icu_segmenter::options::LineBreakOptions;
use icu_segmenter::LineSegmenter;
let seg = LineSegmenter::new_auto(LineBreakOptions::default());
let breaks: Vec<usize> = seg.segment_str("Hello World").collect();
assert!(!breaks.is_empty());
}
#[test]
fn test_icu_word_segmenter_initializes() {
use icu_segmenter::options::WordBreakInvariantOptions;
use icu_segmenter::WordSegmenter;
let seg = WordSegmenter::new_auto(WordBreakInvariantOptions::default());
let breaks: Vec<usize> = seg.segment_str("Hello World").collect();
assert!(!breaks.is_empty());
}
}