lipsum-cpp 0.5.4
A basic library written in C++ for generating placeholder Lorem Ipsum text.
Loading...
Searching...
No Matches
argvec2.inl
Go to the documentation of this file.
1
13#pragma once
14
15#include "internal.hpp"
16
17namespace lipsum
18{
19
21 {
22 if (min < 0 || max < 0)
23 {
24 internal::LogWarn(internal::LogType::Warn,
25 "lpsm::ArgVec2::ArgVec2(): min and max set to (",
26 min,
27 ", ",
28 max,
29 "), expected both >= 0. If "
30 "this is intentional,"
31 "use another method to generate random numbers "
32 "instead.");
33 }
34
35 this->min = min;
36 this->max = max;
37 }
38
39 int ArgVec2::roll(std::mt19937& gen, bool lazy) const
40 {
41 if (lazy)
42 {
43 return (min + max) / 2;
44 }
45
46 if (min <= max)
47 {
48 std::uniform_int_distribution<int> dist(min, max);
49 return dist(gen);
50 }
51 std::uniform_int_distribution<int> dist(max, min);
52 return dist(gen);
53 }
54
55#ifndef LIPSUM_MIN_BUILD
56 std::string internal::HandleHTMLEntity(char letter, Format format)
57 {
58 if (format == Format::Plain)
59 {
60 return {1, letter};
61 }
62 std::string result;
63
64 auto xmlLogic = [&]() -> std::string
65 {
66 switch (letter)
67 {
68 case '&':
69 {
70 return "&amp;";
71 }
72 case '<':
73 {
74 return "&lt;";
75 }
76 case '>':
77 {
78 return "&gt;";
79 }
80 case '"':
81 {
82 return "&quot;";
83 }
84 case '\'':
85 {
86 return "&apos;";
87 }
88 default:
89 {
90 return {1, letter};
91 }
92 }
93 };
94
95 auto jsonLogic = [&]() -> std::string
96 {
97 switch (letter)
98 {
99 case '\\':
100 {
101 return "\\\\";
102 }
103 case '\"':
104 {
105 return "\\\"";
106 }
107 case '\n':
108 {
109 return "\\n";
110 }
111 case '\t':
112 {
113 return "\\t";
114 }
115 default:
116 {
117 return {1, letter};
118 }
119 }
120 };
121
122 auto mdLogic = [&]() -> std::string
123 {
124 static const std::vector<char> chars = {'\\',
125 '`',
126 '*',
127 '_',
128 '{',
129 '}',
130 '[',
131 ']',
132 '(',
133 ')',
134 '#',
135 '+',
136 '-',
137 '.',
138 '!'};
139 for (const auto& let : chars)
140 {
141 if (let == letter)
142 {
143 return std::string("\\") + std::string(1, let);
144 }
145 }
146 return {1, letter};
147 };
148
149 switch (format)
150 {
151 case Format::HTML:
152 case Format::XML:
153 {
154 return xmlLogic();
155 }
156 case Format::JSON:
157 {
158 return jsonLogic();
159 }
160 case Format::Markdown:
161 {
162 return mdLogic();
163 }
164 default:
165 {
166 internal::LogWarn(internal::LogType::Error,
167 "lpsm::internal::HandleHTMLEntity(): Format "
168 "option ",
169 static_cast<int>(format),
170 " is out of range.");
171 return "";
172 }
173 }
174
175 // -> RESERVE_NUMER / RESERVE_DENOM times size of string
176 // constexpr int RESERVE_NUMER = 7;
177 // constexpr int RESERVE_DENOM = 5;
178 // plus RESERVE_PLUS for small strings
179 // constexpr int RESERVE_PLUS = 8;
180
181 // result.reserve((str.length() * RESERVE_NUMER / RESERVE_DENOM) +
182 // RESERVE_PLUS);
183 }
184#else
185 std::string internal::HandleHTMLEntity(const std::string& str)
186 {
187 return str;
188 }
189#endif
190
191} // namespace lipsum
Declaration of lipsum::internal.
void LogWarn(LogType type, const Args &... args)
Log a warning.
Definition internal.hpp:126
LIPSUM_API std::string HandleHTMLEntity(char letter, Format format=Format::HTML)
Handle HTML entities.
Definition argvec2.inl:56
This is the main namespace of lipsum-cpp.
Format
Types of formats.
Definition misc.hpp:33
int max
The maximum value.
Definition argvec2.hpp:56
int min
The minimum value.
Definition argvec2.hpp:55
ArgVec2(int min, int max)
Constructor for ArgVec2.
Definition argvec2.inl:20
int roll(std::mt19937 &gen, bool lazy=false) const
Return a number between min and max.
Definition argvec2.inl:39