File tree Expand file tree Collapse file tree 1 file changed +67
-1
lines changed
Expand file tree Collapse file tree 1 file changed +67
-1
lines changed Original file line number Diff line number Diff line change @@ -104,6 +104,63 @@ namespace
104104
105105 inline constexpr auto divider =
106106 " ################################################################################" sv;
107+
108+ void print (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 && c < std::ssize (control_char_escapes))
151+ {
152+ std::cout << control_char_escapes[c];
153+ }
154+ else
155+ {
156+ if (c == ' \\ ' )
157+ {
158+ std::cout << ' \\ ' ;
159+ }
160+ std::cout << c;
161+ }
162+ }
163+ }
107164}
108165
109166int main ()
@@ -118,7 +175,16 @@ int main()
118175 }
119176 catch (const toml::parse_error& err)
120177 {
121- std::cout << err << " \n\n " sv;
178+ std::cout << err;
179+
180+ auto line_num = err.source ().begin .line ;
181+
182+ if (auto line = toml::get_line (str, line_num))
183+ {
184+ std::cout << " \n Line " sv << line_num << " : " sv;
185+ print (*line);
186+ }
187+ std::cout << " \n\n " sv;
122188 }
123189#else
124190 if (auto result = toml::parse (str); !result)
You can’t perform that action at this time.
0 commit comments