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

Side by Side Diff: Source/core/editing/TextCheckingHelper.cpp

Issue 23467007: Have Range constructor take a Document reference in argument (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 3 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
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 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 { 174 {
175 // Both predicates should have same result, but we check both just for sure. 175 // Both predicates should have same result, but we check both just for sure.
176 // We need to investigate to remove this redundancy. 176 // We need to investigate to remove this redundancy.
177 return isRangeEmpty() || isTextEmpty(); 177 return isRangeEmpty() || isTextEmpty();
178 } 178 }
179 179
180 PassRefPtr<Range> TextCheckingParagraph::offsetAsRange() const 180 PassRefPtr<Range> TextCheckingParagraph::offsetAsRange() const
181 { 181 {
182 ASSERT(m_checkingRange); 182 ASSERT(m_checkingRange);
183 if (!m_offsetAsRange) 183 if (!m_offsetAsRange)
184 m_offsetAsRange = Range::create(&paragraphRange()->startContainer()->doc ument(), paragraphRange()->startPosition(), checkingRange()->startPosition()); 184 m_offsetAsRange = Range::create(paragraphRange()->startContainer()->docu ment(), paragraphRange()->startPosition(), checkingRange()->startPosition());
185 185
186 return m_offsetAsRange; 186 return m_offsetAsRange;
187 } 187 }
188 188
189 const String& TextCheckingParagraph::text() const 189 const String& TextCheckingParagraph::text() const
190 { 190 {
191 ASSERT(m_checkingRange); 191 ASSERT(m_checkingRange);
192 if (m_text.isEmpty()) 192 if (m_text.isEmpty())
193 m_text = plainText(paragraphRange().get()); 193 m_text = plainText(paragraphRange().get());
194 return m_text; 194 return m_text;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 outGrammarDetail.userDescription = ""; 303 outGrammarDetail.userDescription = "";
304 304
305 // Expand the search range to encompass entire paragraphs, since text checki ng needs that much context. 305 // Expand the search range to encompass entire paragraphs, since text checki ng needs that much context.
306 // Determine the character offset from the start of the paragraph to the sta rt of the original search range, 306 // Determine the character offset from the start of the paragraph to the sta rt of the original search range,
307 // since we will want to ignore results in this area. 307 // since we will want to ignore results in this area.
308 RefPtr<Range> paragraphRange = m_range->cloneRange(IGNORE_EXCEPTION); 308 RefPtr<Range> paragraphRange = m_range->cloneRange(IGNORE_EXCEPTION);
309 setStart(paragraphRange.get(), startOfParagraph(m_range->startPosition())); 309 setStart(paragraphRange.get(), startOfParagraph(m_range->startPosition()));
310 int totalRangeLength = TextIterator::rangeLength(paragraphRange.get()); 310 int totalRangeLength = TextIterator::rangeLength(paragraphRange.get());
311 setEnd(paragraphRange.get(), endOfParagraph(m_range->startPosition())); 311 setEnd(paragraphRange.get(), endOfParagraph(m_range->startPosition()));
312 312
313 RefPtr<Range> offsetAsRange = Range::create(&paragraphRange->startContainer( )->document(), paragraphRange->startPosition(), m_range->startPosition()); 313 RefPtr<Range> offsetAsRange = Range::create(paragraphRange->startContainer() ->document(), paragraphRange->startPosition(), m_range->startPosition());
314 int rangeStartOffset = TextIterator::rangeLength(offsetAsRange.get()); 314 int rangeStartOffset = TextIterator::rangeLength(offsetAsRange.get());
315 int totalLengthProcessed = 0; 315 int totalLengthProcessed = 0;
316 316
317 bool firstIteration = true; 317 bool firstIteration = true;
318 bool lastIteration = false; 318 bool lastIteration = false;
319 while (totalLengthProcessed < totalRangeLength) { 319 while (totalLengthProcessed < totalRangeLength) {
320 // Iterate through the search range by paragraphs, checking each one for spelling and grammar. 320 // Iterate through the search range by paragraphs, checking each one for spelling and grammar.
321 int currentLength = TextIterator::rangeLength(paragraphRange.get()); 321 int currentLength = TextIterator::rangeLength(paragraphRange.get());
322 int currentStartOffset = firstIteration ? rangeStartOffset : 0; 322 int currentStartOffset = firstIteration ? rangeStartOffset : 0;
323 int currentEndOffset = currentLength; 323 int currentEndOffset = currentLength;
324 if (inSameParagraph(paragraphRange->startPosition(), m_range->endPositio n())) { 324 if (inSameParagraph(paragraphRange->startPosition(), m_range->endPositio n())) {
325 // Determine the character offset from the end of the original searc h range to the end of the paragraph, 325 // Determine the character offset from the end of the original searc h range to the end of the paragraph,
326 // since we will want to ignore results in this area. 326 // since we will want to ignore results in this area.
327 RefPtr<Range> endOffsetAsRange = Range::create(&paragraphRange->star tContainer()->document(), paragraphRange->startPosition(), m_range->endPosition( )); 327 RefPtr<Range> endOffsetAsRange = Range::create(paragraphRange->start Container()->document(), paragraphRange->startPosition(), m_range->endPosition() );
328 currentEndOffset = TextIterator::rangeLength(endOffsetAsRange.get()) ; 328 currentEndOffset = TextIterator::rangeLength(endOffsetAsRange.get()) ;
329 lastIteration = true; 329 lastIteration = true;
330 } 330 }
331 if (currentStartOffset < currentEndOffset) { 331 if (currentStartOffset < currentEndOffset) {
332 String paragraphString = plainText(paragraphRange.get()); 332 String paragraphString = plainText(paragraphRange.get());
333 if (paragraphString.length() > 0) { 333 if (paragraphString.length() > 0) {
334 bool foundGrammar = false; 334 bool foundGrammar = false;
335 int spellingLocation = 0; 335 int spellingLocation = 0;
336 int grammarPhraseLocation = 0; 336 int grammarPhraseLocation = 0;
337 int grammarDetailLocation = 0; 337 int grammarDetailLocation = 0;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 outGrammarDetail = result->details[grammarDetailInde x]; 370 outGrammarDetail = result->details[grammarDetailInde x];
371 badGrammarPhrase = paragraphString.substring(result- >location, result->length); 371 badGrammarPhrase = paragraphString.substring(result- >location, result->length);
372 ASSERT(badGrammarPhrase.length()); 372 ASSERT(badGrammarPhrase.length());
373 } 373 }
374 } 374 }
375 } 375 }
376 376
377 if (!misspelledWord.isEmpty() && (!checkGrammar || badGrammarPhr ase.isEmpty() || spellingLocation <= grammarDetailLocation)) { 377 if (!misspelledWord.isEmpty() && (!checkGrammar || badGrammarPhr ase.isEmpty() || spellingLocation <= grammarDetailLocation)) {
378 int spellingOffset = spellingLocation - currentStartOffset; 378 int spellingOffset = spellingLocation - currentStartOffset;
379 if (!firstIteration) { 379 if (!firstIteration) {
380 RefPtr<Range> paragraphOffsetAsRange = Range::create(&pa ragraphRange->startContainer()->document(), m_range->startPosition(), paragraphR ange->startPosition()); 380 RefPtr<Range> paragraphOffsetAsRange = Range::create(par agraphRange->startContainer()->document(), m_range->startPosition(), paragraphRa nge->startPosition());
381 spellingOffset += TextIterator::rangeLength(paragraphOff setAsRange.get()); 381 spellingOffset += TextIterator::rangeLength(paragraphOff setAsRange.get());
382 } 382 }
383 outIsSpelling = true; 383 outIsSpelling = true;
384 outFirstFoundOffset = spellingOffset; 384 outFirstFoundOffset = spellingOffset;
385 firstFoundItem = misspelledWord; 385 firstFoundItem = misspelledWord;
386 break; 386 break;
387 } 387 }
388 if (checkGrammar && !badGrammarPhrase.isEmpty()) { 388 if (checkGrammar && !badGrammarPhrase.isEmpty()) {
389 int grammarPhraseOffset = grammarPhraseLocation - currentSta rtOffset; 389 int grammarPhraseOffset = grammarPhraseLocation - currentSta rtOffset;
390 if (!firstIteration) { 390 if (!firstIteration) {
391 RefPtr<Range> paragraphOffsetAsRange = Range::create(&pa ragraphRange->startContainer()->document(), m_range->startPosition(), paragraphR ange->startPosition()); 391 RefPtr<Range> paragraphOffsetAsRange = Range::create(par agraphRange->startContainer()->document(), m_range->startPosition(), paragraphRa nge->startPosition());
392 grammarPhraseOffset += TextIterator::rangeLength(paragra phOffsetAsRange.get()); 392 grammarPhraseOffset += TextIterator::rangeLength(paragra phOffsetAsRange.get());
393 } 393 }
394 outIsSpelling = false; 394 outIsSpelling = false;
395 outFirstFoundOffset = grammarPhraseOffset; 395 outFirstFoundOffset = grammarPhraseOffset;
396 firstFoundItem = badGrammarPhrase; 396 firstFoundItem = badGrammarPhrase;
397 break; 397 break;
398 } 398 }
399 } 399 }
400 } 400 }
401 if (lastIteration || totalLengthProcessed + currentLength >= totalRangeL ength) 401 if (lastIteration || totalLengthProcessed + currentLength >= totalRangeL ength)
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 GrammarDetail ignoredGrammarDetail; 518 GrammarDetail ignoredGrammarDetail;
519 int ignoredOffset; 519 int ignoredOffset;
520 findFirstBadGrammar(ignoredGrammarDetail, ignoredOffset, true); 520 findFirstBadGrammar(ignoredGrammarDetail, ignoredOffset, true);
521 } 521 }
522 522
523 bool TextCheckingHelper::unifiedTextCheckerEnabled() const 523 bool TextCheckingHelper::unifiedTextCheckerEnabled() const
524 { 524 {
525 if (!m_range) 525 if (!m_range)
526 return false; 526 return false;
527 527
528 Document* doc = m_range->ownerDocument(); 528 Document& doc = m_range->ownerDocument();
529 if (!doc) 529 return WebCore::unifiedTextCheckerEnabled(doc.frame());
530 return false;
531
532 return WebCore::unifiedTextCheckerEnabled(doc->frame());
533 } 530 }
534 531
535 void checkTextOfParagraph(TextCheckerClient& client, const String& text, TextChe ckingTypeMask checkingTypes, Vector<TextCheckingResult>& results) 532 void checkTextOfParagraph(TextCheckerClient& client, const String& text, TextChe ckingTypeMask checkingTypes, Vector<TextCheckingResult>& results)
536 { 533 {
537 Vector<UChar> characters; 534 Vector<UChar> characters;
538 text.appendTo(characters); 535 text.appendTo(characters);
539 unsigned length = text.length(); 536 unsigned length = text.length();
540 537
541 Vector<TextCheckingResult> spellingResult; 538 Vector<TextCheckingResult> spellingResult;
542 if (checkingTypes & TextCheckingTypeSpelling) 539 if (checkingTypes & TextCheckingTypeSpelling)
(...skipping 28 matching lines...) Expand all
571 return false; 568 return false;
572 569
573 const Settings* settings = frame->settings(); 570 const Settings* settings = frame->settings();
574 if (!settings) 571 if (!settings)
575 return false; 572 return false;
576 573
577 return settings->unifiedTextCheckerEnabled(); 574 return settings->unifiedTextCheckerEnabled();
578 } 575 }
579 576
580 } 577 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698