| skipped 2 lines |
3 | 3 | | use serde::Deserialize; |
4 | 4 | | |
5 | 5 | | use std::collections::HashMap; |
6 | | - | use std::fs::read_to_string; |
7 | | - | use std::path::Path; |
8 | 6 | | |
9 | 7 | | use crate::color::color; |
10 | 8 | | use crate::config::{Colors, Fonts, Options}; |
| skipped 22 lines |
33 | 31 | | pub chars: HashMap<String, Vec<String>>, |
34 | 32 | | } |
35 | 33 | | |
| 34 | + | /// Function to embed the data of our font files into our binary |
| 35 | + | /// |
| 36 | + | /// ```rust |
| 37 | + | /// extern crate cfonts; |
| 38 | + | /// |
| 39 | + | /// use cfonts::{ Options, Fonts }; |
| 40 | + | /// use cfonts::font::{load_all_fonts, get}; |
| 41 | + | /// |
| 42 | + | /// let mut options = Options::default(); |
| 43 | + | /// options.font = Fonts::FontChrome; |
| 44 | + | /// |
| 45 | + | /// let fonts = load_all_fonts(); // our HashMap of all font files content |
| 46 | + | /// let this_font = get(&fonts, &options); |
| 47 | + | /// assert_eq!(this_font.name, String::from("chrome")); |
| 48 | + | /// ``` |
| 49 | + | pub fn load_all_fonts() -> HashMap<Fonts, &'static str> { |
| 50 | + | let mut fonts = HashMap::new(); |
| 51 | + | |
| 52 | + | let font_content = include_str!("../fonts/console.json"); |
| 53 | + | fonts.insert(Fonts::FontConsole, font_content); |
| 54 | + | |
| 55 | + | let font_content = include_str!("../fonts/block.json"); |
| 56 | + | fonts.insert(Fonts::FontBlock, font_content); |
| 57 | + | |
| 58 | + | let font_content = include_str!("../fonts/simpleBlock.json"); |
| 59 | + | fonts.insert(Fonts::FontSimpleBlock, font_content); |
| 60 | + | |
| 61 | + | let font_content = include_str!("../fonts/simple.json"); |
| 62 | + | fonts.insert(Fonts::FontSimple, font_content); |
| 63 | + | |
| 64 | + | let font_content = include_str!("../fonts/3d.json"); |
| 65 | + | fonts.insert(Fonts::Font3d, font_content); |
| 66 | + | |
| 67 | + | let font_content = include_str!("../fonts/simple3d.json"); |
| 68 | + | fonts.insert(Fonts::FontSimple3d, font_content); |
| 69 | + | |
| 70 | + | let font_content = include_str!("../fonts/chrome.json"); |
| 71 | + | fonts.insert(Fonts::FontChrome, font_content); |
| 72 | + | |
| 73 | + | let font_content = include_str!("../fonts/huge.json"); |
| 74 | + | fonts.insert(Fonts::FontHuge, font_content); |
| 75 | + | |
| 76 | + | let font_content = include_str!("../fonts/shade.json"); |
| 77 | + | fonts.insert(Fonts::FontShade, font_content); |
| 78 | + | |
| 79 | + | let font_content = include_str!("../fonts/slick.json"); |
| 80 | + | fonts.insert(Fonts::FontSlick, font_content); |
| 81 | + | |
| 82 | + | let font_content = include_str!("../fonts/grid.json"); |
| 83 | + | fonts.insert(Fonts::FontGrid, font_content); |
| 84 | + | |
| 85 | + | let font_content = include_str!("../fonts/pallet.json"); |
| 86 | + | fonts.insert(Fonts::FontPallet, font_content); |
| 87 | + | |
| 88 | + | let font_content = include_str!("../fonts/tiny.json"); |
| 89 | + | fonts.insert(Fonts::FontTiny, font_content); |
| 90 | + | |
| 91 | + | fonts |
| 92 | + | } |
| 93 | + | |
36 | 94 | | /// Function to get the data of the font chosen |
37 | 95 | | /// |
38 | 96 | | /// ```rust |
39 | 97 | | /// extern crate cfonts; |
40 | 98 | | /// |
41 | 99 | | /// use cfonts::{ Options, Fonts }; |
42 | | - | /// use cfonts::font::get; |
| 100 | + | /// use cfonts::font::{load_all_fonts, get}; |
43 | 101 | | /// |
44 | 102 | | /// let mut options = Options::default(); |
45 | 103 | | /// options.font = Fonts::FontChrome; |
46 | 104 | | /// |
47 | | - | /// let this_font = get(&options); |
| 105 | + | /// let fonts = load_all_fonts(); |
| 106 | + | /// let this_font = get(&fonts, &options); |
48 | 107 | | /// assert_eq!(this_font.name, String::from("chrome")); |
49 | 108 | | /// ``` |
50 | 109 | | /// |
| skipped 3 lines |
54 | 113 | | /// extern crate cfonts; |
55 | 114 | | /// |
56 | 115 | | /// use cfonts::{ Options, Fonts }; |
57 | | - | /// use cfonts::font::get; |
| 116 | + | /// use cfonts::font::{load_all_fonts, get}; |
58 | 117 | | /// |
59 | 118 | | /// let mut options = Options::default(); |
60 | 119 | | /// options.font = Fonts::FontConsole; |
61 | 120 | | /// |
62 | | - | /// let this_font = get(&options); |
| 121 | + | /// let fonts = load_all_fonts(); |
| 122 | + | /// let this_font = get(&fonts, &options); |
63 | 123 | | /// assert_eq!(this_font.chars.get("D").unwrap(), &vec![String::from("d")]); |
64 | 124 | | /// ``` |
65 | | - | pub fn get(options: &Options) -> Font { |
| 125 | + | pub fn get(fonts: &HashMap<Fonts, &'static str>, options: &Options) -> Font { |
66 | 126 | | d("font::get()", 5, Dt::Head, options, &mut std::io::stdout()); |
67 | 127 | | d(&format!("font::get()\noptions.font{:?}", options.font), 5, Dt::Log, options, &mut std::io::stdout()); |
68 | | - | let filename = match options.font { |
69 | | - | Fonts::FontBlock => "./fonts/block.json", |
70 | | - | Fonts::FontSimpleBlock => "./fonts/simpleBlock.json", |
71 | | - | Fonts::FontSimple => "./fonts/simple.json", |
72 | | - | Fonts::Font3d => "./fonts/3d.json", |
73 | | - | Fonts::FontSimple3d => "./fonts/simple3d.json", |
74 | | - | Fonts::FontChrome => "./fonts/chrome.json", |
75 | | - | Fonts::FontHuge => "./fonts/huge.json", |
76 | | - | Fonts::FontShade => "./fonts/shade.json", |
77 | | - | Fonts::FontSlick => "./fonts/slick.json", |
78 | | - | Fonts::FontGrid => "./fonts/grid.json", |
79 | | - | Fonts::FontPallet => "./fonts/pallet.json", |
80 | | - | Fonts::FontTiny => "./fonts/tiny.json", |
81 | | - | Fonts::FontConsole => "./fonts/console.json", |
82 | | - | }; |
83 | | - | d(&format!("font::get() read font file at \"{}\"", filename), 5, Dt::Log, options, &mut std::io::stdout()); |
| 128 | + | let data = fonts.get(&options.font).unwrap(); |
84 | 129 | | |
85 | | - | let data = read_to_string(Path::new(filename).as_os_str()) |
86 | | - | .unwrap_or(format!("Unable to read file \"{}\"", color(filename, Colors::Red))); |
87 | | - | serde_json::from_str(&data).unwrap_or_else(|error| { |
| 130 | + | serde_json::from_str(data).unwrap_or_else(|error| { |
88 | 131 | | panic!( |
89 | 132 | | "JSON parsing error encountered for: \"{}\"\nError: {}", |
90 | | - | color(filename, Colors::Red), |
| 133 | + | color(&format!("{:?}", options.font), Colors::Red), |
91 | 134 | | color(&format!("{}", error), Colors::Yellow) |
92 | 135 | | ) |
93 | 136 | | }) |
| skipped 2 lines |