Update 2.0

Changes to formatting system

Create a formatting struct and then pass it to the
to_text macro or the
to_text_fmt function to format the strings accordingly
Updated docs for the new version
This commit is contained in:
Uttarayan Mondal
2021-03-08 23:40:19 +05:30
parent 89e4ee1442
commit cc82c47628
34 changed files with 932 additions and 392 deletions
+21 -56
View File
@@ -1,74 +1,39 @@
//!```rust
//!extern crate ntext;
//!use ntext::digit_to_text;
//!fn main() {
//! println!("{}",digit_to_text(1).unwrap());
//! assert_eq!("two",digit_to_text(2).unwrap());
//! assert_ne!("five",digit_to_text(8).unwrap());
//!}
//!```
//! However giving the program a zero will return an empty string.
//!
//! Example program with default formatting
//!```rust
//!extern crate ntext;
//!use ntext::to_text;
//!fn main() {
//! println!("{}",to_text!(1312));
//! assert_eq!(to_text!(1312),"onethousandthreehundredtwelve");
//! println!("{}",to_text!(7123));
//! assert_eq!(to_text!(7123," "),"seven thousand one hundred twenty three");
//! assert_eq!(to_text!(7123),"Seven Thousand,One Hundred,Twenty-Three");
//! assert_eq!(to_text!(1000),"One Thousand");
//!}
//!```
//! Example program with custom formatting
//!
//!```rust
//!extern crate ntext;
//!use ntext::{Formatting,to_text};
//!fn main() {
//! assert_eq!(to_text!(1000, &Formatting::none().capitalize()),"OneThousand");
//! assert_eq!(to_text!(34123, &Formatting::with_seperator("#").capitalize()),"Thirty#Four#Thousand#One#Hundred#Twenty#Three");
//!}
//!```
//! This macro will also return an empty string on input zero
//! You can also create the Formatting struct manually
mod no_seperator;
mod seperator;
mod formatting;
mod numtext;
mod test;
pub use no_seperator::to_text_no_seperator;
pub use seperator::to_text_with_seperator;
/// Convert digit to words in a string.
pub fn digit_to_text(digit: u8) -> Option<String> {
match digit {
0 => Some("".to_string()),
1 => Some("one".to_string()),
2 => Some("two".to_string()),
3 => Some("three".to_string()),
4 => Some("four".to_string()),
5 => Some("five".to_string()),
6 => Some("six".to_string()),
7 => Some("seven".to_string()),
8 => Some("eight".to_string()),
9 => Some("nine".to_string()),
_ => None,
}
}
fn place_value(number: u8, place: u8, seperator: Option<&str>) -> Option<String> {
let mut buffer = digit_to_text(number).unwrap();
if let Some(sep) = seperator {
if number != 0 {
buffer.push_str(sep)
}
}
match place {
1 => (),
2 => (), //This should never happen as 2 is included in the tens_place_holders
3 => buffer.push_str("hundred"),
4 => buffer.push_str("thousand"),
5 => (), // Souldn't happen
6 => buffer.push_str("million"),
_ => (),
};
Some(buffer)
}
pub use formatting::Formatting;
pub use numtext::{digit_to_text, to_text_fmt};
/// Macro which supports both seperator and without it
#[macro_export]
macro_rules! to_text {
($number:expr) => {
ntext::to_text_no_seperator($number);
ntext::to_text_fmt($number, &ntext::Formatting::default());
};
($number:expr, $seperator:expr) => {
ntext::to_text_with_seperator($number, $seperator);
($number:expr, $formatting:expr) => {
ntext::to_text_fmt($number, $formatting);
};
}