OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All r
ights reserved. | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All r
ights reserved. |
3 * Copyright (C) 2005 Alexey Proskuryakov. | 3 * Copyright (C) 2005 Alexey Proskuryakov. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
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 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 , m_emitsCharactersBetweenAllVisiblePositions(behavior & TextIteratorEmitsCh
aractersBetweenAllVisiblePositions) | 259 , m_emitsCharactersBetweenAllVisiblePositions(behavior & TextIteratorEmitsCh
aractersBetweenAllVisiblePositions) |
260 , m_entersTextControls(behavior & TextIteratorEntersTextControls) | 260 , m_entersTextControls(behavior & TextIteratorEntersTextControls) |
261 , m_emitsOriginalText(behavior & TextIteratorEmitsOriginalText) | 261 , m_emitsOriginalText(behavior & TextIteratorEmitsOriginalText) |
262 , m_handledFirstLetter(false) | 262 , m_handledFirstLetter(false) |
263 , m_ignoresStyleVisibility(behavior & TextIteratorIgnoresStyleVisibility) | 263 , m_ignoresStyleVisibility(behavior & TextIteratorIgnoresStyleVisibility) |
264 , m_stopsOnFormControls(behavior & TextIteratorStopsOnFormControls) | 264 , m_stopsOnFormControls(behavior & TextIteratorStopsOnFormControls) |
265 , m_shouldStop(false) | 265 , m_shouldStop(false) |
266 , m_emitsImageAltText(behavior & TextIteratorEmitsImageAltText) | 266 , m_emitsImageAltText(behavior & TextIteratorEmitsImageAltText) |
267 , m_entersAuthorShadowRoots(behavior & TextIteratorEntersAuthorShadowRoots) | 267 , m_entersAuthorShadowRoots(behavior & TextIteratorEntersAuthorShadowRoots) |
268 , m_emitsObjectReplacementCharacter(behavior & TextIteratorEmitsObjectReplac
ementCharacter) | 268 , m_emitsObjectReplacementCharacter(behavior & TextIteratorEmitsObjectReplac
ementCharacter) |
| 269 , m_breaksAtReplacedElement(!(behavior & TextIteratorDoesNotBreakAtReplacedE
lement)) |
269 { | 270 { |
270 if (range) | 271 if (range) |
271 initialize(range->startPosition(), range->endPosition()); | 272 initialize(range->startPosition(), range->endPosition()); |
272 } | 273 } |
273 | 274 |
274 TextIterator::TextIterator(const Position& start, const Position& end, TextItera
torBehaviorFlags behavior) | 275 TextIterator::TextIterator(const Position& start, const Position& end, TextItera
torBehaviorFlags behavior) |
275 : m_startContainer(nullptr) | 276 : m_startContainer(nullptr) |
276 , m_startOffset(0) | 277 , m_startOffset(0) |
277 , m_endContainer(nullptr) | 278 , m_endContainer(nullptr) |
278 , m_endOffset(0) | 279 , m_endOffset(0) |
(...skipping 11 matching lines...) Expand all Loading... |
290 , m_emitsCharactersBetweenAllVisiblePositions(behavior & TextIteratorEmitsCh
aractersBetweenAllVisiblePositions) | 291 , m_emitsCharactersBetweenAllVisiblePositions(behavior & TextIteratorEmitsCh
aractersBetweenAllVisiblePositions) |
291 , m_entersTextControls(behavior & TextIteratorEntersTextControls) | 292 , m_entersTextControls(behavior & TextIteratorEntersTextControls) |
292 , m_emitsOriginalText(behavior & TextIteratorEmitsOriginalText) | 293 , m_emitsOriginalText(behavior & TextIteratorEmitsOriginalText) |
293 , m_handledFirstLetter(false) | 294 , m_handledFirstLetter(false) |
294 , m_ignoresStyleVisibility(behavior & TextIteratorIgnoresStyleVisibility) | 295 , m_ignoresStyleVisibility(behavior & TextIteratorIgnoresStyleVisibility) |
295 , m_stopsOnFormControls(behavior & TextIteratorStopsOnFormControls) | 296 , m_stopsOnFormControls(behavior & TextIteratorStopsOnFormControls) |
296 , m_shouldStop(false) | 297 , m_shouldStop(false) |
297 , m_emitsImageAltText(behavior & TextIteratorEmitsImageAltText) | 298 , m_emitsImageAltText(behavior & TextIteratorEmitsImageAltText) |
298 , m_entersAuthorShadowRoots(behavior & TextIteratorEntersAuthorShadowRoots) | 299 , m_entersAuthorShadowRoots(behavior & TextIteratorEntersAuthorShadowRoots) |
299 , m_emitsObjectReplacementCharacter(behavior & TextIteratorEmitsObjectReplac
ementCharacter) | 300 , m_emitsObjectReplacementCharacter(behavior & TextIteratorEmitsObjectReplac
ementCharacter) |
| 301 , m_breaksAtReplacedElement(!(behavior & TextIteratorDoesNotBreakAtReplacedE
lement)) |
300 { | 302 { |
301 initialize(start, end); | 303 initialize(start, end); |
302 } | 304 } |
303 | 305 |
304 void TextIterator::initialize(const Position& start, const Position& end) | 306 void TextIterator::initialize(const Position& start, const Position& end) |
305 { | 307 { |
306 ASSERT(comparePositions(start, end) <= 0); | 308 ASSERT(comparePositions(start, end) <= 0); |
307 | 309 |
308 // Get and validate |start| and |end|. | 310 // Get and validate |start| and |end|. |
309 Node* startContainer = start.containerNode(); | 311 Node* startContainer = start.containerNode(); |
(...skipping 1429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1739 } | 1741 } |
1740 | 1742 |
1741 // exhaust the current m_textIterator run | 1743 // exhaust the current m_textIterator run |
1742 count -= remaining; | 1744 count -= remaining; |
1743 m_offset += remaining; | 1745 m_offset += remaining; |
1744 | 1746 |
1745 // move to a subsequent m_textIterator run | 1747 // move to a subsequent m_textIterator run |
1746 for (m_textIterator.advance(); !atEnd(); m_textIterator.advance()) { | 1748 for (m_textIterator.advance(); !atEnd(); m_textIterator.advance()) { |
1747 int runLength = m_textIterator.length(); | 1749 int runLength = m_textIterator.length(); |
1748 if (!runLength) { | 1750 if (!runLength) { |
1749 m_atBreak = true; | 1751 m_atBreak = m_textIterator.breaksAtReplacedElement(); |
1750 } else { | 1752 } else { |
1751 // see whether this is m_textIterator to use | 1753 // see whether this is m_textIterator to use |
1752 if (count < runLength) { | 1754 if (count < runLength) { |
1753 m_runOffset = count; | 1755 m_runOffset = count; |
1754 m_offset += count; | 1756 m_offset += count; |
1755 return; | 1757 return; |
1756 } | 1758 } |
1757 | 1759 |
1758 // exhaust this m_textIterator run | 1760 // exhaust this m_textIterator run |
1759 count -= runLength; | 1761 count -= runLength; |
(...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2369 } | 2371 } |
2370 if (it.atBreak() && !buffer.atBreak()) { | 2372 if (it.atBreak() && !buffer.atBreak()) { |
2371 buffer.reachedBreak(); | 2373 buffer.reachedBreak(); |
2372 goto tryAgain; | 2374 goto tryAgain; |
2373 } | 2375 } |
2374 } | 2376 } |
2375 | 2377 |
2376 return matchLength; | 2378 return matchLength; |
2377 } | 2379 } |
2378 | 2380 |
2379 static const TextIteratorBehaviorFlags iteratorFlagsForFindPlainText = TextItera
torEntersTextControls | TextIteratorEntersAuthorShadowRoots; | 2381 static const TextIteratorBehaviorFlags iteratorFlagsForFindPlainText = TextItera
torEntersTextControls | TextIteratorEntersAuthorShadowRoots | TextIteratorDoesNo
tBreakAtReplacedElement; |
2380 | 2382 |
2381 PassRefPtrWillBeRawPtr<Range> findPlainText(const Range* range, const String& ta
rget, FindOptions options) | 2383 PassRefPtrWillBeRawPtr<Range> findPlainText(const Range* range, const String& ta
rget, FindOptions options) |
2382 { | 2384 { |
2383 // First, find the text. | 2385 // First, find the text. |
2384 size_t matchStart; | 2386 size_t matchStart; |
2385 size_t matchLength; | 2387 size_t matchLength; |
2386 { | 2388 { |
2387 CharacterIterator findIterator(range, iteratorFlagsForFindPlainText); | 2389 CharacterIterator findIterator(range, iteratorFlagsForFindPlainText); |
2388 matchLength = findPlainTextInternal(findIterator, target, options, match
Start); | 2390 matchLength = findPlainTextInternal(findIterator, target, options, match
Start); |
2389 if (!matchLength) | 2391 if (!matchLength) |
(...skipping 29 matching lines...) Expand all Loading... |
2419 resultEnd = collapseTo; | 2421 resultEnd = collapseTo; |
2420 return; | 2422 return; |
2421 } | 2423 } |
2422 } | 2424 } |
2423 | 2425 |
2424 CharacterIterator computeRangeIterator(inputStart, inputEnd, iteratorFlagsFo
rFindPlainText); | 2426 CharacterIterator computeRangeIterator(inputStart, inputEnd, iteratorFlagsFo
rFindPlainText); |
2425 calculateCharacterSubrange(computeRangeIterator, matchStart, matchLength, re
sultStart, resultEnd); | 2427 calculateCharacterSubrange(computeRangeIterator, matchStart, matchLength, re
sultStart, resultEnd); |
2426 } | 2428 } |
2427 | 2429 |
2428 } | 2430 } |
OLD | NEW |