|
34 | 34 | #include "text_format.hh" |
35 | 35 |
|
36 | 36 | #include "base/from_trait.hh" |
| 37 | +#include "base/is_utf8.hh" |
37 | 38 | #include "base/itertools.enumerate.hh" |
38 | 39 | #include "base/itertools.hh" |
39 | 40 | #include "base/lnav_log.hh" |
@@ -183,6 +184,11 @@ detect_text_format(string_fragment sf, |
183 | 184 | )", |
184 | 185 | PCRE2_MULTILINE | PCRE2_CASELESS | PCRE2_EXTENDED); |
185 | 186 |
|
| 187 | + auto utf_res = is_utf8(sf); |
| 188 | + if (!utf_res.is_valid()) { |
| 189 | + return text_format_t::TF_UNKNOWN; |
| 190 | + } |
| 191 | + |
186 | 192 | if (path) { |
187 | 193 | while (FILTER_EXTS.count(path->extension()) > 0) { |
188 | 194 | path = path->stem(); |
@@ -256,47 +262,47 @@ detect_text_format(string_fragment sf, |
256 | 262 | } |
257 | 263 | } |
258 | 264 |
|
259 | | - if (DIFF_MATCHERS.find_in(sf).ignore_error()) { |
| 265 | + if (DIFF_MATCHERS.find_in(sf, PCRE2_NO_UTF_CHECK).ignore_error()) { |
260 | 266 | return text_format_t::TF_DIFF; |
261 | 267 | } |
262 | 268 |
|
263 | | - if (SH_MATCHERS.find_in(sf).ignore_error()) { |
| 269 | + if (SH_MATCHERS.find_in(sf, PCRE2_NO_UTF_CHECK).ignore_error()) { |
264 | 270 | return text_format_t::TF_SHELL_SCRIPT; |
265 | 271 | } |
266 | 272 |
|
267 | | - if (MAN_MATCHERS.find_in(sf).ignore_error()) { |
| 273 | + if (MAN_MATCHERS.find_in(sf, PCRE2_NO_UTF_CHECK).ignore_error()) { |
268 | 274 | return text_format_t::TF_MAN; |
269 | 275 | } |
270 | 276 |
|
271 | | - if (PYTHON_MATCHERS.find_in(sf).ignore_error()) { |
| 277 | + if (PYTHON_MATCHERS.find_in(sf, PCRE2_NO_UTF_CHECK).ignore_error()) { |
272 | 278 | return text_format_t::TF_PYTHON; |
273 | 279 | } |
274 | 280 |
|
275 | | - if (RUST_MATCHERS.find_in(sf).ignore_error()) { |
| 281 | + if (RUST_MATCHERS.find_in(sf, PCRE2_NO_UTF_CHECK).ignore_error()) { |
276 | 282 | return text_format_t::TF_RUST; |
277 | 283 | } |
278 | 284 |
|
279 | | - if (JAVA_MATCHERS.find_in(sf).ignore_error()) { |
| 285 | + if (JAVA_MATCHERS.find_in(sf, PCRE2_NO_UTF_CHECK).ignore_error()) { |
280 | 286 | return text_format_t::TF_JAVA; |
281 | 287 | } |
282 | 288 |
|
283 | | - if (C_LIKE_MATCHERS.find_in(sf).ignore_error()) { |
| 289 | + if (C_LIKE_MATCHERS.find_in(sf, PCRE2_NO_UTF_CHECK).ignore_error()) { |
284 | 290 | return text_format_t::TF_C_LIKE; |
285 | 291 | } |
286 | 292 |
|
287 | | - if (LNAV_MATCHERS.find_in(sf).ignore_error()) { |
| 293 | + if (LNAV_MATCHERS.find_in(sf, PCRE2_NO_UTF_CHECK).ignore_error()) { |
288 | 294 | return text_format_t::TF_LNAV_SCRIPT; |
289 | 295 | } |
290 | 296 |
|
291 | | - if (SQL_MATCHERS.find_in(sf).ignore_error()) { |
| 297 | + if (SQL_MATCHERS.find_in(sf, PCRE2_NO_UTF_CHECK).ignore_error()) { |
292 | 298 | return text_format_t::TF_SQL; |
293 | 299 | } |
294 | 300 |
|
295 | | - if (XML_MATCHERS.find_in(sf).ignore_error()) { |
| 301 | + if (XML_MATCHERS.find_in(sf, PCRE2_NO_UTF_CHECK).ignore_error()) { |
296 | 302 | return text_format_t::TF_XML; |
297 | 303 | } |
298 | 304 |
|
299 | | - if (INI_MATCHERS.find_in(sf).ignore_error()) { |
| 305 | + if (INI_MATCHERS.find_in(sf, PCRE2_NO_UTF_CHECK).ignore_error()) { |
300 | 306 | return text_format_t::TF_INI; |
301 | 307 | } |
302 | 308 |
|
|
0 commit comments