~ubuntu-branches/ubuntu/maverick/texinfo/maverick

« back to all changes in this revision

Viewing changes to intl/libgnuintl.h.in

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Preining
  • Date: 2005-10-28 15:10:30 UTC
  • mto: (2.1.1 dapper) (3.1.4 hardy)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20051028151030-9nsf2s2k2z3fktjt
Tags: upstream-4.8
ImportĀ upstreamĀ versionĀ 4.8

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Message catalogs for internationalization.
 
2
   Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
 
3
 
 
4
   This program is free software; you can redistribute it and/or modify it
 
5
   under the terms of the GNU Library General Public License as published
 
6
   by the Free Software Foundation; either version 2, or (at your option)
 
7
   any later version.
 
8
 
 
9
   This program is distributed in the hope that it will be useful,
 
10
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
12
   Library General Public License for more details.
 
13
 
 
14
   You should have received a copy of the GNU Library General Public
 
15
   License along with this program; if not, write to the Free Software
 
16
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
 
17
   USA.  */
 
18
 
 
19
#ifndef _LIBINTL_H
 
20
#define _LIBINTL_H      1
 
21
 
 
22
#include <locale.h>
 
23
 
 
24
/* The LC_MESSAGES locale category is the category used by the functions
 
25
   gettext() and dgettext().  It is specified in POSIX, but not in ANSI C.
 
26
   On systems that don't define it, use an arbitrary value instead.
 
27
   On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
 
28
   then includes <libintl.h> (i.e. this file!) and then only defines
 
29
   LC_MESSAGES.  To avoid a redefinition warning, don't define LC_MESSAGES
 
30
   in this case.  */
 
31
#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
 
32
# define LC_MESSAGES 1729
 
33
#endif
 
34
 
 
35
/* We define an additional symbol to signal that we use the GNU
 
36
   implementation of gettext.  */
 
37
#define __USE_GNU_GETTEXT 1
 
38
 
 
39
/* Provide information about the supported file formats.  Returns the
 
40
   maximum minor revision number supported for a given major revision.  */
 
41
#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
 
42
  ((major) == 0 ? 1 : -1)
 
43
 
 
44
/* Resolve a platform specific conflict on DJGPP.  GNU gettext takes
 
45
   precedence over _conio_gettext.  */
 
46
#ifdef __DJGPP__
 
47
# undef gettext
 
48
#endif
 
49
 
 
50
#ifdef __cplusplus
 
51
extern "C" {
 
52
#endif
 
53
 
 
54
 
 
55
/* We redirect the functions to those prefixed with "libintl_".  This is
 
56
   necessary, because some systems define gettext/textdomain/... in the C
 
57
   library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
 
58
   If we used the unprefixed names, there would be cases where the
 
59
   definition in the C library would override the one in the libintl.so
 
60
   shared library.  Recall that on ELF systems, the symbols are looked
 
61
   up in the following order:
 
62
     1. in the executable,
 
63
     2. in the shared libraries specified on the link command line, in order,
 
64
     3. in the dependencies of the shared libraries specified on the link
 
65
        command line,
 
66
     4. in the dlopen()ed shared libraries, in the order in which they were
 
67
        dlopen()ed.
 
68
   The definition in the C library would override the one in libintl.so if
 
69
   either
 
70
     * -lc is given on the link command line and -lintl isn't, or
 
71
     * -lc is given on the link command line before -lintl, or
 
72
     * libintl.so is a dependency of a dlopen()ed shared library but not
 
73
       linked to the executable at link time.
 
74
   Since Solaris gettext() behaves differently than GNU gettext(), this
 
75
   would be unacceptable.
 
76
 
 
77
   The redirection happens by default through macros in C, so that &gettext
 
78
   is independent of the compilation unit, but through inline functions in
 
79
   C++, in order not to interfere with the name mangling of class fields or
 
80
   class methods called 'gettext'.  */
 
81
 
 
82
/* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
 
83
   If he doesn't, we choose the method.  A third possible method is
 
84
   _INTL_REDIRECT_ASM, supported only by GCC.  */
 
85
#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
 
86
# if __GNUC__ >= 2 && !defined __APPLE_CC__ && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus)
 
87
#  define _INTL_REDIRECT_ASM
 
88
# else
 
89
#  ifdef __cplusplus
 
90
#   define _INTL_REDIRECT_INLINE
 
91
#  else
 
92
#   define _INTL_REDIRECT_MACROS
 
93
#  endif
 
94
# endif
 
95
#endif
 
96
/* Auxiliary macros.  */
 
97
#ifdef _INTL_REDIRECT_ASM
 
98
# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
 
99
# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
 
100
# define _INTL_STRINGIFY(prefix) #prefix
 
101
#else
 
102
# define _INTL_ASM(cname)
 
103
#endif
 
104
 
 
105
/* Look up MSGID in the current default message catalog for the current
 
106
   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
 
107
   text).  */
 
108
#ifdef _INTL_REDIRECT_INLINE
 
109
extern char *libintl_gettext (const char *__msgid);
 
110
static inline char *gettext (const char *__msgid)
 
111
{
 
112
  return libintl_gettext (__msgid);
 
113
}
 
114
#else
 
115
#ifdef _INTL_REDIRECT_MACROS
 
116
# define gettext libintl_gettext
 
117
#endif
 
118
extern char *gettext (const char *__msgid)
 
119
       _INTL_ASM (libintl_gettext);
 
120
#endif
 
121
 
 
122
/* Look up MSGID in the DOMAINNAME message catalog for the current
 
123
   LC_MESSAGES locale.  */
 
124
#ifdef _INTL_REDIRECT_INLINE
 
125
extern char *libintl_dgettext (const char *__domainname, const char *__msgid);
 
126
static inline char *dgettext (const char *__domainname, const char *__msgid)
 
127
{
 
128
  return libintl_dgettext (__domainname, __msgid);
 
129
}
 
130
#else
 
131
#ifdef _INTL_REDIRECT_MACROS
 
132
# define dgettext libintl_dgettext
 
133
#endif
 
134
extern char *dgettext (const char *__domainname, const char *__msgid)
 
135
       _INTL_ASM (libintl_dgettext);
 
136
#endif
 
137
 
 
138
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
 
139
   locale.  */
 
140
#ifdef _INTL_REDIRECT_INLINE
 
141
extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
 
142
                                int __category);
 
143
static inline char *dcgettext (const char *__domainname, const char *__msgid,
 
144
                               int __category)
 
145
{
 
146
  return libintl_dcgettext (__domainname, __msgid, __category);
 
147
}
 
148
#else
 
149
#ifdef _INTL_REDIRECT_MACROS
 
150
# define dcgettext libintl_dcgettext
 
151
#endif
 
152
extern char *dcgettext (const char *__domainname, const char *__msgid,
 
153
                        int __category)
 
154
       _INTL_ASM (libintl_dcgettext);
 
155
#endif
 
156
 
 
157
 
 
158
/* Similar to `gettext' but select the plural form corresponding to the
 
159
   number N.  */
 
160
#ifdef _INTL_REDIRECT_INLINE
 
161
extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
 
162
                               unsigned long int __n);
 
163
static inline char *ngettext (const char *__msgid1, const char *__msgid2,
 
164
                              unsigned long int __n)
 
165
{
 
166
  return libintl_ngettext (__msgid1, __msgid2, __n);
 
167
}
 
168
#else
 
169
#ifdef _INTL_REDIRECT_MACROS
 
170
# define ngettext libintl_ngettext
 
171
#endif
 
172
extern char *ngettext (const char *__msgid1, const char *__msgid2,
 
173
                       unsigned long int __n)
 
174
       _INTL_ASM (libintl_ngettext);
 
175
#endif
 
176
 
 
177
/* Similar to `dgettext' but select the plural form corresponding to the
 
178
   number N.  */
 
179
#ifdef _INTL_REDIRECT_INLINE
 
180
extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
 
181
                                const char *__msgid2, unsigned long int __n);
 
182
static inline char *dngettext (const char *__domainname, const char *__msgid1,
 
183
                               const char *__msgid2, unsigned long int __n)
 
184
{
 
185
  return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
 
186
}
 
187
#else
 
188
#ifdef _INTL_REDIRECT_MACROS
 
189
# define dngettext libintl_dngettext
 
190
#endif
 
191
extern char *dngettext (const char *__domainname,
 
192
                        const char *__msgid1, const char *__msgid2,
 
193
                        unsigned long int __n)
 
194
       _INTL_ASM (libintl_dngettext);
 
195
#endif
 
196
 
 
197
/* Similar to `dcgettext' but select the plural form corresponding to the
 
198
   number N.  */
 
199
#ifdef _INTL_REDIRECT_INLINE
 
200
extern char *libintl_dcngettext (const char *__domainname,
 
201
                                 const char *__msgid1, const char *__msgid2,
 
202
                                 unsigned long int __n, int __category);
 
203
static inline char *dcngettext (const char *__domainname,
 
204
                                const char *__msgid1, const char *__msgid2,
 
205
                                unsigned long int __n, int __category)
 
206
{
 
207
  return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
 
208
}
 
209
#else
 
210
#ifdef _INTL_REDIRECT_MACROS
 
211
# define dcngettext libintl_dcngettext
 
212
#endif
 
213
extern char *dcngettext (const char *__domainname,
 
214
                         const char *__msgid1, const char *__msgid2,
 
215
                         unsigned long int __n, int __category)
 
216
       _INTL_ASM (libintl_dcngettext);
 
217
#endif
 
218
 
 
219
 
 
220
/* Set the current default message catalog to DOMAINNAME.
 
221
   If DOMAINNAME is null, return the current default.
 
222
   If DOMAINNAME is "", reset to the default of "messages".  */
 
223
#ifdef _INTL_REDIRECT_INLINE
 
224
extern char *libintl_textdomain (const char *__domainname);
 
225
static inline char *textdomain (const char *__domainname)
 
226
{
 
227
  return libintl_textdomain (__domainname);
 
228
}
 
229
#else
 
230
#ifdef _INTL_REDIRECT_MACROS
 
231
# define textdomain libintl_textdomain
 
232
#endif
 
233
extern char *textdomain (const char *__domainname)
 
234
       _INTL_ASM (libintl_textdomain);
 
235
#endif
 
236
 
 
237
/* Specify that the DOMAINNAME message catalog will be found
 
238
   in DIRNAME rather than in the system locale data base.  */
 
239
#ifdef _INTL_REDIRECT_INLINE
 
240
extern char *libintl_bindtextdomain (const char *__domainname,
 
241
                                     const char *__dirname);
 
242
static inline char *bindtextdomain (const char *__domainname,
 
243
                                    const char *__dirname)
 
244
{
 
245
  return libintl_bindtextdomain (__domainname, __dirname);
 
246
}
 
247
#else
 
248
#ifdef _INTL_REDIRECT_MACROS
 
249
# define bindtextdomain libintl_bindtextdomain
 
250
#endif
 
251
extern char *bindtextdomain (const char *__domainname, const char *__dirname)
 
252
       _INTL_ASM (libintl_bindtextdomain);
 
253
#endif
 
254
 
 
255
/* Specify the character encoding in which the messages from the
 
256
   DOMAINNAME message catalog will be returned.  */
 
257
#ifdef _INTL_REDIRECT_INLINE
 
258
extern char *libintl_bind_textdomain_codeset (const char *__domainname,
 
259
                                              const char *__codeset);
 
260
static inline char *bind_textdomain_codeset (const char *__domainname,
 
261
                                             const char *__codeset)
 
262
{
 
263
  return libintl_bind_textdomain_codeset (__domainname, __codeset);
 
264
}
 
265
#else
 
266
#ifdef _INTL_REDIRECT_MACROS
 
267
# define bind_textdomain_codeset libintl_bind_textdomain_codeset
 
268
#endif
 
269
extern char *bind_textdomain_codeset (const char *__domainname,
 
270
                                      const char *__codeset)
 
271
       _INTL_ASM (libintl_bind_textdomain_codeset);
 
272
#endif
 
273
 
 
274
 
 
275
/* Support for format strings with positions in *printf(), following the
 
276
   POSIX/XSI specification.
 
277
   Note: These replacements for the *printf() functions are visible only
 
278
   in source files that #include <libintl.h> or #include "gettext.h".
 
279
   Packages that use *printf() in source files that don't refer to _()
 
280
   or gettext() but for which the format string could be the return value
 
281
   of _() or gettext() need to add this #include.  Oh well.  */
 
282
 
 
283
#if !@HAVE_POSIX_PRINTF@
 
284
 
 
285
#include <stdio.h>
 
286
#include <stddef.h>
 
287
 
 
288
/* Get va_list.  */
 
289
#if __STDC__ || defined __cplusplus || defined _MSC_VER
 
290
# include <stdarg.h>
 
291
#else
 
292
# include <varargs.h>
 
293
#endif
 
294
 
 
295
#undef fprintf
 
296
#define fprintf libintl_fprintf
 
297
extern int fprintf (FILE *, const char *, ...);
 
298
#undef vfprintf
 
299
#define vfprintf libintl_vfprintf
 
300
extern int vfprintf (FILE *, const char *, va_list);
 
301
 
 
302
#undef printf
 
303
#define printf libintl_printf
 
304
extern int printf (const char *, ...);
 
305
#undef vprintf
 
306
#define vprintf libintl_vprintf
 
307
extern int vprintf (const char *, va_list);
 
308
 
 
309
#undef sprintf
 
310
#define sprintf libintl_sprintf
 
311
extern int sprintf (char *, const char *, ...);
 
312
#undef vsprintf
 
313
#define vsprintf libintl_vsprintf
 
314
extern int vsprintf (char *, const char *, va_list);
 
315
 
 
316
#if @HAVE_SNPRINTF@
 
317
 
 
318
#undef snprintf
 
319
#define snprintf libintl_snprintf
 
320
extern int snprintf (char *, size_t, const char *, ...);
 
321
#undef vsnprintf
 
322
#define vsnprintf libintl_vsnprintf
 
323
extern int vsnprintf (char *, size_t, const char *, va_list);
 
324
 
 
325
#endif
 
326
 
 
327
#if @HAVE_ASPRINTF@
 
328
 
 
329
#undef asprintf
 
330
#define asprintf libintl_asprintf
 
331
extern int asprintf (char **, const char *, ...);
 
332
#undef vasprintf
 
333
#define vasprintf libintl_vasprintf
 
334
extern int vasprintf (char **, const char *, va_list);
 
335
 
 
336
#endif
 
337
 
 
338
#if @HAVE_WPRINTF@
 
339
 
 
340
#undef fwprintf
 
341
#define fwprintf libintl_fwprintf
 
342
extern int fwprintf (FILE *, const wchar_t *, ...);
 
343
#undef vfwprintf
 
344
#define vfwprintf libintl_vfwprintf
 
345
extern int vfwprintf (FILE *, const wchar_t *, va_list);
 
346
 
 
347
#undef wprintf
 
348
#define wprintf libintl_wprintf
 
349
extern int wprintf (const wchar_t *, ...);
 
350
#undef vwprintf
 
351
#define vwprintf libintl_vwprintf
 
352
extern int vwprintf (const wchar_t *, va_list);
 
353
 
 
354
#undef swprintf
 
355
#define swprintf libintl_swprintf
 
356
extern int swprintf (wchar_t *, size_t, const wchar_t *, ...);
 
357
#undef vswprintf
 
358
#define vswprintf libintl_vswprintf
 
359
extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list);
 
360
 
 
361
#endif
 
362
 
 
363
#endif
 
364
 
 
365
 
 
366
/* Support for relocatable packages.  */
 
367
 
 
368
/* Sets the original and the current installation prefix of the package.
 
369
   Relocation simply replaces a pathname starting with the original prefix
 
370
   by the corresponding pathname with the current prefix instead.  Both
 
371
   prefixes should be directory names without trailing slash (i.e. use ""
 
372
   instead of "/").  */
 
373
#define libintl_set_relocation_prefix libintl_set_relocation_prefix
 
374
extern void
 
375
       libintl_set_relocation_prefix (const char *orig_prefix,
 
376
                                      const char *curr_prefix);
 
377
 
 
378
 
 
379
#ifdef __cplusplus
 
380
}
 
381
#endif
 
382
 
 
383
#endif /* libintl.h */