| Index: ui/gfx/text_elider.cc
|
| diff --git a/ui/gfx/text_elider.cc b/ui/gfx/text_elider.cc
|
| index 5b9469614f22f8080a5dee020af64a4058264669..f7bc3a1961ff5ab44dd5f85244ccbf80c42fac62 100644
|
| --- a/ui/gfx/text_elider.cc
|
| +++ b/ui/gfx/text_elider.cc
|
| @@ -39,68 +39,6 @@ const base::char16 kForwardSlash = '/';
|
|
|
| namespace {
|
|
|
| -// Helper class to split + elide text, while respecting UTF16 surrogate pairs.
|
| -class StringSlicer {
|
| - public:
|
| - StringSlicer(const base::string16& text,
|
| - const base::string16& ellipsis,
|
| - bool elide_in_middle)
|
| - : text_(text),
|
| - ellipsis_(ellipsis),
|
| - elide_in_middle_(elide_in_middle) {
|
| - }
|
| -
|
| - // Cuts |text_| to be |length| characters long. If |elide_in_middle_| is true,
|
| - // the middle of the string is removed to leave equal-length pieces from the
|
| - // beginning and end of the string; otherwise, the end of the string is
|
| - // removed and only the beginning remains. If |insert_ellipsis| is true,
|
| - // then an ellipsis character will be inserted at the cut point.
|
| - base::string16 CutString(size_t length, bool insert_ellipsis) {
|
| - const base::string16 ellipsis_text = insert_ellipsis ? ellipsis_
|
| - : base::string16();
|
| -
|
| - if (!elide_in_middle_)
|
| - return text_.substr(0, FindValidBoundaryBefore(length)) + ellipsis_text;
|
| -
|
| - // We put the extra character, if any, before the cut.
|
| - const size_t half_length = length / 2;
|
| - const size_t prefix_length = FindValidBoundaryBefore(length - half_length);
|
| - const size_t suffix_start_guess = text_.length() - half_length;
|
| - const size_t suffix_start = FindValidBoundaryAfter(suffix_start_guess);
|
| - const size_t suffix_length =
|
| - half_length - (suffix_start_guess - suffix_start);
|
| - return text_.substr(0, prefix_length) + ellipsis_text +
|
| - text_.substr(suffix_start, suffix_length);
|
| - }
|
| -
|
| - private:
|
| - // Returns a valid cut boundary at or before |index|.
|
| - size_t FindValidBoundaryBefore(size_t index) const {
|
| - DCHECK_LE(index, text_.length());
|
| - if (index != text_.length())
|
| - U16_SET_CP_START(text_.data(), 0, index);
|
| - return index;
|
| - }
|
| -
|
| - // Returns a valid cut boundary at or after |index|.
|
| - size_t FindValidBoundaryAfter(size_t index) const {
|
| - DCHECK_LE(index, text_.length());
|
| - if (index != text_.length())
|
| - U16_SET_CP_LIMIT(text_.data(), 0, index, text_.length());
|
| - return index;
|
| - }
|
| -
|
| - // The text to be sliced.
|
| - const base::string16& text_;
|
| -
|
| - // Ellipsis string to use.
|
| - const base::string16& ellipsis_;
|
| -
|
| - // If true, the middle of the string will be elided.
|
| - bool elide_in_middle_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(StringSlicer);
|
| -};
|
|
|
| // Build a path from the first |num_components| elements in |path_elements|.
|
| // Prepends |path_prefix|, appends |filename|, inserts ellipsis if appropriate.
|
| @@ -150,6 +88,46 @@ base::string16 ElideComponentizedPath(
|
|
|
| } // namespace
|
|
|
| +StringSlicer::StringSlicer(const base::string16& text,
|
| + const base::string16& ellipsis,
|
| + bool elide_in_middle)
|
| + : text_(text),
|
| + ellipsis_(ellipsis),
|
| + elide_in_middle_(elide_in_middle) {
|
| +}
|
| +
|
| +base::string16 StringSlicer::CutString(size_t length, bool insert_ellipsis) {
|
| + const base::string16 ellipsis_text = insert_ellipsis ? ellipsis_
|
| + : base::string16();
|
| +
|
| + if (!elide_in_middle_)
|
| + return text_.substr(0, FindValidBoundaryBefore(length)) + ellipsis_text;
|
| +
|
| + // We put the extra character, if any, before the cut.
|
| + const size_t half_length = length / 2;
|
| + const size_t prefix_length = FindValidBoundaryBefore(length - half_length);
|
| + const size_t suffix_start_guess = text_.length() - half_length;
|
| + const size_t suffix_start = FindValidBoundaryAfter(suffix_start_guess);
|
| + const size_t suffix_length =
|
| + half_length - (suffix_start_guess - suffix_start);
|
| + return text_.substr(0, prefix_length) + ellipsis_text +
|
| + text_.substr(suffix_start, suffix_length);
|
| +}
|
| +
|
| +size_t StringSlicer::FindValidBoundaryBefore(size_t index) const {
|
| + DCHECK_LE(index, text_.length());
|
| + if (index != text_.length())
|
| + U16_SET_CP_START(text_.data(), 0, index);
|
| + return index;
|
| +}
|
| +
|
| +size_t StringSlicer::FindValidBoundaryAfter(size_t index) const {
|
| + DCHECK_LE(index, text_.length());
|
| + if (index != text_.length())
|
| + U16_SET_CP_LIMIT(text_.data(), 0, index, text_.length());
|
| + return index;
|
| +}
|
| +
|
| base::string16 ElideEmail(const base::string16& email,
|
| const FontList& font_list,
|
| float available_pixel_width) {
|
|
|