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
+1
View File
@@ -1,2 +1,3 @@
/target
Cargo.lock
index.html
+1 -3
View File
@@ -1,9 +1,7 @@
[package]
name = "ntext"
version = "0.1.2"
version = "0.2.0"
authors = ["Uttarayan Mondal <uttarayan21@gmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
+1 -1
View File
@@ -2,7 +2,7 @@
Documentation of [ntext-rs](https://uttarayan21.github.io/ntext-rs) generated by cargo doc.
A rust library to get numbers (u32) as words
A rust library to get numbers (usize) as words
`12345 ` -> `twelvethousandthreehundredfortyfive`
@@ -0,0 +1,3 @@
(function() {var implementors = {};
implementors["ntext"] = [{"text":"impl&lt;'format&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"struct\" href=\"ntext/struct.Formatting.html\" title=\"struct ntext::Formatting\">Formatting</a>&lt;'format&gt;","synthetic":false,"types":["ntext::formatting::Formatting"]}];
if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
@@ -0,0 +1,3 @@
(function() {var implementors = {};
implementors["ntext"] = [{"text":"impl&lt;'format&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a> for <a class=\"struct\" href=\"ntext/struct.Formatting.html\" title=\"struct ntext::Formatting\">Formatting</a>&lt;'format&gt;","synthetic":false,"types":["ntext::formatting::Formatting"]}];
if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
@@ -0,0 +1,3 @@
(function() {var implementors = {};
implementors["ntext"] = [{"text":"impl&lt;'format&gt; Freeze for <a class=\"struct\" href=\"ntext/struct.Formatting.html\" title=\"struct ntext::Formatting\">Formatting</a>&lt;'format&gt;","synthetic":true,"types":["ntext::formatting::Formatting"]}];
if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
@@ -0,0 +1,3 @@
(function() {var implementors = {};
implementors["ntext"] = [{"text":"impl&lt;'format&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"ntext/struct.Formatting.html\" title=\"struct ntext::Formatting\">Formatting</a>&lt;'format&gt;","synthetic":true,"types":["ntext::formatting::Formatting"]}];
if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
@@ -0,0 +1,3 @@
(function() {var implementors = {};
implementors["ntext"] = [{"text":"impl&lt;'format&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"ntext/struct.Formatting.html\" title=\"struct ntext::Formatting\">Formatting</a>&lt;'format&gt;","synthetic":true,"types":["ntext::formatting::Formatting"]}];
if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
@@ -0,0 +1,3 @@
(function() {var implementors = {};
implementors["ntext"] = [{"text":"impl&lt;'format&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"ntext/struct.Formatting.html\" title=\"struct ntext::Formatting\">Formatting</a>&lt;'format&gt;","synthetic":true,"types":["ntext::formatting::Formatting"]}];
if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
@@ -0,0 +1,3 @@
(function() {var implementors = {};
implementors["ntext"] = [{"text":"impl&lt;'format&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/std/panic/trait.RefUnwindSafe.html\" title=\"trait std::panic::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"ntext/struct.Formatting.html\" title=\"struct ntext::Formatting\">Formatting</a>&lt;'format&gt;","synthetic":true,"types":["ntext::formatting::Formatting"]}];
if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
@@ -0,0 +1,3 @@
(function() {var implementors = {};
implementors["ntext"] = [{"text":"impl&lt;'format&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/std/panic/trait.UnwindSafe.html\" title=\"trait std::panic::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"ntext/struct.Formatting.html\" title=\"struct ntext::Formatting\">Formatting</a>&lt;'format&gt;","synthetic":true,"types":["ntext::formatting::Formatting"]}];
if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
+2 -2
View File
@@ -1,7 +1,7 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><meta name="keywords" content="rust, rustlang, rust-lang"><title>List of all items in this crate</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../ntext/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><p class="location">Crate ntext</p><div class="block version"><p>Version 0.1.2</p></div><a id="all-types" href="index.html"><p>Back to index</p></a></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../ntext/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><p class="location">Crate ntext</p><div class="block version"><p>Version 0.2.0</p></div><a id="all-types" href="index.html"><p>Back to index</p></a></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">List of all items</span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span>
</span>
<span class="in-band">List of all items</span></h1><h3 id="Macros">Macros</h3><ul class="macros docblock"><li><a href="macro.to_text.html">to_text</a></li></ul><h3 id="Functions">Functions</h3><ul class="functions docblock"><li><a href="fn.digit_to_text.html">digit_to_text</a></li><li><a href="fn.to_text_no_seperator.html">to_text_no_seperator</a></li><li><a href="fn.to_text_with_seperator.html">to_text_with_seperator</a></li></ul></section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="ntext"></div>
<span class="in-band">List of all items</span></h1><h3 id="Structs">Structs</h3><ul class="structs docblock"><li><a href="struct.Formatting.html">Formatting</a></li></ul><h3 id="Macros">Macros</h3><ul class="macros docblock"><li><a href="macro.to_text.html">to_text</a></li></ul><h3 id="Functions">Functions</h3><ul class="functions docblock"><li><a href="fn.digit_to_text.html">digit_to_text</a></li><li><a href="fn.to_text_fmt.html">to_text_fmt</a></li></ul></section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="ntext"></div>
<script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+1 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Convert digit to words in a string."><meta name="keywords" content="rust, rustlang, rust-lang, digit_to_text"><title>ntext::digit_to_text - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc fn"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../ntext/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">ntext</a></p><div id="sidebar-vars" data-name="digit_to_text" data-ty="fn" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Function <a href="index.html">ntext</a>::<wbr><a class="fn" href="">digit_to_text</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/ntext/lib.rs.html#31-45" title="goto source code">[src]</a></span></h1><pre class="rust fn">pub fn digit_to_text(digit: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;</pre><div class="docblock"><p>Convert digit to words in a string.</p>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Function <a href="index.html">ntext</a>::<wbr><a class="fn" href="">digit_to_text</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/ntext/numtext.rs.html#4-34" title="goto source code">[src]</a></span></h1><pre class="rust fn">pub fn digit_to_text(digit: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>, capitalize: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;</pre><div class="docblock"><p>Convert digit to words in a string.</p>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="ntext"></div>
<script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+6
View File
@@ -0,0 +1,6 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Convert usize to words in a string seperated by a seperator."><meta name="keywords" content="rust, rustlang, rust-lang, to_text_fmt"><title>ntext::to_text_fmt - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc fn"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../ntext/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">ntext</a></p><div id="sidebar-vars" data-name="to_text_fmt" data-ty="fn" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Function <a href="index.html">ntext</a>::<wbr><a class="fn" href="">to_text_fmt</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/ntext/numtext.rs.html#139-177" title="goto source code">[src]</a></span></h1><pre class="rust fn">pub fn to_text_fmt(number: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, fmt: &amp;<a class="struct" href="../ntext/struct.Formatting.html" title="struct ntext::Formatting">Formatting</a>&lt;'_&gt;) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a></pre><div class="docblock"><p>Convert usize to words in a string seperated by a seperator.</p>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="ntext"></div>
<script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=../../ntext/struct.Formatting.html">
</head>
<body>
<p>Redirecting to <a href="../../ntext/struct.Formatting.html">../../ntext/struct.Formatting.html</a>...</p>
<script>location.replace("../../ntext/struct.Formatting.html" + location.search + location.hash);</script>
</body>
</html>
+19 -19
View File
@@ -1,32 +1,32 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content=""><meta name="keywords" content="rust, rustlang, rust-lang, ntext"><title>ntext - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Example program with default formatting"><meta name="keywords" content="rust, rustlang, rust-lang, ntext"><title>ntext - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../ntext/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><p class="location">Crate ntext</p><div class="block version"><p>Version 0.1.2</p></div><div class="sidebar-elems"><a id="all-types" href="all.html"><p>See all ntext's items</p></a><div class="block items"><ul><li><a href="#macros">Macros</a></li><li><a href="#functions">Functions</a></li></ul></div><p class="location"></p><div id="sidebar-vars" data-name="ntext" data-ty="mod" data-relpath="../"></div></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Crate <a class="mod" href="">ntext</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/ntext/lib.rs.html#1-74" title="goto source code">[src]</a></span></h1><div class="docblock">
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">ntext</span>;
<span class="kw">use</span> <span class="ident">ntext</span>::<span class="ident">digit_to_text</span>;
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{}&quot;</span>,<span class="ident">digit_to_text</span>(<span class="number">1</span>).<span class="ident">unwrap</span>());
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="string">&quot;two&quot;</span>,<span class="ident">digit_to_text</span>(<span class="number">2</span>).<span class="ident">unwrap</span>());
<span class="macro">assert_ne</span><span class="macro">!</span>(<span class="string">&quot;five&quot;</span>,<span class="ident">digit_to_text</span>(<span class="number">8</span>).<span class="ident">unwrap</span>());
}</pre></div>
<p>However giving the program a zero will return an empty string.</p>
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../ntext/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><p class="location">Crate ntext</p><div class="block version"><p>Version 0.2.0</p></div><div class="sidebar-elems"><a id="all-types" href="all.html"><p>See all ntext's items</p></a><div class="block items"><ul><li><a href="#macros">Macros</a></li><li><a href="#structs">Structs</a></li><li><a href="#functions">Functions</a></li></ul></div><p class="location"></p><div id="sidebar-vars" data-name="ntext" data-ty="mod" data-relpath="../"></div></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Crate <a class="mod" href="">ntext</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/ntext/lib.rs.html#1-39" title="goto source code">[src]</a></span></h1><div class="docblock"><p>Example program with default formatting</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">ntext</span>;
<span class="kw">use</span> <span class="ident">ntext</span>::<span class="ident">to_text</span>;
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{}&quot;</span>,<span class="macro">to_text</span><span class="macro">!</span>(<span class="number">1312</span>));
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">to_text</span><span class="macro">!</span>(<span class="number">1312</span>),<span class="string">&quot;onethousandthreehundredtwelve&quot;</span>);
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{}&quot;</span>,<span class="macro">to_text</span><span class="macro">!</span>(<span class="number">7123</span>));
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">to_text</span><span class="macro">!</span>(<span class="number">7123</span>,<span class="string">&quot; &quot;</span>),<span class="string">&quot;seven thousand one hundred twenty three&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">to_text</span><span class="macro">!</span>(<span class="number">7123</span>),<span class="string">&quot;Seven Thousand,One Hundred,Twenty-Three&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">to_text</span><span class="macro">!</span>(<span class="number">1000</span>),<span class="string">&quot;One Thousand&quot;</span>);
}</pre></div>
<p>This macro will also return an empty string on input zero</p>
<p>Example program with custom formatting</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">ntext</span>;
<span class="kw">use</span> <span class="ident">ntext</span>::{<span class="ident">Formatting</span>,<span class="ident">to_text</span>};
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">to_text</span><span class="macro">!</span>(<span class="number">1000</span>, <span class="kw-2">&amp;</span><span class="ident">Formatting</span>::<span class="ident">none</span>().<span class="ident">capitalize</span>()),<span class="string">&quot;OneThousand&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">to_text</span><span class="macro">!</span>(<span class="number">34123</span>, <span class="kw-2">&amp;</span><span class="ident">Formatting</span>::<span class="ident">with_seperator</span>(<span class="string">&quot;#&quot;</span>).<span class="ident">capitalize</span>()),<span class="string">&quot;Thirty#Four#Thousand#One#Hundred#Twenty#Three&quot;</span>);
}</pre></div>
<p>This macro will also return an empty string on input zero
You can also create the Formatting struct manually</p>
</div><h2 id="macros" class="section-header"><a href="#macros">Macros</a></h2>
<table><tr class="module-item"><td><a class="macro" href="macro.to_text.html" title="ntext::to_text macro">to_text</a></td><td class="docblock-short"><p>Macro which supports both seperator and without it</p>
</td></tr></table><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
<table><tr class="module-item"><td><a class="struct" href="struct.Formatting.html" title="ntext::Formatting struct">Formatting</a></td><td class="docblock-short"><p>Set the formatting of the output </p>
</td></tr></table><h2 id="functions" class="section-header"><a href="#functions">Functions</a></h2>
<table><tr class="module-item"><td><a class="fn" href="fn.digit_to_text.html" title="ntext::digit_to_text fn">digit_to_text</a></td><td class="docblock-short"><p>Convert digit to words in a string.</p>
</td></tr><tr class="module-item"><td><a class="fn" href="fn.to_text_no_seperator.html" title="ntext::to_text_no_seperator fn">to_text_no_seperator</a></td><td class="docblock-short"><p>Convert u32 to words in a string.</p>
</td></tr><tr class="module-item"><td><a class="fn" href="fn.to_text_with_seperator.html" title="ntext::to_text_with_seperator fn">to_text_with_seperator</a></td><td class="docblock-short"><p>Convert u32 to words in a string seperated by a seperator.</p>
</td></tr><tr class="module-item"><td><a class="fn" href="fn.to_text_fmt.html" title="ntext::to_text_fmt fn">to_text_fmt</a></td><td class="docblock-short"><p>Convert usize to words in a string seperated by a seperator.</p>
</td></tr></table></section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="ntext"></div>
<script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+2 -2
View File
@@ -1,10 +1,10 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Macro which supports both seperator and without it"><meta name="keywords" content="rust, rustlang, rust-lang, to_text"><title>ntext::to_text - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc macro"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../ntext/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">ntext</a></p><div id="sidebar-vars" data-name="to_text" data-ty="macro" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Macro <a href="index.html">ntext</a>::<wbr><a class="macro" href="">to_text</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/ntext/lib.rs.html#67-74" title="goto source code">[src]</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Macro <a href="index.html">ntext</a>::<wbr><a class="macro" href="">to_text</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/ntext/lib.rs.html#32-39" title="goto source code">[src]</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><div class="example-wrap"><pre class="rust macro">
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">to_text</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">number</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">number</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">seperator</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">number</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">formatting</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> { ... };
}</pre></div>
</div><div class="docblock"><p>Macro which supports both seperator and without it</p>
</div></section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="ntext"></div>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=../../ntext/fn.digit_to_text.html">
</head>
<body>
<p>Redirecting to <a href="../../ntext/fn.digit_to_text.html">../../ntext/fn.digit_to_text.html</a>...</p>
<script>location.replace("../../ntext/fn.digit_to_text.html" + location.search + location.hash);</script>
</body>
</html>
+10
View File
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL=../../ntext/fn.to_text_fmt.html">
</head>
<body>
<p>Redirecting to <a href="../../ntext/fn.to_text_fmt.html">../../ntext/fn.to_text_fmt.html</a>...</p>
<script>location.replace("../../ntext/fn.to_text_fmt.html" + location.search + location.hash);</script>
</body>
</html>
+1 -1
View File
@@ -1 +1 @@
initSidebarItems({"fn":[["digit_to_text","Convert digit to words in a string."],["to_text_no_seperator","Convert u32 to words in a string."],["to_text_with_seperator","Convert u32 to words in a string seperated by a seperator."]],"macro":[["to_text","Macro which supports both seperator and without it"]]});
initSidebarItems({"fn":[["digit_to_text","Convert digit to words in a string."],["to_text_fmt","Convert usize to words in a string seperated by a seperator."]],"macro":[["to_text","Macro which supports both seperator and without it"]],"struct":[["Formatting","Set the formatting of the output "]]});
+36
View File
@@ -0,0 +1,36 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Set the formatting of the output "><meta name="keywords" content="rust, rustlang, rust-lang, Formatting"><title>ntext::Formatting - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc struct"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../ntext/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><p class="location">Struct Formatting</p><div class="sidebar-elems"><div class="block items"><a class="sidebar-title" href="#fields">Fields</a><div class="sidebar-links"><a href="#structfield.capitalize">capitalize</a><a href="#structfield.digit_seperator">digit_seperator</a><a href="#structfield.place_seperator">place_seperator</a><a href="#structfield.tens_seperator">tens_seperator</a></div><a class="sidebar-title" href="#implementations">Methods</a><div class="sidebar-links"><a href="#method.capitalize">capitalize</a><a href="#method.decapitalize">decapitalize</a><a href="#method.default">default</a><a href="#method.none">none</a><a href="#method.with_seperator">with_seperator</a></div><a class="sidebar-title" href="#trait-implementations">Trait Implementations</a><div class="sidebar-links"><a href="#impl-Clone">Clone</a><a href="#impl-Copy">Copy</a></div><a class="sidebar-title" href="#synthetic-implementations">Auto Trait Implementations</a><div class="sidebar-links"><a href="#impl-RefUnwindSafe">RefUnwindSafe</a><a href="#impl-Send">Send</a><a href="#impl-Sync">Sync</a><a href="#impl-Unpin">Unpin</a><a href="#impl-UnwindSafe">UnwindSafe</a></div><a class="sidebar-title" href="#blanket-implementations">Blanket Implementations</a><div class="sidebar-links"><a href="#impl-Any">Any</a><a href="#impl-Borrow%3CT%3E">Borrow&lt;T&gt;</a><a href="#impl-BorrowMut%3CT%3E">BorrowMut&lt;T&gt;</a><a href="#impl-From%3CT%3E">From&lt;T&gt;</a><a href="#impl-Into%3CU%3E">Into&lt;U&gt;</a><a href="#impl-ToOwned">ToOwned</a><a href="#impl-TryFrom%3CU%3E">TryFrom&lt;U&gt;</a><a href="#impl-TryInto%3CU%3E">TryInto&lt;U&gt;</a></div></div><p class="location"><a href="index.html">ntext</a></p><div id="sidebar-vars" data-name="Formatting" data-ty="struct" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Struct <a href="index.html">ntext</a>::<wbr><a class="struct" href="">Formatting</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/ntext/formatting.rs.html#3-12" title="goto source code">[src]</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><pre class="rust struct">pub struct Formatting&lt;'format&gt; {
pub capitalize: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
pub digit_seperator: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;'format <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>&gt;,
pub place_seperator: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;'format <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>&gt;,
pub tens_seperator: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;'format <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>&gt;,
}</pre></div><div class="docblock"><p>Set the formatting of the output </p>
</div><h2 id="fields" class="fields small-section-header">
Fields<a href="#fields" class="anchor"></a></h2><span id="structfield.capitalize" class="structfield small-section-header"><a href="#structfield.capitalize" class="anchor field"></a><code>capitalize: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></code></span><div class="docblock"><p>capitalize the start of the word.</p>
</div><span id="structfield.digit_seperator" class="structfield small-section-header"><a href="#structfield.digit_seperator" class="anchor field"></a><code>digit_seperator: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;'format <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>&gt;</code></span><div class="docblock"><p>Set the seperator in between digits like “threehundred,twentytwo”.</p>
</div><span id="structfield.place_seperator" class="structfield small-section-header"><a href="#structfield.place_seperator" class="anchor field"></a><code>place_seperator: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;'format <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>&gt;</code></span><div class="docblock"><p>Set the seperator in between words like “three/hundred”.</p>
</div><span id="structfield.tens_seperator" class="structfield small-section-header"><a href="#structfield.tens_seperator" class="anchor field"></a><code>tens_seperator: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;'format <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>&gt;</code></span><div class="docblock"><p>Set the seperator between tens place digits like “twenty-two”.</p>
</div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor"></a></h2><h3 id="impl" class="impl"><code class="in-band">impl&lt;'format&gt; <a class="struct" href="../ntext/struct.Formatting.html" title="struct ntext::Formatting">Formatting</a>&lt;'format&gt;</code><a href="#impl" class="anchor"></a><a class="srclink" href="../src/ntext/formatting.rs.html#14-62" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.default" class="method"><code>pub fn <a href="#method.default" class="fnname">default</a>() -&gt; Self</code><a class="srclink" href="../src/ntext/formatting.rs.html#16-23" title="goto source code">[src]</a></h4><div class="docblock"><p>Get the default formatting.</p>
</div><h4 id="method.none" class="method"><code>pub fn <a href="#method.none" class="fnname">none</a>() -&gt; Self</code><a class="srclink" href="../src/ntext/formatting.rs.html#25-32" title="goto source code">[src]</a></h4><div class="docblock"><p>No formatting at all</p>
</div><h4 id="method.with_seperator" class="method"><code>pub fn <a href="#method.with_seperator" class="fnname">with_seperator</a>(seperator: &amp;'format <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>) -&gt; Self</code><a class="srclink" href="../src/ntext/formatting.rs.html#34-41" title="goto source code">[src]</a></h4><div class="docblock"><p>With same formatting for all</p>
</div><h4 id="method.capitalize" class="method"><code>pub fn <a href="#method.capitalize" class="fnname">capitalize</a>(&amp;mut self) -&gt; Self</code><a class="srclink" href="../src/ntext/formatting.rs.html#43-51" title="goto source code">[src]</a></h4><div class="docblock"><p>Capitalize the formatting</p>
</div><h4 id="method.decapitalize" class="method"><code>pub fn <a href="#method.decapitalize" class="fnname">decapitalize</a>(&amp;mut self) -&gt; Self</code><a class="srclink" href="../src/ntext/formatting.rs.html#53-61" title="goto source code">[src]</a></h4><div class="docblock"><p>Lower case the formatting struct</p>
</div></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><h3 id="impl-Clone" class="impl"><code class="in-band">impl&lt;'format&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> for <a class="struct" href="../ntext/struct.Formatting.html" title="struct ntext::Formatting">Formatting</a>&lt;'format&gt;</code><a href="#impl-Clone" class="anchor"></a><a class="srclink" href="../src/ntext/formatting.rs.html#2" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.clone" class="method hidden"><code>fn <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone" class="fnname">clone</a>(&amp;self) -&gt; <a class="struct" href="../ntext/struct.Formatting.html" title="struct ntext::Formatting">Formatting</a>&lt;'format&gt;</code><a class="srclink" href="../src/ntext/formatting.rs.html#2" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Returns a copy of the value. <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone">Read more</a></p>
</div><h4 id="method.clone_from" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from" class="fnname">clone_from</a>(&amp;mut self, source: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>Self)</code><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/clone.rs.html#128" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Performs copy-assignment from <code>source</code>. <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from">Read more</a></p>
</div></div><h3 id="impl-Copy" class="impl"><code class="in-band">impl&lt;'format&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a> for <a class="struct" href="../ntext/struct.Formatting.html" title="struct ntext::Formatting">Formatting</a>&lt;'format&gt;</code><a href="#impl-Copy" class="anchor"></a><a class="srclink" href="../src/ntext/formatting.rs.html#2" title="goto source code">[src]</a></h3><div class="impl-items"></div></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><h3 id="impl-RefUnwindSafe" class="impl"><code class="in-band">impl&lt;'format&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/std/panic/trait.RefUnwindSafe.html" title="trait std::panic::RefUnwindSafe">RefUnwindSafe</a> for <a class="struct" href="../ntext/struct.Formatting.html" title="struct ntext::Formatting">Formatting</a>&lt;'format&gt;</code><a href="#impl-RefUnwindSafe" class="anchor"></a></h3><div class="impl-items"></div><h3 id="impl-Send" class="impl"><code class="in-band">impl&lt;'format&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="struct" href="../ntext/struct.Formatting.html" title="struct ntext::Formatting">Formatting</a>&lt;'format&gt;</code><a href="#impl-Send" class="anchor"></a></h3><div class="impl-items"></div><h3 id="impl-Sync" class="impl"><code class="in-band">impl&lt;'format&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="../ntext/struct.Formatting.html" title="struct ntext::Formatting">Formatting</a>&lt;'format&gt;</code><a href="#impl-Sync" class="anchor"></a></h3><div class="impl-items"></div><h3 id="impl-Unpin" class="impl"><code class="in-band">impl&lt;'format&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="struct" href="../ntext/struct.Formatting.html" title="struct ntext::Formatting">Formatting</a>&lt;'format&gt;</code><a href="#impl-Unpin" class="anchor"></a></h3><div class="impl-items"></div><h3 id="impl-UnwindSafe" class="impl"><code class="in-band">impl&lt;'format&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/std/panic/trait.UnwindSafe.html" title="trait std::panic::UnwindSafe">UnwindSafe</a> for <a class="struct" href="../ntext/struct.Formatting.html" title="struct ntext::Formatting">Formatting</a>&lt;'format&gt;</code><a href="#impl-UnwindSafe" class="anchor"></a></h3><div class="impl-items"></div></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><h3 id="impl-Any" class="impl"><code class="in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></code><a href="#impl-Any" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#131-135" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.type_id" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id" class="fnname">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#132" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id">Read more</a></p>
</div></div><h3 id="impl-Borrow%3CT%3E" class="impl"><code class="in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></code><a href="#impl-Borrow%3CT%3E" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#207-211" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.borrow" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow" class="fnname">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>T</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#208" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></p>
</div></div><h3 id="impl-BorrowMut%3CT%3E" class="impl"><code class="in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></code><a href="#impl-BorrowMut%3CT%3E" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#214-218" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.borrow_mut" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fnname">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>T</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#215" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></p>
</div></div><h3 id="impl-From%3CT%3E" class="impl"><code class="in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for T</code><a href="#impl-From%3CT%3E" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#545-549" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.from" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from" class="fnname">from</a>(t: T) -&gt; T</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#546" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Performs the conversion.</p>
</div></div><h3 id="impl-Into%3CU%3E" class="impl"><code class="in-band">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;U&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,&nbsp;</span></code><a href="#impl-Into%3CU%3E" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#534-541" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="method.into" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into" class="fnname">into</a>(self) -&gt; U</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#538" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Performs the conversion.</p>
</div></div><h3 id="impl-ToOwned" class="impl"><code class="in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html" title="trait alloc::borrow::ToOwned">ToOwned</a> for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,&nbsp;</span></code><a href="#impl-ToOwned" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#81-93" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="associatedtype.Owned" class="type"><code>type <a href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="type">Owned</a> = T</code></h4><div class='docblock'><p>The resulting type after obtaining ownership.</p>
</div><h4 id="method.to_owned" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#tymethod.to_owned" class="fnname">to_owned</a>(&amp;self) -&gt; T</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#86" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Creates owned data from borrowed data, usually by cloning. <a href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#tymethod.to_owned">Read more</a></p>
</div><h4 id="method.clone_into" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#method.clone_into" class="fnname">clone_into</a>(&amp;self, target: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>T)</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#90" title="goto source code">[src]</a></h4><div class="item-info hidden"><div class="stab unstable"><details><summary><span class="emoji">🔬</span> This is a nightly-only experimental API. (<code>toowned_clone_into</code>)</summary><p>recently added</p>
</details></div></div><div class='docblock hidden'><p>Uses borrowed data to replace owned data, usually by cloning. <a href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#method.clone_into">Read more</a></p>
</div></div><h3 id="impl-TryFrom%3CU%3E" class="impl"><code class="in-band">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,&nbsp;</span></code><a href="#impl-TryFrom%3CU%3E" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#582-591" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="associatedtype.Error" class="type"><code>type <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" class="type">Error</a> = <a class="enum" href="https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html" title="enum core::convert::Infallible">Infallible</a></code></h4><div class='docblock'><p>The type returned in the event of a conversion error.</p>
</div><h4 id="method.try_from" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from" class="fnname">try_from</a>(value: U) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, &lt;T as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt;&gt;::<a class="type" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#588" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Performs the conversion.</p>
</div></div><h3 id="impl-TryInto%3CU%3E" class="impl"><code class="in-band">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a>&lt;U&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,&nbsp;</span></code><a href="#impl-TryInto%3CU%3E" class="anchor"></a><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#568-577" title="goto source code">[src]</a></h3><div class="impl-items"><h4 id="associatedtype.Error-1" class="type"><code>type <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error" class="type">Error</a> = &lt;U as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="type" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a></code></h4><div class='docblock'><p>The type returned in the event of a conversion error.</p>
</div><h4 id="method.try_into" class="method hidden"><code>pub fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into" class="fnname">try_into</a>(self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;U, &lt;U as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="type" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</code><a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#574" title="goto source code">[src]</a></h4><div class='docblock hidden'><p>Performs the conversion.</p>
</div></div></div></section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="ntext"></div>
<script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>
+1 -1
View File
@@ -1,4 +1,4 @@
var searchIndex = JSON.parse('{\
"ntext":{"doc":"","i":[[5,"to_text_no_seperator","ntext","Convert u32 to words in a string.",null,[[["u32",15]],["string",3]]],[5,"to_text_with_seperator","","Convert u32 to words in a string seperated by a seperator.",null,[[["u32",15],["str",15]],["string",3]]],[5,"digit_to_text","","Convert digit to words in a string.",null,[[["u8",15]],[["option",4],["string",3]]]],[14,"to_text","","Macro which supports both seperator and without it",null,null]],"p":[]}\
"ntext":{"doc":"Example program with default formatting","i":[[3,"Formatting","ntext","Set the formatting of the output ",null,null],[12,"capitalize","","capitalize the start of the word.",0,null],[12,"digit_seperator","","Set the seperator in between digits like “…",0,null],[12,"place_seperator","","Set the seperator in between words like “three/hundred…",0,null],[12,"tens_seperator","","Set the seperator between tens place digits like “…",0,null],[5,"digit_to_text","","Convert digit to words in a string.",null,[[["bool",15],["u8",15]],[["string",3],["option",4]]]],[5,"to_text_fmt","","Convert usize to words in a string seperated by a …",null,[[["usize",15],["formatting",3]],["string",3]]],[14,"to_text","","Macro which supports both seperator and without it",null,null],[11,"from","","",0,[[]]],[11,"into","","",0,[[]]],[11,"to_owned","","",0,[[]]],[11,"clone_into","","",0,[[]]],[11,"borrow","","",0,[[]]],[11,"borrow_mut","","",0,[[]]],[11,"try_from","","",0,[[],["result",4]]],[11,"try_into","","",0,[[],["result",4]]],[11,"type_id","","",0,[[],["typeid",3]]],[11,"clone","","",0,[[],["formatting",3]]],[11,"default","","Get the default formatting.",0,[[]]],[11,"none","","No formatting at all",0,[[]]],[11,"with_seperator","","With same formatting for all",0,[[["str",15]]]],[11,"capitalize","","Capitalize the formatting",0,[[]]],[11,"decapitalize","","Lower case the formatting struct",0,[[]]]],"p":[[3,"Formatting"]]}\
}');
addSearchOptions(searchIndex);initSearch(searchIndex);
+1 -1
View File
@@ -1,3 +1,3 @@
var N = null;var sourcesIndex = {};
sourcesIndex["ntext"] = {"name":"","files":["lib.rs","no_seperator.rs","seperator.rs","test.rs"]};
sourcesIndex["ntext"] = {"name":"","files":["formatting.rs","lib.rs","numtext.rs","test.rs"]};
createSourceSidebar();
+131
View File
@@ -0,0 +1,131 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/formatting.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>formatting.rs - source</title><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../ayu.css" disabled ><script id="default-settings"></script><script src="../../storage.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../favicon.svg">
<link rel="alternate icon" type="image/png" href="../../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><body class="rustdoc source"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../ntext/index.html'><div class='logo-container rust-logo'><img src='../../rust-logo.png' alt='logo'></div></a></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../../settings.html"><img src="../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><pre class="line-numbers"><span id="1"> 1</span>
<span id="2"> 2</span>
<span id="3"> 3</span>
<span id="4"> 4</span>
<span id="5"> 5</span>
<span id="6"> 6</span>
<span id="7"> 7</span>
<span id="8"> 8</span>
<span id="9"> 9</span>
<span id="10">10</span>
<span id="11">11</span>
<span id="12">12</span>
<span id="13">13</span>
<span id="14">14</span>
<span id="15">15</span>
<span id="16">16</span>
<span id="17">17</span>
<span id="18">18</span>
<span id="19">19</span>
<span id="20">20</span>
<span id="21">21</span>
<span id="22">22</span>
<span id="23">23</span>
<span id="24">24</span>
<span id="25">25</span>
<span id="26">26</span>
<span id="27">27</span>
<span id="28">28</span>
<span id="29">29</span>
<span id="30">30</span>
<span id="31">31</span>
<span id="32">32</span>
<span id="33">33</span>
<span id="34">34</span>
<span id="35">35</span>
<span id="36">36</span>
<span id="37">37</span>
<span id="38">38</span>
<span id="39">39</span>
<span id="40">40</span>
<span id="41">41</span>
<span id="42">42</span>
<span id="43">43</span>
<span id="44">44</span>
<span id="45">45</span>
<span id="46">46</span>
<span id="47">47</span>
<span id="48">48</span>
<span id="49">49</span>
<span id="50">50</span>
<span id="51">51</span>
<span id="52">52</span>
<span id="53">53</span>
<span id="54">54</span>
<span id="55">55</span>
<span id="56">56</span>
<span id="57">57</span>
<span id="58">58</span>
<span id="59">59</span>
<span id="60">60</span>
<span id="61">61</span>
<span id="62">62</span>
</pre><div class="example-wrap"><pre class="rust ">
<span class="doccomment">/// Set the formatting of the output </span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Copy</span>)]</span>
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Formatting</span><span class="op">&lt;</span><span class="lifetime">&#39;format</span><span class="op">&gt;</span> {
<span class="doccomment">/// capitalize the start of the word.</span>
<span class="kw">pub</span> <span class="ident">capitalize</span>: <span class="ident">bool</span>,
<span class="doccomment">/// Set the seperator in between digits like &quot;threehundred,twentytwo&quot;.</span>
<span class="kw">pub</span> <span class="ident">digit_seperator</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="lifetime">&#39;format</span> <span class="ident">str</span><span class="op">&gt;</span>,
<span class="doccomment">/// Set the seperator in between words like &quot;three/hundred&quot;.</span>
<span class="kw">pub</span> <span class="ident">place_seperator</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="lifetime">&#39;format</span> <span class="ident">str</span><span class="op">&gt;</span>,
<span class="doccomment">/// Set the seperator between tens place digits like &quot;twenty-two&quot;.</span>
<span class="kw">pub</span> <span class="ident">tens_seperator</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="lifetime">&#39;format</span> <span class="ident">str</span><span class="op">&gt;</span>,
}
<span class="kw">impl</span><span class="op">&lt;</span><span class="lifetime">&#39;format</span><span class="op">&gt;</span> <span class="ident">Formatting</span><span class="op">&lt;</span><span class="lifetime">&#39;format</span><span class="op">&gt;</span> {
<span class="doccomment">/// Get the default formatting.</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">default</span>() <span class="op">-</span><span class="op">&gt;</span> <span class="self">Self</span> {
<span class="self">Self</span> {
<span class="ident">capitalize</span>: <span class="bool-val">true</span>,
<span class="ident">digit_seperator</span>: <span class="prelude-val">Some</span>(<span class="string">&quot;,&quot;</span>),
<span class="ident">place_seperator</span>: <span class="prelude-val">Some</span>(<span class="string">&quot; &quot;</span>),
<span class="ident">tens_seperator</span>: <span class="prelude-val">Some</span>(<span class="string">&quot;-&quot;</span>),
}
}
<span class="doccomment">/// No formatting at all</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">none</span>() <span class="op">-</span><span class="op">&gt;</span> <span class="self">Self</span> {
<span class="self">Self</span> {
<span class="ident">capitalize</span>: <span class="bool-val">false</span>,
<span class="ident">digit_seperator</span>: <span class="prelude-val">None</span>,
<span class="ident">place_seperator</span>: <span class="prelude-val">None</span>,
<span class="ident">tens_seperator</span>: <span class="prelude-val">None</span>,
}
}
<span class="doccomment">/// With same formatting for all</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">with_seperator</span>(<span class="ident">seperator</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;format</span> <span class="ident">str</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="self">Self</span> {
<span class="self">Self</span> {
<span class="ident">capitalize</span>: <span class="bool-val">false</span>,
<span class="ident">digit_seperator</span>: <span class="prelude-val">Some</span>(<span class="ident">seperator</span>),
<span class="ident">place_seperator</span>: <span class="prelude-val">Some</span>(<span class="ident">seperator</span>),
<span class="ident">tens_seperator</span>: <span class="prelude-val">Some</span>(<span class="ident">seperator</span>),
}
}
<span class="doccomment">/// Capitalize the formatting</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">capitalize</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="self">Self</span> {
<span class="self">self</span>.<span class="ident">capitalize</span> <span class="op">=</span> <span class="bool-val">true</span>;
<span class="self">Self</span> {
<span class="ident">capitalize</span>: <span class="self">self</span>.<span class="ident">capitalize</span>,
<span class="ident">digit_seperator</span>: <span class="self">self</span>.<span class="ident">digit_seperator</span>,
<span class="ident">place_seperator</span>: <span class="self">self</span>.<span class="ident">place_seperator</span>,
<span class="ident">tens_seperator</span>: <span class="self">self</span>.<span class="ident">tens_seperator</span>,
}
}
<span class="doccomment">/// Lower case the formatting struct</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">decapitalize</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="self">Self</span> {
<span class="self">self</span>.<span class="ident">capitalize</span> <span class="op">=</span> <span class="bool-val">false</span>;
<span class="self">Self</span> {
<span class="ident">capitalize</span>: <span class="self">self</span>.<span class="ident">capitalize</span>,
<span class="ident">digit_seperator</span>: <span class="self">self</span>.<span class="ident">digit_seperator</span>,
<span class="ident">place_seperator</span>: <span class="self">self</span>.<span class="ident">place_seperator</span>,
<span class="ident">tens_seperator</span>: <span class="self">self</span>.<span class="ident">tens_seperator</span>,
}
}
}
</pre></div>
</section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../../" data-current-crate="ntext"></div>
<script src="../../main.js"></script><script src="../../source-script.js"></script><script src="../../source-files.js"></script><script defer src="../../search-index.js"></script></body></html>
+21 -91
View File
@@ -40,114 +40,44 @@
<span id="37">37</span>
<span id="38">38</span>
<span id="39">39</span>
<span id="40">40</span>
<span id="41">41</span>
<span id="42">42</span>
<span id="43">43</span>
<span id="44">44</span>
<span id="45">45</span>
<span id="46">46</span>
<span id="47">47</span>
<span id="48">48</span>
<span id="49">49</span>
<span id="50">50</span>
<span id="51">51</span>
<span id="52">52</span>
<span id="53">53</span>
<span id="54">54</span>
<span id="55">55</span>
<span id="56">56</span>
<span id="57">57</span>
<span id="58">58</span>
<span id="59">59</span>
<span id="60">60</span>
<span id="61">61</span>
<span id="62">62</span>
<span id="63">63</span>
<span id="64">64</span>
<span id="65">65</span>
<span id="66">66</span>
<span id="67">67</span>
<span id="68">68</span>
<span id="69">69</span>
<span id="70">70</span>
<span id="71">71</span>
<span id="72">72</span>
<span id="73">73</span>
<span id="74">74</span>
</pre><div class="example-wrap"><pre class="rust ">
<span class="doccomment">//!```rust</span>
<span class="doccomment">//!extern crate ntext;</span>
<span class="doccomment">//!use ntext::digit_to_text;</span>
<span class="doccomment">//!fn main() {</span>
<span class="doccomment">//! println!(&quot;{}&quot;,digit_to_text(1).unwrap());</span>
<span class="doccomment">//! assert_eq!(&quot;two&quot;,digit_to_text(2).unwrap());</span>
<span class="doccomment">//! assert_ne!(&quot;five&quot;,digit_to_text(8).unwrap());</span>
<span class="doccomment">//!}</span>
<span class="doccomment">//!```</span>
<span class="doccomment">//! However giving the program a zero will return an empty string.</span>
<span class="doccomment">//!</span>
<span class="doccomment">//! Example program with default formatting</span>
<span class="doccomment">//!```rust</span>
<span class="doccomment">//!extern crate ntext;</span>
<span class="doccomment">//!use ntext::to_text;</span>
<span class="doccomment">//!fn main() {</span>
<span class="doccomment">//! println!(&quot;{}&quot;,to_text!(1312));</span>
<span class="doccomment">//! assert_eq!(to_text!(1312),&quot;onethousandthreehundredtwelve&quot;);</span>
<span class="doccomment">//! println!(&quot;{}&quot;,to_text!(7123));</span>
<span class="doccomment">//! assert_eq!(to_text!(7123,&quot; &quot;),&quot;seven thousand one hundred twenty three&quot;);</span>
<span class="doccomment">//! assert_eq!(to_text!(7123),&quot;Seven Thousand,One Hundred,Twenty-Three&quot;);</span>
<span class="doccomment">//! assert_eq!(to_text!(1000),&quot;One Thousand&quot;);</span>
<span class="doccomment">//!}</span>
<span class="doccomment">//!```</span>
<span class="doccomment">//! Example program with custom formatting</span>
<span class="doccomment">//!</span>
<span class="doccomment">//!```rust</span>
<span class="doccomment">//!extern crate ntext;</span>
<span class="doccomment">//!use ntext::{Formatting,to_text};</span>
<span class="doccomment">//!fn main() {</span>
<span class="doccomment">//! assert_eq!(to_text!(1000, &amp;Formatting::none().capitalize()),&quot;OneThousand&quot;);</span>
<span class="doccomment">//! assert_eq!(to_text!(34123, &amp;Formatting::with_seperator(&quot;#&quot;).capitalize()),&quot;Thirty#Four#Thousand#One#Hundred#Twenty#Three&quot;);</span>
<span class="doccomment">//!}</span>
<span class="doccomment">//!```</span>
<span class="doccomment">//! This macro will also return an empty string on input zero</span>
<span class="doccomment">//! You can also create the Formatting struct manually</span>
<span class="kw">mod</span> <span class="ident">no_seperator</span>;
<span class="kw">mod</span> <span class="ident">seperator</span>;
<span class="kw">mod</span> <span class="ident">formatting</span>;
<span class="kw">mod</span> <span class="ident">numtext</span>;
<span class="kw">mod</span> <span class="ident">test</span>;
<span class="kw">pub</span> <span class="kw">use</span> <span class="ident">no_seperator</span>::<span class="ident">to_text_no_seperator</span>;
<span class="kw">pub</span> <span class="kw">use</span> <span class="ident">seperator</span>::<span class="ident">to_text_with_seperator</span>;
<span class="doccomment">/// Convert digit to words in a string.</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">digit_to_text</span>(<span class="ident">digit</span>: <span class="ident">u8</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span> {
<span class="kw">match</span> <span class="ident">digit</span> {
<span class="number">0</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">1</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;one&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">2</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;two&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">3</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;three&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">4</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;four&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">5</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;five&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">6</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;six&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">7</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;seven&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">8</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;eight&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">9</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;nine&quot;</span>.<span class="ident">to_string</span>()),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">None</span>,
}
}
<span class="kw">fn</span> <span class="ident">place_value</span>(<span class="ident">number</span>: <span class="ident">u8</span>, <span class="ident">place</span>: <span class="ident">u8</span>, <span class="ident">seperator</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="ident">str</span><span class="op">&gt;</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">buffer</span> <span class="op">=</span> <span class="ident">digit_to_text</span>(<span class="ident">number</span>).<span class="ident">unwrap</span>();
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">sep</span>) <span class="op">=</span> <span class="ident">seperator</span> {
<span class="kw">if</span> <span class="ident">number</span> <span class="op">!</span><span class="op">=</span> <span class="number">0</span> {
<span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="ident">sep</span>)
}
}
<span class="kw">match</span> <span class="ident">place</span> {
<span class="number">1</span> <span class="op">=</span><span class="op">&gt;</span> (),
<span class="number">2</span> <span class="op">=</span><span class="op">&gt;</span> (), <span class="comment">//This should never happen as 2 is included in the tens_place_holders</span>
<span class="number">3</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;hundred&quot;</span>),
<span class="number">4</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;thousand&quot;</span>),
<span class="number">5</span> <span class="op">=</span><span class="op">&gt;</span> (), <span class="comment">// Souldn&#39;t happen</span>
<span class="number">6</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;million&quot;</span>),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> (),
};
<span class="prelude-val">Some</span>(<span class="ident">buffer</span>)
}
<span class="kw">pub</span> <span class="kw">use</span> <span class="ident">formatting</span>::<span class="ident">Formatting</span>;
<span class="kw">pub</span> <span class="kw">use</span> <span class="ident">numtext</span>::{<span class="ident">digit_to_text</span>, <span class="ident">to_text_fmt</span>};
<span class="doccomment">/// Macro which supports both seperator and without it</span>
<span class="attribute">#[<span class="ident">macro_export</span>]</span>
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">to_text</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">number</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="ident">ntext</span>::<span class="ident">to_text_no_seperator</span>(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">number</span>);
<span class="ident">ntext</span>::<span class="ident">to_text_fmt</span>(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">number</span>, <span class="kw-2">&amp;</span><span class="ident">ntext</span>::<span class="ident">Formatting</span>::<span class="ident">default</span>());
};
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">number</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">seperator</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="ident">ntext</span>::<span class="ident">to_text_with_seperator</span>(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">number</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">seperator</span>);
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">number</span>:<span class="ident">expr</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">formatting</span>:<span class="ident">expr</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="ident">ntext</span>::<span class="ident">to_text_fmt</span>(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">number</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">formatting</span>);
};
}
</pre></div>
+361
View File
@@ -0,0 +1,361 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/numtext.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>numtext.rs - source</title><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../ayu.css" disabled ><script id="default-settings"></script><script src="../../storage.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../favicon.svg">
<link rel="alternate icon" type="image/png" href="../../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><body class="rustdoc source"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../ntext/index.html'><div class='logo-container rust-logo'><img src='../../rust-logo.png' alt='logo'></div></a></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../../settings.html"><img src="../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><pre class="line-numbers"><span id="1"> 1</span>
<span id="2"> 2</span>
<span id="3"> 3</span>
<span id="4"> 4</span>
<span id="5"> 5</span>
<span id="6"> 6</span>
<span id="7"> 7</span>
<span id="8"> 8</span>
<span id="9"> 9</span>
<span id="10"> 10</span>
<span id="11"> 11</span>
<span id="12"> 12</span>
<span id="13"> 13</span>
<span id="14"> 14</span>
<span id="15"> 15</span>
<span id="16"> 16</span>
<span id="17"> 17</span>
<span id="18"> 18</span>
<span id="19"> 19</span>
<span id="20"> 20</span>
<span id="21"> 21</span>
<span id="22"> 22</span>
<span id="23"> 23</span>
<span id="24"> 24</span>
<span id="25"> 25</span>
<span id="26"> 26</span>
<span id="27"> 27</span>
<span id="28"> 28</span>
<span id="29"> 29</span>
<span id="30"> 30</span>
<span id="31"> 31</span>
<span id="32"> 32</span>
<span id="33"> 33</span>
<span id="34"> 34</span>
<span id="35"> 35</span>
<span id="36"> 36</span>
<span id="37"> 37</span>
<span id="38"> 38</span>
<span id="39"> 39</span>
<span id="40"> 40</span>
<span id="41"> 41</span>
<span id="42"> 42</span>
<span id="43"> 43</span>
<span id="44"> 44</span>
<span id="45"> 45</span>
<span id="46"> 46</span>
<span id="47"> 47</span>
<span id="48"> 48</span>
<span id="49"> 49</span>
<span id="50"> 50</span>
<span id="51"> 51</span>
<span id="52"> 52</span>
<span id="53"> 53</span>
<span id="54"> 54</span>
<span id="55"> 55</span>
<span id="56"> 56</span>
<span id="57"> 57</span>
<span id="58"> 58</span>
<span id="59"> 59</span>
<span id="60"> 60</span>
<span id="61"> 61</span>
<span id="62"> 62</span>
<span id="63"> 63</span>
<span id="64"> 64</span>
<span id="65"> 65</span>
<span id="66"> 66</span>
<span id="67"> 67</span>
<span id="68"> 68</span>
<span id="69"> 69</span>
<span id="70"> 70</span>
<span id="71"> 71</span>
<span id="72"> 72</span>
<span id="73"> 73</span>
<span id="74"> 74</span>
<span id="75"> 75</span>
<span id="76"> 76</span>
<span id="77"> 77</span>
<span id="78"> 78</span>
<span id="79"> 79</span>
<span id="80"> 80</span>
<span id="81"> 81</span>
<span id="82"> 82</span>
<span id="83"> 83</span>
<span id="84"> 84</span>
<span id="85"> 85</span>
<span id="86"> 86</span>
<span id="87"> 87</span>
<span id="88"> 88</span>
<span id="89"> 89</span>
<span id="90"> 90</span>
<span id="91"> 91</span>
<span id="92"> 92</span>
<span id="93"> 93</span>
<span id="94"> 94</span>
<span id="95"> 95</span>
<span id="96"> 96</span>
<span id="97"> 97</span>
<span id="98"> 98</span>
<span id="99"> 99</span>
<span id="100">100</span>
<span id="101">101</span>
<span id="102">102</span>
<span id="103">103</span>
<span id="104">104</span>
<span id="105">105</span>
<span id="106">106</span>
<span id="107">107</span>
<span id="108">108</span>
<span id="109">109</span>
<span id="110">110</span>
<span id="111">111</span>
<span id="112">112</span>
<span id="113">113</span>
<span id="114">114</span>
<span id="115">115</span>
<span id="116">116</span>
<span id="117">117</span>
<span id="118">118</span>
<span id="119">119</span>
<span id="120">120</span>
<span id="121">121</span>
<span id="122">122</span>
<span id="123">123</span>
<span id="124">124</span>
<span id="125">125</span>
<span id="126">126</span>
<span id="127">127</span>
<span id="128">128</span>
<span id="129">129</span>
<span id="130">130</span>
<span id="131">131</span>
<span id="132">132</span>
<span id="133">133</span>
<span id="134">134</span>
<span id="135">135</span>
<span id="136">136</span>
<span id="137">137</span>
<span id="138">138</span>
<span id="139">139</span>
<span id="140">140</span>
<span id="141">141</span>
<span id="142">142</span>
<span id="143">143</span>
<span id="144">144</span>
<span id="145">145</span>
<span id="146">146</span>
<span id="147">147</span>
<span id="148">148</span>
<span id="149">149</span>
<span id="150">150</span>
<span id="151">151</span>
<span id="152">152</span>
<span id="153">153</span>
<span id="154">154</span>
<span id="155">155</span>
<span id="156">156</span>
<span id="157">157</span>
<span id="158">158</span>
<span id="159">159</span>
<span id="160">160</span>
<span id="161">161</span>
<span id="162">162</span>
<span id="163">163</span>
<span id="164">164</span>
<span id="165">165</span>
<span id="166">166</span>
<span id="167">167</span>
<span id="168">168</span>
<span id="169">169</span>
<span id="170">170</span>
<span id="171">171</span>
<span id="172">172</span>
<span id="173">173</span>
<span id="174">174</span>
<span id="175">175</span>
<span id="176">176</span>
<span id="177">177</span>
</pre><div class="example-wrap"><pre class="rust ">
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">Formatting</span>;
<span class="doccomment">/// Convert digit to words in a string.</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">digit_to_text</span>(<span class="ident">digit</span>: <span class="ident">u8</span>, <span class="ident">capitalize</span>: <span class="ident">bool</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="ident">capitalize</span> {
<span class="kw">match</span> <span class="ident">digit</span> {
<span class="number">0</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">1</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;One&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">2</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Two&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">3</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Three&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">4</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Four&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">5</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Five&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">6</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Six&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">7</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Seven&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">8</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Eight&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">9</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Nine&quot;</span>.<span class="ident">to_string</span>()),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">None</span>,
}
} <span class="kw">else</span> {
<span class="kw">match</span> <span class="ident">digit</span> {
<span class="number">0</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">1</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;one&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">2</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;two&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">3</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;three&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">4</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;four&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">5</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;five&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">6</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;six&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">7</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;seven&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">8</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;eight&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">9</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;nine&quot;</span>.<span class="ident">to_string</span>()),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">None</span>,
}
}
}
<span class="kw">fn</span> <span class="ident">place_value</span>(<span class="ident">number</span>: <span class="ident">u8</span>, <span class="ident">place</span>: <span class="ident">u8</span>, <span class="ident">fmt</span>: <span class="kw-2">&amp;</span><span class="ident">Formatting</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">buffer</span> <span class="op">=</span> <span class="ident">digit_to_text</span>(<span class="ident">number</span>, <span class="ident">fmt</span>.<span class="ident">capitalize</span>).<span class="ident">unwrap</span>();
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">sep</span>) <span class="op">=</span> <span class="ident">fmt</span>.<span class="ident">place_seperator</span> {
<span class="kw">if</span> <span class="ident">number</span> <span class="op">!</span><span class="op">=</span> <span class="number">0</span> <span class="op">&amp;&amp;</span> <span class="ident">place</span> <span class="op">!</span><span class="op">=</span> <span class="number">1</span> {
<span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="ident">sep</span>)
}
}
<span class="kw">if</span> <span class="ident">fmt</span>.<span class="ident">capitalize</span> {
<span class="kw">match</span> <span class="ident">place</span> {
<span class="number">1</span> <span class="op">=</span><span class="op">&gt;</span> (), <span class="comment">//Can happen but should return the same digit</span>
<span class="number">2</span> <span class="op">=</span><span class="op">&gt;</span> (), <span class="comment">//This should never happen as 2 is included in the tens_place_holders</span>
<span class="number">3</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;Hundred&quot;</span>),
<span class="number">4</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;Thousand&quot;</span>),
<span class="number">5</span> <span class="op">=</span><span class="op">&gt;</span> (), <span class="comment">// Souldn&#39;t happen</span>
<span class="number">6</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;Million&quot;</span>),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> (),
};
} <span class="kw">else</span> {
<span class="kw">match</span> <span class="ident">place</span> {
<span class="number">1</span> <span class="op">=</span><span class="op">&gt;</span> (), <span class="comment">//Can happen but should return the same digit</span>
<span class="number">2</span> <span class="op">=</span><span class="op">&gt;</span> (), <span class="comment">//This should never happen as 2 is included in the tens_place_holders</span>
<span class="number">3</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;hundred&quot;</span>),
<span class="number">4</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;thousand&quot;</span>),
<span class="number">5</span> <span class="op">=</span><span class="op">&gt;</span> (), <span class="comment">// Souldn&#39;t happen</span>
<span class="number">6</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;million&quot;</span>),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> (),
}
}
<span class="prelude-val">Some</span>(<span class="ident">buffer</span>)
}
<span class="kw">fn</span> <span class="ident">tens_place</span>(<span class="ident">tens</span>: <span class="ident">u8</span>, <span class="ident">ones</span>: <span class="ident">u8</span>, <span class="ident">fmt</span>: <span class="kw-2">&amp;</span><span class="ident">Formatting</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span> {
<span class="kw">match</span> <span class="ident">tens</span> {
<span class="number">0</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">digit_to_text</span>(<span class="ident">ones</span>, <span class="ident">fmt</span>.<span class="ident">capitalize</span>),
<span class="number">1</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="ident">fmt</span>.<span class="ident">capitalize</span> {
<span class="kw">match</span> <span class="ident">ones</span> {
<span class="number">0</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Ten&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">1</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Eleven&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">2</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Twelve&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">3</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Thirteen&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">4</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Fourteen&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">5</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Fifteen&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">6</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Sixteen&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">7</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Seventeen&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">8</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Eighteen&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">9</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;Nineteen&quot;</span>.<span class="ident">to_string</span>()),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">None</span>,
}
} <span class="kw">else</span> {
<span class="kw">match</span> <span class="ident">ones</span> {
<span class="number">0</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;ten&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">1</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;eleven&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">2</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;twelve&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">3</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;thirteen&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">4</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;fourteen&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">5</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;fifteen&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">6</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;sixteen&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">7</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;seventeen&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">8</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;eighteen&quot;</span>.<span class="ident">to_string</span>()),
<span class="number">9</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="string">&quot;nineteen&quot;</span>.<span class="ident">to_string</span>()),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">None</span>,
}
}
}
<span class="ident">d</span> @ <span class="number">2</span>..<span class="op">=</span><span class="number">5</span> <span class="op">|</span> <span class="ident">d</span> @ <span class="number">8</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>({
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">buffer</span> <span class="op">=</span> <span class="ident">String</span>::<span class="ident">new</span>();
<span class="kw">if</span> <span class="ident">fmt</span>.<span class="ident">capitalize</span> {
<span class="kw">match</span> <span class="ident">d</span> {
<span class="number">2</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;Twenty&quot;</span>),
<span class="number">3</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;Thirty&quot;</span>),
<span class="number">4</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;Forty&quot;</span>),
<span class="number">5</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;Fifty&quot;</span>),
<span class="number">8</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;Eighty&quot;</span>),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> (),
}
} <span class="kw">else</span> {
<span class="kw">match</span> <span class="ident">d</span> {
<span class="number">2</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;twenty&quot;</span>),
<span class="number">3</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;thirty&quot;</span>),
<span class="number">4</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;forty&quot;</span>),
<span class="number">5</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;fifty&quot;</span>),
<span class="number">8</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">&quot;eighty&quot;</span>),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> (),
}
}
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">sep</span>) <span class="op">=</span> <span class="ident">fmt</span>.<span class="ident">tens_seperator</span> {
<span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="ident">sep</span>);
}
<span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="ident">digit_to_text</span>(<span class="ident">ones</span>, <span class="ident">fmt</span>.<span class="ident">capitalize</span>).<span class="ident">unwrap</span>().<span class="ident">as_str</span>());
<span class="ident">buffer</span>
}),
<span class="ident">d</span> @ <span class="number">6</span>..<span class="op">=</span><span class="number">9</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>({
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">buffer</span> <span class="op">=</span> <span class="ident">digit_to_text</span>(<span class="ident">d</span>, <span class="ident">fmt</span>.<span class="ident">capitalize</span>).<span class="ident">unwrap</span>() <span class="op">+</span> <span class="string">&quot;ty&quot;</span>;
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">sep</span>) <span class="op">=</span> <span class="ident">fmt</span>.<span class="ident">tens_seperator</span> {
<span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="ident">sep</span>);
}
<span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="ident">digit_to_text</span>(<span class="ident">ones</span>, <span class="ident">fmt</span>.<span class="ident">capitalize</span>).<span class="ident">unwrap</span>().<span class="ident">as_str</span>());
<span class="ident">buffer</span>
}),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">None</span>,
}
}
<span class="doccomment">/// Convert usize to words in a string seperated by a seperator.</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">to_text_fmt</span>(<span class="ident">number</span>: <span class="ident">usize</span>, <span class="ident">fmt</span>: <span class="kw-2">&amp;</span><span class="ident">Formatting</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">String</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">numtext</span>: <span class="ident">String</span> <span class="op">=</span> <span class="ident">String</span>::<span class="ident">new</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">last</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span> <span class="op">=</span> <span class="prelude-val">None</span>;
<span class="kw">let</span> <span class="ident">tens_place_holders</span>: [<span class="ident">u8</span>; <span class="number">2</span>] <span class="op">=</span> [<span class="number">2</span>, <span class="number">5</span>];
<span class="kw">let</span> <span class="ident">digits</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span> <span class="op">=</span> <span class="ident">number</span>
.<span class="ident">to_string</span>()
.<span class="ident">chars</span>()
.<span class="ident">map</span>(<span class="op">|</span><span class="ident">d</span><span class="op">|</span> <span class="ident">d</span>.<span class="ident">to_digit</span>(<span class="number">10</span>).<span class="ident">unwrap</span>() <span class="kw">as</span> <span class="ident">u8</span>)
.<span class="ident">collect</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">place</span>: <span class="ident">u8</span> <span class="op">=</span> <span class="ident">digits</span>.<span class="ident">len</span>() <span class="kw">as</span> <span class="ident">u8</span>;
<span class="kw">for</span> (<span class="ident">_index</span>, <span class="ident">digit</span>) <span class="kw">in</span> <span class="ident">digits</span>.<span class="ident">iter</span>().<span class="ident">enumerate</span>() {
<span class="kw">if</span> <span class="ident">tens_place_holders</span>.<span class="ident">contains</span>(<span class="kw-2">&amp;</span><span class="ident">place</span>) {
<span class="ident">last</span> <span class="op">=</span> <span class="prelude-val">Some</span>(<span class="kw-2">*</span><span class="ident">digit</span>);
<span class="ident">place</span> <span class="op">-</span><span class="op">=</span> <span class="number">1</span>;
<span class="kw">continue</span>;
}
<span class="kw">if</span> <span class="kw-2">*</span><span class="ident">digit</span> <span class="op">!</span><span class="op">=</span> <span class="number">0</span> <span class="op">&amp;&amp;</span> <span class="ident">place</span> <span class="op">!</span><span class="op">=</span> <span class="ident">digits</span>.<span class="ident">len</span>() <span class="kw">as</span> <span class="ident">u8</span> <span class="op">&amp;&amp;</span> <span class="ident">numtext</span> <span class="op">!</span><span class="op">=</span> <span class="string">&quot;&quot;</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">sep</span>) <span class="op">=</span> <span class="ident">fmt</span>.<span class="ident">digit_seperator</span> {
<span class="ident">numtext</span>.<span class="ident">push_str</span>(<span class="ident">sep</span>);
}
}
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">last_digit</span>) <span class="op">=</span> <span class="ident">last</span> {
<span class="ident">numtext</span>.<span class="ident">push_str</span>(<span class="ident">tens_place</span>(<span class="ident">last_digit</span>, <span class="kw-2">*</span><span class="ident">digit</span>, <span class="ident">fmt</span>).<span class="ident">unwrap</span>().<span class="ident">as_str</span>());
<span class="kw">if</span> <span class="ident">place</span> <span class="op">&gt;</span> <span class="number">2</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">sep</span>) <span class="op">=</span> <span class="ident">fmt</span>.<span class="ident">digit_seperator</span> {
<span class="ident">numtext</span>.<span class="ident">push_str</span>(<span class="ident">sep</span>);
}
<span class="ident">numtext</span>.<span class="ident">push_str</span>(<span class="ident">place_value</span>(<span class="number">0</span>, <span class="ident">place</span>, <span class="ident">fmt</span>).<span class="ident">unwrap</span>().<span class="ident">as_str</span>());
}
<span class="ident">last</span> <span class="op">=</span> <span class="prelude-val">None</span>;
} <span class="kw">else</span> <span class="kw">if</span> <span class="kw-2">*</span><span class="ident">digit</span> <span class="op">!</span><span class="op">=</span> <span class="number">0</span> {
<span class="ident">numtext</span>.<span class="ident">push_str</span>(<span class="ident">place_value</span>(<span class="kw-2">*</span><span class="ident">digit</span>, <span class="ident">place</span>, <span class="ident">fmt</span>).<span class="ident">unwrap</span>().<span class="ident">as_str</span>());
}
<span class="ident">place</span> <span class="op">-</span><span class="op">=</span> <span class="number">1</span>;
}
<span class="ident">numtext</span>
}
</pre></div>
</section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../../" data-current-crate="ntext"></div>
<script src="../../main.js"></script><script src="../../source-script.js"></script><script src="../../source-files.js"></script><script defer src="../../search-index.js"></script></body></html>
+1 -1
View File
@@ -90,7 +90,7 @@
</pre><div class="example-wrap"><pre class="rust ">
<span class="kw">use</span> <span class="kw">crate</span>::{<span class="ident">digit_to_text</span>, <span class="ident">place_value</span>};
<span class="kw">fn</span> <span class="ident">tens_place_seperator</span>(<span class="ident">tens</span>: <span class="ident">u8</span>, <span class="ident">ones</span>: <span class="ident">u8</span>, <span class="ident">seperator</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span> {
<span class="kw">fn</span> <span class="ident">tens_place</span>(<span class="ident">tens</span>: <span class="ident">u8</span>, <span class="ident">ones</span>: <span class="ident">u8</span>, <span class="ident">seperator</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span> {
<span class="kw">match</span> <span class="ident">tens</span> {
<span class="number">0</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">digit_to_text</span>(<span class="ident">ones</span>),
<span class="number">1</span> <span class="op">=</span><span class="op">&gt;</span> <span class="kw">match</span> <span class="ident">ones</span> {
+16 -32
View File
@@ -29,49 +29,33 @@
<span id="26">26</span>
<span id="27">27</span>
<span id="28">28</span>
<span id="29">29</span>
<span id="30">30</span>
<span id="31">31</span>
<span id="32">32</span>
<span id="33">33</span>
<span id="34">34</span>
<span id="35">35</span>
<span id="36">36</span>
</pre><div class="example-wrap"><pre class="rust ">
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
<span class="kw">mod</span> <span class="ident">tests</span> {
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">digits</span>() {
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">digit_to_text</span>;
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">digit_to_text</span>(<span class="number">9</span>).<span class="ident">unwrap</span>(), <span class="string">&quot;nine&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">digit_to_text</span>(<span class="number">3</span>).<span class="ident">unwrap</span>(), <span class="string">&quot;three&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">digit_to_text</span>(<span class="number">7</span>).<span class="ident">unwrap</span>(), <span class="string">&quot;seven&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">digit_to_text</span>(<span class="number">5</span>).<span class="ident">unwrap</span>(), <span class="string">&quot;five&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">digit_to_text</span>(<span class="number">9</span>, <span class="bool-val">false</span>).<span class="ident">unwrap</span>(), <span class="string">&quot;nine&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">digit_to_text</span>(<span class="number">3</span>, <span class="bool-val">false</span>).<span class="ident">unwrap</span>(), <span class="string">&quot;three&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">digit_to_text</span>(<span class="number">7</span>, <span class="bool-val">false</span>).<span class="ident">unwrap</span>(), <span class="string">&quot;seven&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">digit_to_text</span>(<span class="number">5</span>, <span class="bool-val">false</span>).<span class="ident">unwrap</span>(), <span class="string">&quot;five&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">digit_to_text</span>(<span class="number">5</span>, <span class="bool-val">true</span>).<span class="ident">unwrap</span>(), <span class="string">&quot;Five&quot;</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">numbers</span>() {
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">to_text_no_seperator</span> <span class="kw">as</span> <span class="ident">to_text</span>;
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">1</span>), <span class="string">&quot;one&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">10</span>), <span class="string">&quot;ten&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">100</span>), <span class="string">&quot;onehundred&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">1000</span>), <span class="string">&quot;onethousand&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">12345</span>), <span class="string">&quot;twelvethousandthreehundredfortyfive&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">81123</span>), <span class="string">&quot;eightyonethousandonehundredtwentythree&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">12</span>), <span class="string">&quot;twelve&quot;</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">numbers_seperator</span>() {
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">to_text_with_seperator</span> <span class="kw">as</span> <span class="ident">to_text</span>;
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">103</span>, <span class="string">&quot;/&quot;</span>), <span class="string">&quot;one/hundred/three&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">1000</span>, <span class="string">&quot;/&quot;</span>), <span class="string">&quot;one/thousand&quot;</span>);
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">to_text_fmt</span> <span class="kw">as</span> <span class="ident">to_text</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">Formatting</span>;
<span class="kw">let</span> <span class="ident">fmt</span> <span class="op">=</span> <span class="kw-2">&amp;</span><span class="ident">Formatting</span>::<span class="ident">none</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">1</span>, <span class="ident">fmt</span>), <span class="string">&quot;one&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">10</span>, <span class="ident">fmt</span>), <span class="string">&quot;ten&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">100</span>, <span class="ident">fmt</span>), <span class="string">&quot;onehundred&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">1000</span>, <span class="ident">fmt</span>), <span class="string">&quot;onethousand&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">12345</span>, <span class="ident">fmt</span>), <span class="string">&quot;twelvethousandthreehundredfortyfive&quot;</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(
<span class="ident">to_text</span>(<span class="number">12345</span>, <span class="string">&quot;/&quot;</span>),
<span class="string">&quot;twelve/thousand/three/hundred/forty/five&quot;</span>
);
<span class="macro">assert_eq</span><span class="macro">!</span>(
<span class="ident">to_text</span>(<span class="number">651243</span>, <span class="string">&quot;/&quot;</span>),
<span class="string">&quot;six/million/fifty/one/thousand/two/hundred/forty/three&quot;</span>
<span class="ident">to_text</span>(<span class="number">81123</span>, <span class="ident">fmt</span>),
<span class="string">&quot;eightyonethousandonehundredtwentythree&quot;</span>
);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">to_text</span>(<span class="number">12</span>, <span class="ident">fmt</span>), <span class="string">&quot;twelve&quot;</span>);
}
}
</pre></div>
+62
View File
@@ -0,0 +1,62 @@
/// Set the formatting of the output
#[derive(Clone, Copy)]
pub struct Formatting<'format> {
/// capitalize the start of the word.
pub capitalize: bool,
/// Set the seperator in between digits like "threehundred,twentytwo".
pub digit_seperator: Option<&'format str>,
/// Set the seperator in between words like "three/hundred".
pub place_seperator: Option<&'format str>,
/// Set the seperator between tens place digits like "twenty-two".
pub tens_seperator: Option<&'format str>,
}
impl<'format> Formatting<'format> {
/// Get the default formatting.
pub fn default() -> Self {
Self {
capitalize: true,
digit_seperator: Some(","),
place_seperator: Some(" "),
tens_seperator: Some("-"),
}
}
/// No formatting at all
pub fn none() -> Self {
Self {
capitalize: false,
digit_seperator: None,
place_seperator: None,
tens_seperator: None,
}
}
/// With same formatting for all
pub fn with_seperator(seperator: &'format str) -> Self {
Self {
capitalize: false,
digit_seperator: Some(seperator),
place_seperator: Some(seperator),
tens_seperator: Some(seperator),
}
}
/// Capitalize the formatting
pub fn capitalize(&mut self) -> Self {
self.capitalize = true;
Self {
capitalize: self.capitalize,
digit_seperator: self.digit_seperator,
place_seperator: self.place_seperator,
tens_seperator: self.tens_seperator,
}
}
/// Lower case the formatting struct
pub fn decapitalize(&mut self) -> Self {
self.capitalize = false;
Self {
capitalize: self.capitalize,
digit_seperator: self.digit_seperator,
place_seperator: self.place_seperator,
tens_seperator: self.tens_seperator,
}
}
}
+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);
};
}
-71
View File
@@ -1,71 +0,0 @@
use crate::{digit_to_text, place_value};
fn tens_place(tens: u8, ones: u8) -> Option<String> {
match tens {
0 => digit_to_text(ones),
1 => match ones {
0 => Some("ten".to_string()),
1 => Some("eleven".to_string()),
2 => Some("twelve".to_string()),
3 => Some("thirteen".to_string()),
4 => Some("fourteen".to_string()),
5 => Some("fifteen".to_string()),
6 => Some("sixteen".to_string()),
7 => Some("seventeen".to_string()),
8 => Some("eighteen".to_string()),
9 => Some("nineteen".to_string()),
_ => None,
},
d @ 2..=5 | d @ 8 => Some({
let mut buffer = String::new();
match d {
2 => buffer.push_str("twenty"),
3 => buffer.push_str("thirty"),
4 => buffer.push_str("forty"),
5 => buffer.push_str("fifty"),
8 => buffer.push_str("eighty"),
_ => (),
}
buffer.push_str(digit_to_text(ones).unwrap().as_str());
buffer
}),
d @ 6..=9 => Some({
let mut string = digit_to_text(d).unwrap() + "ty";
string.push_str(digit_to_text(ones).unwrap().as_str());
string
}),
_ => None,
}
}
/// Convert u32 to words in a string.
pub fn to_text_no_seperator(number: u32) -> String {
let mut numtext: String = String::new();
let mut last: Option<u8> = None;
let tens_place_holders: [u8; 2] = [2, 5];
let digits: Vec<u8> = number
.to_string()
.chars()
.map(|d| d.to_digit(10).unwrap() as u8)
.collect();
let mut place: u8 = digits.len() as u8;
for (_index, digit) in digits.iter().enumerate() {
if tens_place_holders.contains(&place) {
last = Some(*digit);
place -= 1;
continue;
}
if let Some(last_digit) = last {
numtext.push_str(tens_place(last_digit, *digit).unwrap().as_str());
if place > 2 {
numtext.push_str(place_value(0, place, None).unwrap().as_str());
}
last = None;
} else if *digit != 0 {
numtext.push_str(place_value(*digit, place, None).unwrap().as_str())
}
place -= 1;
}
numtext
}
+177
View File
@@ -0,0 +1,177 @@
use crate::Formatting;
/// Convert digit to words in a string.
pub fn digit_to_text(digit: u8, capitalize: bool) -> Option<String> {
if capitalize {
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,
}
} else {
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, fmt: &Formatting) -> Option<String> {
let mut buffer = digit_to_text(number, fmt.capitalize).unwrap();
if let Some(sep) = fmt.place_seperator {
if number != 0 && place != 1 {
buffer.push_str(sep)
}
}
if fmt.capitalize {
match place {
1 => (), //Can happen but should return the same digit
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"),
_ => (),
};
} else {
match place {
1 => (), //Can happen but should return the same digit
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)
}
fn tens_place(tens: u8, ones: u8, fmt: &Formatting) -> Option<String> {
match tens {
0 => digit_to_text(ones, fmt.capitalize),
1 => {
if fmt.capitalize {
match ones {
0 => Some("Ten".to_string()),
1 => Some("Eleven".to_string()),
2 => Some("Twelve".to_string()),
3 => Some("Thirteen".to_string()),
4 => Some("Fourteen".to_string()),
5 => Some("Fifteen".to_string()),
6 => Some("Sixteen".to_string()),
7 => Some("Seventeen".to_string()),
8 => Some("Eighteen".to_string()),
9 => Some("Nineteen".to_string()),
_ => None,
}
} else {
match ones {
0 => Some("ten".to_string()),
1 => Some("eleven".to_string()),
2 => Some("twelve".to_string()),
3 => Some("thirteen".to_string()),
4 => Some("fourteen".to_string()),
5 => Some("fifteen".to_string()),
6 => Some("sixteen".to_string()),
7 => Some("seventeen".to_string()),
8 => Some("eighteen".to_string()),
9 => Some("nineteen".to_string()),
_ => None,
}
}
}
d @ 2..=5 | d @ 8 => Some({
let mut buffer = String::new();
if fmt.capitalize {
match d {
2 => buffer.push_str("Twenty"),
3 => buffer.push_str("Thirty"),
4 => buffer.push_str("Forty"),
5 => buffer.push_str("Fifty"),
8 => buffer.push_str("Eighty"),
_ => (),
}
} else {
match d {
2 => buffer.push_str("twenty"),
3 => buffer.push_str("thirty"),
4 => buffer.push_str("forty"),
5 => buffer.push_str("fifty"),
8 => buffer.push_str("eighty"),
_ => (),
}
}
if let Some(sep) = fmt.tens_seperator {
buffer.push_str(sep);
}
buffer.push_str(digit_to_text(ones, fmt.capitalize).unwrap().as_str());
buffer
}),
d @ 6..=9 => Some({
let mut buffer = digit_to_text(d, fmt.capitalize).unwrap() + "ty";
if let Some(sep) = fmt.tens_seperator {
buffer.push_str(sep);
}
buffer.push_str(digit_to_text(ones, fmt.capitalize).unwrap().as_str());
buffer
}),
_ => None,
}
}
/// Convert usize to words in a string seperated by a seperator.
pub fn to_text_fmt(number: usize, fmt: &Formatting) -> String {
let mut numtext: String = String::new();
let mut last: Option<u8> = None;
let tens_place_holders: [u8; 2] = [2, 5];
let digits: Vec<u8> = number
.to_string()
.chars()
.map(|d| d.to_digit(10).unwrap() as u8)
.collect();
let mut place: u8 = digits.len() as u8;
for (_index, digit) in digits.iter().enumerate() {
if tens_place_holders.contains(&place) {
last = Some(*digit);
place -= 1;
continue;
}
if *digit != 0 && place != digits.len() as u8 && numtext != "" {
if let Some(sep) = fmt.digit_seperator {
numtext.push_str(sep);
}
}
if let Some(last_digit) = last {
numtext.push_str(tens_place(last_digit, *digit, fmt).unwrap().as_str());
if place > 2 {
if let Some(sep) = fmt.digit_seperator {
numtext.push_str(sep);
}
numtext.push_str(place_value(0, place, fmt).unwrap().as_str());
}
last = None;
} else if *digit != 0 {
numtext.push_str(place_value(*digit, place, fmt).unwrap().as_str());
}
place -= 1;
}
numtext
}
-86
View File
@@ -1,86 +0,0 @@
use crate::{digit_to_text, place_value};
fn tens_place_seperator(tens: u8, ones: u8, seperator: &str) -> Option<String> {
match tens {
0 => digit_to_text(ones),
1 => match ones {
0 => Some("ten".to_string()),
1 => Some("eleven".to_string()),
2 => Some("twelve".to_string()),
3 => Some("thirteen".to_string()),
4 => Some("fourteen".to_string()),
5 => Some("fifteen".to_string()),
6 => Some("sixteen".to_string()),
7 => Some("seventeen".to_string()),
8 => Some("eighteen".to_string()),
9 => Some("nineteen".to_string()),
_ => None,
},
d @ 2..=5 | d @ 8 => Some({
let mut buffer = String::new();
match d {
2 => buffer.push_str("twenty"),
3 => buffer.push_str("thirty"),
4 => buffer.push_str("forty"),
5 => buffer.push_str("fifty"),
8 => buffer.push_str("eighty"),
_ => (),
}
buffer.push_str(seperator);
buffer.push_str(digit_to_text(ones).unwrap().as_str());
buffer
}),
d @ 6..=9 => Some({
let mut buffer = digit_to_text(d).unwrap() + "ty";
buffer.push_str(seperator);
buffer.push_str(digit_to_text(ones).unwrap().as_str());
buffer
}),
_ => None,
}
}
/// Convert u32 to words in a string seperated by a seperator.
pub fn to_text_with_seperator(number: u32, seperator: &str) -> String {
let mut numtext: String = String::new();
let mut last: Option<u8> = None;
let tens_place_holders: [u8; 2] = [2, 5];
let digits: Vec<u8> = number
.to_string()
.chars()
.map(|d| d.to_digit(10).unwrap() as u8)
.collect();
let mut place: u8 = digits.len() as u8;
for (_index, digit) in digits.iter().enumerate() {
if tens_place_holders.contains(&place) {
last = Some(*digit);
place -= 1;
continue;
}
if *digit != 0 && place != digits.len() as u8 && numtext != "" {
numtext.push_str(seperator);
}
if let Some(last_digit) = last {
numtext.push_str(
tens_place_seperator(last_digit, *digit, seperator)
.unwrap()
.as_str(),
);
if place > 2 {
numtext.push_str(seperator);
numtext.push_str(place_value(0, place, Some(seperator)).unwrap().as_str());
}
last = None;
} else if *digit != 0 {
numtext.push_str(
place_value(*digit, place, Some(seperator))
.unwrap()
.as_str(),
);
}
place -= 1;
}
numtext
}
+16 -24
View File
@@ -3,34 +3,26 @@ mod tests {
#[test]
fn digits() {
use crate::digit_to_text;
assert_eq!(digit_to_text(9).unwrap(), "nine");
assert_eq!(digit_to_text(3).unwrap(), "three");
assert_eq!(digit_to_text(7).unwrap(), "seven");
assert_eq!(digit_to_text(5).unwrap(), "five");
assert_eq!(digit_to_text(9, false).unwrap(), "nine");
assert_eq!(digit_to_text(3, false).unwrap(), "three");
assert_eq!(digit_to_text(7, false).unwrap(), "seven");
assert_eq!(digit_to_text(5, false).unwrap(), "five");
assert_eq!(digit_to_text(5, true).unwrap(), "Five");
}
#[test]
fn numbers() {
use crate::to_text_no_seperator as to_text;
assert_eq!(to_text(1), "one");
assert_eq!(to_text(10), "ten");
assert_eq!(to_text(100), "onehundred");
assert_eq!(to_text(1000), "onethousand");
assert_eq!(to_text(12345), "twelvethousandthreehundredfortyfive");
assert_eq!(to_text(81123), "eightyonethousandonehundredtwentythree");
assert_eq!(to_text(12), "twelve");
}
#[test]
fn numbers_seperator() {
use crate::to_text_with_seperator as to_text;
assert_eq!(to_text(103, "/"), "one/hundred/three");
assert_eq!(to_text(1000, "/"), "one/thousand");
use crate::to_text_fmt as to_text;
use crate::Formatting;
let fmt = &Formatting::none();
assert_eq!(to_text(1, fmt), "one");
assert_eq!(to_text(10, fmt), "ten");
assert_eq!(to_text(100, fmt), "onehundred");
assert_eq!(to_text(1000, fmt), "onethousand");
assert_eq!(to_text(12345, fmt), "twelvethousandthreehundredfortyfive");
assert_eq!(
to_text(12345, "/"),
"twelve/thousand/three/hundred/forty/five"
);
assert_eq!(
to_text(651243, "/"),
"six/million/fifty/one/thousand/two/hundred/forty/three"
to_text(81123, fmt),
"eightyonethousandonehundredtwentythree"
);
assert_eq!(to_text(12, fmt), "twelve");
}
}