X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fintl.c;h=c13ab8e63d8a3898e0231535b86bcfdad9e31bf2;hb=467fa2ada0cbc1b7b81db7567540e8e46dbca920;hp=f76dbada97b45517737f5fd9432941cffa005b56;hpb=8c4c00c181e6df4f0a9afc76e4c9edbbc1c2fd41;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/intl.c b/gcc/intl.c index f76dbada97b..c13ab8e63d8 100644 --- a/gcc/intl.c +++ b/gcc/intl.c @@ -1,5 +1,6 @@ /* Message translation utilities. - Copyright (C) 2001, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. + Copyright (C) 2001, 2003, 2004, 2005, 2007, 2008, 2009, 2010 + Free Software Foundation, Inc. This file is part of GCC. @@ -20,7 +21,6 @@ along with GCC; see the file COPYING3. If not see #include "config.h" #include "system.h" #include "coretypes.h" -#include "tm.h" #include "intl.h" #ifdef HAVE_LANGINFO_CODESET @@ -33,6 +33,12 @@ const char *open_quote = "'"; /* Closing quotation mark for diagnostics. */ const char *close_quote = "'"; +/* The name of the locale encoding. */ +const char *locale_encoding = NULL; + +/* Whether the locale is using UTF-8. */ +bool locale_utf8 = false; + #ifdef ENABLE_NLS /* Initialize the translation library for GCC. This performs the @@ -59,20 +65,22 @@ gcc_init_libintl (void) /* Closing quotation mark. */ close_quote = _("'"); - if (!strcmp (open_quote, "`") && !strcmp (close_quote, "'")) - { #if defined HAVE_LANGINFO_CODESET - const char *encoding; + locale_encoding = nl_langinfo (CODESET); + if (locale_encoding != NULL + && (!strcasecmp (locale_encoding, "utf-8") + || !strcasecmp (locale_encoding, "utf8"))) + locale_utf8 = true; #endif + + if (!strcmp (open_quote, "`") && !strcmp (close_quote, "'")) + { /* Untranslated quotes that it may be possible to replace with U+2018 and U+2019; but otherwise use "'" instead of "`" as opening quote. */ open_quote = "'"; #if defined HAVE_LANGINFO_CODESET - encoding = nl_langinfo (CODESET); - if (encoding != NULL - && (!strcasecmp (encoding, "utf-8") - || !strcasecmp (encoding, "utf8"))) + if (locale_utf8) { open_quote = "\xe2\x80\x98"; close_quote = "\xe2\x80\x99"; @@ -91,7 +99,7 @@ size_t gcc_gettext_width (const char *msgstr) { size_t nwcs = mbstowcs (0, msgstr, 0); - wchar_t *wmsgstr = alloca ((nwcs + 1) * sizeof (wchar_t)); + wchar_t *wmsgstr = XALLOCAVEC (wchar_t, nwcs + 1); mbstowcs (wmsgstr, msgstr, nwcs + 1); return wcswidth (wmsgstr, nwcs); @@ -111,3 +119,33 @@ gcc_gettext_width (const char *msgstr) #endif #endif /* ENABLE_NLS */ + +#ifndef ENABLE_NLS + +const char * +fake_ngettext (const char *singular, const char *plural, unsigned long n) +{ + if (n == 1UL) + return singular; + + return plural; +} + +#endif + +/* Return the indent for successive lines, using the width of + the STR. STR must have been translated already. The string + must be freed by the caller. */ + +char * +get_spaces (const char *str) +{ + size_t len = gcc_gettext_width (str); + char *spaces = XNEWVEC(char, len + 1); + memset (spaces, ' ', len); + spaces[len] = '\0'; + return spaces; +} + + +