diff options
Diffstat (limited to 'src/libs/3rdparty/yaml-cpp/src/emitterstate.cpp')
-rw-r--r-- | src/libs/3rdparty/yaml-cpp/src/emitterstate.cpp | 97 |
1 files changed, 66 insertions, 31 deletions
diff --git a/src/libs/3rdparty/yaml-cpp/src/emitterstate.cpp b/src/libs/3rdparty/yaml-cpp/src/emitterstate.cpp index 3542aaf507..3dbe401108 100644 --- a/src/libs/3rdparty/yaml-cpp/src/emitterstate.cpp +++ b/src/libs/3rdparty/yaml-cpp/src/emitterstate.cpp @@ -6,29 +6,35 @@ namespace YAML { EmitterState::EmitterState() : m_isGood(true), + m_lastError{}, + // default global manipulators + m_charset(EmitNonAscii), + m_strFmt(Auto), + m_boolFmt(TrueFalseBool), + m_boolLengthFmt(LongBool), + m_boolCaseFmt(LowerCase), + m_nullFmt(TildeNull), + m_intFmt(Dec), + m_indent(2), + m_preCommentIndent(2), + m_postCommentIndent(1), + m_seqFmt(Block), + m_mapFmt(Block), + m_mapKeyFmt(Auto), + m_floatPrecision(std::numeric_limits<float>::max_digits10), + m_doublePrecision(std::numeric_limits<double>::max_digits10), + // + m_modifiedSettings{}, + m_globalModifiedSettings{}, + m_groups{}, m_curIndent(0), m_hasAnchor(false), + m_hasAlias(false), m_hasTag(false), m_hasNonContent(false), - m_docCount(0) { - // set default global manipulators - m_charset.set(EmitNonAscii); - m_strFmt.set(Auto); - m_boolFmt.set(TrueFalseBool); - m_boolLengthFmt.set(LongBool); - m_boolCaseFmt.set(LowerCase); - m_intFmt.set(Dec); - m_indent.set(2); - m_preCommentIndent.set(2); - m_postCommentIndent.set(1); - m_seqFmt.set(Block); - m_mapFmt.set(Block); - m_mapKeyFmt.set(Auto); - m_floatPrecision.set(std::numeric_limits<float>::digits10 + 1); - m_doublePrecision.set(std::numeric_limits<double>::digits10 + 1); -} - -EmitterState::~EmitterState() {} + m_docCount(0) {} + +EmitterState::~EmitterState() = default; // SetLocalValue // . We blindly tries to set all possible formatters to this value @@ -39,6 +45,7 @@ void EmitterState::SetLocalValue(EMITTER_MANIP value) { SetBoolFormat(value, FmtScope::Local); SetBoolCaseFormat(value, FmtScope::Local); SetBoolLengthFormat(value, FmtScope::Local); + SetNullFormat(value, FmtScope::Local); SetIntFormat(value, FmtScope::Local); SetFlowType(GroupType::Seq, value, FmtScope::Local); SetFlowType(GroupType::Map, value, FmtScope::Local); @@ -47,6 +54,8 @@ void EmitterState::SetLocalValue(EMITTER_MANIP value) { void EmitterState::SetAnchor() { m_hasAnchor = true; } +void EmitterState::SetAlias() { m_hasAlias = true; } + void EmitterState::SetTag() { m_hasTag = true; } void EmitterState::SetNonContent() { m_hasNonContent = true; } @@ -81,6 +90,7 @@ void EmitterState::StartedNode() { } m_hasAnchor = false; + m_hasAlias = false; m_hasTag = false; m_hasNonContent = false; } @@ -90,15 +100,13 @@ EmitterNodeType::value EmitterState::NextGroupType( if (type == GroupType::Seq) { if (GetFlowType(type) == Block) return EmitterNodeType::BlockSeq; - else - return EmitterNodeType::FlowSeq; - } else { - if (GetFlowType(type) == Block) - return EmitterNodeType::BlockMap; - else - return EmitterNodeType::FlowMap; + return EmitterNodeType::FlowSeq; } + if (GetFlowType(type) == Block) + return EmitterNodeType::BlockMap; + return EmitterNodeType::FlowMap; + // can't happen assert(false); return EmitterNodeType::NoType; @@ -152,9 +160,15 @@ void EmitterState::EndedGroup(GroupType::value type) { if (m_groups.empty()) { if (type == GroupType::Seq) { return SetError(ErrorMsg::UNEXPECTED_END_SEQ); - } else { - return SetError(ErrorMsg::UNEXPECTED_END_MAP); } + return SetError(ErrorMsg::UNEXPECTED_END_MAP); + } + + if (m_hasTag) { + SetError(ErrorMsg::INVALID_TAG); + } + if (m_hasAnchor) { + SetError(ErrorMsg::INVALID_ANCHOR); } // get rid of the current group @@ -176,6 +190,9 @@ void EmitterState::EndedGroup(GroupType::value type) { m_globalModifiedSettings.restore(); ClearModifiedSettings(); + m_hasAnchor = false; + m_hasTag = false; + m_hasNonContent = false; } EmitterNodeType::value EmitterState::CurGroupNodeType() const { @@ -216,11 +233,16 @@ 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) { case EmitNonAscii: case EscapeNonAscii: + case EscapeAsJson: _Set(m_charset, value, scope); return true; default: @@ -278,6 +300,19 @@ bool EmitterState::SetBoolCaseFormat(EMITTER_MANIP value, } } +bool EmitterState::SetNullFormat(EMITTER_MANIP value, FmtScope::value scope) { + switch (value) { + case LowerNull: + case UpperNull: + case CamelNull: + case TildeNull: + _Set(m_nullFmt, value, scope); + return true; + default: + return false; + } +} + bool EmitterState::SetIntFormat(EMITTER_MANIP value, FmtScope::value scope) { switch (value) { case Dec: @@ -349,7 +384,7 @@ bool EmitterState::SetMapKeyFormat(EMITTER_MANIP value, FmtScope::value scope) { } bool EmitterState::SetFloatPrecision(std::size_t value, FmtScope::value scope) { - if (value > std::numeric_limits<float>::digits10 + 1) + if (value > std::numeric_limits<float>::max_digits10) return false; _Set(m_floatPrecision, value, scope); return true; @@ -357,9 +392,9 @@ bool EmitterState::SetFloatPrecision(std::size_t value, FmtScope::value scope) { bool EmitterState::SetDoublePrecision(std::size_t value, FmtScope::value scope) { - if (value > std::numeric_limits<double>::digits10 + 1) + if (value > std::numeric_limits<double>::max_digits10) return false; _Set(m_doublePrecision, value, scope); return true; } -} +} // namespace YAML |