"Fossies" - the Fresh Open Source Software Archive 
Member "authforce-0.9.9/src/gettext.h" (13 May 2007, 9337 Bytes) of package /linux/www/old/authforce-0.9.9.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "gettext.h" see the
Fossies "Dox" file reference documentation.
1 /* Convenience header for conditional use of GNU <libintl.h>.
2 Copyright (C) 1995-1998, 2000-2002, 2004-2006 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 _LIBGETTEXT_H
20 #define _LIBGETTEXT_H 1
21
22 /* NLS can be disabled through the configure --disable-nls option. */
23 #if ENABLE_NLS
24
25 /* Get declarations of GNU message catalog functions. */
26 # include <libintl.h>
27
28 /* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
29 the gettext() and ngettext() macros. This is an alternative to calling
30 textdomain(), and is useful for libraries. */
31 # ifdef DEFAULT_TEXT_DOMAIN
32 # undef gettext
33 # define gettext(Msgid) \
34 dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
35 # undef ngettext
36 # define ngettext(Msgid1, Msgid2, N) \
37 dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
38 # endif
39
40 #else
41
42 /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
43 chokes if dcgettext is defined as a macro. So include it now, to make
44 later inclusions of <locale.h> a NOP. We don't include <libintl.h>
45 as well because people using "gettext.h" will not include <libintl.h>,
46 and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
47 is OK. */
48 #if defined(__sun)
49 # include <locale.h>
50 #endif
51
52 /* Many header files from the libstdc++ coming with g++ 3.3 or newer include
53 <libintl.h>, which chokes if dcgettext is defined as a macro. So include
54 it now, to make later inclusions of <libintl.h> a NOP. */
55 #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
56 # include <cstdlib>
57 # if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H
58 # include <libintl.h>
59 # endif
60 #endif
61
62 /* Disabled NLS.
63 The casts to 'const char *' serve the purpose of producing warnings
64 for invalid uses of the value returned from these functions.
65 On pre-ANSI systems without 'const', the config.h file is supposed to
66 contain "#define const". */
67 # define gettext(Msgid) ((const char *) (Msgid))
68 # define dgettext(Domainname, Msgid) ((const char *) (Msgid))
69 # define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
70 # define ngettext(Msgid1, Msgid2, N) \
71 ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
72 # define dngettext(Domainname, Msgid1, Msgid2, N) \
73 ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
74 # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
75 ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
76 # define textdomain(Domainname) ((const char *) (Domainname))
77 # define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
78 # define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
79
80 #endif
81
82 /* A pseudo function call that serves as a marker for the automated
83 extraction of messages, but does not call gettext(). The run-time
84 translation is done at a different place in the code.
85 The argument, String, should be a literal string. Concatenated strings
86 and other string expressions won't work.
87 The macro's expansion is not parenthesized, so that it is suitable as
88 initializer for static 'char[]' or 'const char[]' variables. */
89 #define gettext_noop(String) String
90
91 /* The separator between msgctxt and msgid in a .mo file. */
92 #define GETTEXT_CONTEXT_GLUE "\004"
93
94 /* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
95 MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be
96 short and rarely need to change.
97 The letter 'p' stands for 'particular' or 'special'. */
98 #ifdef DEFAULT_TEXT_DOMAIN
99 # define pgettext(Msgctxt, Msgid) \
100 pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
101 #else
102 # define pgettext(Msgctxt, Msgid) \
103 pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
104 #endif
105 #define dpgettext(Domainname, Msgctxt, Msgid) \
106 pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
107 #define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
108 pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
109 #ifdef DEFAULT_TEXT_DOMAIN
110 # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
111 npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
112 #else
113 # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
114 npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
115 #endif
116 #define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
117 npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
118 #define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
119 npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
120
121 #ifdef __GNUC__
122 __inline
123 #else
124 #ifdef __cplusplus
125 inline
126 #endif
127 #endif
128 static const char *
129 pgettext_aux (const char *domain,
130 const char *msg_ctxt_id, const char *msgid,
131 int category)
132 {
133 const char *translation = dcgettext (domain, msg_ctxt_id, category);
134 if (translation == msg_ctxt_id)
135 return msgid;
136 else
137 return translation;
138 }
139
140 #ifdef __GNUC__
141 __inline
142 #else
143 #ifdef __cplusplus
144 inline
145 #endif
146 #endif
147 static const char *
148 npgettext_aux (const char *domain,
149 const char *msg_ctxt_id, const char *msgid,
150 const char *msgid_plural, unsigned long int n,
151 int category)
152 {
153 const char *translation =
154 dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
155 if (translation == msg_ctxt_id || translation == msgid_plural)
156 return (n == 1 ? msgid : msgid_plural);
157 else
158 return translation;
159 }
160
161 /* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID
162 can be arbitrary expressions. But for string literals these macros are
163 less efficient than those above. */
164
165 #include <string.h>
166
167 #define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \
168 (__GNUC__ >= 3 || __GNUG__ >= 2 /* || __STDC_VERSION__ >= 199901L */ )
169
170 #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
171 #include <stdlib.h>
172 #endif
173
174 #define pgettext_expr(Msgctxt, Msgid) \
175 dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
176 #define dpgettext_expr(Domainname, Msgctxt, Msgid) \
177 dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
178
179 #ifdef __GNUC__
180 __inline
181 #else
182 #ifdef __cplusplus
183 inline
184 #endif
185 #endif
186 static const char *
187 dcpgettext_expr (const char *domain,
188 const char *msgctxt, const char *msgid,
189 int category)
190 {
191 size_t msgctxt_len = strlen (msgctxt) + 1;
192 size_t msgid_len = strlen (msgid) + 1;
193 const char *translation;
194 #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
195 char msg_ctxt_id[msgctxt_len + msgid_len];
196 #else
197 char buf[1024];
198 char *msg_ctxt_id =
199 (msgctxt_len + msgid_len <= sizeof (buf)
200 ? buf
201 : (char *) malloc (msgctxt_len + msgid_len));
202 if (msg_ctxt_id != NULL)
203 #endif
204 {
205 memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
206 msg_ctxt_id[msgctxt_len - 1] = '\004';
207 memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
208 translation = dcgettext (domain, msg_ctxt_id, category);
209 #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
210 if (msg_ctxt_id != buf)
211 free (msg_ctxt_id);
212 #endif
213 if (translation != msg_ctxt_id)
214 return translation;
215 }
216 return msgid;
217 }
218
219 #define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
220 dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
221 #define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
222 dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
223
224 #ifdef __GNUC__
225 __inline
226 #else
227 #ifdef __cplusplus
228 inline
229 #endif
230 #endif
231 static const char *
232 dcnpgettext_expr (const char *domain,
233 const char *msgctxt, const char *msgid,
234 const char *msgid_plural, unsigned long int n,
235 int category)
236 {
237 size_t msgctxt_len = strlen (msgctxt) + 1;
238 size_t msgid_len = strlen (msgid) + 1;
239 const char *translation;
240 #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
241 char msg_ctxt_id[msgctxt_len + msgid_len];
242 #else
243 char buf[1024];
244 char *msg_ctxt_id =
245 (msgctxt_len + msgid_len <= sizeof (buf)
246 ? buf
247 : (char *) malloc (msgctxt_len + msgid_len));
248 if (msg_ctxt_id != NULL)
249 #endif
250 {
251 memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
252 msg_ctxt_id[msgctxt_len - 1] = '\004';
253 memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
254 translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
255 #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
256 if (msg_ctxt_id != buf)
257 free (msg_ctxt_id);
258 #endif
259 if (!(translation == msg_ctxt_id || translation == msgid_plural))
260 return translation;
261 }
262 return (n == 1 ? msgid : msgid_plural);
263 }
264
265 #endif /* _LIBGETTEXT_H */