Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(232)

Side by Side Diff: app/l10n_util.cc

Issue 5742006: wstrings: make l10n_util::TruncateString use string16 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « app/l10n_util.h ('k') | app/l10n_util_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "app/l10n_util.h" 5 #include "app/l10n_util.h"
6 6
7 #if defined(TOOLKIT_USES_GTK) 7 #if defined(TOOLKIT_USES_GTK)
8 #include <glib/gutils.h> 8 #include <glib/gutils.h>
9 #endif 9 #endif
10 10
(...skipping 26 matching lines...) Expand all
37 #endif 37 #endif
38 38
39 namespace { 39 namespace {
40 40
41 #if defined(OS_WIN) 41 #if defined(OS_WIN)
42 static const FilePath::CharType kLocaleFileExtension[] = L".dll"; 42 static const FilePath::CharType kLocaleFileExtension[] = L".dll";
43 #elif defined(OS_POSIX) 43 #elif defined(OS_POSIX)
44 static const FilePath::CharType kLocaleFileExtension[] = ".pak"; 44 static const FilePath::CharType kLocaleFileExtension[] = ".pak";
45 #endif 45 #endif
46 46
47 // Added to the end of strings that are too big in TrucateString.
48 static const wchar_t* const kElideString = L"\x2026";
49
50 static const char* const kAcceptLanguageList[] = { 47 static const char* const kAcceptLanguageList[] = {
51 "af", // Afrikaans 48 "af", // Afrikaans
52 "am", // Amharic 49 "am", // Amharic
53 "ar", // Arabic 50 "ar", // Arabic
54 "az", // Azerbaijani 51 "az", // Azerbaijani
55 "be", // Belarusian 52 "be", // Belarusian
56 "bg", // Bulgarian 53 "bg", // Bulgarian
57 "bh", // Bihari 54 "bh", // Bihari
58 "bn", // Bengali 55 "bn", // Bengali
59 "br", // Breton 56 "br", // Breton
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 } 671 }
675 672
676 std::wstring GetStringF(int message_id, int a) { 673 std::wstring GetStringF(int message_id, int a) {
677 return GetStringF(message_id, UTF8ToWide(base::IntToString(a))); 674 return GetStringF(message_id, UTF8ToWide(base::IntToString(a)));
678 } 675 }
679 676
680 std::wstring GetStringF(int message_id, int64 a) { 677 std::wstring GetStringF(int message_id, int64 a) {
681 return GetStringF(message_id, UTF8ToWide(base::Int64ToString(a))); 678 return GetStringF(message_id, UTF8ToWide(base::Int64ToString(a)));
682 } 679 }
683 680
684 std::wstring TruncateString(const std::wstring& string, size_t length) { 681 string16 TruncateString(const string16& string, size_t length) {
685 if (string.size() <= length) 682 if (string.size() <= length)
686 // String fits, return it. 683 // String fits, return it.
687 return string; 684 return string;
688 685
689 if (length == 0) { 686 if (length == 0) {
690 // No room for the ellide string, return an empty string. 687 // No room for the elide string, return an empty string.
691 return std::wstring(L""); 688 return string16();
692 } 689 }
693 size_t max = length - 1; 690 size_t max = length - 1;
694 691
692 // Added to the end of strings that are too big.
693 static const char16 kElideString[] = { 0x2026, 0 };
694
695 if (max == 0) { 695 if (max == 0) {
696 // Just enough room for the elide string. 696 // Just enough room for the elide string.
697 return kElideString; 697 return kElideString;
698 } 698 }
699 699
700 #if defined(WCHAR_T_IS_UTF32)
701 const string16 string_utf16 = WideToUTF16(string);
702 #else
703 const std::wstring &string_utf16 = string;
704 #endif
705 // Use a line iterator to find the first boundary. 700 // Use a line iterator to find the first boundary.
706 UErrorCode status = U_ZERO_ERROR; 701 UErrorCode status = U_ZERO_ERROR;
707 scoped_ptr<icu::RuleBasedBreakIterator> bi( 702 scoped_ptr<icu::RuleBasedBreakIterator> bi(
708 static_cast<icu::RuleBasedBreakIterator*>( 703 static_cast<icu::RuleBasedBreakIterator*>(
709 icu::RuleBasedBreakIterator::createLineInstance( 704 icu::RuleBasedBreakIterator::createLineInstance(
710 icu::Locale::getDefault(), status))); 705 icu::Locale::getDefault(), status)));
711 if (U_FAILURE(status)) 706 if (U_FAILURE(status))
712 return string.substr(0, max) + kElideString; 707 return string.substr(0, max) + kElideString;
713 bi->setText(string_utf16.c_str()); 708 bi->setText(string.c_str());
714 int32_t index = bi->preceding(static_cast<int32_t>(max)); 709 int32_t index = bi->preceding(static_cast<int32_t>(max));
715 if (index == icu::BreakIterator::DONE) { 710 if (index == icu::BreakIterator::DONE) {
716 index = static_cast<int32_t>(max); 711 index = static_cast<int32_t>(max);
717 } else { 712 } else {
718 // Found a valid break (may be the beginning of the string). Now use 713 // Found a valid break (may be the beginning of the string). Now use
719 // a character iterator to find the previous non-whitespace character. 714 // a character iterator to find the previous non-whitespace character.
720 icu::StringCharacterIterator char_iterator(string_utf16.c_str()); 715 icu::StringCharacterIterator char_iterator(string.c_str());
721 if (index == 0) { 716 if (index == 0) {
722 // No valid line breaks. Start at the end again. This ensures we break 717 // No valid line breaks. Start at the end again. This ensures we break
723 // on a valid character boundary. 718 // on a valid character boundary.
724 index = static_cast<int32_t>(max); 719 index = static_cast<int32_t>(max);
725 } 720 }
726 char_iterator.setIndex(index); 721 char_iterator.setIndex(index);
727 while (char_iterator.hasPrevious()) { 722 while (char_iterator.hasPrevious()) {
728 char_iterator.previous(); 723 char_iterator.previous();
729 if (!(u_isspace(char_iterator.current()) || 724 if (!(u_isspace(char_iterator.current()) ||
730 u_charType(char_iterator.current()) == U_CONTROL_CHAR || 725 u_charType(char_iterator.current()) == U_CONTROL_CHAR ||
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 for (size_t i = 0; i < arraysize(kAcceptLanguageList); ++i) { 867 for (size_t i = 0; i < arraysize(kAcceptLanguageList); ++i) {
873 if (!IsLocaleNameTranslated(kAcceptLanguageList[i], display_locale)) 868 if (!IsLocaleNameTranslated(kAcceptLanguageList[i], display_locale))
874 // TODO(jungshik) : Put them at the of the list with language codes 869 // TODO(jungshik) : Put them at the of the list with language codes
875 // enclosed by brackets instead of skipping. 870 // enclosed by brackets instead of skipping.
876 continue; 871 continue;
877 locale_codes->push_back(kAcceptLanguageList[i]); 872 locale_codes->push_back(kAcceptLanguageList[i]);
878 } 873 }
879 } 874 }
880 875
881 } // namespace l10n_util 876 } // namespace l10n_util
OLDNEW
« no previous file with comments | « app/l10n_util.h ('k') | app/l10n_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698