|
1 /* |
|
2 ******************************************************************************* |
|
3 * Copyright (C) 2011, International Business Machines |
|
4 * Corporation and others. All Rights Reserved. |
|
5 ******************************************************************************* |
|
6 * file name: unistr_case_locale.cpp |
|
7 * encoding: US-ASCII |
|
8 * tab size: 8 (not used) |
|
9 * indentation:4 |
|
10 * |
|
11 * created on: 2011may31 |
|
12 * created by: Markus W. Scherer |
|
13 * |
|
14 * Locale-sensitive case mapping functions (ones that call uloc_getDefault()) |
|
15 * were moved here to break dependency cycles among parts of the common library. |
|
16 */ |
|
17 |
|
18 #include "unicode/utypes.h" |
|
19 #include "unicode/locid.h" |
|
20 #include "unicode/unistr.h" |
|
21 #include "cmemory.h" |
|
22 #include "ustr_imp.h" |
|
23 |
|
24 U_NAMESPACE_BEGIN |
|
25 |
|
26 //======================================== |
|
27 // Write implementation |
|
28 //======================================== |
|
29 |
|
30 /* |
|
31 * Set parameters on an empty UCaseMap, for UCaseMap-less API functions. |
|
32 * Do this fast because it is called with every function call. |
|
33 */ |
|
34 static inline void |
|
35 setTempCaseMap(UCaseMap *csm, const char *locale) { |
|
36 if(csm->csp==NULL) { |
|
37 csm->csp=ucase_getSingleton(); |
|
38 } |
|
39 if(locale!=NULL && locale[0]==0) { |
|
40 csm->locale[0]=0; |
|
41 } else { |
|
42 ustrcase_setTempCaseMapLocale(csm, locale); |
|
43 } |
|
44 } |
|
45 |
|
46 UnicodeString & |
|
47 UnicodeString::toLower() { |
|
48 return toLower(Locale::getDefault()); |
|
49 } |
|
50 |
|
51 UnicodeString & |
|
52 UnicodeString::toLower(const Locale &locale) { |
|
53 UCaseMap csm=UCASEMAP_INITIALIZER; |
|
54 setTempCaseMap(&csm, locale.getName()); |
|
55 return caseMap(&csm, ustrcase_internalToLower); |
|
56 } |
|
57 |
|
58 UnicodeString & |
|
59 UnicodeString::toUpper() { |
|
60 return toUpper(Locale::getDefault()); |
|
61 } |
|
62 |
|
63 UnicodeString & |
|
64 UnicodeString::toUpper(const Locale &locale) { |
|
65 UCaseMap csm=UCASEMAP_INITIALIZER; |
|
66 setTempCaseMap(&csm, locale.getName()); |
|
67 return caseMap(&csm, ustrcase_internalToUpper); |
|
68 } |
|
69 |
|
70 U_NAMESPACE_END |