Blame intl/libgnuintl.h

Packit bbfece
/* Message catalogs for internationalization.
Packit bbfece
   Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
Packit bbfece
Packit bbfece
   This program is free software; you can redistribute it and/or modify it
Packit bbfece
   under the terms of the GNU Library General Public License as published
Packit bbfece
   by the Free Software Foundation; either version 2, or (at your option)
Packit bbfece
   any later version.
Packit bbfece
Packit bbfece
   This program is distributed in the hope that it will be useful,
Packit bbfece
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit bbfece
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit bbfece
   Library General Public License for more details.
Packit bbfece
Packit bbfece
   You should have received a copy of the GNU Library General Public
Packit bbfece
   License along with this program; if not, write to the Free Software
Packit bbfece
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
Packit bbfece
   USA.  */
Packit bbfece
Packit bbfece
#ifndef _LIBINTL_H
Packit bbfece
#define _LIBINTL_H	1
Packit bbfece
Packit bbfece
#include <locale.h>
Packit bbfece
Packit bbfece
/* The LC_MESSAGES locale category is the category used by the functions
Packit bbfece
   gettext() and dgettext().  It is specified in POSIX, but not in ANSI C.
Packit bbfece
   On systems that don't define it, use an arbitrary value instead.
Packit bbfece
   On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
Packit bbfece
   then includes <libintl.h> (i.e. this file!) and then only defines
Packit bbfece
   LC_MESSAGES.  To avoid a redefinition warning, don't define LC_MESSAGES
Packit bbfece
   in this case.  */
Packit bbfece
#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
Packit bbfece
# define LC_MESSAGES 1729
Packit bbfece
#endif
Packit bbfece
Packit bbfece
/* We define an additional symbol to signal that we use the GNU
Packit bbfece
   implementation of gettext.  */
Packit bbfece
#define __USE_GNU_GETTEXT 1
Packit bbfece
Packit bbfece
/* Provide information about the supported file formats.  Returns the
Packit bbfece
   maximum minor revision number supported for a given major revision.  */
Packit bbfece
#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
Packit bbfece
  ((major) == 0 ? 1 : -1)
Packit bbfece
Packit bbfece
/* Resolve a platform specific conflict on DJGPP.  GNU gettext takes
Packit bbfece
   precedence over _conio_gettext.  */
Packit bbfece
#ifdef __DJGPP__
Packit bbfece
# undef gettext
Packit bbfece
#endif
Packit bbfece
Packit bbfece
/* Use _INTL_PARAMS, not PARAMS, in order to avoid clashes with identifiers
Packit bbfece
   used by programs.  Similarly, test __PROTOTYPES, not PROTOTYPES.  */
Packit bbfece
#ifndef _INTL_PARAMS
Packit bbfece
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
Packit bbfece
#  define _INTL_PARAMS(args) args
Packit bbfece
# else
Packit bbfece
#  define _INTL_PARAMS(args) ()
Packit bbfece
# endif
Packit bbfece
#endif
Packit bbfece
Packit bbfece
#ifdef __cplusplus
Packit bbfece
extern "C" {
Packit bbfece
#endif
Packit bbfece
Packit bbfece
Packit bbfece
/* We redirect the functions to those prefixed with "libintl_".  This is
Packit bbfece
   necessary, because some systems define gettext/textdomain/... in the C
Packit bbfece
   library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
Packit bbfece
   If we used the unprefixed names, there would be cases where the
Packit bbfece
   definition in the C library would override the one in the libintl.so
Packit bbfece
   shared library.  Recall that on ELF systems, the symbols are looked
Packit bbfece
   up in the following order:
Packit bbfece
     1. in the executable,
Packit bbfece
     2. in the shared libraries specified on the link command line, in order,
Packit bbfece
     3. in the dependencies of the shared libraries specified on the link
Packit bbfece
        command line,
Packit bbfece
     4. in the dlopen()ed shared libraries, in the order in which they were
Packit bbfece
        dlopen()ed.
Packit bbfece
   The definition in the C library would override the one in libintl.so if
Packit bbfece
   either
Packit bbfece
     * -lc is given on the link command line and -lintl isn't, or
Packit bbfece
     * -lc is given on the link command line before -lintl, or
Packit bbfece
     * libintl.so is a dependency of a dlopen()ed shared library but not
Packit bbfece
       linked to the executable at link time.
Packit bbfece
   Since Solaris gettext() behaves differently than GNU gettext(), this
Packit bbfece
   would be unacceptable.
Packit bbfece
Packit bbfece
   The redirection happens by default through macros in C, so that &gettext
Packit bbfece
   is independent of the compilation unit, but through inline functions in
Packit bbfece
   C++, in order not to interfere with the name mangling of class fields or
Packit bbfece
   class methods called 'gettext'.  */
Packit bbfece
Packit bbfece
/* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
Packit bbfece
   If he doesn't, we choose the method.  A third possible method is
Packit bbfece
   _INTL_REDIRECT_ASM, supported only by GCC.  */
Packit bbfece
#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
Packit bbfece
# if __GNUC__ >= 2 && !defined __APPLE_CC__ && (defined __STDC__ || defined __cplusplus)
Packit bbfece
#  define _INTL_REDIRECT_ASM
Packit bbfece
# else
Packit bbfece
#  ifdef __cplusplus
Packit bbfece
#   define _INTL_REDIRECT_INLINE
Packit bbfece
#  else
Packit bbfece
#   define _INTL_REDIRECT_MACROS
Packit bbfece
#  endif
Packit bbfece
# endif
Packit bbfece
#endif
Packit bbfece
/* Auxiliary macros.  */
Packit bbfece
#ifdef _INTL_REDIRECT_ASM
Packit bbfece
# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
Packit bbfece
# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
Packit bbfece
# define _INTL_STRINGIFY(prefix) #prefix
Packit bbfece
#else
Packit bbfece
# define _INTL_ASM(cname)
Packit bbfece
#endif
Packit bbfece
Packit bbfece
/* _INTL_MAY_RETURN_STRING_ARG(n) declares that the given function may return
Packit bbfece
   its n-th argument literally.  This enables GCC to warn for example about
Packit bbfece
   printf (gettext ("foo %y")).  */
Packit bbfece
#if __GNUC__ >= 3 && !(__APPLE_CC__ > 1 && defined __cplusplus)
Packit bbfece
# define _INTL_MAY_RETURN_STRING_ARG(n) __attribute__ ((__format_arg__ (n)))
Packit bbfece
#else
Packit bbfece
# define _INTL_MAY_RETURN_STRING_ARG(n)
Packit bbfece
#endif
Packit bbfece
Packit bbfece
/* Look up MSGID in the current default message catalog for the current
Packit bbfece
   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
Packit bbfece
   text).  */
Packit bbfece
#ifdef _INTL_REDIRECT_INLINE
Packit bbfece
extern char *libintl_gettext (const char *__msgid)
Packit bbfece
       _INTL_MAY_RETURN_STRING_ARG (1);
Packit bbfece
static inline char *gettext (const char *__msgid)
Packit bbfece
{
Packit bbfece
  return libintl_gettext (__msgid);
Packit bbfece
}
Packit bbfece
#else
Packit bbfece
#ifdef _INTL_REDIRECT_MACROS
Packit bbfece
# define gettext libintl_gettext
Packit bbfece
#endif
Packit bbfece
extern char *gettext _INTL_PARAMS ((const char *__msgid))
Packit bbfece
       _INTL_ASM (libintl_gettext)
Packit bbfece
       _INTL_MAY_RETURN_STRING_ARG (1);
Packit bbfece
#endif
Packit bbfece
Packit bbfece
/* Look up MSGID in the DOMAINNAME message catalog for the current
Packit bbfece
   LC_MESSAGES locale.  */
Packit bbfece
#ifdef _INTL_REDIRECT_INLINE
Packit bbfece
extern char *libintl_dgettext (const char *__domainname, const char *__msgid)
Packit bbfece
       _INTL_MAY_RETURN_STRING_ARG (2);
Packit bbfece
static inline char *dgettext (const char *__domainname, const char *__msgid)
Packit bbfece
{
Packit bbfece
  return libintl_dgettext (__domainname, __msgid);
Packit bbfece
}
Packit bbfece
#else
Packit bbfece
#ifdef _INTL_REDIRECT_MACROS
Packit bbfece
# define dgettext libintl_dgettext
Packit bbfece
#endif
Packit bbfece
extern char *dgettext _INTL_PARAMS ((const char *__domainname,
Packit bbfece
				     const char *__msgid))
Packit bbfece
       _INTL_ASM (libintl_dgettext)
Packit bbfece
       _INTL_MAY_RETURN_STRING_ARG (2);
Packit bbfece
#endif
Packit bbfece
Packit bbfece
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
Packit bbfece
   locale.  */
Packit bbfece
#ifdef _INTL_REDIRECT_INLINE
Packit bbfece
extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
Packit bbfece
				int __category)
Packit bbfece
       _INTL_MAY_RETURN_STRING_ARG (2);
Packit bbfece
static inline char *dcgettext (const char *__domainname, const char *__msgid,
Packit bbfece
			       int __category)
Packit bbfece
{
Packit bbfece
  return libintl_dcgettext (__domainname, __msgid, __category);
Packit bbfece
}
Packit bbfece
#else
Packit bbfece
#ifdef _INTL_REDIRECT_MACROS
Packit bbfece
# define dcgettext libintl_dcgettext
Packit bbfece
#endif
Packit bbfece
extern char *dcgettext _INTL_PARAMS ((const char *__domainname,
Packit bbfece
				      const char *__msgid,
Packit bbfece
				      int __category))
Packit bbfece
       _INTL_ASM (libintl_dcgettext)
Packit bbfece
       _INTL_MAY_RETURN_STRING_ARG (2);
Packit bbfece
#endif
Packit bbfece
Packit bbfece
Packit bbfece
/* Similar to `gettext' but select the plural form corresponding to the
Packit bbfece
   number N.  */
Packit bbfece
#ifdef _INTL_REDIRECT_INLINE
Packit bbfece
extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
Packit bbfece
			       unsigned long int __n)
Packit bbfece
       _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2);
Packit bbfece
static inline char *ngettext (const char *__msgid1, const char *__msgid2,
Packit bbfece
			      unsigned long int __n)
Packit bbfece
{
Packit bbfece
  return libintl_ngettext (__msgid1, __msgid2, __n);
Packit bbfece
}
Packit bbfece
#else
Packit bbfece
#ifdef _INTL_REDIRECT_MACROS
Packit bbfece
# define ngettext libintl_ngettext
Packit bbfece
#endif
Packit bbfece
extern char *ngettext _INTL_PARAMS ((const char *__msgid1,
Packit bbfece
				     const char *__msgid2,
Packit bbfece
				     unsigned long int __n))
Packit bbfece
       _INTL_ASM (libintl_ngettext)
Packit bbfece
       _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2);
Packit bbfece
#endif
Packit bbfece
Packit bbfece
/* Similar to `dgettext' but select the plural form corresponding to the
Packit bbfece
   number N.  */
Packit bbfece
#ifdef _INTL_REDIRECT_INLINE
Packit bbfece
extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
Packit bbfece
				const char *__msgid2, unsigned long int __n)
Packit bbfece
       _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
Packit bbfece
static inline char *dngettext (const char *__domainname, const char *__msgid1,
Packit bbfece
			       const char *__msgid2, unsigned long int __n)
Packit bbfece
{
Packit bbfece
  return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
Packit bbfece
}
Packit bbfece
#else
Packit bbfece
#ifdef _INTL_REDIRECT_MACROS
Packit bbfece
# define dngettext libintl_dngettext
Packit bbfece
#endif
Packit bbfece
extern char *dngettext _INTL_PARAMS ((const char *__domainname,
Packit bbfece
				      const char *__msgid1,
Packit bbfece
				      const char *__msgid2,
Packit bbfece
				      unsigned long int __n))
Packit bbfece
       _INTL_ASM (libintl_dngettext)
Packit bbfece
       _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
Packit bbfece
#endif
Packit bbfece
Packit bbfece
/* Similar to `dcgettext' but select the plural form corresponding to the
Packit bbfece
   number N.  */
Packit bbfece
#ifdef _INTL_REDIRECT_INLINE
Packit bbfece
extern char *libintl_dcngettext (const char *__domainname,
Packit bbfece
				 const char *__msgid1, const char *__msgid2,
Packit bbfece
				 unsigned long int __n, int __category)
Packit bbfece
       _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
Packit bbfece
static inline char *dcngettext (const char *__domainname,
Packit bbfece
				const char *__msgid1, const char *__msgid2,
Packit bbfece
				unsigned long int __n, int __category)
Packit bbfece
{
Packit bbfece
  return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
Packit bbfece
}
Packit bbfece
#else
Packit bbfece
#ifdef _INTL_REDIRECT_MACROS
Packit bbfece
# define dcngettext libintl_dcngettext
Packit bbfece
#endif
Packit bbfece
extern char *dcngettext _INTL_PARAMS ((const char *__domainname,
Packit bbfece
				       const char *__msgid1,
Packit bbfece
				       const char *__msgid2,
Packit bbfece
				       unsigned long int __n,
Packit bbfece
				       int __category))
Packit bbfece
       _INTL_ASM (libintl_dcngettext)
Packit bbfece
       _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
Packit bbfece
#endif
Packit bbfece
Packit bbfece
Packit bbfece
/* Set the current default message catalog to DOMAINNAME.
Packit bbfece
   If DOMAINNAME is null, return the current default.
Packit bbfece
   If DOMAINNAME is "", reset to the default of "messages".  */
Packit bbfece
#ifdef _INTL_REDIRECT_INLINE
Packit bbfece
extern char *libintl_textdomain (const char *__domainname);
Packit bbfece
static inline char *textdomain (const char *__domainname)
Packit bbfece
{
Packit bbfece
  return libintl_textdomain (__domainname);
Packit bbfece
}
Packit bbfece
#else
Packit bbfece
#ifdef _INTL_REDIRECT_MACROS
Packit bbfece
# define textdomain libintl_textdomain
Packit bbfece
#endif
Packit bbfece
extern char *textdomain _INTL_PARAMS ((const char *__domainname))
Packit bbfece
       _INTL_ASM (libintl_textdomain);
Packit bbfece
#endif
Packit bbfece
Packit bbfece
/* Specify that the DOMAINNAME message catalog will be found
Packit bbfece
   in DIRNAME rather than in the system locale data base.  */
Packit bbfece
#ifdef _INTL_REDIRECT_INLINE
Packit bbfece
extern char *libintl_bindtextdomain (const char *__domainname,
Packit bbfece
				     const char *__dirname);
Packit bbfece
static inline char *bindtextdomain (const char *__domainname,
Packit bbfece
				    const char *__dirname)
Packit bbfece
{
Packit bbfece
  return libintl_bindtextdomain (__domainname, __dirname);
Packit bbfece
}
Packit bbfece
#else
Packit bbfece
#ifdef _INTL_REDIRECT_MACROS
Packit bbfece
# define bindtextdomain libintl_bindtextdomain
Packit bbfece
#endif
Packit bbfece
extern char *bindtextdomain _INTL_PARAMS ((const char *__domainname,
Packit bbfece
					   const char *__dirname))
Packit bbfece
       _INTL_ASM (libintl_bindtextdomain);
Packit bbfece
#endif
Packit bbfece
Packit bbfece
/* Specify the character encoding in which the messages from the
Packit bbfece
   DOMAINNAME message catalog will be returned.  */
Packit bbfece
#ifdef _INTL_REDIRECT_INLINE
Packit bbfece
extern char *libintl_bind_textdomain_codeset (const char *__domainname,
Packit bbfece
					      const char *__codeset);
Packit bbfece
static inline char *bind_textdomain_codeset (const char *__domainname,
Packit bbfece
					     const char *__codeset)
Packit bbfece
{
Packit bbfece
  return libintl_bind_textdomain_codeset (__domainname, __codeset);
Packit bbfece
}
Packit bbfece
#else
Packit bbfece
#ifdef _INTL_REDIRECT_MACROS
Packit bbfece
# define bind_textdomain_codeset libintl_bind_textdomain_codeset
Packit bbfece
#endif
Packit bbfece
extern char *bind_textdomain_codeset _INTL_PARAMS ((const char *__domainname,
Packit bbfece
						    const char *__codeset))
Packit bbfece
       _INTL_ASM (libintl_bind_textdomain_codeset);
Packit bbfece
#endif
Packit bbfece
Packit bbfece
Packit bbfece
/* Support for relocatable packages.  */
Packit bbfece
Packit bbfece
/* Sets the original and the current installation prefix of the package.
Packit bbfece
   Relocation simply replaces a pathname starting with the original prefix
Packit bbfece
   by the corresponding pathname with the current prefix instead.  Both
Packit bbfece
   prefixes should be directory names without trailing slash (i.e. use ""
Packit bbfece
   instead of "/").  */
Packit bbfece
#define libintl_set_relocation_prefix libintl_set_relocation_prefix
Packit bbfece
extern void
Packit bbfece
       libintl_set_relocation_prefix _INTL_PARAMS ((const char *orig_prefix,
Packit bbfece
						    const char *curr_prefix));
Packit bbfece
Packit bbfece
Packit bbfece
#ifdef __cplusplus
Packit bbfece
}
Packit bbfece
#endif
Packit bbfece
Packit bbfece
#endif /* libintl.h */