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

Side by Side Diff: Source/core/editing/TextIterator.h

Issue 224113002: Oilpan: move Range object to the oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: heap/Handle.h => platform/heap/Handle.h Created 6 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) 2004, 2006, 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2004, 2006, 2009 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 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 10 matching lines...) Expand all
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 24 */
25 25
26 #ifndef TextIterator_h 26 #ifndef TextIterator_h
27 #define TextIterator_h 27 #define TextIterator_h
28 28
29 #include "core/dom/Range.h" 29 #include "core/dom/Range.h"
30 #include "core/editing/FindOptions.h" 30 #include "core/editing/FindOptions.h"
31 #include "platform/heap/Handle.h"
31 #include "wtf/Vector.h" 32 #include "wtf/Vector.h"
32 33
33 namespace WebCore { 34 namespace WebCore {
34 35
35 class InlineTextBox; 36 class InlineTextBox;
36 class RenderText; 37 class RenderText;
37 class RenderTextFragment; 38 class RenderTextFragment;
38 39
39 enum TextIteratorBehavior { 40 enum TextIteratorBehavior {
40 TextIteratorDefaultBehavior = 0, 41 TextIteratorDefaultBehavior = 0,
41 TextIteratorEmitsCharactersBetweenAllVisiblePositions = 1 << 0, 42 TextIteratorEmitsCharactersBetweenAllVisiblePositions = 1 << 0,
42 TextIteratorEntersTextControls = 1 << 1, 43 TextIteratorEntersTextControls = 1 << 1,
43 TextIteratorIgnoresStyleVisibility = 1 << 2, 44 TextIteratorIgnoresStyleVisibility = 1 << 2,
44 TextIteratorEmitsOriginalText = 1 << 3, 45 TextIteratorEmitsOriginalText = 1 << 3,
45 TextIteratorStopsOnFormControls = 1 << 4, 46 TextIteratorStopsOnFormControls = 1 << 4,
46 TextIteratorEmitsImageAltText = 1 << 5, 47 TextIteratorEmitsImageAltText = 1 << 5,
47 TextIteratorEntersAuthorShadowRoots = 1 << 6 48 TextIteratorEntersAuthorShadowRoots = 1 << 6
48 }; 49 };
49 typedef unsigned TextIteratorBehaviorFlags; 50 typedef unsigned TextIteratorBehaviorFlags;
50 51
51 String plainText(const Range*, TextIteratorBehaviorFlags = TextIteratorDefaultBe havior); 52 String plainText(const Range*, TextIteratorBehaviorFlags = TextIteratorDefaultBe havior);
52 PassRefPtr<Range> findPlainText(const Range*, const String&, FindOptions); 53 PassRefPtrWillBeRawPtr<Range> findPlainText(const Range*, const String&, FindOpt ions);
53 PassRefPtr<Range> findPlainText(const Position& start, const Position& end, cons t String&, FindOptions); 54 PassRefPtrWillBeRawPtr<Range> findPlainText(const Position& start, const Positio n& end, const String&, FindOptions);
54 55
55 class BitStack { 56 class BitStack {
56 public: 57 public:
57 BitStack(); 58 BitStack();
58 ~BitStack(); 59 ~BitStack();
59 60
60 void push(bool); 61 void push(bool);
61 void pop(); 62 void pop();
62 63
63 bool top() const; 64 bool top() const;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 return; 97 return;
97 if (m_singleCharacterBuffer) { 98 if (m_singleCharacterBuffer) {
98 ASSERT(!position); 99 ASSERT(!position);
99 ASSERT(length() == 1); 100 ASSERT(length() == 1);
100 output.append(&m_singleCharacterBuffer, 1); 101 output.append(&m_singleCharacterBuffer, 1);
101 } else { 102 } else {
102 string().appendTo(output, startOffset() + position, lengthToAppend); 103 string().appendTo(output, startOffset() + position, lengthToAppend);
103 } 104 }
104 } 105 }
105 106
106 PassRefPtr<Range> range() const; 107 PassRefPtrWillBeRawPtr<Range> range() const;
107 Node* node() const; 108 Node* node() const;
108 109
109 static int rangeLength(const Range*, bool spacesForReplacedElements = false) ; 110 static int rangeLength(const Range*, bool spacesForReplacedElements = false) ;
110 static PassRefPtr<Range> subrange(Range* entireRange, int characterOffset, i nt characterCount); 111 static PassRefPtrWillBeRawPtr<Range> subrange(Range* entireRange, int charac terOffset, int characterCount);
111 112
112 private: 113 private:
113 enum IterationProgress { 114 enum IterationProgress {
114 HandledNone, 115 HandledNone,
115 HandledAuthorShadowRoots, 116 HandledAuthorShadowRoots,
116 HandledUserAgentShadowRoot, 117 HandledUserAgentShadowRoot,
117 HandledNode, 118 HandledNode,
118 HandledChildren 119 HandledChildren
119 }; 120 };
120 121
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 void prependTextTo(BufferType& output) 227 void prependTextTo(BufferType& output)
227 { 228 {
228 if (!m_textLength) 229 if (!m_textLength)
229 return; 230 return;
230 if (m_singleCharacterBuffer) 231 if (m_singleCharacterBuffer)
231 output.prepend(&m_singleCharacterBuffer, 1); 232 output.prepend(&m_singleCharacterBuffer, 1);
232 else 233 else
233 m_textContainer.prependTo(output, m_textOffset, m_textLength); 234 m_textContainer.prependTo(output, m_textOffset, m_textLength);
234 } 235 }
235 236
236 PassRefPtr<Range> range() const; 237 PassRefPtrWillBeRawPtr<Range> range() const;
237 238
238 private: 239 private:
239 void exitNode(); 240 void exitNode();
240 bool handleTextNode(); 241 bool handleTextNode();
241 RenderText* handleFirstLetter(int& startOffset, int& offsetInNode); 242 RenderText* handleFirstLetter(int& startOffset, int& offsetInNode);
242 bool handleReplacedElement(); 243 bool handleReplacedElement();
243 bool handleNonTextNode(); 244 bool handleNonTextNode();
244 void emitCharacter(UChar, Node*, int startOffset, int endOffset); 245 void emitCharacter(UChar, Node*, int startOffset, int endOffset);
245 bool advanceRespectingRange(Node*); 246 bool advanceRespectingRange(Node*);
246 247
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 bool atBreak() const { return m_atBreak; } 304 bool atBreak() const { return m_atBreak; }
304 bool atEnd() const { return m_textIterator.atEnd(); } 305 bool atEnd() const { return m_textIterator.atEnd(); }
305 306
306 int length() const { return m_textIterator.length() - m_runOffset; } 307 int length() const { return m_textIterator.length() - m_runOffset; }
307 UChar characterAt(unsigned index) const { return m_textIterator.characterAt( m_runOffset + index); } 308 UChar characterAt(unsigned index) const { return m_textIterator.characterAt( m_runOffset + index); }
308 309
309 template<typename BufferType> 310 template<typename BufferType>
310 void appendTextTo(BufferType& output) { m_textIterator.appendTextTo(output, m_runOffset); } 311 void appendTextTo(BufferType& output) { m_textIterator.appendTextTo(output, m_runOffset); }
311 312
312 int characterOffset() const { return m_offset; } 313 int characterOffset() const { return m_offset; }
313 PassRefPtr<Range> range() const; 314 PassRefPtrWillBeRawPtr<Range> range() const;
314 315
315 private: 316 private:
316 void initialize(); 317 void initialize();
317 318
318 int m_offset; 319 int m_offset;
319 int m_runOffset; 320 int m_runOffset;
320 bool m_atBreak; 321 bool m_atBreak;
321 322
322 TextIterator m_textIterator; 323 TextIterator m_textIterator;
323 }; 324 };
324 325
325 class BackwardsCharacterIterator { 326 class BackwardsCharacterIterator {
326 public: 327 public:
327 explicit BackwardsCharacterIterator(const Range*, TextIteratorBehaviorFlags = TextIteratorDefaultBehavior); 328 explicit BackwardsCharacterIterator(const Range*, TextIteratorBehaviorFlags = TextIteratorDefaultBehavior);
328 329
329 void advance(int); 330 void advance(int);
330 331
331 bool atEnd() const { return m_textIterator.atEnd(); } 332 bool atEnd() const { return m_textIterator.atEnd(); }
332 333
333 PassRefPtr<Range> range() const; 334 PassRefPtrWillBeRawPtr<Range> range() const;
334 335
335 private: 336 private:
336 int m_offset; 337 int m_offset;
337 int m_runOffset; 338 int m_runOffset;
338 bool m_atBreak; 339 bool m_atBreak;
339 340
340 SimplifiedBackwardsTextIterator m_textIterator; 341 SimplifiedBackwardsTextIterator m_textIterator;
341 }; 342 };
342 343
343 // Very similar to the TextIterator, except that the chunks of text returned are "well behaved", 344 // Very similar to the TextIterator, except that the chunks of text returned are "well behaved",
344 // meaning they never end split up a word. This is useful for spellcheck or (pe rhaps one day) searching. 345 // meaning they never end split up a word. This is useful for spellcheck or (pe rhaps one day) searching.
345 class WordAwareIterator { 346 class WordAwareIterator {
347 DISALLOW_ALLOCATION();
tkent 2014/04/04 01:56:56 Ditto.
346 public: 348 public:
347 explicit WordAwareIterator(const Range*); 349 explicit WordAwareIterator(const Range*);
348 ~WordAwareIterator(); 350 ~WordAwareIterator();
349 351
350 bool atEnd() const { return !m_didLookAhead && m_textIterator.atEnd(); } 352 bool atEnd() const { return !m_didLookAhead && m_textIterator.atEnd(); }
351 void advance(); 353 void advance();
352 354
353 String substring(unsigned position, unsigned length) const; 355 String substring(unsigned position, unsigned length) const;
354 UChar characterAt(unsigned index) const; 356 UChar characterAt(unsigned index) const;
355 int length() const; 357 int length() const;
356 358
359 void trace(Visitor*);
360
357 private: 361 private:
358 Vector<UChar> m_buffer; 362 Vector<UChar> m_buffer;
359 // Did we have to look ahead in the textIterator to confirm the current chun k? 363 // Did we have to look ahead in the textIterator to confirm the current chun k?
360 bool m_didLookAhead; 364 bool m_didLookAhead;
361 RefPtr<Range> m_range; 365 RefPtrWillBeMember<Range> m_range;
362 TextIterator m_textIterator; 366 TextIterator m_textIterator;
363 }; 367 };
364 368
365 } 369 }
366 370
367 #endif 371 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698