19#ifndef LIPSUM_MIN_BUILD
20static std::string ClearApostrAndCh(
char letter,
const std::string& str)
23 ret.reserve(str.size());
24 for (
const char& let : str)
26 if (let !=
'\'' && let != letter)
35ClearApostrAndCh(
char let1,
char let2,
const std::string& str)
38 ret.reserve(str.size());
39 for (
const char& let : str)
41 if (let !=
'\'' && let != let1 && let != let2)
49static std::string CapitalizeStr(
const std::string& str)
51 std::string ret = str;
52 for (
auto& letter : ret)
75 "lpsm::Generator::word(): expected num >= 0, "
80 for (
int i = 0; i < num; ++i)
95 return word(numWords);
105 "lpsm::Generator::sentence(): expected num "
110 for (
int i = 0; i < num; ++i)
112 if (i == 0 && useLipsum)
132 "lpsm::Generator::paragraph(): expected num "
137 for (
int i = 0; i < num; ++i)
139 if (i == 0 && useLipsum)
157#ifndef LIPSUM_MIN_BUILD
168 "lpsm::Generator::scramble(): expected length >= "
177 for (
int i = 0; i < length; ++i)
186 return std::string(
"https://") +
plain_url() + std::string(
"/#") +
192 return std::string(
"lpsmcpp-") +
207 result =
word(numWords);
208 std::replace(result.begin(), result.end(),
' ', separator);
215 std::string innerWord;
219 case CaseSlugCase::CamelCase:
226 case CaseSlugCase::PascalCase:
232 for (
int i = 0; i < numWords; ++i)
234 innerWord = ClearApostrAndCh(
245 case CaseSlugCase::SnakeCase:
247 ret = ClearApostrAndCh(
'-',
slug(
'_'));
250 case CaseSlugCase::ShoutyCase:
252 ret = CapitalizeStr(ClearApostrAndCh(
'-',
slug(
'_')));
255 case CaseSlugCase::KebabCase:
257 ret = ClearApostrAndCh(
'_',
slug(
'-'));
260 case CaseSlugCase::TrainCase:
262 ret = CapitalizeStr(ClearApostrAndCh(
'_',
slug(
'-')));
272 std::vector<std::string> varNames;
273 std::string mainNamespace =
278 if (numStatements <= 0)
281 "lpsm::Generator::code(): expected numStatements "
288 const std::string& varDeclarer,
289 const std::string& namespSep)
291 for (
int i = 0; i < numStatements; ++i)
294 ret += varDeclarer + varNames.back() + std::string(
" = ") +
295 mainNamespace + namespSep +
case_slug(funcCase) +
300 auto cppBlock = [&]()
302 ret += std::string(
"#include <") + mainNamespace +
303 std::string(
"/") + mainNamespace +
".hpp>\n";
304 ret +=
"#include <iostream>\nint main()\n{\n";
305 ret += std::string(
" // ") +
308 varBlock(CaseSlugCase::CamelCase,
309 CaseSlugCase::PascalCase,
313 for (
int i = 0; i < numStatements; ++i)
315 ret += std::string(
" << ") + varNames.at(i) +
" << ' '";
317 ret +=
" << '\\n';\n return 0;\n}";
322 ret += std::string(
"import ") + mainNamespace +
"\n";
323 ret +=
"if __name__ == \"__main__\":\n";
324 ret += std::string(
" # ") +
328 varBlock(CaseSlugCase::SnakeCase,
329 CaseSlugCase::SnakeCase,
333 for (
int i = 0; i < numStatements; ++i)
335 ret += std::string(
"{") + varNames.at(i) + std::string(
"} ");
342 ret += std::string(
"use ") + mainNamespace +
";\n";
343 ret +=
"fn main()\n{\n";
344 ret += std::string(
" // ") +
348 varBlock(CaseSlugCase::SnakeCase,
349 CaseSlugCase::SnakeCase,
352 ret +=
" println!(\"";
353 for (
int i = 0; i < numStatements; ++i)
355 ret += std::string(
"{} ");
358 for (
int i = 0; i < numStatements; ++i)
360 ret += std::string(
", ") + varNames.at(i);
367 ret += std::string(
"#include <") + mainNamespace +
368 std::string(
"/") + mainNamespace +
".h>\n";
369 ret +=
"#include <stdio.h>\n";
370 ret +=
"int main(void)\n{\n";
371 ret += std::string(
" // ") +
374 varBlock(CaseSlugCase::CamelCase,
375 CaseSlugCase::PascalCase,
379 for (
int i = 0; i < numStatements; ++i)
381 ret += std::string(
"%d ");
384 for (
int i = 0; i < numStatements; ++i)
386 ret += std::string(
", ") + varNames.at(i);
393 ret += std::string(
"import * as ") + mainNamespace +
394 std::string(
" from \"./") + mainNamespace +
".js\";\n";
395 ret += std::string(
"// ") +
398 varBlock(CaseSlugCase::CamelCase,
399 CaseSlugCase::CamelCase,
402 ret +=
"console.log(";
403 ret += varNames.front();
404 for (
int i = 1; i < numStatements; ++i)
406 ret += std::string(
", \" \", ") + varNames.at(i);
413 case CodeLanguage::Cpp:
418 case CodeLanguage::Python:
423 case CodeLanguage::Rust:
428 case CodeLanguage::C:
433 case CodeLanguage::JavaScript:
444 std::ostringstream ret;
448 ret << (usePort ?
"[" :
"");
450 for (
int i = 0; i < 7; ++i)
455 ret << (usePort ?
"]" :
"");
476 std::string ret =
"(+1) ";
std::string ip_addr(bool useIpv6=false, bool usePort=false)
Generate an IP address.
Definition generator.inl:442
GeneratorSettings m_Settings
Settings for generation.
Definition generator.hpp:832
std::string plain_url()
Generate a plain URL.
Definition generator.inl:190
std::string scramble(int length=16, char minChar=' ', char maxChar='~')
Generate a random character scramble.
Definition generator.inl:162
std::string sentence(int num=1, bool useLipsum=true)
Generate sentences.
Definition generator.inl:98
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 text(bool useLipsum=true)
Generate a random number of random paragraphs.
Definition generator.inl:151
Source m_Source
Source used for generation.
Definition generator.hpp:844
T random_number(T min, T max)
Generate a random number.
Definition generator.hpp:755
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 fragment()
Generate a sentence fragment.
Definition generator.inl:92
std::string tld()
Pick a random TLD.
Definition generatorcore.inl:167
std::string single_paragraph(bool useLipsum)
Generate a single paragraph.
Definition generatorcore.inl:317
std::string code(CodeLanguage lang=CodeLanguage::Cpp)
Generate a code block.
Definition generator.inl:269
std::string slug(char separator='-')
Generate a slug.
Definition generator.inl:203
std::mt19937 m_Gen
Random number generator.
Definition generator.hpp:834
std::string case_slug(CaseSlugCase case_=CaseSlugCase::CamelCase)
Generate a case slug.
Definition generator.inl:212
std::string paragraph(int num=1, bool useLipsum=true)
Generate paragraphs.
Definition generator.inl:125
#define LPSM_SAFE_CCTYPE(type, func, arg)
Simplify safe cctype usage.
Definition core.hpp:36
Definition of core lipsum::Generator functions.
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.
CodeLanguage
Languages used by lipsum::Generator::code().
Definition generator.hpp:76
LIPSUM_API std::string GenerateDefaultLipsumSentence()
Generate the beginning Lorem Ipsum sentence.
Definition misc.inl:38
CaseSlugCase
Cases used by lipsum::Generator::case_slug().
Definition generator.hpp:58