165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/* 265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010, 2011 Apple Inc. All rights reserved. 365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without 565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions 665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met: 765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright 865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer. 965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer in the 1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * documentation and/or other materials provided with the distribution. 1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE. 2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */ 2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import "config.h" 272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import "TextChecker.h" 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import "TextCheckerState.h" 302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#import <WebCore/NotImplemented.h> 312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import <wtf/RetainPtr.h> 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef BUILDING_ON_SNOW_LEOPARD 342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch@interface NSSpellChecker (WebNSSpellCheckerDetails) 352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch- (NSString *)languageForWordRange:(NSRange)range inString:(NSString *)string orthography:(NSOrthography *)orthography; 362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch@end 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 392fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockstatic NSString* const WebAutomaticSpellingCorrectionEnabled = @"WebAutomaticSpellingCorrectionEnabled"; 402fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockstatic NSString* const WebContinuousSpellCheckingEnabled = @"WebContinuousSpellCheckingEnabled"; 412fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockstatic NSString* const WebGrammarCheckingEnabled = @"WebGrammarCheckingEnabled"; 422fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockstatic NSString* const WebSmartInsertDeleteEnabled = @"WebSmartInsertDeleteEnabled"; 432fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockstatic NSString* const WebAutomaticQuoteSubstitutionEnabled = @"WebAutomaticQuoteSubstitutionEnabled"; 442fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockstatic NSString* const WebAutomaticDashSubstitutionEnabled = @"WebAutomaticDashSubstitutionEnabled"; 452fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockstatic NSString* const WebAutomaticLinkDetectionEnabled = @"WebAutomaticLinkDetectionEnabled"; 462fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockstatic NSString* const WebAutomaticTextReplacementEnabled = @"WebAutomaticTextReplacementEnabled"; 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore; 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochTextCheckerState textCheckerState; 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic void initializeState() 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static bool didInitializeState; 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (didInitializeState) 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isContinuousSpellCheckingEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebContinuousSpellCheckingEnabled] && TextChecker::isContinuousSpellCheckingAllowed(); 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isGrammarCheckingEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebGrammarCheckingEnabled]; 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isAutomaticSpellingCorrectionEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebAutomaticSpellingCorrectionEnabled]; 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isAutomaticQuoteSubstitutionEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebAutomaticQuoteSubstitutionEnabled]; 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isAutomaticDashSubstitutionEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebAutomaticDashSubstitutionEnabled]; 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isAutomaticLinkDetectionEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebAutomaticLinkDetectionEnabled]; 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isAutomaticTextReplacementEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebAutomaticTextReplacementEnabled]; 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if !defined(BUILDING_ON_SNOW_LEOPARD) 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (![[NSUserDefaults standardUserDefaults] objectForKey:WebAutomaticSpellingCorrectionEnabled]) 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isAutomaticSpellingCorrectionEnabled = [NSSpellChecker isAutomaticSpellingCorrectionEnabled]; 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch didInitializeState = true; 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochconst TextCheckerState& TextChecker::state() 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch initializeState(); 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return textCheckerState; 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool TextChecker::isContinuousSpellCheckingAllowed() 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static bool allowContinuousSpellChecking = true; 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static bool readAllowContinuousSpellCheckingDefault = false; 8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!readAllowContinuousSpellCheckingDefault) { 8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([[NSUserDefaults standardUserDefaults] objectForKey:@"NSAllowContinuousSpellChecking"]) 8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch allowContinuousSpellChecking = [[NSUserDefaults standardUserDefaults] boolForKey:@"NSAllowContinuousSpellChecking"]; 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch readAllowContinuousSpellCheckingDefault = true; 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return allowContinuousSpellChecking; 9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid TextChecker::setContinuousSpellCheckingEnabled(bool isContinuousSpellCheckingEnabled) 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (state().isContinuousSpellCheckingEnabled == isContinuousSpellCheckingEnabled) 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isContinuousSpellCheckingEnabled = isContinuousSpellCheckingEnabled; 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:isContinuousSpellCheckingEnabled forKey:WebContinuousSpellCheckingEnabled]; 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: preflight the spell checker. 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid TextChecker::setGrammarCheckingEnabled(bool isGrammarCheckingEnabled) 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (state().isGrammarCheckingEnabled == isGrammarCheckingEnabled) 11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isGrammarCheckingEnabled = isGrammarCheckingEnabled; 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:isGrammarCheckingEnabled forKey:WebGrammarCheckingEnabled]; 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSSpellChecker sharedSpellChecker] updatePanels]; 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // We call preflightSpellChecker() when turning continuous spell checking on, but we don't need to do that here 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // because grammar checking only occurs on code paths that already preflight spell checking appropriately. 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid TextChecker::setAutomaticSpellingCorrectionEnabled(bool isAutomaticSpellingCorrectionEnabled) 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (state().isAutomaticSpellingCorrectionEnabled == isAutomaticSpellingCorrectionEnabled) 12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isAutomaticSpellingCorrectionEnabled = isAutomaticSpellingCorrectionEnabled; 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:isAutomaticSpellingCorrectionEnabled forKey:WebAutomaticSpellingCorrectionEnabled]; 12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSSpellChecker sharedSpellChecker] updatePanels]; 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid TextChecker::setAutomaticQuoteSubstitutionEnabled(bool isAutomaticQuoteSubstitutionEnabled) 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (state().isAutomaticQuoteSubstitutionEnabled == isAutomaticQuoteSubstitutionEnabled) 13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isAutomaticQuoteSubstitutionEnabled = isAutomaticQuoteSubstitutionEnabled; 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:isAutomaticQuoteSubstitutionEnabled forKey:WebAutomaticQuoteSubstitutionEnabled]; 13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSSpellChecker sharedSpellChecker] updatePanels]; 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid TextChecker::setAutomaticDashSubstitutionEnabled(bool isAutomaticDashSubstitutionEnabled) 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (state().isAutomaticDashSubstitutionEnabled == isAutomaticDashSubstitutionEnabled) 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isAutomaticDashSubstitutionEnabled = isAutomaticDashSubstitutionEnabled; 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:isAutomaticDashSubstitutionEnabled forKey:WebAutomaticDashSubstitutionEnabled]; 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSSpellChecker sharedSpellChecker] updatePanels]; 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid TextChecker::setAutomaticLinkDetectionEnabled(bool isAutomaticLinkDetectionEnabled) 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (state().isAutomaticLinkDetectionEnabled == isAutomaticLinkDetectionEnabled) 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isAutomaticLinkDetectionEnabled = isAutomaticLinkDetectionEnabled; 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:isAutomaticLinkDetectionEnabled forKey:WebAutomaticLinkDetectionEnabled]; 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSSpellChecker sharedSpellChecker] updatePanels]; 16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid TextChecker::setAutomaticTextReplacementEnabled(bool isAutomaticTextReplacementEnabled) 16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (state().isAutomaticTextReplacementEnabled == isAutomaticTextReplacementEnabled) 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch textCheckerState.isAutomaticTextReplacementEnabled = isAutomaticTextReplacementEnabled; 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:isAutomaticTextReplacementEnabled forKey:WebAutomaticTextReplacementEnabled]; 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSSpellChecker sharedSpellChecker] updatePanels]; 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic bool smartInsertDeleteEnabled; 17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool TextChecker::isSmartInsertDeleteEnabled() 17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static bool readSmartInsertDeleteEnabledDefault; 18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!readSmartInsertDeleteEnabledDefault) { 18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch smartInsertDeleteEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebSmartInsertDeleteEnabled]; 18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch readSmartInsertDeleteEnabledDefault = true; 18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return smartInsertDeleteEnabled; 18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid TextChecker::setSmartInsertDeleteEnabled(bool flag) 19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (flag == isSmartInsertDeleteEnabled()) 19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch smartInsertDeleteEnabled = flag; 19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:flag forKey:WebSmartInsertDeleteEnabled]; 19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool TextChecker::substitutionsPanelIsShowing() 2022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 2032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return [[[NSSpellChecker sharedSpellChecker] substitutionsPanel] isVisible]; 2042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 2052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 2062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid TextChecker::toggleSubstitutionsPanelIsShowing() 2072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 2082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch NSPanel *substitutionsPanel = [[NSSpellChecker sharedSpellChecker] substitutionsPanel]; 2092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if ([substitutionsPanel isVisible]) { 2102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [substitutionsPanel orderOut:nil]; 2112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 2122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 2132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [substitutionsPanel orderFront:nil]; 2142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 2152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 2162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochint64_t TextChecker::uniqueSpellDocumentTag(WebPageProxy*) 21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return [NSSpellChecker uniqueSpellDocumentTag]; 21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid TextChecker::closeSpellDocumentWithTag(int64_t tag) 22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSSpellChecker sharedSpellChecker] closeSpellDocumentWithTag:tag]; 22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(UNIFIED_TEXT_CHECKING) 2272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochVector<TextCheckingResult> TextChecker::checkTextOfParagraph(int64_t spellDocumentTag, const UChar* text, int length, uint64_t checkingTypes) 22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<TextCheckingResult> results; 23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RetainPtr<NSString> textString(AdoptNS, [[NSString alloc] initWithCharactersNoCopy:const_cast<UChar*>(text) length:length freeWhenDone:NO]); 23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSArray *incomingResults = [[NSSpellChecker sharedSpellChecker] checkString:textString .get() 23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch range:NSMakeRange(0, length) 23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch types:checkingTypes | NSTextCheckingTypeOrthography 23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch options:nil 23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch inSpellDocumentWithTag:spellDocumentTag 23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch orthography:NULL 23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch wordCount:NULL]; 24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (NSTextCheckingResult *incomingResult in incomingResults) { 24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSRange resultRange = [incomingResult range]; 24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSTextCheckingType resultType = [incomingResult resultType]; 24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(resultRange.location != NSNotFound); 24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(resultRange.length > 0); 24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (resultType == NSTextCheckingTypeSpelling && (checkingTypes & NSTextCheckingTypeSpelling)) { 24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextCheckingResult result; 24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.type = TextCheckingTypeSpelling; 24865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.location = resultRange.location; 24965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.length = resultRange.length; 25065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch results.append(result); 25165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } else if (resultType == NSTextCheckingTypeGrammar && (checkingTypes & NSTextCheckingTypeGrammar)) { 25265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextCheckingResult result; 25365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSArray *details = [incomingResult grammarDetails]; 25465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.type = TextCheckingTypeGrammar; 25565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.location = resultRange.location; 25665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.length = resultRange.length; 25765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (NSDictionary *incomingDetail in details) { 25865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(incomingDetail); 25965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GrammarDetail detail; 26065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSValue *detailRangeAsNSValue = [incomingDetail objectForKey:NSGrammarRange]; 26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(detailRangeAsNSValue); 26265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSRange detailNSRange = [detailRangeAsNSValue rangeValue]; 26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(detailNSRange.location != NSNotFound); 26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(detailNSRange.length > 0); 26565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch detail.location = detailNSRange.location; 26665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch detail.length = detailNSRange.length; 26765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch detail.userDescription = [incomingDetail objectForKey:NSGrammarUserDescription]; 26865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSArray *guesses = [incomingDetail objectForKey:NSGrammarCorrections]; 26965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (NSString *guess in guesses) 27065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch detail.guesses.append(String(guess)); 27165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.details.append(detail); 27265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 27365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch results.append(result); 27465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } else if (resultType == NSTextCheckingTypeLink && (checkingTypes & NSTextCheckingTypeLink)) { 27565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextCheckingResult result; 27665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.type = TextCheckingTypeLink; 27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.location = resultRange.location; 27865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.length = resultRange.length; 27965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.replacement = [[incomingResult URL] absoluteString]; 28065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch results.append(result); 28165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } else if (resultType == NSTextCheckingTypeQuote && (checkingTypes & NSTextCheckingTypeQuote)) { 28265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextCheckingResult result; 28365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.type = TextCheckingTypeQuote; 28465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.location = resultRange.location; 28565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.length = resultRange.length; 28665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.replacement = [incomingResult replacementString]; 28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch results.append(result); 28865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } else if (resultType == NSTextCheckingTypeDash && (checkingTypes & NSTextCheckingTypeDash)) { 28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextCheckingResult result; 29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.type = TextCheckingTypeDash; 29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.location = resultRange.location; 29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.length = resultRange.length; 29365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.replacement = [incomingResult replacementString]; 29465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch results.append(result); 29565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } else if (resultType == NSTextCheckingTypeReplacement && (checkingTypes & NSTextCheckingTypeReplacement)) { 29665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextCheckingResult result; 29765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.type = TextCheckingTypeReplacement; 29865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.location = resultRange.location; 29965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.length = resultRange.length; 30065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.replacement = [incomingResult replacementString]; 30165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch results.append(result); 30265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } else if (resultType == NSTextCheckingTypeCorrection && (checkingTypes & NSTextCheckingTypeCorrection)) { 30365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch TextCheckingResult result; 30465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.type = TextCheckingTypeCorrection; 30565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.location = resultRange.location; 30665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.length = resultRange.length; 30765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.replacement = [incomingResult replacementString]; 30865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch results.append(result); 30965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 31065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 31165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return results; 31365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 31465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 3162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 3172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid TextChecker::checkSpellingOfString(int64_t, const UChar*, uint32_t, int32_t&, int32_t&) 3182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 3192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Mac uses checkTextOfParagraph instead. 3202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch notImplemented(); 3212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 3222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 3232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid TextChecker::checkGrammarOfString(int64_t, const UChar*, uint32_t, Vector<WebCore::GrammarDetail>&, int32_t&, int32_t&) 3242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 3252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Mac uses checkTextOfParagraph instead. 3262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch notImplemented(); 3272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 3282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 3292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool TextChecker::spellingUIIsShowing() 3302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 3312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return [[[NSSpellChecker sharedSpellChecker] spellingPanel] isVisible]; 3322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 3332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 3342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid TextChecker::toggleSpellingUIIsShowing() 3352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 3362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch NSPanel *spellingPanel = [[NSSpellChecker sharedSpellChecker] spellingPanel]; 3372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if ([spellingPanel isVisible]) 3382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [spellingPanel orderOut:nil]; 3392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch else 3402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [spellingPanel orderFront:nil]; 3412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 3422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 3432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid TextChecker::updateSpellingUIWithMisspelledWord(int64_t, const String& misspelledWord) 34465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 34565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSSpellChecker sharedSpellChecker] updateSpellingPanelWithMisspelledWord:misspelledWord]; 34665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 34765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid TextChecker::updateSpellingUIWithGrammarString(int64_t, const String& badGrammarPhrase, const GrammarDetail& grammarDetail) 34981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 35081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch RetainPtr<NSMutableArray> corrections(AdoptNS, [[NSMutableArray alloc] init]); 35181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch for (size_t i = 0; i < grammarDetail.guesses.size(); ++i) { 35281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch NSString *guess = grammarDetail.guesses[i]; 35381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch [corrections.get() addObject:guess]; 35481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 35581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 35681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch NSRange grammarRange = NSMakeRange(grammarDetail.location, grammarDetail.length); 35781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch NSString *grammarUserDescription = grammarDetail.userDescription; 3582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch RetainPtr<NSDictionary> grammarDetailDict(AdoptNS, [[NSDictionary alloc] initWithObjectsAndKeys:[NSValue valueWithRange:grammarRange], NSGrammarRange, grammarUserDescription, NSGrammarUserDescription, corrections.get(), NSGrammarCorrections, nil]); 35981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 36081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch [[NSSpellChecker sharedSpellChecker] updateSpellingPanelWithGrammarString:badGrammarPhrase detail:grammarDetailDict.get()]; 36181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 36281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 36365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid TextChecker::getGuessesForWord(int64_t spellDocumentTag, const String& word, const String& context, Vector<String>& guesses) 36465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 36565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if !defined(BUILDING_ON_SNOW_LEOPARD) 36665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSString* language = nil; 36765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSOrthography* orthography = nil; 36865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSSpellChecker *checker = [NSSpellChecker sharedSpellChecker]; 36965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (context.length()) { 37065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [checker checkString:context range:NSMakeRange(0, context.length()) types:NSTextCheckingTypeOrthography options:0 inSpellDocumentWithTag:spellDocumentTag orthography:&orthography wordCount:0]; 37165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch language = [checker languageForWordRange:NSMakeRange(0, context.length()) inString:context orthography:orthography]; 37265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 37365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSArray* stringsArray = [checker guessesForWordRange:NSMakeRange(0, word.length()) inString:word language:language inSpellDocumentWithTag:spellDocumentTag]; 37465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#else 37565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSArray* stringsArray = [[NSSpellChecker sharedSpellChecker] guessesForWord:word]; 37665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 37765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 37865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (NSString *guess in stringsArray) 37965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch guesses.append(guess); 38065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 38165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid TextChecker::learnWord(int64_t, const String& word) 38365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 38465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSSpellChecker sharedSpellChecker] learnWord:word]; 38565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 38665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid TextChecker::ignoreWord(int64_t spellDocumentTag, const String& word) 38865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 38965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [[NSSpellChecker sharedSpellChecker] ignoreWord:word inSpellDocumentWithTag:spellDocumentTag]; 39065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 39165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 39265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 393