From 8a5ea0833a6428f2ed783693c7572bfdd88aa9d5 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Fri, 6 Sep 2024 17:45:58 +0200 Subject: Improve error messages a tiny bit --- src/lexer.l | 25 ++++++++++++++++++++----- src/main.c | 9 ++++----- 2 files changed, 24 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/lexer.l b/src/lexer.l index 39c9443..5317966 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -25,7 +25,7 @@ yylloc.last_column = 1; \ } while (false) \ -extern bool interactive; +extern bool interactive, utf8; extern const char *current_file; %} @@ -77,12 +77,27 @@ ws [ \t] offending token but instead on the next line typed by the user. */ . { char ch = *yytext; + + static const char *quotes[][2] = { + {"`", "'"}, + {"‘", "’"}, + }; + + const char *lquot = quotes[utf8][0], + *rquot = quotes[utf8][1]; + if (ch == '&') { - user_error("%s:%d:%d: Unrecognized character ‘%c’, did you mean ‘%c%c’?", - current_file, yylloc.first_line, yylloc.first_column, ch, ch, ch); + user_error("%s:%d:%d: Unrecognized character %s&%s, did you mean %s&&%s?", + current_file, yylloc.first_line, yylloc.first_column, + lquot, rquot, lquot, rquot); + } else if (ch == '^') { + user_error("%s:%d:%d: Unrecognized character %s^%s, did you mean %s~%s?", + current_file, yylloc.first_line, yylloc.first_column, + lquot, rquot, lquot, rquot); } else { - user_error("%s:%d:%d: Unrecognized character ‘%c’", - current_file, yylloc.first_line, yylloc.first_column, ch); + user_error("%s:%d:%d: Unrecognized character %s%c%s", + current_file, yylloc.first_line, yylloc.first_column, + lquot, ch, rquot); } BEGIN(error); return YYerror; diff --git a/src/main.c b/src/main.c index 81fe189..3fe6967 100644 --- a/src/main.c +++ b/src/main.c @@ -43,7 +43,7 @@ static int rv; static bool_style_t bflag = BS_BINARY; static tbl_style_t tflag = TS_UNSET; -bool interactive; +bool interactive, utf8; const char *current_file; static void astprocess_cli(asts_t); @@ -119,10 +119,9 @@ usage: } } - if (tflag == TS_UNSET) { - tflag = streq(nl_langinfo(CODESET), "UTF-8") - ? TS_UTF8 : TS_ASCII; - } + utf8 = streq(nl_langinfo(CODESET), "UTF-8"); + if (tflag == TS_UNSET) + tflag = utf8 ? TS_UTF8 : TS_ASCII; argc -= optind; argv += optind; -- cgit v1.2.3