File tree Expand file tree Collapse file tree 1 file changed +73
-2
lines changed Expand file tree Collapse file tree 1 file changed +73
-2
lines changed Original file line number Diff line number Diff line change @@ -104,6 +104,77 @@ namespace
104
104
105
105
inline constexpr auto divider =
106
106
" ################################################################################" sv;
107
+
108
+ void print_string (std::string_view str)
109
+ {
110
+ // clang-format off
111
+ constexpr std::string_view control_char_escapes[] =
112
+ {
113
+ " \\ u0000" sv,
114
+ " \\ u0001" sv,
115
+ " \\ u0002" sv,
116
+ " \\ u0003" sv,
117
+ " \\ u0004" sv,
118
+ " \\ u0005" sv,
119
+ " \\ u0006" sv,
120
+ " \\ u0007" sv,
121
+ " \\ b" sv,
122
+ " \\ t" sv,
123
+ " \\ n" sv,
124
+ " \\ u000B" sv,
125
+ " \\ f" sv,
126
+ " \\ r" sv,
127
+ " \\ u000E" sv,
128
+ " \\ u000F" sv,
129
+ " \\ u0010" sv,
130
+ " \\ u0011" sv,
131
+ " \\ u0012" sv,
132
+ " \\ u0013" sv,
133
+ " \\ u0014" sv,
134
+ " \\ u0015" sv,
135
+ " \\ u0016" sv,
136
+ " \\ u0017" sv,
137
+ " \\ u0018" sv,
138
+ " \\ u0019" sv,
139
+ " \\ u001A" sv,
140
+ " \\ u001B" sv,
141
+ " \\ u001C" sv,
142
+ " \\ u001D" sv,
143
+ " \\ u001E" sv,
144
+ " \\ u001F" sv,
145
+ };
146
+ // clang-format on
147
+
148
+ for (char c : str)
149
+ {
150
+ if (c >= 0 && static_cast <std::size_t >(c) < std::size (control_char_escapes))
151
+ {
152
+ std::cout << control_char_escapes[static_cast <std::size_t >(c)];
153
+ }
154
+ else
155
+ {
156
+ if (c == ' \\ ' )
157
+ {
158
+ std::cout << ' \\ ' ;
159
+ }
160
+ std::cout << c;
161
+ }
162
+ }
163
+ }
164
+
165
+ void print_parse_error (std::string_view doc, const toml::parse_error& err)
166
+ {
167
+ std::cout << err;
168
+
169
+ auto line_num = err.source ().begin .line ;
170
+
171
+ if (auto line = toml::get_line (doc, line_num))
172
+ {
173
+ std::cout << " \n Line " sv << line_num << " : " sv;
174
+ print_string (*line);
175
+ }
176
+ std::cout << " \n\n " sv;
177
+ }
107
178
}
108
179
109
180
int main ()
@@ -118,11 +189,11 @@ int main()
118
189
}
119
190
catch (const toml::parse_error& err)
120
191
{
121
- std::cout << err << " \n\n " sv ;
192
+ print_parse_error (str, err) ;
122
193
}
123
194
#else
124
195
if (auto result = toml::parse (str); !result)
125
- std::cout << result.error () << " \n\n " sv ;
196
+ print_parse_error (str, result.error ()) ;
126
197
#endif
127
198
};
128
199
You can’t perform that action at this time.
0 commit comments