mirror of
				https://github.com/jbeder/yaml-cpp.git
				synced 2025-10-27 14:31:20 +00:00 
			
		
		
		
	Refactored the compact map notation, which made it easy to implement explicit keys for compact maps
This commit is contained in:
		
							
								
								
									
										21
									
								
								src/map.cpp
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								src/map.cpp
									
									
									
									
									
								
							| @@ -65,7 +65,7 @@ namespace YAML | ||||
| 		switch(pScanner->peek().type) { | ||||
| 			case Token::BLOCK_MAP_START: ParseBlock(pScanner, state); break; | ||||
| 			case Token::FLOW_MAP_START: ParseFlow(pScanner, state); break; | ||||
| 			case Token::FLOW_MAP_COMPACT: ParseCompact(pScanner, state); break; | ||||
| 			case Token::KEY: ParseCompact(pScanner, state); break; | ||||
| 			case Token::VALUE: ParseCompactWithNoKey(pScanner, state); break; | ||||
| 			default: break; | ||||
| 		} | ||||
| @@ -151,23 +151,14 @@ namespace YAML | ||||
| 	} | ||||
|  | ||||
| 	// ParseCompact | ||||
| 	// . Single key: value pair in a flow sequence | ||||
| 	// . Single "key: value" pair in a flow sequence | ||||
| 	void Map::ParseCompact(Scanner *pScanner, const ParserState& state) | ||||
| 	{ | ||||
| 		// eat start token | ||||
| 		pScanner->pop(); | ||||
|  | ||||
| 		if(pScanner->empty()) | ||||
| 			throw ParserException(Mark::null(), ErrorMsg::END_OF_MAP_FLOW); | ||||
|  | ||||
| 		Token& token = pScanner->peek(); | ||||
| 		std::auto_ptr <Node> pKey(new Node), pValue(new Node); | ||||
|  | ||||
| 		// grab key (if non-null) | ||||
| 		if(token.type == Token::KEY) { | ||||
| 			pScanner->pop(); | ||||
| 			pKey->Parse(pScanner, state); | ||||
| 		} | ||||
| 		// grab key | ||||
| 		pScanner->pop(); | ||||
| 		pKey->Parse(pScanner, state); | ||||
| 			 | ||||
| 		// now grab value (optional) | ||||
| 		if(!pScanner->empty() && pScanner->peek().type == Token::VALUE) { | ||||
| @@ -180,7 +171,7 @@ namespace YAML | ||||
| 	} | ||||
| 	 | ||||
| 	// ParseCompactWithNoKey | ||||
| 	// . Single key: value pair in a flow sequence | ||||
| 	// . Single ": value" pair in a flow sequence | ||||
| 	void Map::ParseCompactWithNoKey(Scanner *pScanner, const ParserState& state) | ||||
| 	{ | ||||
| 		std::auto_ptr <Node> pKey(new Node), pValue(new Node); | ||||
|   | ||||
| @@ -104,7 +104,7 @@ namespace YAML | ||||
| 				break; | ||||
| 			case Token::FLOW_MAP_START: | ||||
| 			case Token::BLOCK_MAP_START: | ||||
| 			case Token::FLOW_MAP_COMPACT: | ||||
| 			case Token::KEY: | ||||
| 				m_pContent = new Map; | ||||
| 				break; | ||||
| 			default: | ||||
|   | ||||
| @@ -72,9 +72,6 @@ namespace YAML | ||||
| 				key.pMapStart = key.pIndent->pStartToken; | ||||
| 				key.pMapStart->status = Token::UNVERIFIED; | ||||
| 			} | ||||
| 		} else if(m_flows.top() == FLOW_SEQ) { | ||||
| 			key.pMapStart = PushToken(Token::FLOW_MAP_COMPACT); | ||||
| 			key.pMapStart->status = Token::UNVERIFIED; | ||||
| 		} | ||||
|  | ||||
| 		// then add the (now unverified) key | ||||
|   | ||||
| @@ -1781,7 +1781,7 @@ namespace Test { | ||||
| 			PARSE(doc, input); | ||||
| 			YAML_ASSERT(doc.size() == 1); | ||||
| 			YAML_ASSERT(doc[0].size() == 1); | ||||
| 			YAML_ASSERT(doc[0]["foo"] == "bar"); | ||||
| 			YAML_ASSERT(doc[0]["foo bar"] == "baz"); | ||||
| 			return true; | ||||
| 		} | ||||
| 		 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jesse Beder
					Jesse Beder