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