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:
+21
-91
@@ -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!("{}",digit_to_text(1).unwrap());</span>
|
||||
<span class="doccomment">//! assert_eq!("two",digit_to_text(2).unwrap());</span>
|
||||
<span class="doccomment">//! assert_ne!("five",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!("{}",to_text!(1312));</span>
|
||||
<span class="doccomment">//! assert_eq!(to_text!(1312),"onethousandthreehundredtwelve");</span>
|
||||
<span class="doccomment">//! println!("{}",to_text!(7123));</span>
|
||||
<span class="doccomment">//! assert_eq!(to_text!(7123," "),"seven thousand one hundred twenty three");</span>
|
||||
<span class="doccomment">//! assert_eq!(to_text!(7123),"Seven Thousand,One Hundred,Twenty-Three");</span>
|
||||
<span class="doccomment">//! assert_eq!(to_text!(1000),"One Thousand");</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, &Formatting::none().capitalize()),"OneThousand");</span>
|
||||
<span class="doccomment">//! assert_eq!(to_text!(34123, &Formatting::with_seperator("#").capitalize()),"Thirty#Four#Thousand#One#Hundred#Twenty#Three");</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">></span> <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span> {
|
||||
<span class="kw">match</span> <span class="ident">digit</span> {
|
||||
<span class="number">0</span> <span class="op">=</span><span class="op">></span> <span class="prelude-val">Some</span>(<span class="string">""</span>.<span class="ident">to_string</span>()),
|
||||
<span class="number">1</span> <span class="op">=</span><span class="op">></span> <span class="prelude-val">Some</span>(<span class="string">"one"</span>.<span class="ident">to_string</span>()),
|
||||
<span class="number">2</span> <span class="op">=</span><span class="op">></span> <span class="prelude-val">Some</span>(<span class="string">"two"</span>.<span class="ident">to_string</span>()),
|
||||
<span class="number">3</span> <span class="op">=</span><span class="op">></span> <span class="prelude-val">Some</span>(<span class="string">"three"</span>.<span class="ident">to_string</span>()),
|
||||
<span class="number">4</span> <span class="op">=</span><span class="op">></span> <span class="prelude-val">Some</span>(<span class="string">"four"</span>.<span class="ident">to_string</span>()),
|
||||
<span class="number">5</span> <span class="op">=</span><span class="op">></span> <span class="prelude-val">Some</span>(<span class="string">"five"</span>.<span class="ident">to_string</span>()),
|
||||
<span class="number">6</span> <span class="op">=</span><span class="op">></span> <span class="prelude-val">Some</span>(<span class="string">"six"</span>.<span class="ident">to_string</span>()),
|
||||
<span class="number">7</span> <span class="op">=</span><span class="op">></span> <span class="prelude-val">Some</span>(<span class="string">"seven"</span>.<span class="ident">to_string</span>()),
|
||||
<span class="number">8</span> <span class="op">=</span><span class="op">></span> <span class="prelude-val">Some</span>(<span class="string">"eight"</span>.<span class="ident">to_string</span>()),
|
||||
<span class="number">9</span> <span class="op">=</span><span class="op">></span> <span class="prelude-val">Some</span>(<span class="string">"nine"</span>.<span class="ident">to_string</span>()),
|
||||
<span class="kw">_</span> <span class="op">=</span><span class="op">></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"><</span><span class="kw-2">&</span><span class="ident">str</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></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">></span> (),
|
||||
<span class="number">2</span> <span class="op">=</span><span class="op">></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">></span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">"hundred"</span>),
|
||||
<span class="number">4</span> <span class="op">=</span><span class="op">></span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">"thousand"</span>),
|
||||
<span class="number">5</span> <span class="op">=</span><span class="op">></span> (), <span class="comment">// Souldn't happen</span>
|
||||
<span class="number">6</span> <span class="op">=</span><span class="op">></span> <span class="ident">buffer</span>.<span class="ident">push_str</span>(<span class="string">"million"</span>),
|
||||
<span class="kw">_</span> <span class="op">=</span><span class="op">></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">></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">&</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">></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">></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>
|
||||
|
||||
Reference in New Issue
Block a user