Added option to quoted() function to replace newlines.

This commit is contained in:
Patrick 2025-09-21 12:36:41 +02:00
parent 7da2f7b7f4
commit 3891c0f8ce

View File

@ -1021,7 +1021,12 @@ bool convertStringType(const TFrom* strFrom, std::basic_string<TTo, TToTraits, T
return convertStringType(std::basic_string_view<TFrom>(strFrom), outString); return convertStringType(std::basic_string_view<TFrom>(strFrom), outString);
} }
template<typename TChar, typename TTraits, typename TAlloc = MIJIN_DEFAULT_ALLOCATOR<TChar>> struct StringQuoteOptions
{
bool replaceNewlines = false;
};
template<StringQuoteOptions options = {}, typename TChar, typename TTraits, typename TAlloc = MIJIN_DEFAULT_ALLOCATOR<TChar>>
std::basic_string<TChar, TTraits, TAlloc> quoted(std::basic_string_view<TChar, TTraits> input) std::basic_string<TChar, TTraits, TAlloc> quoted(std::basic_string_view<TChar, TTraits> input)
{ {
std::basic_string<TChar, TTraits> result; std::basic_string<TChar, TTraits> result;
@ -1029,8 +1034,28 @@ std::basic_string<TChar, TTraits, TAlloc> quoted(std::basic_string_view<TChar, T
result.push_back(TChar('"')); result.push_back(TChar('"'));
for (const TChar chr : input) for (const TChar chr : input)
{ {
if (chr == TChar('"') || chr == TChar('\\')) { switch (chr)
{
case TChar('"'):
case TChar('\\'):
result.push_back(TChar('\\')); result.push_back(TChar('\\'));
break;
case TChar('\n'):
if constexpr (options.replaceNewlines)
{
result.push_back(TChar('\\'));
result.push_back(TChar('n'));
continue;
}
break;
case TChar('\r'):
if constexpr (options.replaceNewlines)
{
result.push_back(TChar('\\'));
result.push_back(TChar('r'));
continue;
}
break;
} }
result.push_back(chr); result.push_back(chr);
} }
@ -1038,10 +1063,10 @@ std::basic_string<TChar, TTraits, TAlloc> quoted(std::basic_string_view<TChar, T
return result; return result;
} }
template<typename TChar, typename TTraits, typename TAlloc> template<StringQuoteOptions options = {}, typename TChar, typename TTraits, typename TAlloc>
std::basic_string<TChar, TTraits, TAlloc> quoted(const std::basic_string<TChar, TTraits, TAlloc>& input) std::basic_string<TChar, TTraits, TAlloc> quoted(const std::basic_string<TChar, TTraits, TAlloc>& input)
{ {
return quoted<TChar, TTraits, TAlloc>(std::basic_string_view(input)); return quoted<options, TChar, TTraits, TAlloc>(std::basic_string_view(input));
} }
} // namespace mijin } // namespace mijin