File indexing completed on 2025-05-12 09:08:10
0001 #ifndef SINGLEDOCPARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
0002 #define SINGLEDOCPARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
0003
0004 #if defined(_MSC_VER) || \
0005 (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \
0006 (__GNUC__ >= 4))
0007 #pragma once
0008 #endif
0009
0010 #include <map>
0011 #include <memory>
0012 #include <string>
0013
0014 #include "ATOOLS/YAML/yaml-cpp/anchor.h"
0015
0016 namespace SHERPA_YAML {
0017 class CollectionStack;
0018 template <int> class DepthGuard;
0019 class EventHandler;
0020 class Node;
0021 class Scanner;
0022 struct Directives;
0023 struct Mark;
0024 struct Token;
0025
0026 class SingleDocParser {
0027 public:
0028 SingleDocParser(Scanner& scanner, const Directives& directives);
0029 SingleDocParser(const SingleDocParser&) = delete;
0030 SingleDocParser(SingleDocParser&&) = delete;
0031 SingleDocParser& operator=(const SingleDocParser&) = delete;
0032 SingleDocParser& operator=(SingleDocParser&&) = delete;
0033 ~SingleDocParser();
0034
0035 void HandleDocument(EventHandler& eventHandler);
0036
0037 private:
0038 void HandleNode(EventHandler& eventHandler);
0039
0040 void HandleSequence(EventHandler& eventHandler);
0041 void HandleBlockSequence(EventHandler& eventHandler);
0042 void HandleFlowSequence(EventHandler& eventHandler);
0043
0044 void HandleMap(EventHandler& eventHandler);
0045 void HandleBlockMap(EventHandler& eventHandler);
0046 void HandleFlowMap(EventHandler& eventHandler);
0047 void HandleCompactMap(EventHandler& eventHandler);
0048 void HandleCompactMapWithNoKey(EventHandler& eventHandler);
0049
0050 void ParseProperties(std::string& tag, anchor_t& anchor,
0051 std::string& anchor_name);
0052 void ParseTag(std::string& tag);
0053 void ParseAnchor(anchor_t& anchor, std::string& anchor_name);
0054
0055 anchor_t RegisterAnchor(const std::string& name);
0056 anchor_t LookupAnchor(const Mark& mark, const std::string& name) const;
0057
0058 private:
0059 int depth = 0;
0060 Scanner& m_scanner;
0061 const Directives& m_directives;
0062 std::unique_ptr<CollectionStack> m_pCollectionStack;
0063
0064 using Anchors = std::map<std::string, anchor_t>;
0065 Anchors m_anchors;
0066
0067 anchor_t m_curAnchor;
0068 };
0069 }
0070
0071 #endif