OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [gcc/] [intl.c] - Diff between revs 816 and 826

Only display areas with differences | Details | Blame | View Log

Rev 816 Rev 826
/* Message translation utilities.
/* Message translation utilities.
   Copyright (C) 2001, 2003, 2004, 2005, 2007, 2008, 2009, 2010
   Copyright (C) 2001, 2003, 2004, 2005, 2007, 2008, 2009, 2010
   Free Software Foundation, Inc.
   Free Software Foundation, Inc.
 
 
This file is part of GCC.
This file is part of GCC.
 
 
GCC is free software; you can redistribute it and/or modify it under
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
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
Software Foundation; either version 3, or (at your option) any later
version.
version.
 
 
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.
for more details.
 
 
You should have received a copy of the GNU General Public License
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */
<http://www.gnu.org/licenses/>.  */
 
 
#include "config.h"
#include "config.h"
#include "system.h"
#include "system.h"
#include "coretypes.h"
#include "coretypes.h"
#include "tm.h"
#include "tm.h"
#include "intl.h"
#include "intl.h"
 
 
#ifdef HAVE_LANGINFO_CODESET
#ifdef HAVE_LANGINFO_CODESET
#include <langinfo.h>
#include <langinfo.h>
#endif
#endif
 
 
/* Opening quotation mark for diagnostics.  */
/* Opening quotation mark for diagnostics.  */
const char *open_quote = "'";
const char *open_quote = "'";
 
 
/* Closing quotation mark for diagnostics.  */
/* Closing quotation mark for diagnostics.  */
const char *close_quote = "'";
const char *close_quote = "'";
 
 
/* The name of the locale encoding.  */
/* The name of the locale encoding.  */
const char *locale_encoding = NULL;
const char *locale_encoding = NULL;
 
 
/* Whether the locale is using UTF-8.  */
/* Whether the locale is using UTF-8.  */
bool locale_utf8 = false;
bool locale_utf8 = false;
 
 
#ifdef ENABLE_NLS
#ifdef ENABLE_NLS
 
 
/* Initialize the translation library for GCC.  This performs the
/* Initialize the translation library for GCC.  This performs the
   appropriate sequence of calls - setlocale, bindtextdomain,
   appropriate sequence of calls - setlocale, bindtextdomain,
   textdomain.  LC_CTYPE determines the character set used by the
   textdomain.  LC_CTYPE determines the character set used by the
   terminal, so it has be set to output messages correctly.  */
   terminal, so it has be set to output messages correctly.  */
 
 
void
void
gcc_init_libintl (void)
gcc_init_libintl (void)
{
{
#ifdef HAVE_LC_MESSAGES
#ifdef HAVE_LC_MESSAGES
  setlocale (LC_CTYPE, "");
  setlocale (LC_CTYPE, "");
  setlocale (LC_MESSAGES, "");
  setlocale (LC_MESSAGES, "");
#else
#else
  setlocale (LC_ALL, "");
  setlocale (LC_ALL, "");
#endif
#endif
 
 
  (void) bindtextdomain ("gcc", LOCALEDIR);
  (void) bindtextdomain ("gcc", LOCALEDIR);
  (void) textdomain ("gcc");
  (void) textdomain ("gcc");
 
 
  /* Opening quotation mark.  */
  /* Opening quotation mark.  */
  open_quote = _("`");
  open_quote = _("`");
 
 
  /* Closing quotation mark.  */
  /* Closing quotation mark.  */
  close_quote = _("'");
  close_quote = _("'");
 
 
#if defined HAVE_LANGINFO_CODESET
#if defined HAVE_LANGINFO_CODESET
  locale_encoding = nl_langinfo (CODESET);
  locale_encoding = nl_langinfo (CODESET);
  if (locale_encoding != NULL
  if (locale_encoding != NULL
      && (!strcasecmp (locale_encoding, "utf-8")
      && (!strcasecmp (locale_encoding, "utf-8")
          || !strcasecmp (locale_encoding, "utf8")))
          || !strcasecmp (locale_encoding, "utf8")))
    locale_utf8 = true;
    locale_utf8 = true;
#endif
#endif
 
 
  if (!strcmp (open_quote, "`") && !strcmp (close_quote, "'"))
  if (!strcmp (open_quote, "`") && !strcmp (close_quote, "'"))
    {
    {
      /* Untranslated quotes that it may be possible to replace with
      /* Untranslated quotes that it may be possible to replace with
         U+2018 and U+2019; but otherwise use "'" instead of "`" as
         U+2018 and U+2019; but otherwise use "'" instead of "`" as
         opening quote.  */
         opening quote.  */
      open_quote = "'";
      open_quote = "'";
#if defined HAVE_LANGINFO_CODESET
#if defined HAVE_LANGINFO_CODESET
      if (locale_utf8)
      if (locale_utf8)
        {
        {
          open_quote = "\xe2\x80\x98";
          open_quote = "\xe2\x80\x98";
          close_quote = "\xe2\x80\x99";
          close_quote = "\xe2\x80\x99";
        }
        }
#endif
#endif
    }
    }
}
}
 
 
#if defined HAVE_WCHAR_H && defined HAVE_WORKING_MBSTOWCS && defined HAVE_WCSWIDTH
#if defined HAVE_WCHAR_H && defined HAVE_WORKING_MBSTOWCS && defined HAVE_WCSWIDTH
#include <wchar.h>
#include <wchar.h>
 
 
/* Returns the width in columns of MSGSTR, which came from gettext.
/* Returns the width in columns of MSGSTR, which came from gettext.
   This is for indenting subsequent output.  */
   This is for indenting subsequent output.  */
 
 
size_t
size_t
gcc_gettext_width (const char *msgstr)
gcc_gettext_width (const char *msgstr)
{
{
  size_t nwcs = mbstowcs (0, msgstr, 0);
  size_t nwcs = mbstowcs (0, msgstr, 0);
  wchar_t *wmsgstr = XALLOCAVEC (wchar_t, nwcs + 1);
  wchar_t *wmsgstr = XALLOCAVEC (wchar_t, nwcs + 1);
 
 
  mbstowcs (wmsgstr, msgstr, nwcs + 1);
  mbstowcs (wmsgstr, msgstr, nwcs + 1);
  return wcswidth (wmsgstr, nwcs);
  return wcswidth (wmsgstr, nwcs);
}
}
 
 
#else  /* no wcswidth */
#else  /* no wcswidth */
 
 
/* We don't have any way of knowing how wide the string is.  Guess
/* We don't have any way of knowing how wide the string is.  Guess
   the length of the string.  */
   the length of the string.  */
 
 
size_t
size_t
gcc_gettext_width (const char *msgstr)
gcc_gettext_width (const char *msgstr)
{
{
  return strlen (msgstr);
  return strlen (msgstr);
}
}
 
 
#endif
#endif
 
 
#endif /* ENABLE_NLS */
#endif /* ENABLE_NLS */
 
 
#ifndef ENABLE_NLS
#ifndef ENABLE_NLS
 
 
const char *
const char *
fake_ngettext (const char *singular, const char *plural, unsigned long n)
fake_ngettext (const char *singular, const char *plural, unsigned long n)
{
{
  if (n == 1UL)
  if (n == 1UL)
    return singular;
    return singular;
 
 
  return plural;
  return plural;
}
}
 
 
#endif
#endif
 
 
/* Return the indent for successive lines, using the width of
/* Return the indent for successive lines, using the width of
   the STR.  STR must have been translated already.  The string
   the STR.  STR must have been translated already.  The string
   must be freed by the caller.  */
   must be freed by the caller.  */
 
 
char *
char *
get_spaces (const char *str)
get_spaces (const char *str)
{
{
   size_t len = gcc_gettext_width (str);
   size_t len = gcc_gettext_width (str);
   char *spaces = XNEWVEC(char, len + 1);
   char *spaces = XNEWVEC(char, len + 1);
   memset (spaces, ' ', len);
   memset (spaces, ' ', len);
   spaces[len] = '\0';
   spaces[len] = '\0';
   return spaces;
   return spaces;
}
}
 
 
 
 
 
 
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.