File: config_parser.hpp

package info (click to toggle)
cpp-hocon 0.3.0-1.2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,320 kB
  • sloc: cpp: 12,223; makefile: 4
file content (55 lines) | stat: -rw-r--r-- 2,123 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#pragma once

#include <hocon/config_value.hpp>
#include <hocon/config_syntax.hpp>
#include <hocon/config_include_context.hpp>
#include <hocon/config_parse_options.hpp>
#include <hocon/path.hpp>
#include <internal/nodes/config_node_concatenation.hpp>
#include <internal/nodes/config_node_root.hpp>
#include <internal/nodes/abstract_config_node_value.hpp>
#include <internal/nodes/config_node_object.hpp>
#include <internal/nodes/config_node_array.hpp>
#include <internal/nodes/config_node_include.hpp>
#include <internal/full_includer.hpp>
#include <memory>
#include <vector>
#include <unordered_map>
#include <string>

namespace hocon { namespace config_parser {

    shared_value parse(std::shared_ptr<const config_node_root> document,
            shared_origin origin,
            config_parse_options options,
            shared_include_context include_context);

    class parse_context {
        int _line_number;
        std::shared_ptr<const config_node_root> _document;
        std::shared_ptr<const full_includer> _includer;
        shared_include_context _include_context;
        config_syntax _flavor;
        shared_origin _base_origin, _line_origin;
        std::vector<path> _path_stack;

    public:
        parse_context(config_syntax flavor, shared_origin origin, std::shared_ptr<const config_node_root> document,
                std::shared_ptr<const full_includer> includer, shared_include_context include_context);

        shared_value parse();

        int array_count;

    private:
        static shared_object create_value_under_path(path p, shared_value value);
        shared_origin line_origin() const;
        path full_current_path() const;
        shared_value parse_value(shared_node_value n, std::vector<std::string>& comments);
        void parse_include(std::unordered_map<std::string, shared_value> &values, std::shared_ptr<const config_node_include> n);
        shared_object parse_object(shared_node_object n);
        shared_value parse_array(shared_node_array n);
        shared_value parse_concatenation(shared_node_concatenation n);
    };

}}  // namespace hocon::config_parser