2 * D header file for POSIX's <locale.h>.
4 * See_Also: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/locale.h.html
5 * Copyright: D Language Foundation, 2019
6 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
7 * Authors: Mathias 'Geod24' Lang
8 * Standards: The Open Group Base Specifications Issue 7, 2018 edition
9 * Source: $(DRUNTIMESRC core/sys/posix/_locale.d)
11 module core
.sys
.posix
.locale
;
25 else version (WatchOS
)
29 version = DarwinBSDLocale
;
31 version = DarwinBSDLocale
;
33 version = DarwinBSDLocale
;
34 version (DragonflyBSD
)
35 version = DarwinBSDLocale
;
37 version (CRuntime_Glibc
)
38 version = GNULinuxLocale
;
39 version (CRuntime_Bionic
)
40 version = GNULinuxLocale
;
41 version (CRuntime_UClibc
)
42 version = GNULinuxLocale
;
44 version (DarwinBSDLocale
)
52 char* int_curr_symbol
;
53 char* currency_symbol
;
54 char* mon_decimal_point
;
55 char* mon_thousands_sep
;
67 char int_p_cs_precedes
;
68 char int_n_cs_precedes
;
69 char int_p_sep_by_space
;
70 char int_n_sep_by_space
;
87 private struct _xlocale
;
90 alias locale_t
= _xlocale
*;
93 enum LC_ALL_MASK
= (cast(int)~0);
96 LC_COLLATE_MASK | LC_CTYPE_MASK | LC_MESSAGES_MASK |
97 LC_MONETARY_MASK | LC_NUMERIC_MASK | LC_TIME_MASK
);
103 LC_COLLATE_MASK
= (1 << 0),
104 LC_CTYPE_MASK
= (1 << 1),
105 LC_MESSAGES_MASK
= (1 << 2),
106 LC_MONETARY_MASK
= (1 << 3),
107 LC_NUMERIC_MASK
= (1 << 4),
108 LC_TIME_MASK
= (1 << 5),
112 enum LC_GLOBAL_LOCALE
= (cast(locale_t
)-1);
114 /// Duplicate existing locale
115 locale_t
duplocale(locale_t locale
);
116 /// Free an allocated locale
117 void freelocale(locale_t locale
);
118 /// Natural language formatting for C
120 /// Create a new locale
121 locale_t
newlocale(int mask
, const char* locale
, locale_t base
);
122 /// Set the C library's notion of natural language formatting style
123 char* setlocale(int category
, const char* locale
);
124 /// Set the per-thread locale
125 locale_t
uselocale (locale_t locale
);
127 else version (GNULinuxLocale
)
135 char* int_curr_symbol
;
136 char* currency_symbol
;
137 char* mon_decimal_point
;
138 char* mon_thousands_sep
;
142 char int_frac_digits
;
150 char int_p_cs_precedes
;
151 char int_p_sep_by_space
;
152 char int_n_cs_precedes
;
153 char int_n_sep_by_space
;
154 char int_p_sign_posn
;
155 char int_n_sign_posn
;
175 LC_IDENTIFICATION
= 12,
181 LC_ALL_MASK
= (LC_CTYPE_MASK | LC_NUMERIC_MASK | LC_TIME_MASK |
182 LC_COLLATE_MASK | LC_MONETARY_MASK | LC_MESSAGES_MASK |
183 LC_PAPER_MASK | LC_NAME_MASK | LC_ADDRESS_MASK |
184 LC_TELEPHONE_MASK | LC_MEASUREMENT_MASK |
185 LC_IDENTIFICATION_MASK
),
187 LC_COLLATE_MASK
= (1 << LC_COLLATE
),
188 LC_CTYPE_MASK
= (1 << LC_CTYPE
),
189 LC_MESSAGES_MASK
= (1 << LC_MESSAGES
),
190 LC_MONETARY_MASK
= (1 << LC_MONETARY
),
191 LC_NUMERIC_MASK
= (1 << LC_NUMERIC
),
192 LC_TIME_MASK
= (1 << LC_TIME
),
195 LC_PAPER_MASK
= (1 << LC_PAPER
),
196 LC_NAME_MASK
= (1 << LC_NAME
),
197 LC_ADDRESS_MASK
= (1 << LC_ADDRESS
),
198 LC_TELEPHONE_MASK
= (1 << LC_TELEPHONE
),
199 LC_MEASUREMENT_MASK
= (1 << LC_MEASUREMENT
),
200 LC_IDENTIFICATION_MASK
= (1 << LC_IDENTIFICATION
),
203 private struct __locale_struct
;
206 alias locale_t
= __locale_struct
*;
209 enum LC_GLOBAL_LOCALE
= (cast(locale_t
)-1);
211 /// Duplicate existing locale
212 locale_t
duplocale(locale_t locale
);
213 /// Free an allocated locale
214 void freelocale(locale_t locale
);
215 /// Natural language formatting for C
217 /// Create a new locale
218 locale_t
newlocale(int mask
, const char* locale
, locale_t base
);
219 /// Set the C library's notion of natural language formatting style
220 char* setlocale(int category
, const char* locale
);
221 /// Set the per-thread locale
222 locale_t
uselocale (locale_t locale
);
224 else version (CRuntime_Musl
)
232 char* int_curr_symbol
;
233 char* currency_symbol
;
234 char* mon_decimal_point
;
235 char* mon_thousands_sep
;
239 char int_frac_digits
;
247 char int_p_cs_precedes
;
248 char int_p_sep_by_space
;
249 char int_n_cs_precedes
;
250 char int_n_sep_by_space
;
251 char int_p_sign_posn
;
252 char int_n_sign_posn
;
270 LC_CTYPE_MASK
= (1 << LC_CTYPE
),
271 LC_NUMERIC_MASK
= (1 << LC_NUMERIC
),
272 LC_TIME_MASK
= (1 << LC_TIME
),
273 LC_COLLATE_MASK
= (1 << LC_COLLATE
),
274 LC_MONETARY_MASK
= (1 << LC_MONETARY
),
275 LC_MESSAGES_MASK
= (1 << LC_MESSAGES
),
276 LC_ALL_MASK
= 0x7fffffff,
279 private struct __locale_struct
;
282 alias locale_t
= __locale_struct
*;
285 enum LC_GLOBAL_LOCALE
= (cast(locale_t
)-1);
287 /// Duplicate existing locale
288 locale_t
duplocale(locale_t locale
);
289 /// Free an allocated locale
290 void freelocale(locale_t locale
);
291 /// Natural language formatting for C
293 /// Create a new locale
294 locale_t
newlocale(int mask
, const char* locale
, locale_t base
);
295 /// Set the C library's notion of natural language formatting style
296 char* setlocale(int category
, const char* locale
);
297 /// Set the per-thread locale
298 locale_t
uselocale (locale_t locale
);
300 else version (OpenBSD
)
308 char* int_curr_symbol
;
309 char* currency_symbol
;
310 char* mon_decimal_point
;
311 char* mon_thousands_sep
;
315 char int_frac_digits
;
323 char int_p_cs_precedes
;
324 char int_n_cs_precedes
;
325 char int_p_sep_by_space
;
326 char int_n_sep_by_space
;
327 char int_p_sign_posn
;
328 char int_n_sign_posn
;
342 private enum _LC_LAST
= 7;
347 LC_COLLATE_MASK
= (1 << LC_COLLATE
),
348 LC_CTYPE_MASK
= (1 << LC_CTYPE
),
349 LC_MONETARY_MASK
= (1 << LC_MONETARY
),
350 LC_NUMERIC_MASK
= (1 << LC_NUMERIC
),
351 LC_TIME_MASK
= (1 << LC_TIME
),
352 LC_MESSAGES_MASK
= (1 << LC_MESSAGES
),
353 LC_ALL_MASK
= ((1 << _LC_LAST
) - 2),
357 alias locale_t
= void*;
360 enum LC_GLOBAL_LOCALE
= (cast(locale_t
)-1);
362 /// Duplicate existing locale
363 locale_t
duplocale(locale_t locale
);
364 /// Free an allocated locale
365 void freelocale(locale_t locale
);
366 /// Natural language formatting for C
368 /// Create a new locale
369 locale_t
newlocale(int mask
, const char* locale
, locale_t base
);
370 /// Set the C library's notion of natural language formatting style
371 char* setlocale(int category
, const char* locale
);
372 /// Set the per-thread locale
373 locale_t
uselocale (locale_t locale
);
375 else version (Solaris
)
383 char* int_curr_symbol
;
384 char* currency_symbol
;
385 char* mon_decimal_point
;
386 char* mon_thousands_sep
;
390 char int_frac_digits
;
398 char int_p_cs_precedes
;
399 char int_n_cs_precedes
;
400 char int_p_sep_by_space
;
401 char int_n_sep_by_space
;
402 char int_p_sign_posn
;
403 char int_n_sign_posn
;
418 /// Natural language formatting for C
420 /// Set the C library's notion of natural language formatting style
421 char* setlocale(int category
, const char* locale
);
424 static assert(false, "unimplemented platform");