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

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

Issue 319083004: Oilpan: add Element/Node Member fields to stack allocated objects. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 6 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
« no previous file with comments | « Source/core/dom/shadow/ComposedTreeWalker.h ('k') | Source/core/editing/TextIterator.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 private: 67 private:
68 unsigned m_size; 68 unsigned m_size;
69 Vector<unsigned, 1> m_words; 69 Vector<unsigned, 1> m_words;
70 }; 70 };
71 71
72 // Iterates through the DOM range, returning all the text, and 0-length boundari es 72 // Iterates through the DOM range, returning all the text, and 0-length boundari es
73 // at points where replaced elements break up the text flow. The text comes bac k in 73 // at points where replaced elements break up the text flow. The text comes bac k in
74 // chunks so as to optimize for performance of the iteration. 74 // chunks so as to optimize for performance of the iteration.
75 75
76 class TextIterator { 76 class TextIterator {
77 STACK_ALLOCATED();
77 public: 78 public:
78 explicit TextIterator(const Range*, TextIteratorBehaviorFlags = TextIterator DefaultBehavior); 79 explicit TextIterator(const Range*, TextIteratorBehaviorFlags = TextIterator DefaultBehavior);
79 // [start, end] indicates the document range that the iteration should take place within (both ends inclusive). 80 // [start, end] indicates the document range that the iteration should take place within (both ends inclusive).
80 TextIterator(const Position& start, const Position& end, TextIteratorBehavio rFlags = TextIteratorDefaultBehavior); 81 TextIterator(const Position& start, const Position& end, TextIteratorBehavio rFlags = TextIteratorDefaultBehavior);
81 ~TextIterator(); 82 ~TextIterator();
82 83
83 bool atEnd() const { return !m_positionNode || m_shouldStop; } 84 bool atEnd() const { return !m_positionNode || m_shouldStop; }
84 void advance(); 85 void advance();
85 86
86 int length() const { return m_textLength; } 87 int length() const { return m_textLength; }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 bool handleNonTextNode(); 133 bool handleNonTextNode();
133 void handleTextBox(); 134 void handleTextBox();
134 void handleTextNodeFirstLetter(RenderTextFragment*); 135 void handleTextNodeFirstLetter(RenderTextFragment*);
135 bool hasVisibleTextNode(RenderText*); 136 bool hasVisibleTextNode(RenderText*);
136 void emitCharacter(UChar, Node* textNode, Node* offsetBaseNode, int textStar tOffset, int textEndOffset); 137 void emitCharacter(UChar, Node* textNode, Node* offsetBaseNode, int textStar tOffset, int textEndOffset);
137 void emitText(Node* textNode, RenderObject* renderObject, int textStartOffse t, int textEndOffset); 138 void emitText(Node* textNode, RenderObject* renderObject, int textStartOffse t, int textEndOffset);
138 void emitText(Node* textNode, int textStartOffset, int textEndOffset); 139 void emitText(Node* textNode, int textStartOffset, int textEndOffset);
139 140
140 // Current position, not necessarily of the text being returned, but positio n 141 // Current position, not necessarily of the text being returned, but positio n
141 // as we walk through the DOM tree. 142 // as we walk through the DOM tree.
142 Node* m_node; 143 RawPtrWillBeMember<Node> m_node;
143 int m_offset; 144 int m_offset;
144 IterationProgress m_iterationProgress; 145 IterationProgress m_iterationProgress;
145 BitStack m_fullyClippedStack; 146 BitStack m_fullyClippedStack;
146 int m_shadowDepth; 147 int m_shadowDepth;
147 148
148 // The range. 149 // The range.
149 Node* m_startContainer; 150 RawPtrWillBeMember<Node> m_startContainer;
150 int m_startOffset; 151 int m_startOffset;
151 Node* m_endContainer; 152 RawPtrWillBeMember<Node> m_endContainer;
152 int m_endOffset; 153 int m_endOffset;
153 Node* m_pastEndNode; 154 RawPtrWillBeMember<Node> m_pastEndNode;
154 155
155 // The current text and its position, in the form to be returned from the it erator. 156 // The current text and its position, in the form to be returned from the it erator.
156 Node* m_positionNode; 157 RawPtrWillBeMember<Node> m_positionNode;
157 mutable Node* m_positionOffsetBaseNode; 158 mutable RawPtrWillBeMember<Node> m_positionOffsetBaseNode;
158 mutable int m_positionStartOffset; 159 mutable int m_positionStartOffset;
159 mutable int m_positionEndOffset; 160 mutable int m_positionEndOffset;
160 int m_textLength; 161 int m_textLength;
161 String m_text; 162 String m_text;
162 163
163 // Used when there is still some pending text from the current node; when th ese 164 // Used when there is still some pending text from the current node; when th ese
164 // are false and 0, we go back to normal iterating. 165 // are false and 0, we go back to normal iterating.
165 bool m_needsAnotherNewline; 166 bool m_needsAnotherNewline;
166 InlineTextBox* m_textBox; 167 InlineTextBox* m_textBox;
167 // Used when iteration over :first-letter text to save pointer to 168 // Used when iteration over :first-letter text to save pointer to
168 // remaining text box. 169 // remaining text box.
169 InlineTextBox* m_remainingTextBox; 170 InlineTextBox* m_remainingTextBox;
170 // Used to point to RenderText object for :first-letter. 171 // Used to point to RenderText object for :first-letter.
171 RenderText *m_firstLetterText; 172 RenderText *m_firstLetterText;
172 173
173 // Used to do the whitespace collapsing logic. 174 // Used to do the whitespace collapsing logic.
174 Node* m_lastTextNode; 175 RawPtrWillBeMember<Node> m_lastTextNode;
175 bool m_lastTextNodeEndedWithCollapsedSpace; 176 bool m_lastTextNodeEndedWithCollapsedSpace;
176 UChar m_lastCharacter; 177 UChar m_lastCharacter;
177 178
178 // Used for whitespace characters that aren't in the DOM, so we can point at them. 179 // Used for whitespace characters that aren't in the DOM, so we can point at them.
179 // If non-zero, overrides m_text. 180 // If non-zero, overrides m_text.
180 UChar m_singleCharacterBuffer; 181 UChar m_singleCharacterBuffer;
181 182
182 // Used when text boxes are out of order (Hebrew/Arabic w/ embeded LTR text) 183 // Used when text boxes are out of order (Hebrew/Arabic w/ embeded LTR text)
183 Vector<InlineTextBox*> m_sortedTextBoxes; 184 Vector<InlineTextBox*> m_sortedTextBoxes;
184 size_t m_sortedTextBoxesPosition; 185 size_t m_sortedTextBoxesPosition;
(...skipping 21 matching lines...) Expand all
206 207
207 bool m_emitsImageAltText; 208 bool m_emitsImageAltText;
208 209
209 bool m_entersAuthorShadowRoots; 210 bool m_entersAuthorShadowRoots;
210 }; 211 };
211 212
212 // Iterates through the DOM range, returning all the text, and 0-length boundari es 213 // Iterates through the DOM range, returning all the text, and 0-length boundari es
213 // at points where replaced elements break up the text flow. The text comes back in 214 // at points where replaced elements break up the text flow. The text comes back in
214 // chunks so as to optimize for performance of the iteration. 215 // chunks so as to optimize for performance of the iteration.
215 class SimplifiedBackwardsTextIterator { 216 class SimplifiedBackwardsTextIterator {
217 STACK_ALLOCATED();
216 public: 218 public:
217 explicit SimplifiedBackwardsTextIterator(const Range*, TextIteratorBehaviorF lags = TextIteratorDefaultBehavior); 219 explicit SimplifiedBackwardsTextIterator(const Range*, TextIteratorBehaviorF lags = TextIteratorDefaultBehavior);
218 220
219 bool atEnd() const { return !m_positionNode || m_shouldStop; } 221 bool atEnd() const { return !m_positionNode || m_shouldStop; }
220 void advance(); 222 void advance();
221 223
222 int length() const { return m_textLength; } 224 int length() const { return m_textLength; }
223 225
224 Node* node() const { return m_node; } 226 Node* node() const { return m_node; }
225 227
(...skipping 14 matching lines...) Expand all
240 void exitNode(); 242 void exitNode();
241 bool handleTextNode(); 243 bool handleTextNode();
242 RenderText* handleFirstLetter(int& startOffset, int& offsetInNode); 244 RenderText* handleFirstLetter(int& startOffset, int& offsetInNode);
243 bool handleReplacedElement(); 245 bool handleReplacedElement();
244 bool handleNonTextNode(); 246 bool handleNonTextNode();
245 void emitCharacter(UChar, Node*, int startOffset, int endOffset); 247 void emitCharacter(UChar, Node*, int startOffset, int endOffset);
246 bool advanceRespectingRange(Node*); 248 bool advanceRespectingRange(Node*);
247 249
248 // Current position, not necessarily of the text being returned, but positio n 250 // Current position, not necessarily of the text being returned, but positio n
249 // as we walk through the DOM tree. 251 // as we walk through the DOM tree.
250 Node* m_node; 252 RawPtrWillBeMember<Node> m_node;
251 int m_offset; 253 int m_offset;
252 bool m_handledNode; 254 bool m_handledNode;
253 bool m_handledChildren; 255 bool m_handledChildren;
254 BitStack m_fullyClippedStack; 256 BitStack m_fullyClippedStack;
255 257
256 // End of the range. 258 // End of the range.
257 Node* m_startNode; 259 RawPtrWillBeMember<Node> m_startNode;
258 int m_startOffset; 260 int m_startOffset;
259 // Start of the range. 261 // Start of the range.
260 Node* m_endNode; 262 RawPtrWillBeMember<Node> m_endNode;
261 int m_endOffset; 263 int m_endOffset;
262 264
263 // The current text and its position, in the form to be returned from the it erator. 265 // The current text and its position, in the form to be returned from the it erator.
264 Node* m_positionNode; 266 RawPtrWillBeMember<Node> m_positionNode;
265 int m_positionStartOffset; 267 int m_positionStartOffset;
266 int m_positionEndOffset; 268 int m_positionEndOffset;
267 269
268 String m_textContainer; // We're interested in the range [m_textOffset, m_te xtOffset + m_textLength) of m_textContainer. 270 String m_textContainer; // We're interested in the range [m_textOffset, m_te xtOffset + m_textLength) of m_textContainer.
269 int m_textOffset; 271 int m_textOffset;
270 int m_textLength; 272 int m_textLength;
271 273
272 // Used to do the whitespace logic. 274 // Used to do the whitespace logic.
273 Node* m_lastTextNode; 275 RawPtrWillBeMember<Node> m_lastTextNode;
274 UChar m_lastCharacter; 276 UChar m_lastCharacter;
275 277
276 // Used for whitespace characters that aren't in the DOM, so we can point at them. 278 // Used for whitespace characters that aren't in the DOM, so we can point at them.
277 UChar m_singleCharacterBuffer; 279 UChar m_singleCharacterBuffer;
278 280
279 // Whether m_node has advanced beyond the iteration range (i.e. m_startNode) . 281 // Whether m_node has advanced beyond the iteration range (i.e. m_startNode) .
280 bool m_havePassedStartNode; 282 bool m_havePassedStartNode;
281 283
282 // Should handle first-letter renderer in the next call to handleTextNode. 284 // Should handle first-letter renderer in the next call to handleTextNode.
283 bool m_shouldHandleFirstLetter; 285 bool m_shouldHandleFirstLetter;
284 286
285 // Used when the iteration should stop if form controls are reached. 287 // Used when the iteration should stop if form controls are reached.
286 bool m_stopsOnFormControls; 288 bool m_stopsOnFormControls;
287 289
288 // Used when m_stopsOnFormControls is set to determine if the iterator shoul d keep advancing. 290 // Used when m_stopsOnFormControls is set to determine if the iterator shoul d keep advancing.
289 bool m_shouldStop; 291 bool m_shouldStop;
290 292
291 // Used in pasting inside password field. 293 // Used in pasting inside password field.
292 bool m_emitsOriginalText; 294 bool m_emitsOriginalText;
293 }; 295 };
294 296
295 // Builds on the text iterator, adding a character position so we can walk one 297 // Builds on the text iterator, adding a character position so we can walk one
296 // character at a time, or faster, as needed. Useful for searching. 298 // character at a time, or faster, as needed. Useful for searching.
297 class CharacterIterator { 299 class CharacterIterator {
300 STACK_ALLOCATED();
298 public: 301 public:
299 explicit CharacterIterator(const Range*, TextIteratorBehaviorFlags = TextIte ratorDefaultBehavior); 302 explicit CharacterIterator(const Range*, TextIteratorBehaviorFlags = TextIte ratorDefaultBehavior);
300 CharacterIterator(const Position& start, const Position& end, TextIteratorBe haviorFlags = TextIteratorDefaultBehavior); 303 CharacterIterator(const Position& start, const Position& end, TextIteratorBe haviorFlags = TextIteratorDefaultBehavior);
301 304
302 void advance(int numCharacters); 305 void advance(int numCharacters);
303 306
304 bool atBreak() const { return m_atBreak; } 307 bool atBreak() const { return m_atBreak; }
305 bool atEnd() const { return m_textIterator.atEnd(); } 308 bool atEnd() const { return m_textIterator.atEnd(); }
306 309
307 int length() const { return m_textIterator.length() - m_runOffset; } 310 int length() const { return m_textIterator.length() - m_runOffset; }
308 UChar characterAt(unsigned index) const { return m_textIterator.characterAt( m_runOffset + index); } 311 UChar characterAt(unsigned index) const { return m_textIterator.characterAt( m_runOffset + index); }
309 312
310 template<typename BufferType> 313 template<typename BufferType>
311 void appendTextTo(BufferType& output) { m_textIterator.appendTextTo(output, m_runOffset); } 314 void appendTextTo(BufferType& output) { m_textIterator.appendTextTo(output, m_runOffset); }
312 315
313 int characterOffset() const { return m_offset; } 316 int characterOffset() const { return m_offset; }
314 PassRefPtrWillBeRawPtr<Range> range() const; 317 PassRefPtrWillBeRawPtr<Range> range() const;
315 318
316 private: 319 private:
317 void initialize(); 320 void initialize();
318 321
319 int m_offset; 322 int m_offset;
320 int m_runOffset; 323 int m_runOffset;
321 bool m_atBreak; 324 bool m_atBreak;
322 325
323 TextIterator m_textIterator; 326 TextIterator m_textIterator;
324 }; 327 };
325 328
326 class BackwardsCharacterIterator { 329 class BackwardsCharacterIterator {
330 STACK_ALLOCATED();
327 public: 331 public:
328 explicit BackwardsCharacterIterator(const Range*, TextIteratorBehaviorFlags = TextIteratorDefaultBehavior); 332 explicit BackwardsCharacterIterator(const Range*, TextIteratorBehaviorFlags = TextIteratorDefaultBehavior);
329 333
330 void advance(int); 334 void advance(int);
331 335
332 bool atEnd() const { return m_textIterator.atEnd(); } 336 bool atEnd() const { return m_textIterator.atEnd(); }
333 337
334 PassRefPtrWillBeRawPtr<Range> range() const; 338 PassRefPtrWillBeRawPtr<Range> range() const;
335 339
336 private: 340 private:
(...skipping 23 matching lines...) Expand all
360 Vector<UChar> m_buffer; 364 Vector<UChar> m_buffer;
361 // Did we have to look ahead in the textIterator to confirm the current chun k? 365 // Did we have to look ahead in the textIterator to confirm the current chun k?
362 bool m_didLookAhead; 366 bool m_didLookAhead;
363 RefPtrWillBeMember<Range> m_range; 367 RefPtrWillBeMember<Range> m_range;
364 TextIterator m_textIterator; 368 TextIterator m_textIterator;
365 }; 369 };
366 370
367 } 371 }
368 372
369 #endif 373 #endif
OLDNEW
« no previous file with comments | « Source/core/dom/shadow/ComposedTreeWalker.h ('k') | Source/core/editing/TextIterator.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698