blob: ba3a349410ea9bec558d9cfd5925775fbdcb8757 (
plain)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
// # This file is a part of toml++ and is subject to the the terms of the MIT license.
// # Copyright (c) Mark Gillard <mark.gillard@outlook.com.au>
// # See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text.
// SPDX-License-Identifier: MIT
#pragma once
#include "preprocessor.hpp"
#if TOML_ENABLE_FORMATTERS
#include "forward_declarations.hpp"
#include "header_start.hpp"
#include "print_to_stream.hpp"
/// \cond
TOML_IMPL_NAMESPACE_START {
struct formatter_constants {
format_flags mandatory_flags;
format_flags ignored_flags;
std::string_view float_pos_inf;
std::string_view float_neg_inf;
std::string_view float_nan;
std::string_view bool_true;
std::string_view bool_false;
};
struct formatter_config {
format_flags flags;
std::string_view indent;
};
class TOML_EXPORTED_CLASS formatter {
private:
const node* source_;
#if TOML_ENABLE_PARSER && !TOML_EXCEPTIONS
const parse_result* result_;
#endif
const formatter_constants* constants_;
formatter_config config_;
size_t indent_columns_;
format_flags int_format_mask_;
std::ostream* stream_; //
int indent_; // these are set in attach()
bool naked_newline_; //
protected:
TOML_PURE_INLINE_GETTER
const node& source() const noexcept { return *source_; }
TOML_PURE_INLINE_GETTER
std::ostream& stream() const noexcept { return *stream_; }
TOML_PURE_INLINE_GETTER
int indent() const noexcept { return indent_; }
void indent(int level) noexcept { indent_ = level; }
void increase_indent() noexcept { indent_++; }
void decrease_indent() noexcept { indent_--; }
TOML_PURE_INLINE_GETTER
size_t indent_columns() const noexcept { return indent_columns_; }
TOML_PURE_INLINE_GETTER
bool indent_array_elements() const noexcept {
return !!(config_.flags & format_flags::indent_array_elements);
}
TOML_PURE_INLINE_GETTER
bool indent_sub_tables() const noexcept {
return !!(config_.flags & format_flags::indent_sub_tables);
}
TOML_PURE_INLINE_GETTER
bool literal_strings_allowed() const noexcept {
return !!(config_.flags & format_flags::allow_literal_strings);
}
TOML_PURE_INLINE_GETTER
bool multi_line_strings_allowed() const noexcept {
return !!(config_.flags & format_flags::allow_multi_line_strings);
}
TOML_PURE_INLINE_GETTER
bool real_tabs_in_strings_allowed() const noexcept {
return !!(config_.flags & format_flags::allow_real_tabs_in_strings);
}
TOML_PURE_INLINE_GETTER
bool unicode_strings_allowed() const noexcept {
return !!(config_.flags & format_flags::allow_unicode_strings);
}
TOML_PURE_INLINE_GETTER
bool terse_kvps() const noexcept {
return !!(config_.flags & format_flags::terse_key_value_pairs);
}
TOML_EXPORTED_MEMBER_FUNCTION
void attach(std::ostream& stream) noexcept;
TOML_EXPORTED_MEMBER_FUNCTION
void detach() noexcept;
TOML_EXPORTED_MEMBER_FUNCTION
void print_newline(bool force = false);
TOML_EXPORTED_MEMBER_FUNCTION
void print_indent();
TOML_EXPORTED_MEMBER_FUNCTION
void print_unformatted(char);
TOML_EXPORTED_MEMBER_FUNCTION
void print_unformatted(std::string_view);
TOML_EXPORTED_MEMBER_FUNCTION
void print_string(std::string_view str, bool allow_multi_line = true, bool allow_bare = false,
bool allow_literal_whitespace = true);
TOML_EXPORTED_MEMBER_FUNCTION
void print(const value<std::string>&);
TOML_EXPORTED_MEMBER_FUNCTION
void print(const value<int64_t>&);
TOML_EXPORTED_MEMBER_FUNCTION
void print(const value<double>&);
TOML_EXPORTED_MEMBER_FUNCTION
void print(const value<bool>&);
TOML_EXPORTED_MEMBER_FUNCTION
void print(const value<date>&);
TOML_EXPORTED_MEMBER_FUNCTION
void print(const value<time>&);
TOML_EXPORTED_MEMBER_FUNCTION
void print(const value<date_time>&);
TOML_EXPORTED_MEMBER_FUNCTION
void print_value(const node&, node_type);
TOML_NODISCARD
TOML_EXPORTED_MEMBER_FUNCTION
bool dump_failed_parse_result();
TOML_NODISCARD_CTOR
TOML_EXPORTED_MEMBER_FUNCTION
formatter(const node*, const parse_result*, const formatter_constants&,
const formatter_config&) noexcept;
};
}
TOML_IMPL_NAMESPACE_END;
/// \endcond
#include "header_end.hpp"
#endif // TOML_ENABLE_FORMATTERS
|