2 // Wrapper for underlying C-language localization -*- C++ -*-
4 // Copyright (C) 2001 Free Software Foundation, Inc.
6 // This file is part of the GNU ISO C++ Library. This library is free
7 // software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the
9 // Free Software Foundation; either version 2, or (at your option)
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
17 // You should have received a copy of the GNU General Public License along
18 // with this library; see the file COPYING. If not, write to the Free
19 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
22 // As a special exception, you may use this file as part of a free software
23 // library without restriction. Specifically, if other files instantiate
24 // templates or use macros or inline functions from this file, or you compile
25 // this file and link it with other files to produce an executable, this
26 // file does not by itself cause the resulting executable to be covered by
27 // the GNU General Public License. This exception does not however
28 // invalidate any other reasons why the executable file might be covered by
29 // the GNU General Public License.
32 // ISO C++ 14882: 22.8 Standard locale categories.
35 // Written by Benjamin Kosnik <bkoz@redhat.com>
44 locale::facet::_S_create_c_locale(__c_locale
& __cloc
, const char* __s
)
47 // perhaps locale::categories could be made equivalent to LC_*_MASK
48 // _M_c_locale = __newlocale(1 << LC_ALL, __str.c_str(), NULL);
49 // _M_c_locale = __newlocale(locale::all, __str.c_str(), NULL);
50 __cloc
= __newlocale(1 << LC_ALL
, __s
, 0);
53 // This named locale is not supported by the underlying OS.
54 throw runtime_error("attempt to create locale from unknown name");
59 locale::facet::_S_destroy_c_locale(__c_locale
& __cloc
)
66 locale::facet::_S_clone_c_locale(__c_locale
& __cloc
)
67 { return __duplocale(__cloc
); }
71 numpunct
<char>::_M_initialize_numpunct(__c_locale __cloc
)
76 _M_decimal_point
= '.';
77 _M_thousands_sep
= ',';
83 _M_decimal_point
= *(__nl_langinfo_l(RADIXCHAR
, __cloc
));
84 _M_thousands_sep
= *(__nl_langinfo_l(THOUSEP
, __cloc
));
85 _M_grouping
= __nl_langinfo_l(GROUPING
, __cloc
);
87 // NB: There is no way to extact this info from posix locales.
88 // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
90 // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
91 _M_falsename
= "false";
94 #ifdef _GLIBCPP_USE_WCHAR_T
97 numpunct
<wchar_t>::_M_initialize_numpunct(__c_locale __cloc
)
102 _M_decimal_point
= L
'.';
103 _M_thousands_sep
= L
',';
109 _M_decimal_point
= reinterpret_cast<wchar_t>(__nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC
, __cloc
));
110 _M_thousands_sep
= reinterpret_cast<wchar_t>(__nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC
,__cloc
));
111 _M_grouping
= __nl_langinfo_l(GROUPING
, __cloc
);
113 // NB: There is no way to extact this info from posix locales.
114 // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
115 _M_truename
= L
"true";
116 // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
117 _M_falsename
= L
"false";
123 moneypunct
<char>::_M_initialize_moneypunct(__c_locale __cloc
)
128 _M_decimal_point
= '.';
129 _M_thousands_sep
= ',';
131 _M_curr_symbol
= string_type();
132 _M_positive_sign
= string_type();
133 _M_negative_sign
= string_type();
135 _M_pos_format
= money_base::_S_default_pattern
;
136 _M_neg_format
= money_base::_S_default_pattern
;
141 _M_decimal_point
= *(__nl_langinfo_l(__MON_DECIMAL_POINT
, __cloc
));
142 _M_thousands_sep
= *(__nl_langinfo_l(__MON_THOUSANDS_SEP
, __cloc
));
143 _M_grouping
= __nl_langinfo_l(__MON_GROUPING
, __cloc
);
144 _M_positive_sign
= __nl_langinfo_l(__POSITIVE_SIGN
, __cloc
);
145 _M_negative_sign
= __nl_langinfo_l(__NEGATIVE_SIGN
, __cloc
);
148 _M_curr_symbol
= __nl_langinfo_l(__INT_CURR_SYMBOL
, __cloc
);
149 _M_frac_digits
= *(__nl_langinfo_l(__INT_FRAC_DIGITS
, __cloc
));
150 char __ppreceeds
= *(__nl_langinfo_l(__INT_P_CS_PRECEDES
,
152 char __pspace
= *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE
, __cloc
));
153 char __pposn
= *(__nl_langinfo_l(__INT_P_SIGN_POSN
, __cloc
));
154 _M_pos_format
= _S_construct_pattern(__ppreceeds
, __pspace
,
156 char __npreceeds
= *(__nl_langinfo_l(__INT_N_CS_PRECEDES
,
158 char __nspace
= *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE
, __cloc
));
159 char __nposn
= *(__nl_langinfo_l(__INT_N_SIGN_POSN
, __cloc
));
160 _M_neg_format
= _S_construct_pattern(__npreceeds
, __nspace
,
165 _M_curr_symbol
= __nl_langinfo_l(__CURRENCY_SYMBOL
, __cloc
);
166 _M_frac_digits
= *(__nl_langinfo_l(__FRAC_DIGITS
, __cloc
));
167 char __ppreceeds
= *(__nl_langinfo_l(__P_CS_PRECEDES
, __cloc
));
168 char __pspace
= *(__nl_langinfo_l(__P_SEP_BY_SPACE
, __cloc
));
169 char __pposn
= *(__nl_langinfo_l(__P_SIGN_POSN
, __cloc
));
170 _M_pos_format
= _S_construct_pattern(__ppreceeds
, __pspace
,
172 char __npreceeds
= *(__nl_langinfo_l(__N_CS_PRECEDES
, __cloc
));
173 char __nspace
= *(__nl_langinfo_l(__N_SEP_BY_SPACE
, __cloc
));
174 char __nposn
= *(__nl_langinfo_l(__N_SIGN_POSN
, __cloc
));
175 _M_neg_format
= _S_construct_pattern(__npreceeds
, __nspace
,
181 #ifdef _GLIBCPP_USE_WCHAR_T
184 moneypunct
<wchar_t>::_M_initialize_moneypunct(__c_locale
/*__cloc*/)
188 _M_decimal_point
= L
'.';
189 _M_thousands_sep
= L
',';
191 _M_curr_symbol
= string_type();
192 _M_positive_sign
= string_type();
193 _M_negative_sign
= string_type();
195 _M_pos_format
= money_base::_S_default_pattern
;
196 _M_neg_format
= money_base::_S_default_pattern
;