X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fintl.c;h=dfc015d2123e9e9b5a5d94345f4b6b926a7bcfe8;hb=e4cdb4c6a9fe30297ea553e9724a836fd46fe331;hp=87dad51353919eee507d4a42e23564c597c1cd7f;hpb=a1a7e9d5c4b55fbcac064ab702083001c2a9cd93;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/intl.c b/gcc/intl.c index 87dad513539..dfc015d2123 100644 --- a/gcc/intl.c +++ b/gcc/intl.c @@ -1,11 +1,11 @@ /* Message translation utilities. - Copyright (C) 2001 Free Software Foundation, Inc. + Copyright (C) 2001, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later +Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY @@ -14,14 +14,25 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ +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 +#include +#endif + +/* Opening quotation mark for diagnostics. */ +const char *open_quote = "'"; + +/* Closing quotation mark for diagnostics. */ +const char *close_quote = "'"; + #ifdef ENABLE_NLS /* Initialize the translation library for GCC. This performs the @@ -30,7 +41,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA terminal, so it has be set to output messages correctly. */ void -gcc_init_libintl () +gcc_init_libintl (void) { #ifdef HAVE_LC_MESSAGES setlocale (LC_CTYPE, ""); @@ -41,6 +52,62 @@ gcc_init_libintl () (void) bindtextdomain ("gcc", LOCALEDIR); (void) textdomain ("gcc"); + + /* Opening quotation mark. */ + open_quote = _("`"); + + /* Closing quotation mark. */ + close_quote = _("'"); + + if (!strcmp (open_quote, "`") && !strcmp (close_quote, "'")) + { +#if defined HAVE_LANGINFO_CODESET + const char *encoding; +#endif + /* 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"))) + { + open_quote = "\xe2\x80\x98"; + close_quote = "\xe2\x80\x99"; + } +#endif + } +} + +#if defined HAVE_WCHAR_H && defined HAVE_WORKING_MBSTOWCS && defined HAVE_WCSWIDTH +#include + +/* Returns the width in columns of MSGSTR, which came from gettext. + This is for indenting subsequent output. */ + +size_t +gcc_gettext_width (const char *msgstr) +{ + size_t nwcs = mbstowcs (0, msgstr, 0); + wchar_t *wmsgstr = XALLOCAVEC (wchar_t, nwcs + 1); + + mbstowcs (wmsgstr, msgstr, nwcs + 1); + return wcswidth (wmsgstr, nwcs); +} + +#else /* no wcswidth */ + +/* We don't have any way of knowing how wide the string is. Guess + the length of the string. */ + +size_t +gcc_gettext_width (const char *msgstr) +{ + return strlen (msgstr); } #endif + +#endif /* ENABLE_NLS */