21#ifndef LIPSUM_MIN_BUILD
34 "lpsm::Generator::fmt_paragraph(): expected "
39 for (
int i = 0; i < num; ++i)
41 if (i == 0 && useLipsum)
59 "lpsm::Generator::fmt_text(): cannot generate "
60 "negative number of elements.");
76 while (numElements > 0)
79 if ((lastRand == 1 && rand == 1) || numElements == 1)
112 if (level > 6 || level < 1)
115 "lpsm::Generator::fmt_header(): invalid header "
118 ", expected from 1 to 6");
122 std::string words =
word(numWords);
129 for (
int i = 0; i < level; ++i)
134 ret += words +=
"\n\n";
153 ret += (isBold ?
"**" :
"*");
157 ret += (isBold ?
"<strong>" :
"<em>");
164 ret += (isBold ?
"**" :
"*");
168 ret += (isBold ?
"</strong>" :
"</em>");
175 std::string link =
url();
180 return std::string(
"[") +
sentence + std::string(
"](") + link +
")";
182 return std::string(
"<a href=\"") + link + std::string(
"\">") +
192 ret += (ordered ?
"<ol>" :
"<ul>");
194 for (
int i = 0; i < points; ++i)
212 ret += (useHtml ?
"</li>" :
"\n");
216 ret += (ordered ?
"</ol>\n" :
"</ul>\n");
224 std::string ret = R
"(<?xml version="1.0" encoding="UTF-8"?>)";
225 std::vector<std::string> tagStack;
227 ret += std::string("<") + root +
">";
231 for (
int i = 0; i < choices; ++i)
242 std::string attribValue =
247 ret += std::string(
"<") + toAdd + std::string(
" ") +
248 attrib + std::string(
"=\"") + attribValue +
253 ret += std::string(
"<") + toAdd +
">";
255 tagStack.push_back(toAdd);
263 ret += std::string(
"<") + toAdd + std::string(
">") +
265 std::string(
"</") + toAdd +
">";
272 if (!tagStack.empty())
274 ret += std::string(
"</") + tagStack.back() +
">";
282 while (!tagStack.empty())
284 ret += std::string(
"</") + tagStack.back() +
">";
288 ret += std::string(
"</") + root +
">";
296 std::string ret = (isObject ?
"{" :
"[");
297 for (
int i = 0; i < count; ++i)
307 std::string key = std::string(
"\"") +
310 ret += key + std::string(
":") +
json_value(maxDepth - 1);
318 ret += (isObject ?
"}" :
"]");
325 constexpr int JSON_VALUE_WARN_DEPTH = 50;
327 if (maxDepth >= JSON_VALUE_WARN_DEPTH)
330 "lpsm::Generator::json_value(): got maxDepth = ",
333 "greater than the recommended maximum depth ",
334 JSON_VALUE_WARN_DEPTH,
383 return json(maxDepth, ARRAY);
387 return json(maxDepth, OBJECT);
394 constexpr float CSV_NUMBER_MIN = -1000.0F;
395 constexpr float CSV_NUMBER_MAX = 1000.0F;
396 enum class CsvTypes :
int
410 std::vector<CsvTypes> cols;
412 cols.reserve(numCols);
413 for (
int i = 0; i < numCols; ++i)
425 auto csvTypeLogic = [&](CsvTypes type)
434 case CsvTypes::Float:
442 case CsvTypes::Sentence:
444 ret += std::string(
"\"") +
455 case CsvTypes::Email:
457 ret +=
email() +
",";
460 case CsvTypes::Scramble:
462 ret +=
scramble(16,
'a',
'z') +
",";
470 case CsvTypes::Phone:
479 for (
int i = 0; i < numRows; ++i)
481 for (
int j = 0; j < numCols; ++j)
483 csvTypeLogic(cols.at(j));
std::string xml(int choices=30)
Generate an XML document.
Definition generatorformats.inl:222
std::string ip_addr(bool useIpv6=false, bool usePort=false)
Generate an IP address.
Definition generator.inl:442
std::string fmt_emphasis(bool isBold=true, bool useHtml=false)
Generate an emphasized Markdown or HTML sentence.
Definition generatorformats.inl:145
GeneratorSettings m_Settings
Settings for generation.
Definition generator.hpp:832
std::string scramble(int length=16, char minChar=' ', char maxChar='~')
Generate a random character scramble.
Definition generator.inl:162
std::string fmt_paragraph(int num=1, bool useLipsum=true, bool useHtml=false)
Generate Markdown or HTML paragraphs.
Definition generatorformats.inl:27
std::string sentence(int num=1, bool useLipsum=true)
Generate sentences.
Definition generator.inl:98
std::string json_value(int maxDepth=3)
Generate a JSON value.
Definition generatorformats.inl:322
std::string fmt_header(int level=1, bool useHtml=false)
Generate a Markdown or HTML header.
Definition generatorformats.inl:110
std::string word(int num=1)
Generate words.
Definition generator.inl:67
std::string single_sentence(const ArgVec2 &wordArg, const ArgVec2 &frag)
Generate a single sentence.
Definition generatorcore.inl:181
std::string fmt_list(bool ordered=false, bool useHtml=false)
Generate a Markdown or HTML list.
Definition generatorformats.inl:186
std::string single_fmt_paragraph(bool useLipsum, bool useHtml)
Generate a single Markdown or HTML paragraph.
Definition generatorcore.inl:210
std::string json_string()
Generate a random JSON string.
Definition generatorcore.inl:260
Source m_Source
Source used for generation.
Definition generator.hpp:844
std::string json(int maxDepth=3, bool isObject=true)
Generate a JSON object or array.
Definition generatorformats.inl:293
T random_number(T min, T max)
Generate a random number.
Definition generator.hpp:755
std::string fmt_link(bool useHtml=false)
Generate a Markdown or HTML link.
Definition generatorformats.inl:173
std::string url()
Generate a URL.
Definition generator.inl:184
std::string phone_number()
Generate a phone number.
Definition generator.inl:474
std::string email()
Generate an email.
Definition generator.inl:196
std::string fmt_text(int numElements=15, bool useHtml=false)
Generate a Markdown or HTML document.
Definition generatorformats.inl:53
std::string csv()
Generate a CSV document.
Definition generatorformats.inl:392
std::string json_number()
Generate a random JSON number.
Definition generatorcore.inl:266
std::mt19937 m_Gen
Random number generator.
Definition generator.hpp:834
#define LPSM_SAFE_CCTYPE(type, func, arg)
Simplify safe cctype usage.
Definition core.hpp:36
#define LPSM_FLIP_COIN
Choose between true or false.
Definition core.hpp:31
#define LPSM_VERBOSE_LOG(type,...)
Verbose log messages.
Definition core.hpp:49
Declaration of lipsum::internal.
void LogWarn(LogType type, const Args &... args)
Log a warning.
Definition internal.hpp:126
std::string ToString(const T ¶m)
Convert an object to a string.
Definition internal.hpp:242
This is the main namespace of lipsum-cpp.