4 #include "hocon/config_exception.hpp"
5 #include <hocon/config_syntax.hpp>
7 #include <boost/nowide/fstream.hpp>
18 problem const& get_problem()
const;
26 virtual bool has_next() = 0;
27 virtual shared_token next() = 0;
30 template <
typename iter>
34 : _cur(begin), _end(end) { }
36 bool has_next()
override {
40 shared_token next()
override {
51 token_iterator(shared_origin origin, std::unique_ptr<std::istream> input,
bool allow_comments);
52 token_iterator(shared_origin origin, std::unique_ptr<std::istream> input, config_syntax flavor);
54 bool has_next()
override;
55 shared_token next()
override;
57 static std::string render(token_list
tokens);
60 class whitespace_saver {
64 shared_token check(token_type type, shared_origin base_origin,
int line_number);
67 shared_token next_is_not_simple_value(shared_origin base_origin,
int line_number);
68 shared_token next_is_simple_value(shared_origin origin,
int line_number);
69 shared_token create_whitespace_token(shared_origin base_origin,
int line_number);
71 std::string _whitespace;
72 bool _last_token_was_simple_value;
75 bool start_of_comment(
char c);
76 shared_token pull_comment(
char first_char);
79 char next_char_after_whitespace(whitespace_saver& saver);
87 shared_token pull_unquoted_text();
89 shared_token pull_number(
char first_char);
95 void pull_escape_sequence(std::string& parsed, std::string& original);
97 void append_triple_quoted_string(std::string& parsed, std::string& original);
99 shared_token pull_quoted_string();
101 shared_token
const& pull_plus_equals();
102 shared_token pull_substitution();
103 shared_token pull_next_token(whitespace_saver& saver);
104 void queue_next_token();
106 static bool is_simple_value(token_type type);
107 static std::string as_string(
char c);
108 static shared_origin line_origin(shared_origin base_origin,
int line_number);
110 shared_origin _origin;
111 std::unique_ptr<std::istream> _input;
112 bool _allow_comments;
114 shared_origin _line_origin;
115 std::queue<shared_token> _tokens;
116 whitespace_saver _whitespace_saver;
123 bool has_next()
override;
124 shared_token next()
override;
135 bool has_next()
override;
136 shared_token next()
override;