Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6554 serge 1
// Locale support -*- C++ -*-
2
 
3
// Copyright (C) 2011-2015 Free Software Foundation, Inc.
4
//
5
// This file is part of the GNU ISO C++ Library.  This library is free
6
// software; you can redistribute it and/or modify it under the
7
// terms of the GNU General Public License as published by the
8
// Free Software Foundation; either version 3, or (at your option)
9
// any later version.
10
 
11
// This library is distributed in the hope that it will be useful,
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
// GNU General Public License for more details.
15
 
16
// Under Section 7 of GPL version 3, you are granted additional
17
// permissions described in the GCC Runtime Library Exception, version
18
// 3.1, as published by the Free Software Foundation.
19
 
20
// You should have received a copy of the GNU General Public License and
21
// a copy of the GCC Runtime Library Exception along with this program;
22
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23
// .
24
 
25
/** @file ctype_configure_char.cc */
26
 
27
//
28
// ISO C++ 14882: 22.1  Locales
29
//
30
 
31
#include 
32
#include 
33
#include 
34
 
35
namespace std _GLIBCXX_VISIBILITY(default)
36
{
37
_GLIBCXX_BEGIN_NAMESPACE_VERSION
38
 
39
  // The classic table used in libstdc++ is *not* the C _ctype table
40
  // used by mscvrt, but is based on the ctype masks defined for libstdc++
41
  // in ctype_base.h.
42
 
43
  const ctype_base::mask*
44
  ctype::classic_table() throw()
45
  {
46
    static const ctype_base::mask _S_classic_table[256] =
47
    {
48
      cntrl /* null */,
49
      cntrl /* ^A */,
50
      cntrl /* ^B */,
51
      cntrl /* ^C */,
52
      cntrl /* ^D */,
53
      cntrl /* ^E */,
54
      cntrl /* ^F */,
55
      cntrl /* ^G */,
56
      cntrl /* ^H */,
57
      ctype_base::mask(space | cntrl | blank) /* tab */,
58
      ctype_base::mask(space | cntrl) /* LF */,
59
      ctype_base::mask(space | cntrl) /* ^K */,
60
      ctype_base::mask(space | cntrl) /* FF */,
61
      ctype_base::mask(space | cntrl) /* ^M */,
62
      cntrl /* ^N */,
63
      cntrl /* ^O */,
64
      cntrl /* ^P */,
65
      cntrl /* ^Q */,
66
      cntrl /* ^R */,
67
      cntrl /* ^S */,
68
      cntrl /* ^T */,
69
      cntrl /* ^U */,
70
      cntrl /* ^V */,
71
      cntrl /* ^W */,
72
      cntrl /* ^X */,
73
      cntrl /* ^Y */,
74
      cntrl /* ^Z */,
75
      cntrl /* esc */,
76
      cntrl /* ^\ */,
77
      cntrl /* ^] */,
78
      cntrl /* ^^ */,
79
      cntrl /* ^_ */,
80
      ctype_base::mask(space | print | blank) /*   */,
81
      ctype_base::mask(punct | print) /* ! */,
82
      ctype_base::mask(punct | print) /* " */,
83
      ctype_base::mask(punct | print) /* # */,
84
      ctype_base::mask(punct | print) /* $ */,
85
      ctype_base::mask(punct | print) /* % */,
86
      ctype_base::mask(punct | print) /* & */,
87
      ctype_base::mask(punct | print) /* ' */,
88
      ctype_base::mask(punct | print) /* ( */,
89
      ctype_base::mask(punct | print) /* ) */,
90
      ctype_base::mask(punct | print) /* * */,
91
      ctype_base::mask(punct | print) /* + */,
92
      ctype_base::mask(punct | print) /* , */,
93
      ctype_base::mask(punct | print) /* - */,
94
      ctype_base::mask(punct | print) /* . */,
95
      ctype_base::mask(punct | print) /* / */,
96
      ctype_base::mask(digit | xdigit | print) /* 0 */,
97
      ctype_base::mask(digit | xdigit | print) /* 1 */,
98
      ctype_base::mask(digit | xdigit | print) /* 2 */,
99
      ctype_base::mask(digit | xdigit | print) /* 3 */,
100
      ctype_base::mask(digit | xdigit | print) /* 4 */,
101
      ctype_base::mask(digit | xdigit | print) /* 5 */,
102
      ctype_base::mask(digit | xdigit | print) /* 6 */,
103
      ctype_base::mask(digit | xdigit | print) /* 7 */,
104
      ctype_base::mask(digit | xdigit | print) /* 8 */,
105
      ctype_base::mask(digit | xdigit | print) /* 9 */,
106
      ctype_base::mask(punct | print) /* : */,
107
      ctype_base::mask(punct | print) /* ; */,
108
      ctype_base::mask(punct | print) /* < */,
109
      ctype_base::mask(punct | print) /* = */,
110
      ctype_base::mask(punct | print) /* > */,
111
      ctype_base::mask(punct | print) /* ? */,
112
      ctype_base::mask(punct | print) /* ! */,
113
      ctype_base::mask(alpha | upper | xdigit | print) /* A */,
114
      ctype_base::mask(alpha | upper | xdigit | print) /* B */,
115
      ctype_base::mask(alpha | upper | xdigit | print) /* C */,
116
      ctype_base::mask(alpha | upper | xdigit | print) /* D */,
117
      ctype_base::mask(alpha | upper | xdigit | print) /* E */,
118
      ctype_base::mask(alpha | upper | xdigit | print) /* F */,
119
      ctype_base::mask(alpha | upper | print) /* G */,
120
      ctype_base::mask(alpha | upper | print) /* H */,
121
      ctype_base::mask(alpha | upper | print) /* I */,
122
      ctype_base::mask(alpha | upper | print) /* J */,
123
      ctype_base::mask(alpha | upper | print) /* K */,
124
      ctype_base::mask(alpha | upper | print) /* L */,
125
      ctype_base::mask(alpha | upper | print) /* M */,
126
      ctype_base::mask(alpha | upper | print) /* N */,
127
      ctype_base::mask(alpha | upper | print) /* O */,
128
      ctype_base::mask(alpha | upper | print) /* P */,
129
      ctype_base::mask(alpha | upper | print) /* Q */,
130
      ctype_base::mask(alpha | upper | print) /* R */,
131
      ctype_base::mask(alpha | upper | print) /* S */,
132
      ctype_base::mask(alpha | upper | print) /* T */,
133
      ctype_base::mask(alpha | upper | print) /* U */,
134
      ctype_base::mask(alpha | upper | print) /* V */,
135
      ctype_base::mask(alpha | upper | print) /* W */,
136
      ctype_base::mask(alpha | upper | print) /* X */,
137
      ctype_base::mask(alpha | upper | print) /* Y */,
138
      ctype_base::mask(alpha | upper | print) /* Z */,
139
      ctype_base::mask(punct | print) /* [ */,
140
      ctype_base::mask(punct | print) /* \ */,
141
      ctype_base::mask(punct | print) /* ] */,
142
      ctype_base::mask(punct | print) /* ^ */,
143
      ctype_base::mask(punct | print) /* _ */,
144
      ctype_base::mask(punct | print) /* ` */,
145
      ctype_base::mask(alpha | lower | xdigit | print) /* a */,
146
      ctype_base::mask(alpha | lower | xdigit | print) /* b */,
147
      ctype_base::mask(alpha | lower | xdigit | print) /* c */,
148
      ctype_base::mask(alpha | lower | xdigit | print) /* d */,
149
      ctype_base::mask(alpha | lower | xdigit | print) /* e */,
150
      ctype_base::mask(alpha | lower | xdigit | print) /* f */,
151
      ctype_base::mask(alpha | lower | print) /* g */,
152
      ctype_base::mask(alpha | lower | print) /* h */,
153
      ctype_base::mask(alpha | lower | print) /* i */,
154
      ctype_base::mask(alpha | lower | print) /* j */,
155
      ctype_base::mask(alpha | lower | print) /* k */,
156
      ctype_base::mask(alpha | lower | print) /* l */,
157
      ctype_base::mask(alpha | lower | print) /* m */,
158
      ctype_base::mask(alpha | lower | print) /* n */,
159
      ctype_base::mask(alpha | lower | print) /* o */,
160
      ctype_base::mask(alpha | lower | print) /* p */,
161
      ctype_base::mask(alpha | lower | print) /* q */,
162
      ctype_base::mask(alpha | lower | print) /* r */,
163
      ctype_base::mask(alpha | lower | print) /* s */,
164
      ctype_base::mask(alpha | lower | print) /* t */,
165
      ctype_base::mask(alpha | lower | print) /* u */,
166
      ctype_base::mask(alpha | lower | print) /* v */,
167
      ctype_base::mask(alpha | lower | print) /* w */,
168
      ctype_base::mask(alpha | lower | print) /* x */,
169
      ctype_base::mask(alpha | lower | print) /* y */,
170
      ctype_base::mask(alpha | lower | print) /* x */,
171
      ctype_base::mask(punct | print) /* { */,
172
      ctype_base::mask(punct | print) /* | */,
173
      ctype_base::mask(punct | print) /* } */,
174
      ctype_base::mask(punct | print) /* ~ */,
175
      cntrl /* del (0x7f)*/,
176
      /* The next 128 entries are all 0.   */
177
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
178
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
179
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
180
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
181
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
182
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
183
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
184
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
185
    };
186
    return _S_classic_table;
187
  }
188
 
189
  ctype::ctype(__c_locale, const mask* __table, bool __del,
190
		     size_t __refs)
191
  : facet(__refs), _M_del(__table != 0 && __del),
192
  _M_toupper(NULL), _M_tolower(NULL),
193
  _M_table(__table ? __table : classic_table())
194
  {
195
    memset(_M_widen, 0, sizeof(_M_widen));
196
    _M_widen_ok = 0;
197
    memset(_M_narrow, 0, sizeof(_M_narrow));
198
    _M_narrow_ok = 0;
199
  }
200
 
201
  ctype::ctype(const mask* __table, bool __del, size_t __refs)
202
  : facet(__refs), _M_del(__table != 0 && __del),
203
  _M_toupper(NULL), _M_tolower(NULL),
204
  _M_table(__table ? __table : classic_table())
205
  {
206
    memset(_M_widen, 0, sizeof(_M_widen));
207
    _M_widen_ok = 0;
208
    memset(_M_narrow, 0, sizeof(_M_narrow));
209
    _M_narrow_ok = 0;
210
  }
211
 
212
  char
213
  ctype::do_toupper(char __c) const
214
  { return (this->is(ctype_base::lower, __c) ? (__c - 'a' + 'A') : __c); }
215
 
216
  const char*
217
  ctype::do_toupper(char* __low, const char* __high) const
218
  {
219
    while (__low < __high)
220
      {
221
	*__low = this->do_toupper(*__low);
222
	++__low;
223
      }
224
    return __high;
225
  }
226
 
227
  char
228
  ctype::do_tolower(char __c) const
229
  { return (this->is(ctype_base::upper, __c) ? (__c - 'A' + 'a') : __c); }
230
 
231
  const char*
232
  ctype::do_tolower(char* __low, const char* __high) const
233
  {
234
    while (__low < __high)
235
      {
236
	*__low = this->do_tolower(*__low);
237
	++__low;
238
      }
239
    return __high;
240
  }
241
 
242
_GLIBCXX_END_NAMESPACE_VERSION
243
} // namespace