| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #include "base/i18n/rtl.h" | 5 #include "base/i18n/rtl.h" |
| 6 | 6 |
| 7 #include "base/file_path.h" | 7 #include "base/file_path.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| 11 #include "base/sys_string_conversions.h" | 11 #include "base/sys_string_conversions.h" |
| 12 #include "unicode/coll.h" | 12 #include "unicode/coll.h" |
| 13 #include "unicode/locid.h" | 13 #include "unicode/locid.h" |
| 14 #include "unicode/uchar.h" | 14 #include "unicode/uchar.h" |
| 15 #include "unicode/uscript.h" | 15 #include "unicode/uscript.h" |
| 16 | 16 |
| 17 #if defined(TOOLKIT_GTK) | 17 #if defined(TOOLKIT_USES_GTK) |
| 18 #include <gtk/gtk.h> | 18 #include <gtk/gtk.h> |
| 19 #endif | 19 #endif |
| 20 | 20 |
| 21 namespace base { | 21 namespace base { |
| 22 namespace i18n { | 22 namespace i18n { |
| 23 | 23 |
| 24 // Represents the locale-specific ICU text direction. | 24 // Represents the locale-specific ICU text direction. |
| 25 static TextDirection g_icu_text_direction = UNKNOWN_DIRECTION; | 25 static TextDirection g_icu_text_direction = UNKNOWN_DIRECTION; |
| 26 | 26 |
| 27 void GetLanguageAndRegionFromOS(std::string* lang, std::string* region) { | 27 void GetLanguageAndRegionFromOS(std::string* lang, std::string* region) { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 void SetICUDefaultLocale(const std::string& locale_string) { | 68 void SetICUDefaultLocale(const std::string& locale_string) { |
| 69 icu::Locale locale(ICULocaleName(locale_string).c_str()); | 69 icu::Locale locale(ICULocaleName(locale_string).c_str()); |
| 70 UErrorCode error_code = U_ZERO_ERROR; | 70 UErrorCode error_code = U_ZERO_ERROR; |
| 71 icu::Locale::setDefault(locale, error_code); | 71 icu::Locale::setDefault(locale, error_code); |
| 72 // This return value is actually bogus because Locale object is | 72 // This return value is actually bogus because Locale object is |
| 73 // an ID and setDefault seems to always succeed (regardless of the | 73 // an ID and setDefault seems to always succeed (regardless of the |
| 74 // presence of actual locale data). However, | 74 // presence of actual locale data). However, |
| 75 // it does not hurt to have it as a sanity check. | 75 // it does not hurt to have it as a sanity check. |
| 76 DCHECK(U_SUCCESS(error_code)); | 76 DCHECK(U_SUCCESS(error_code)); |
| 77 g_icu_text_direction = UNKNOWN_DIRECTION; | 77 g_icu_text_direction = UNKNOWN_DIRECTION; |
| 78 |
| 79 // If we use Views toolkit on top of GtkWidget, then we need to keep |
| 80 // GtkWidget's default text direction consistent with ICU's text direction. |
| 81 // Because in this case ICU's text direction will be used instead. |
| 82 // See IsRTL() function below. |
| 83 #if defined(TOOLKIT_USES_GTK) && !defined(TOOLKIT_GTK) |
| 84 gtk_widget_set_default_direction( |
| 85 ICUIsRTL() ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR); |
| 86 #endif |
| 78 } | 87 } |
| 79 | 88 |
| 80 bool IsRTL() { | 89 bool IsRTL() { |
| 81 #if defined(TOOLKIT_GTK) | 90 #if defined(TOOLKIT_GTK) |
| 82 GtkTextDirection gtk_dir = gtk_widget_get_default_direction(); | 91 GtkTextDirection gtk_dir = gtk_widget_get_default_direction(); |
| 83 return (gtk_dir == GTK_TEXT_DIR_RTL); | 92 return (gtk_dir == GTK_TEXT_DIR_RTL); |
| 84 #else | 93 #else |
| 85 return ICUIsRTL(); | 94 return ICUIsRTL(); |
| 86 #endif | 95 #endif |
| 87 } | 96 } |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 begin == kRightToLeftOverride) | 286 begin == kRightToLeftOverride) |
| 278 ++begin_index; | 287 ++begin_index; |
| 279 size_t end_index = text.length() - 1; | 288 size_t end_index = text.length() - 1; |
| 280 if (text[end_index] == kPopDirectionalFormatting) | 289 if (text[end_index] == kPopDirectionalFormatting) |
| 281 --end_index; | 290 --end_index; |
| 282 return text.substr(begin_index, end_index - begin_index + 1); | 291 return text.substr(begin_index, end_index - begin_index + 1); |
| 283 } | 292 } |
| 284 | 293 |
| 285 } // namespace i18n | 294 } // namespace i18n |
| 286 } // namespace base | 295 } // namespace base |
| OLD | NEW |