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

Side by Side Diff: third_party/WebKit/Source/platform/text/StringTruncator.cpp

Issue 2811453002: Replace ASSERT, ASSERT_NOT_REACHED, and RELEASE_ASSERT in platform/text (Closed)
Patch Set: fix Created 3 years, 8 months 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2005, 2006, 2007 Apple Inc. All rights reserved. 2 * Copyright (C) 2005, 2006, 2007 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 int offset, 58 int offset,
59 int length) { 59 int length) {
60 int result = it.Following(offset); 60 int result = it.Following(offset);
61 return result == kTextBreakDone ? length : result; 61 return result == kTextBreakDone ? length : result;
62 } 62 }
63 63
64 static unsigned CenterTruncateToBuffer(const String& string, 64 static unsigned CenterTruncateToBuffer(const String& string,
65 unsigned length, 65 unsigned length,
66 unsigned keep_count, 66 unsigned keep_count,
67 UChar* buffer) { 67 UChar* buffer) {
68 ASSERT(keep_count < length); 68 DCHECK_LT(keep_count, length);
69 ASSERT(keep_count < STRING_BUFFER_SIZE); 69 DCHECK(keep_count < STRING_BUFFER_SIZE);
70 70
71 unsigned omit_start = (keep_count + 1) / 2; 71 unsigned omit_start = (keep_count + 1) / 2;
72 NonSharedCharacterBreakIterator it(string); 72 NonSharedCharacterBreakIterator it(string);
73 unsigned omit_end = BoundedTextBreakFollowing( 73 unsigned omit_end = BoundedTextBreakFollowing(
74 it, omit_start + (length - keep_count) - 1, length); 74 it, omit_start + (length - keep_count) - 1, length);
75 omit_start = TextBreakAtOrPreceding(it, omit_start); 75 omit_start = TextBreakAtOrPreceding(it, omit_start);
76 76
77 unsigned truncated_length = omit_start + 1 + (length - omit_end); 77 unsigned truncated_length = omit_start + 1 + (length - omit_end);
78 ASSERT(truncated_length <= length); 78 DCHECK_LE(truncated_length, length);
79 79
80 string.CopyTo(buffer, 0, omit_start); 80 string.CopyTo(buffer, 0, omit_start);
81 buffer[omit_start] = kHorizontalEllipsisCharacter; 81 buffer[omit_start] = kHorizontalEllipsisCharacter;
82 string.CopyTo(&buffer[omit_start + 1], omit_end, length - omit_end); 82 string.CopyTo(&buffer[omit_start + 1], omit_end, length - omit_end);
83 83
84 return truncated_length; 84 return truncated_length;
85 } 85 }
86 86
87 static unsigned RightTruncateToBuffer(const String& string, 87 static unsigned RightTruncateToBuffer(const String& string,
88 unsigned length, 88 unsigned length,
89 unsigned keep_count, 89 unsigned keep_count,
90 UChar* buffer) { 90 UChar* buffer) {
91 ASSERT(keep_count < length); 91 DCHECK_LT(keep_count, length);
92 ASSERT(keep_count < STRING_BUFFER_SIZE); 92 DCHECK(keep_count < STRING_BUFFER_SIZE);
93 93
94 NonSharedCharacterBreakIterator it(string); 94 NonSharedCharacterBreakIterator it(string);
95 unsigned keep_length = TextBreakAtOrPreceding(it, keep_count); 95 unsigned keep_length = TextBreakAtOrPreceding(it, keep_count);
96 unsigned truncated_length = keep_length + 1; 96 unsigned truncated_length = keep_length + 1;
97 97
98 string.CopyTo(buffer, 0, keep_length); 98 string.CopyTo(buffer, 0, keep_length);
99 buffer[keep_length] = kHorizontalEllipsisCharacter; 99 buffer[keep_length] = kHorizontalEllipsisCharacter;
100 100
101 return truncated_length; 101 return truncated_length;
102 } 102 }
(...skipping 10 matching lines...) Expand all
113 return renderer.Width(run); 113 return renderer.Width(run);
114 } 114 }
115 115
116 static String TruncateString(const String& string, 116 static String TruncateString(const String& string,
117 float max_width, 117 float max_width,
118 const Font& font, 118 const Font& font,
119 TruncationFunction truncate_to_buffer) { 119 TruncationFunction truncate_to_buffer) {
120 if (string.IsEmpty()) 120 if (string.IsEmpty())
121 return string; 121 return string;
122 122
123 ASSERT(max_width >= 0); 123 DCHECK_GE(max_width, 0);
124 124
125 float current_ellipsis_width = 125 float current_ellipsis_width =
126 StringWidth(font, &kHorizontalEllipsisCharacter, 1); 126 StringWidth(font, &kHorizontalEllipsisCharacter, 1);
127 127
128 UChar string_buffer[STRING_BUFFER_SIZE]; 128 UChar string_buffer[STRING_BUFFER_SIZE];
129 unsigned truncated_length; 129 unsigned truncated_length;
130 unsigned keep_count; 130 unsigned keep_count;
131 unsigned length = string.length(); 131 unsigned length = string.length();
132 132
133 if (length > STRING_BUFFER_SIZE) { 133 if (length > STRING_BUFFER_SIZE) {
(...skipping 16 matching lines...) Expand all
150 unsigned keep_count_for_smallest_known_to_not_fit = keep_count; 150 unsigned keep_count_for_smallest_known_to_not_fit = keep_count;
151 float width_for_smallest_known_to_not_fit = width; 151 float width_for_smallest_known_to_not_fit = width;
152 152
153 if (current_ellipsis_width >= max_width) { 153 if (current_ellipsis_width >= max_width) {
154 keep_count_for_largest_known_to_fit = 1; 154 keep_count_for_largest_known_to_fit = 1;
155 keep_count_for_smallest_known_to_not_fit = 2; 155 keep_count_for_smallest_known_to_not_fit = 2;
156 } 156 }
157 157
158 while (keep_count_for_largest_known_to_fit + 1 < 158 while (keep_count_for_largest_known_to_fit + 1 <
159 keep_count_for_smallest_known_to_not_fit) { 159 keep_count_for_smallest_known_to_not_fit) {
160 ASSERT(width_for_largest_known_to_fit <= max_width); 160 DCHECK_LE(width_for_largest_known_to_fit, max_width);
161 ASSERT(width_for_smallest_known_to_not_fit > max_width); 161 DCHECK_GT(width_for_smallest_known_to_not_fit, max_width);
162 162
163 float ratio = 163 float ratio =
164 (keep_count_for_smallest_known_to_not_fit - 164 (keep_count_for_smallest_known_to_not_fit -
165 keep_count_for_largest_known_to_fit) / 165 keep_count_for_largest_known_to_fit) /
166 (width_for_smallest_known_to_not_fit - width_for_largest_known_to_fit); 166 (width_for_smallest_known_to_not_fit - width_for_largest_known_to_fit);
167 keep_count = static_cast<unsigned>(max_width * ratio); 167 keep_count = static_cast<unsigned>(max_width * ratio);
168 168
169 if (keep_count <= keep_count_for_largest_known_to_fit) { 169 if (keep_count <= keep_count_for_largest_known_to_fit) {
170 keep_count = keep_count_for_largest_known_to_fit + 1; 170 keep_count = keep_count_for_largest_known_to_fit + 1;
171 } else if (keep_count >= keep_count_for_smallest_known_to_not_fit) { 171 } else if (keep_count >= keep_count_for_smallest_known_to_not_fit) {
172 keep_count = keep_count_for_smallest_known_to_not_fit - 1; 172 keep_count = keep_count_for_smallest_known_to_not_fit - 1;
173 } 173 }
174 174
175 ASSERT(keep_count < length); 175 DCHECK_LT(keep_count, length);
176 ASSERT(keep_count > 0); 176 DCHECK_GT(keep_count, 0u);
177 ASSERT(keep_count < keep_count_for_smallest_known_to_not_fit); 177 DCHECK_LT(keep_count, keep_count_for_smallest_known_to_not_fit);
178 ASSERT(keep_count > keep_count_for_largest_known_to_fit); 178 DCHECK_GT(keep_count, keep_count_for_largest_known_to_fit);
179 179
180 truncated_length = 180 truncated_length =
181 truncate_to_buffer(string, length, keep_count, string_buffer); 181 truncate_to_buffer(string, length, keep_count, string_buffer);
182 182
183 width = StringWidth(font, string_buffer, truncated_length); 183 width = StringWidth(font, string_buffer, truncated_length);
184 if (width <= max_width) { 184 if (width <= max_width) {
185 keep_count_for_largest_known_to_fit = keep_count; 185 keep_count_for_largest_known_to_fit = keep_count;
186 width_for_largest_known_to_fit = width; 186 width_for_largest_known_to_fit = width;
187 } else { 187 } else {
188 keep_count_for_smallest_known_to_not_fit = keep_count; 188 keep_count_for_smallest_known_to_not_fit = keep_count;
(...skipping 23 matching lines...) Expand all
212 float max_width, 212 float max_width,
213 const Font& font) { 213 const Font& font) {
214 return TruncateString(string, max_width, font, RightTruncateToBuffer); 214 return TruncateString(string, max_width, font, RightTruncateToBuffer);
215 } 215 }
216 216
217 float StringTruncator::Width(const String& string, const Font& font) { 217 float StringTruncator::Width(const String& string, const Font& font) {
218 return StringWidth(font, string); 218 return StringWidth(font, string);
219 } 219 }
220 220
221 } // namespace blink 221 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/text/SegmentedString.cpp ('k') | third_party/WebKit/Source/platform/text/SuffixTree.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698