Mercurial > hg > octave-lojdl > gnulib-hg
changeset 2722:4ccbe804b834
The old behavior of quoting `like this' doesn't look good with
newer, ISO-style fonts. See:
http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
Instead, quote "like this" by default. Let the translator
tailor the locale-specific quoting behavior by providing
translations for {LEFT QUOTATION MARK} and {RIGHT QUOTATION MARK}.
(N_): New macro.
(gettext_default): New function.
(quotearg_buffer_restyled): Use
gettext_default ("{LEFT QUOTATION MARK}", "\"") for left quote, and
gettext_default ("{RIGHT QUOTATION MARK}", "\"") for right quote.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Sun, 09 Jul 2000 15:46:46 +0000 |
parents | 8f89acf3bc25 |
children | 00c728b0960f |
files | lib/quotearg.c |
diffstat | 1 files changed, 41 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/quotearg.c +++ b/lib/quotearg.c @@ -33,6 +33,7 @@ #else # define _(text) text #endif +#define N_(text) text #if HAVE_LIMITS_H # include <limits.h> @@ -174,6 +175,15 @@ return r; } +/* Return the translation of MSGID if there is one, and + DEFAULT_TRANSLATION otherwise. */ +static char const * +gettext_default (char const *msgid, char const *default_translation) +{ + char const *translation = _(msgid); + return translation == msgid ? default_translation : translation; +} + /* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of argument ARG (of size ARGSIZE), using QUOTING_STYLE and the non-quoting-style part of O to control quoting. @@ -222,11 +232,36 @@ break; case locale_quoting_style: - for (quote_string = _("`"); *quote_string; quote_string++) - STORE (*quote_string); - backslash_escapes = 1; - quote_string = _("'"); - quote_string_len = strlen (quote_string); + { + /* Get translations for open and closing quotation marks. + + The message catalog should translate "{LEFT QUOTATION + MARK}" to a left quotation mark suitable for the locale, + and similarly for "{RIGHT QUOTATION MARK}". If the catalog + has no translation, the code below uses a neutral + (vertical) quotation mark instead, as it is the most + appropriate for the C locale. + + For example, an American English Unicode locale should + translate the string "{LEFT QUOTATION MARK}" to the + character U+201C (LEFT DOUBLE QUOTATION MARK), and should + translate the string "{RIGHT QUOTATION MARK}" to the + character U+201D (RIGHT DOUBLE QUOTATION MARK). A British + English Unicode locale should instead translate these to + U+2018 (LEFT SINGLE QUOTATION MARK) and U+2019 (RIGHT + SINGLE QUOTATION MARK), respectively. */ + + static char const quotation_mark[] = "\""; + char const *left = gettext_default (N_("{LEFT QUOTATION MARK}"), + quotation_mark); + char const *right = gettext_default (N_("{RIGHT QUOTATION MARK}"), + quotation_mark); + for (quote_string = left; *quote_string; quote_string++) + STORE (*quote_string); + backslash_escapes = 1; + quote_string = right; + quote_string_len = strlen (quote_string); + } break; case shell_always_quoting_style: @@ -481,7 +516,7 @@ OPTIONS specifies the quoting options. The returned value points to static storage that can be reused by the next call to this function with the same value of N. - N must be nonnegative. N is deliberately declared with type `int' + N must be nonnegative. N is deliberately declared with type "int" to allow for future extensions (using negative values). */ static char * quotearg_n_options (int n, char const *arg,