1 #ifndef SINGLEDOCPARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 2 #define SINGLEDOCPARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 3 4 #if defined(_MSC_VER) || \ 5 (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \ 6 (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4 7 #pragma once 8 #endif 9 10 #include <map> 11 #include <memory> 12 #include <string> 13 14 #include "yaml-cpp/anchor.h" 15 16 namespace YAML { 17 class CollectionStack; 18 class EventHandler; 19 class Node; 20 class Scanner; 21 struct Directives; 22 struct Mark; 23 struct Token; 24 25 class SingleDocParser { 26 public: 27 SingleDocParser(Scanner& scanner, const Directives& directives); 28 SingleDocParser(const SingleDocParser&) = delete; 29 SingleDocParser(SingleDocParser&&) = delete; 30 SingleDocParser& operator=(const SingleDocParser&) = delete; 31 SingleDocParser& operator=(SingleDocParser&&) = delete; 32 ~SingleDocParser(); 33 34 void HandleDocument(EventHandler& eventHandler); 35 36 private: 37 void HandleNode(EventHandler& eventHandler); 38 39 void HandleSequence(EventHandler& eventHandler); 40 void HandleBlockSequence(EventHandler& eventHandler); 41 void HandleFlowSequence(EventHandler& eventHandler); 42 43 void HandleMap(EventHandler& eventHandler); 44 void HandleBlockMap(EventHandler& eventHandler); 45 void HandleFlowMap(EventHandler& eventHandler); 46 void HandleCompactMap(EventHandler& eventHandler); 47 void HandleCompactMapWithNoKey(EventHandler& eventHandler); 48 49 void ParseProperties(std::string& tag, anchor_t& anchor, 50 std::string& anchor_name); 51 void ParseTag(std::string& tag); 52 void ParseAnchor(anchor_t& anchor, std::string& anchor_name); 53 54 anchor_t RegisterAnchor(const std::string& name); 55 anchor_t LookupAnchor(const Mark& mark, const std::string& name) const; 56 57 private: 58 Scanner& m_scanner; 59 const Directives& m_directives; 60 std::unique_ptr<CollectionStack> m_pCollectionStack; 61 62 typedef std::map<std::string, anchor_t> Anchors; 63 Anchors m_anchors; 64 65 anchor_t m_curAnchor; 66 }; 67 } // namespace YAML 68 69 #endif // SINGLEDOCPARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 70