From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- gcc/intl.c | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 gcc/intl.c (limited to 'gcc/intl.c') diff --git a/gcc/intl.c b/gcc/intl.c new file mode 100644 index 000000000..c13ab8e63 --- /dev/null +++ b/gcc/intl.c @@ -0,0 +1,151 @@ +/* Message translation utilities. + Copyright (C) 2001, 2003, 2004, 2005, 2007, 2008, 2009, 2010 + 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 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +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 COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "coretypes.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 = "'"; + +/* 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 + appropriate sequence of calls - setlocale, bindtextdomain, + textdomain. LC_CTYPE determines the character set used by the + terminal, so it has be set to output messages correctly. */ + +void +gcc_init_libintl (void) +{ +#ifdef HAVE_LC_MESSAGES + setlocale (LC_CTYPE, ""); + setlocale (LC_MESSAGES, ""); +#else + setlocale (LC_ALL, ""); +#endif + + (void) bindtextdomain ("gcc", LOCALEDIR); + (void) textdomain ("gcc"); + + /* Opening quotation mark. */ + open_quote = _("`"); + + /* Closing quotation mark. */ + close_quote = _("'"); + +#if defined HAVE_LANGINFO_CODESET + 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 + if (locale_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 */ + +#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; +} + + + -- cgit v1.2.3