fmtastic

A fantastic crate for formatting numbers using the appropriate unicode characters

UNLICENSE License

Downloads
3.1K
Stars
10

fmtastic ✨

A fantastic, #![no_std]-friendly crate for fmting numbers using the appropriate unicode characters via the Display trait. ✨ Format as vulgar fractions, super- and subscript and more.

Contributions are welcome for more formats.

Features

Vulgar Fractions

Creates beautiful unicode fractions like ¼ or ¹⁰⁄₃.

use fmtastic::VulgarFraction;

assert_eq!("¹⁰⁄₃", format!("{}", VulgarFraction::new(10, 3)));
assert_eq!("¼", format!("{}", VulgarFraction::new(1, 4)));

Sub- and superscript

Formats integers as sub- or superscript.

use fmtastic::{Subscript, Superscript};

assert_eq!("x₁", format!("x{}", Subscript(1)));
assert_eq!("", format!("n{}", Superscript(2)));

Roman Numerals

Formats unsigned integers as Roman numerals.

use fmtastic::Roman;

assert_eq!("ⅾⅽⅽⅼⅹⅹⅹⅰⅹ", format!("{:#}", Roman::new(789_u16).unwrap())); // lowercase
assert_eq!("ⅯⅯⅩⅩⅠⅤ", format!("{}", Roman::new(2024_u16).unwrap()));
assert_eq!("MMXXIV", format!("{}", Roman::new(2024_u16).unwrap().ascii())); // ascii
assert_eq!("ⅠⅠⅠ", format!("{}", Roman::from(3_u8))); // u8's can always be formatted as Roman numeral

Seven-Segment Digits

Formats an unsigned integer using seven-segment digits from the Legacy Computing block.

use fmtastic::Segmented;

assert_eq!("🯶🯲🯸", format!("{}", Segmented(628_u32)));

Tally Marks

Formats an unsigned integer as tally marks.

use fmtastic::TallyMarks;

assert_eq!("𝍷𝍷𝍷", TallyMarks(3_u32).to_string());
assert_eq!("𝍸𝍸𝍷𝍷", TallyMarks(12_u32).to_string());

Ballot Box

Formats a boolean as a ballot box.

use fmtastic::BallotBox;

assert_eq!("☑ Buy bread", format!("{} Buy bread", BallotBox(true)));
assert_eq!("☐ Do the dishes", format!("{} Do the dishes", BallotBox(false)));
assert_eq!("☒ Laundry", format!("{:#} Laundry", BallotBox(true)));

Docs

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 multi-licensed as above, without any additional terms or conditions.