From a626424baa08a0052cff5f9c1e80ba6328d0a320 Mon Sep 17 00:00:00 2001 From: Jesse Beder Date: Tue, 22 May 2012 12:56:40 -0500 Subject: [PATCH] Split the block map prepare into key/value --- include/yaml-cpp/emitter.h | 2 + src/emitter.cpp | 94 +++++++++++++++++++++----------------- 2 files changed, 53 insertions(+), 43 deletions(-) diff --git a/include/yaml-cpp/emitter.h b/include/yaml-cpp/emitter.h index a37a2d7..3d6f0b3 100644 --- a/include/yaml-cpp/emitter.h +++ b/include/yaml-cpp/emitter.h @@ -92,6 +92,8 @@ namespace YAML void BlockSeqPrepareNode(EmitterNodeType::value child); void FlowMapPrepareNode(EmitterNodeType::value child); void BlockMapPrepareNode(EmitterNodeType::value child); + void BlockMapPrepareKey(EmitterNodeType::value child); + void BlockMapPrepareValue(EmitterNodeType::value child); void SpaceOrIndentTo(bool requireSpace, unsigned indent); diff --git a/src/emitter.cpp b/src/emitter.cpp index f411cf1..4bdc03e 100644 --- a/src/emitter.cpp +++ b/src/emitter.cpp @@ -357,59 +357,67 @@ namespace YAML } void Emitter::BlockMapPrepareNode(EmitterNodeType::value child) + { + const std::size_t childCount = m_pState->CurGroupChildCount(); + + if(childCount % 2 == 0) + BlockMapPrepareKey(child); + else + BlockMapPrepareValue(child); + } + + void Emitter::BlockMapPrepareKey(EmitterNodeType::value child) { const unsigned curIndent = m_pState->CurIndent(); const unsigned nextIndent = curIndent + m_pState->CurGroupIndent(); const std::size_t childCount = m_pState->CurGroupChildCount(); if(!m_pState->HasBegunNode()) { - if(childCount % 2 == 0) { - // key - if(childCount > 0) { - m_stream << "\n"; - } - if(false /* long key */) { - } - } else { - // value - if(false /* was long key */) { - } else { - m_stream << ":"; - } + if(childCount > 0) { + m_stream << "\n"; + } + if(false /* long key */) { } } - if(childCount % 2 == 0) { - // key - switch(child) { - case EmitterNodeType::None: - break; - case EmitterNodeType::Property: - case EmitterNodeType::Scalar: - case EmitterNodeType::FlowSeq: - case EmitterNodeType::FlowMap: - SpaceOrIndentTo(m_pState->HasBegunContent(), curIndent); - break; - case EmitterNodeType::BlockSeq: - case EmitterNodeType::BlockMap: - break; - } + switch(child) { + case EmitterNodeType::None: + break; + case EmitterNodeType::Property: + case EmitterNodeType::Scalar: + case EmitterNodeType::FlowSeq: + case EmitterNodeType::FlowMap: + SpaceOrIndentTo(m_pState->HasBegunContent(), curIndent); + break; + case EmitterNodeType::BlockSeq: + case EmitterNodeType::BlockMap: + break; + } + } + + void Emitter::BlockMapPrepareValue(EmitterNodeType::value child) + { + const unsigned curIndent = m_pState->CurIndent(); + const unsigned nextIndent = curIndent + m_pState->CurGroupIndent(); + + if(false /* was long key */) { } else { - // value - switch(child) { - case EmitterNodeType::None: - break; - case EmitterNodeType::Property: - case EmitterNodeType::Scalar: - case EmitterNodeType::FlowSeq: - case EmitterNodeType::FlowMap: - SpaceOrIndentTo(true, nextIndent); - break; - case EmitterNodeType::BlockSeq: - case EmitterNodeType::BlockMap: - m_stream << "\n"; - break; - } + m_stream << ":"; + } + + switch(child) { + case EmitterNodeType::None: + break; + case EmitterNodeType::Property: + case EmitterNodeType::Scalar: + case EmitterNodeType::FlowSeq: + case EmitterNodeType::FlowMap: + SpaceOrIndentTo(true, nextIndent); + break; + case EmitterNodeType::BlockSeq: + case EmitterNodeType::BlockMap: + m_stream << "\n"; + break; } }