OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef BASE_I18N_RTL_H_ | 5 #ifndef BASE_I18N_RTL_H_ |
6 #define BASE_I18N_RTL_H_ | 6 #define BASE_I18N_RTL_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 | 10 |
11 #include "base/compiler_specific.h" | 11 #include "base/compiler_specific.h" |
| 12 #include "base/i18n/base_i18n_export.h" |
12 #include "base/string16.h" | 13 #include "base/string16.h" |
13 #include "build/build_config.h" | 14 #include "build/build_config.h" |
14 | 15 |
15 class FilePath; | 16 class FilePath; |
16 | 17 |
17 namespace base { | 18 namespace base { |
18 namespace i18n { | 19 namespace i18n { |
19 | 20 |
20 const char16 kRightToLeftMark = 0x200F; | 21 const char16 kRightToLeftMark = 0x200F; |
21 const char16 kLeftToRightMark = 0x200E; | 22 const char16 kLeftToRightMark = 0x200E; |
22 const char16 kLeftToRightEmbeddingMark = 0x202A; | 23 const char16 kLeftToRightEmbeddingMark = 0x202A; |
23 const char16 kRightToLeftEmbeddingMark = 0x202B; | 24 const char16 kRightToLeftEmbeddingMark = 0x202B; |
24 const char16 kPopDirectionalFormatting = 0x202C; | 25 const char16 kPopDirectionalFormatting = 0x202C; |
25 const char16 kLeftToRightOverride = 0x202D; | 26 const char16 kLeftToRightOverride = 0x202D; |
26 const char16 kRightToLeftOverride = 0x202E; | 27 const char16 kRightToLeftOverride = 0x202E; |
27 | 28 |
28 enum TextDirection { | 29 enum TextDirection { |
29 UNKNOWN_DIRECTION, | 30 UNKNOWN_DIRECTION, |
30 RIGHT_TO_LEFT, | 31 RIGHT_TO_LEFT, |
31 LEFT_TO_RIGHT, | 32 LEFT_TO_RIGHT, |
32 }; | 33 }; |
33 | 34 |
34 // Get the locale that the currently running process has been configured to use. | 35 // Get the locale that the currently running process has been configured to use. |
35 // The return value is of the form language[-country] (e.g., en-US) where the | 36 // The return value is of the form language[-country] (e.g., en-US) where the |
36 // language is the 2 or 3 letter code from ISO-639. | 37 // language is the 2 or 3 letter code from ISO-639. |
37 std::string GetConfiguredLocale(); | 38 BASE_I18N_EXPORT std::string GetConfiguredLocale(); |
38 | 39 |
39 // Canonicalize a string (eg. a POSIX locale string) to a Chrome locale name. | 40 // Canonicalize a string (eg. a POSIX locale string) to a Chrome locale name. |
40 std::string GetCanonicalLocale(const char* locale); | 41 BASE_I18N_EXPORT std::string GetCanonicalLocale(const char* locale); |
41 | 42 |
42 // Sets the default locale of ICU. | 43 // Sets the default locale of ICU. |
43 // Once the application locale of Chrome in GetApplicationLocale is determined, | 44 // Once the application locale of Chrome in GetApplicationLocale is determined, |
44 // the default locale of ICU need to be changed to match the application locale | 45 // the default locale of ICU need to be changed to match the application locale |
45 // so that ICU functions work correctly in a locale-dependent manner. | 46 // so that ICU functions work correctly in a locale-dependent manner. |
46 // This is handy in that we don't have to call GetApplicationLocale() | 47 // This is handy in that we don't have to call GetApplicationLocale() |
47 // everytime we call locale-dependent ICU APIs as long as we make sure | 48 // everytime we call locale-dependent ICU APIs as long as we make sure |
48 // that this is called before any locale-dependent API is called. | 49 // that this is called before any locale-dependent API is called. |
49 void SetICUDefaultLocale(const std::string& locale_string); | 50 BASE_I18N_EXPORT void SetICUDefaultLocale(const std::string& locale_string); |
50 | 51 |
51 // Returns true if the application text direction is right-to-left. | 52 // Returns true if the application text direction is right-to-left. |
52 bool IsRTL(); | 53 BASE_I18N_EXPORT bool IsRTL(); |
53 | 54 |
54 // Returns whether the text direction for the default ICU locale is RTL. This | 55 // Returns whether the text direction for the default ICU locale is RTL. This |
55 // assumes that SetICUDefaultLocale has been called to set the default locale to | 56 // assumes that SetICUDefaultLocale has been called to set the default locale to |
56 // the UI locale of Chrome. | 57 // the UI locale of Chrome. |
57 // NOTE: Generally, you should call IsRTL() instead of this. | 58 // NOTE: Generally, you should call IsRTL() instead of this. |
58 bool ICUIsRTL(); | 59 BASE_I18N_EXPORT bool ICUIsRTL(); |
59 | 60 |
60 // Returns the text direction for |locale_name|. | 61 // Returns the text direction for |locale_name|. |
61 TextDirection GetTextDirectionForLocale(const char* locale_name); | 62 BASE_I18N_EXPORT TextDirection GetTextDirectionForLocale( |
| 63 const char* locale_name); |
62 | 64 |
63 // Given the string in |text|, returns the directionality of the first | 65 // Given the string in |text|, returns the directionality of the first |
64 // character with strong directionality in the string. If no character in the | 66 // character with strong directionality in the string. If no character in the |
65 // text has strong directionality, LEFT_TO_RIGHT is returned. The Bidi | 67 // text has strong directionality, LEFT_TO_RIGHT is returned. The Bidi |
66 // character types L, LRE, LRO, R, AL, RLE, and RLO are considered as strong | 68 // character types L, LRE, LRO, R, AL, RLE, and RLO are considered as strong |
67 // directionality characters. Please refer to http://unicode.org/reports/tr9/ | 69 // directionality characters. Please refer to http://unicode.org/reports/tr9/ |
68 // for more information. | 70 // for more information. |
69 TextDirection GetFirstStrongCharacterDirection(const string16& text); | 71 BASE_I18N_EXPORT TextDirection GetFirstStrongCharacterDirection( |
| 72 const string16& text); |
70 | 73 |
71 // Given the string in |text|, this function modifies the string in place with | 74 // Given the string in |text|, this function modifies the string in place with |
72 // the appropriate Unicode formatting marks that mark the string direction | 75 // the appropriate Unicode formatting marks that mark the string direction |
73 // (either left-to-right or right-to-left). The function checks both the current | 76 // (either left-to-right or right-to-left). The function checks both the current |
74 // locale and the contents of the string in order to determine the direction of | 77 // locale and the contents of the string in order to determine the direction of |
75 // the returned string. The function returns true if the string in |text| was | 78 // the returned string. The function returns true if the string in |text| was |
76 // properly adjusted. | 79 // properly adjusted. |
77 // | 80 // |
78 // Certain LTR strings are not rendered correctly when the context is RTL. For | 81 // Certain LTR strings are not rendered correctly when the context is RTL. For |
79 // example, the string "Foo!" will appear as "!Foo" if it is rendered as is in | 82 // example, the string "Foo!" will appear as "!Foo" if it is rendered as is in |
80 // an RTL context. Calling this function will make sure the returned localized | 83 // an RTL context. Calling this function will make sure the returned localized |
81 // string is always treated as a right-to-left string. This is done by | 84 // string is always treated as a right-to-left string. This is done by |
82 // inserting certain Unicode formatting marks into the returned string. | 85 // inserting certain Unicode formatting marks into the returned string. |
83 // | 86 // |
84 // ** Notes about the Windows version of this function: | 87 // ** Notes about the Windows version of this function: |
85 // TODO(idana) bug 6806: this function adjusts the string in question only | 88 // TODO(idana) bug 6806: this function adjusts the string in question only |
86 // if the current locale is right-to-left. The function does not take care of | 89 // if the current locale is right-to-left. The function does not take care of |
87 // the opposite case (an RTL string displayed in an LTR context) since | 90 // the opposite case (an RTL string displayed in an LTR context) since |
88 // adjusting the string involves inserting Unicode formatting characters that | 91 // adjusting the string involves inserting Unicode formatting characters that |
89 // Windows does not handle well unless right-to-left language support is | 92 // Windows does not handle well unless right-to-left language support is |
90 // installed. Since the English version of Windows doesn't have right-to-left | 93 // installed. Since the English version of Windows doesn't have right-to-left |
91 // language support installed by default, inserting the direction Unicode mark | 94 // language support installed by default, inserting the direction Unicode mark |
92 // results in Windows displaying squares. | 95 // results in Windows displaying squares. |
93 bool AdjustStringForLocaleDirection(string16* text); | 96 BASE_I18N_EXPORT bool AdjustStringForLocaleDirection(string16* text); |
94 | 97 |
95 // Returns true if the string contains at least one character with strong right | 98 // Returns true if the string contains at least one character with strong right |
96 // to left directionality; that is, a character with either R or AL Unicode | 99 // to left directionality; that is, a character with either R or AL Unicode |
97 // BiDi character type. | 100 // BiDi character type. |
98 bool StringContainsStrongRTLChars(const string16& text); | 101 BASE_I18N_EXPORT bool StringContainsStrongRTLChars(const string16& text); |
99 | 102 |
100 // Wraps a string with an LRE-PDF pair which essentialy marks the string as a | 103 // Wraps a string with an LRE-PDF pair which essentialy marks the string as a |
101 // Left-To-Right string. Doing this is useful in order to make sure LTR | 104 // Left-To-Right string. Doing this is useful in order to make sure LTR |
102 // strings are rendered properly in an RTL context. | 105 // strings are rendered properly in an RTL context. |
103 void WrapStringWithLTRFormatting(string16* text); | 106 BASE_I18N_EXPORT void WrapStringWithLTRFormatting(string16* text); |
104 | 107 |
105 // Wraps a string with an RLE-PDF pair which essentialy marks the string as a | 108 // Wraps a string with an RLE-PDF pair which essentialy marks the string as a |
106 // Right-To-Left string. Doing this is useful in order to make sure RTL | 109 // Right-To-Left string. Doing this is useful in order to make sure RTL |
107 // strings are rendered properly in an LTR context. | 110 // strings are rendered properly in an LTR context. |
108 void WrapStringWithRTLFormatting(string16* text); | 111 BASE_I18N_EXPORT void WrapStringWithRTLFormatting(string16* text); |
109 | 112 |
110 // Wraps file path to get it to display correctly in RTL UI. All filepaths | 113 // Wraps file path to get it to display correctly in RTL UI. All filepaths |
111 // should be passed through this function before display in UI for RTL locales. | 114 // should be passed through this function before display in UI for RTL locales. |
112 void WrapPathWithLTRFormatting(const FilePath& path, | 115 BASE_I18N_EXPORT void WrapPathWithLTRFormatting(const FilePath& path, |
113 string16* rtl_safe_path); | 116 string16* rtl_safe_path); |
114 | 117 |
115 // Given the string in |text|, this function returns the adjusted string having | 118 // Given the string in |text|, this function returns the adjusted string having |
116 // LTR directionality for display purpose. Which means that in RTL locale the | 119 // LTR directionality for display purpose. Which means that in RTL locale the |
117 // string is wrapped with LRE (Left-To-Right Embedding) and PDF (Pop | 120 // string is wrapped with LRE (Left-To-Right Embedding) and PDF (Pop |
118 // Directional Formatting) marks and returned. In LTR locale, the string itself | 121 // Directional Formatting) marks and returned. In LTR locale, the string itself |
119 // is returned. | 122 // is returned. |
120 string16 GetDisplayStringInLTRDirectionality(const string16& text) | 123 BASE_I18N_EXPORT string16 GetDisplayStringInLTRDirectionality( |
121 WARN_UNUSED_RESULT; | 124 const string16& text) WARN_UNUSED_RESULT; |
122 | 125 |
123 // Strip the beginning (U+202A..U+202B, U+202D..U+202E) and/or ending (U+202C) | 126 // Strip the beginning (U+202A..U+202B, U+202D..U+202E) and/or ending (U+202C) |
124 // explicit bidi control characters from |text|, if there are any. Otherwise, | 127 // explicit bidi control characters from |text|, if there are any. Otherwise, |
125 // return the text itself. Explicit bidi control characters display and have | 128 // return the text itself. Explicit bidi control characters display and have |
126 // semantic effect. They can be deleted so they might not always appear in a | 129 // semantic effect. They can be deleted so they might not always appear in a |
127 // pair. | 130 // pair. |
128 const string16 StripWrappingBidiControlCharacters(const string16& text) | 131 BASE_I18N_EXPORT const string16 StripWrappingBidiControlCharacters( |
129 WARN_UNUSED_RESULT; | 132 const string16& text) WARN_UNUSED_RESULT; |
130 | 133 |
131 } // namespace i18n | 134 } // namespace i18n |
132 } // namespace base | 135 } // namespace base |
133 | 136 |
134 #endif // BASE_I18N_RTL_H_ | 137 #endif // BASE_I18N_RTL_H_ |
OLD | NEW |