Merge be4491fc1d into 370aceeaf8
This commit is contained in:
commit
7e29647d22
@ -25,6 +25,7 @@ enum EMITTER_MANIP {
|
|||||||
SingleQuoted,
|
SingleQuoted,
|
||||||
DoubleQuoted,
|
DoubleQuoted,
|
||||||
Literal,
|
Literal,
|
||||||
|
Folded,
|
||||||
|
|
||||||
// null manipulators
|
// null manipulators
|
||||||
LowerNull,
|
LowerNull,
|
||||||
|
|||||||
@ -695,7 +695,7 @@ Emitter& Emitter::Write(const std::string& str) {
|
|||||||
Utils::ComputeStringFormat(str, m_pState->GetStringFormat(),
|
Utils::ComputeStringFormat(str, m_pState->GetStringFormat(),
|
||||||
m_pState->CurGroupFlowType(), escapeNonAscii);
|
m_pState->CurGroupFlowType(), escapeNonAscii);
|
||||||
|
|
||||||
if (strFormat == StringFormat::Literal)
|
if (strFormat == StringFormat::Literal || strFormat == StringFormat::Folded)
|
||||||
m_pState->SetMapKeyFormat(YAML::LongKey, FmtScope::Local);
|
m_pState->SetMapKeyFormat(YAML::LongKey, FmtScope::Local);
|
||||||
|
|
||||||
PrepareNode(EmitterNodeType::Scalar);
|
PrepareNode(EmitterNodeType::Scalar);
|
||||||
@ -713,6 +713,9 @@ Emitter& Emitter::Write(const std::string& str) {
|
|||||||
case StringFormat::Literal:
|
case StringFormat::Literal:
|
||||||
Utils::WriteLiteralString(m_stream, str,
|
Utils::WriteLiteralString(m_stream, str,
|
||||||
m_pState->CurIndent() + m_pState->GetIndent());
|
m_pState->CurIndent() + m_pState->GetIndent());
|
||||||
|
case StringFormat::Folded:
|
||||||
|
Utils::WriteFoldedString(m_stream, str,
|
||||||
|
m_pState->CurIndent() + m_pState->GetIndent());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -244,6 +244,7 @@ bool EmitterState::SetStringFormat(EMITTER_MANIP value, FmtScope::value scope) {
|
|||||||
case SingleQuoted:
|
case SingleQuoted:
|
||||||
case DoubleQuoted:
|
case DoubleQuoted:
|
||||||
case Literal:
|
case Literal:
|
||||||
|
case Folded:
|
||||||
_Set(m_strFmt, value, scope);
|
_Set(m_strFmt, value, scope);
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -275,6 +275,11 @@ StringFormat::value ComputeStringFormat(const std::string& str,
|
|||||||
return StringFormat::Literal;
|
return StringFormat::Literal;
|
||||||
}
|
}
|
||||||
return StringFormat::DoubleQuoted;
|
return StringFormat::DoubleQuoted;
|
||||||
|
case Folded:
|
||||||
|
if (IsValidLiteralScalar(str, flowType, escapeNonAscii)) {
|
||||||
|
return StringFormat::Folded;
|
||||||
|
}
|
||||||
|
return StringFormat::DoubleQuoted;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -362,6 +367,22 @@ bool WriteLiteralString(ostream_wrapper& out, const std::string& str,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool WriteFoldedString(ostream_wrapper& out, const std::string& str,
|
||||||
|
std::size_t indent) {
|
||||||
|
out << ">\n";
|
||||||
|
out << IndentTo(indent);
|
||||||
|
int codePoint;
|
||||||
|
for (std::string::const_iterator i = str.begin();
|
||||||
|
GetNextCodePointAndAdvance(codePoint, i, str.end());) {
|
||||||
|
if (codePoint == '\n') {
|
||||||
|
out << "\n" << IndentTo(indent);
|
||||||
|
} else {
|
||||||
|
WriteCodePoint(out, codePoint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool WriteChar(ostream_wrapper& out, char ch) {
|
bool WriteChar(ostream_wrapper& out, char ch) {
|
||||||
if (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z')) {
|
if (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z')) {
|
||||||
out << ch;
|
out << ch;
|
||||||
|
|||||||
@ -21,7 +21,7 @@ namespace YAML {
|
|||||||
class Binary;
|
class Binary;
|
||||||
|
|
||||||
struct StringFormat {
|
struct StringFormat {
|
||||||
enum value { Plain, SingleQuoted, DoubleQuoted, Literal };
|
enum value { Plain, SingleQuoted, DoubleQuoted, Literal, Folded };
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace Utils {
|
namespace Utils {
|
||||||
@ -35,6 +35,8 @@ bool WriteDoubleQuotedString(ostream_wrapper& out, const std::string& str,
|
|||||||
bool escapeNonAscii);
|
bool escapeNonAscii);
|
||||||
bool WriteLiteralString(ostream_wrapper& out, const std::string& str,
|
bool WriteLiteralString(ostream_wrapper& out, const std::string& str,
|
||||||
std::size_t indent);
|
std::size_t indent);
|
||||||
|
bool WriteFoldedString(ostream_wrapper& out, const std::string& str,
|
||||||
|
std::size_t indent);
|
||||||
bool WriteChar(ostream_wrapper& out, char ch);
|
bool WriteChar(ostream_wrapper& out, char ch);
|
||||||
bool WriteComment(ostream_wrapper& out, const std::string& str,
|
bool WriteComment(ostream_wrapper& out, const std::string& str,
|
||||||
std::size_t postCommentIndent);
|
std::size_t postCommentIndent);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user