~ubuntu-core-dev/update-notifier/ubuntu

« back to all changes in this revision

Viewing changes to intl/libgnuintl.h.in

  • Committer: mvo
  • Date: 2006-02-20 13:59:01 UTC
  • Revision ID: gustavo@niemeyer.net-20060220135901-720c2a7ec5a58192
* removed the wretched intl again

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* Message catalogs for internationalization.
2
 
   Copyright (C) 1995-1997, 2000-2004 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
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 || (major) == 1 ? 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 */