mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 12:41:17 +00:00
Added case for parsing a compact key: value pair in a flow sequence with a null key
This commit is contained in:
15
src/map.cpp
15
src/map.cpp
@@ -66,6 +66,7 @@ namespace YAML
|
|||||||
case Token::BLOCK_MAP_START: ParseBlock(pScanner, state); break;
|
case Token::BLOCK_MAP_START: ParseBlock(pScanner, state); break;
|
||||||
case Token::FLOW_MAP_START: ParseFlow(pScanner, state); break;
|
case Token::FLOW_MAP_START: ParseFlow(pScanner, state); break;
|
||||||
case Token::FLOW_MAP_COMPACT: ParseCompact(pScanner, state); break;
|
case Token::FLOW_MAP_COMPACT: ParseCompact(pScanner, state); break;
|
||||||
|
case Token::VALUE: ParseCompactWithNoKey(pScanner, state); break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -178,6 +179,20 @@ namespace YAML
|
|||||||
m_data[pKey.release()] = pValue.release();
|
m_data[pKey.release()] = pValue.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ParseCompactWithNoKey
|
||||||
|
// . Single key: value pair in a flow sequence
|
||||||
|
void Map::ParseCompactWithNoKey(Scanner *pScanner, const ParserState& state)
|
||||||
|
{
|
||||||
|
std::auto_ptr <Node> pKey(new Node), pValue(new Node);
|
||||||
|
|
||||||
|
// grab value
|
||||||
|
pScanner->pop();
|
||||||
|
pValue->Parse(pScanner, state);
|
||||||
|
|
||||||
|
// assign the map with the actual pointers
|
||||||
|
m_data[pKey.release()] = pValue.release();
|
||||||
|
}
|
||||||
|
|
||||||
void Map::Write(Emitter& out) const
|
void Map::Write(Emitter& out) const
|
||||||
{
|
{
|
||||||
out << BeginMap;
|
out << BeginMap;
|
||||||
|
@@ -42,6 +42,7 @@ namespace YAML
|
|||||||
void ParseBlock(Scanner *pScanner, const ParserState& state);
|
void ParseBlock(Scanner *pScanner, const ParserState& state);
|
||||||
void ParseFlow(Scanner *pScanner, const ParserState& state);
|
void ParseFlow(Scanner *pScanner, const ParserState& state);
|
||||||
void ParseCompact(Scanner *pScanner, const ParserState& state);
|
void ParseCompact(Scanner *pScanner, const ParserState& state);
|
||||||
|
void ParseCompactWithNoKey(Scanner *pScanner, const ParserState& state);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
node_map m_data;
|
node_map m_data;
|
||||||
|
@@ -65,6 +65,13 @@ namespace YAML
|
|||||||
// save location
|
// save location
|
||||||
m_mark = pScanner->peek().mark;
|
m_mark = pScanner->peek().mark;
|
||||||
|
|
||||||
|
// special case: a value node by itself must be a map, with no header
|
||||||
|
if(pScanner->peek().type == Token::VALUE) {
|
||||||
|
m_pContent = new Map;
|
||||||
|
m_pContent->Parse(pScanner, state);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ParseHeader(pScanner, state);
|
ParseHeader(pScanner, state);
|
||||||
|
|
||||||
// is this an alias? if so, its contents are an alias to
|
// is this an alias? if so, its contents are an alias to
|
||||||
|
Reference in New Issue
Block a user