[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pre-lexer 09/21] lexer: Improve translatability of lex_error().
From: |
Ben Pfaff |
Subject: |
[pre-lexer 09/21] lexer: Improve translatability of lex_error(). |
Date: |
Thu, 23 Sep 2010 21:20:45 -0700 |
In general I believe that it is easier to translate full sentences or
clauses. It seems likely that "Syntax error %s at %s." where the first
%s is an arbitrary English phrase would be impossible to translate
grammatically into some languages, so this changes the general form to
"Syntax error at %s: %s." which seems more likely to be translatable while
not changing the English meaning.
---
src/language/expressions/parse.c | 2 +-
src/language/lexer/lexer.c | 31 +++++++++++++++++--------------
tests/command/missing-values.sh | 2 +-
tests/command/rank.sh | 4 ++--
tests/language/expressions/evaluate.at | 8 ++++----
5 files changed, 25 insertions(+), 22 deletions(-)
diff --git a/src/language/expressions/parse.c b/src/language/expressions/parse.c
index 7e093df..f2b4f1c 100644
--- a/src/language/expressions/parse.c
+++ b/src/language/expressions/parse.c
@@ -892,7 +892,7 @@ parse_primary (struct lexer *lexer, struct expression *e)
}
default:
- lex_error (lexer, _("in expression"));
+ lex_error (lexer, NULL);
return NULL;
}
}
diff --git a/src/language/lexer/lexer.c b/src/language/lexer/lexer.c
index 9b879c7..3dda38a 100644
--- a/src/language/lexer/lexer.c
+++ b/src/language/lexer/lexer.c
@@ -1,5 +1,5 @@
/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2006, 2009 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2006, 2009, 2010 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -440,31 +440,34 @@ lex_sbc_missing (struct lexer *lexer, const char *sbc)
void
lex_error (struct lexer *lexer, const char *message, ...)
{
- char *token_rep;
- char where[128];
+ struct string s;
+
+ ds_init_empty (&s);
- token_rep = lex_token_representation (lexer);
if (lexer->token == T_STOP)
- strcpy (where, "end of file");
+ ds_put_cstr (&s, _("Syntax error at end of file"));
else if (lexer->token == '.')
- strcpy (where, "end of command");
+ ds_put_cstr (&s, _("Syntax error at end of command"));
else
- snprintf (where, sizeof where, "`%s'", token_rep);
- free (token_rep);
+ {
+ char *token_rep = lex_token_representation (lexer);
+ ds_put_format (&s, _("Syntax error at `%s'"), token_rep);
+ free (token_rep);
+ }
if (message)
{
- char buf[1024];
va_list args;
+ ds_put_cstr (&s, ": ");
+
va_start (args, message);
- vsnprintf (buf, 1024, message, args);
+ ds_put_vformat (&s, message, args);
va_end (args);
-
- msg (SE, _("Syntax error %s at %s."), buf, where);
}
- else
- msg (SE, _("Syntax error at %s."), where);
+
+ msg (SE, "%s.", ds_cstr (&s));
+ ds_destroy (&s);
}
/* Checks that we're at end of command.
diff --git a/tests/command/missing-values.sh b/tests/command/missing-values.sh
index 7d567ac..e5cb0c1 100755
--- a/tests/command/missing-values.sh
+++ b/tests/command/missing-values.sh
@@ -127,7 +127,7 @@ activity="compare error messages"
diff -u -w $TEMPDIR/errs - <<EOF
$TEMPDIR/missing-values.stat:35: error: MISSING VALUES: Missing values
provided are too long to assign to variable of width 3.
$TEMPDIR/missing-values.stat:38: error: MISSING VALUES: Truncating missing
value to maximum acceptable length (8 bytes).
-$TEMPDIR/missing-values.stat:41: error: MISSING VALUES: Syntax error expecting
string at \`THRU'.
+$TEMPDIR/missing-values.stat:41: error: MISSING VALUES: Syntax error at
\`THRU': expecting string.
$TEMPDIR/missing-values.stat:41: error: MISSING VALUES: THRU is not a variable
name.
$TEMPDIR/missing-values.stat:44: error: MISSING VALUES: Cannot mix numeric
variables (e.g. num1) and string variables (e.g. str1) within a single list.
EOF
diff --git a/tests/command/rank.sh b/tests/command/rank.sh
index 8114c43..6267788 100755
--- a/tests/command/rank.sh
+++ b/tests/command/rank.sh
@@ -137,8 +137,8 @@ if [ $? -ne 1 ] ; then fail ; fi
activity="compare errors"
perl -pi -e 's/^\s*$//g' $TEMPDIR/errs
diff -b $TEMPDIR/errs - << EOF
-$TEMPDIR/rank.sh.sps:15: error: RANK: Syntax error expecting \`(' at end of
command.
-$TEMPDIR/rank.sh.sps:19: error: RANK: Syntax error expecting integer at \`d'.
+$TEMPDIR/rank.sh.sps:15: error: RANK: Syntax error at end of command:
expecting \`('.
+$TEMPDIR/rank.sh.sps:19: error: RANK: Syntax error at \`d': expecting integer.
$TEMPDIR/rank.sh.sps:25: error: RANK: Variable x already exists.
$TEMPDIR/rank.sh.sps:30: error: RANK: Too many variables in INTO clause.
EOF
diff --git a/tests/language/expressions/evaluate.at
b/tests/language/expressions/evaluate.at
index 28a4dd5..a714422 100644
--- a/tests/language/expressions/evaluate.at
+++ b/tests/language/expressions/evaluate.at
@@ -188,7 +188,7 @@ dnl Mathematically true:
[[2 le 2], [true]],
dnl Make sure <= token can't be split:
[[2 < = 2], [error],
- [error: DEBUG EVALUATE: Syntax error in expression at `='.]],
+ [error: DEBUG EVALUATE: Syntax error at `='.]],
[[1 <= 'foobar'], [error],
[error: DEBUG EVALUATE: Type mismatch while applying numeric
less-than-or-equal-to (`<=') operator: cannot convert string to number.]],
[[5 <= 'foobar'], [error],
@@ -229,7 +229,7 @@ CHECK_EXPR_EVAL([>= > <>],
[[2 ge 2], [true]],
dnl Make sure >= token can't be split:
[[2 > = 2], [error],
- [error: DEBUG EVALUATE: Syntax error in expression at `='.]],
+ [error: DEBUG EVALUATE: Syntax error at `='.]],
[[1 >= 'foobar'], [error],
[error: DEBUG EVALUATE: Type mismatch while applying numeric
greater-than-or-equal-to (`>=') operator: cannot convert string to number.]],
[[5 ge 'foobar'], [error],
@@ -281,10 +281,10 @@ dnl Make sure >= token can't be split:
[['asdfj ' ne 'asdf'], [true]],
dnl <> token can't be split:
[[1 < > 1], [error],
- [error: DEBUG EVALUATE: Syntax error in expression at `GT'.]],
+ [error: DEBUG EVALUATE: Syntax error at `GT'.]],
dnl # ~= token can't be split:
[[1 ~ = 1], [error],
- [error: DEBUG EVALUATE: Syntax error expecting end of command at `NOT'.]])
+ [error: DEBUG EVALUATE: Syntax error at `NOT': expecting end of command.]])
CHECK_EXPR_EVAL([exp lg10 ln sqrt abs mod mod10 rnd trunc],
[[exp(10)], [22026.47]],
--
1.7.1
- [pre-lexer 13/21] command: Remove superfluous trailing spaces from command names., (continued)
- [pre-lexer 13/21] command: Remove superfluous trailing spaces from command names., Ben Pfaff, 2010/09/24
- [pre-lexer 19/21] data-in: Rewrite logic for recoding input, and get rid of src_enc member., Ben Pfaff, 2010/09/24
- [pre-lexer 03/21] i18n: New function recode_substring_pool()., Ben Pfaff, 2010/09/24
- [pre-lexer 11/21] lexer: Use lex_is_string() more consistently., Ben Pfaff, 2010/09/24
- [pre-lexer 04/21] syntax-string-source: Fix format string problems., Ben Pfaff, 2010/09/24
- [pre-lexer 08/21] Make translation easier., Ben Pfaff, 2010/09/24
- [pre-lexer 14/21] command: Add specific DATASET unimplemented commands., Ben Pfaff, 2010/09/24
- [pre-lexer 12/21] command: Remove INSERT from list of unimplemented commands., Ben Pfaff, 2010/09/24
- [pre-lexer 20/21] data-in: Make data_in() parameters more uniform., Ben Pfaff, 2010/09/24
- [pre-lexer 02/21] i18n: Use UTF8 macro instead of "UTF8" literal string., Ben Pfaff, 2010/09/24
- [pre-lexer 09/21] lexer: Improve translatability of lex_error().,
Ben Pfaff <=
- [pre-lexer 15/21] message: Consistently initialize locator; use 0 for "no line number"., Ben Pfaff, 2010/09/24
- [pre-lexer 06/21] AGGREGATE: Simplify code., Ben Pfaff, 2010/09/24
- [pre-lexer 17/21] calendar: Use sensible error reporting in calendar_gregorian_to_offset()., Ben Pfaff, 2010/09/24
- [pre-lexer 16/21] message: Add column range to struct msg_locator., Ben Pfaff, 2010/09/24
- [pre-lexer 05/21] PERMISSIONS: Add missing check for string token., Ben Pfaff, 2010/09/24
- [pre-lexer 10/21] lexer: Remove DUMP_TOKENS debugging feature., Ben Pfaff, 2010/09/24
- [pre-lexer 18/21] data-in: Eliminate "implied_decimals" parameter from data_in()., Ben Pfaff, 2010/09/24
- [pre-lexer 21/21] data-in: Get rid of first_column, last_column arguments., Ben Pfaff, 2010/09/24
- [pre-lexer 07/21] HOST: Use more modern syntax., Ben Pfaff, 2010/09/24
- Re: [pre-lexer 00/21] preparation for work on lexer, John Darrington, 2010/09/24