fix bug from issue298:Emitter stylings settings overridden by node settings. (#915)

This commit is contained in:
Chen
2020-07-06 21:16:38 +08:00
committed by GitHub
parent 026a53fbe1
commit 6d5cfab5fd
6 changed files with 39 additions and 0 deletions

View File

@@ -59,6 +59,7 @@ class YAML_CPP_API Emitter {
bool SetPostCommentIndent(std::size_t n);
bool SetFloatPrecision(std::size_t n);
bool SetDoublePrecision(std::size_t n);
void RestoreGlobalModifiedSettings();
// local setters
Emitter& SetLocalValue(EMITTER_MANIP value);

View File

@@ -59,6 +59,8 @@ void EmitFromEvents::OnSequenceStart(const Mark&, const std::string& tag,
default:
break;
}
// Restore the global settings to eliminate the override from node style
m_emitter.RestoreGlobalModifiedSettings();
m_emitter << BeginSeq;
m_stateStack.push(State::WaitingForSequenceEntry);
}
@@ -83,6 +85,8 @@ void EmitFromEvents::OnMapStart(const Mark&, const std::string& tag,
default:
break;
}
// Restore the global settings to eliminate the override from node style
m_emitter.RestoreGlobalModifiedSettings();
m_emitter << BeginMap;
m_stateStack.push(State::WaitingForKey);
}

View File

@@ -90,6 +90,10 @@ bool Emitter::SetDoublePrecision(std::size_t n) {
return m_pState->SetDoublePrecision(n, FmtScope::Global);
}
void Emitter::RestoreGlobalModifiedSettings() {
m_pState->RestoreGlobalModifiedSettings();
}
// SetLocalValue
// . Either start/end a group, or set a modifier locally
Emitter& Emitter::SetLocalValue(EMITTER_MANIP value) {

View File

@@ -222,6 +222,10 @@ std::size_t EmitterState::LastIndent() const {
void EmitterState::ClearModifiedSettings() { m_modifiedSettings.clear(); }
void EmitterState::RestoreGlobalModifiedSettings() {
m_globalModifiedSettings.restore();
}
bool EmitterState::SetOutputCharset(EMITTER_MANIP value,
FmtScope::value scope) {
switch (value) {

View File

@@ -72,6 +72,7 @@ class EmitterState {
bool HasBegunContent() const { return m_hasAnchor || m_hasTag; }
void ClearModifiedSettings();
void RestoreGlobalModifiedSettings();
// formatters
void SetLocalValue(EMITTER_MANIP value);

View File

@@ -732,6 +732,31 @@ TEST_F(EmitterTest, GlobalLongKeyOnMap) {
: *value)");
}
TEST_F(EmitterTest, GlobalSettingStyleOnSeqNode) {
Node n(Load(R"(foo:
- 1
- 2
- 3
bar: aa)"));
out.SetSeqFormat(YAML::Flow);
out << n;
ExpectEmit(R"(foo: [1, 2, 3]
bar: aa)");
}
TEST_F(EmitterTest, GlobalSettingStyleOnMapNode) {
Node n(Load(R"(-
foo: a
bar: b
- 2
- 3)"));
out.SetMapFormat(YAML::Flow);
out << n;
ExpectEmit(R"(- {foo: a, bar: b}
- 2
- 3)");
}
TEST_F(EmitterTest, ComplexGlobalSettings) {
out << BeginSeq;
out << Block;