18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebEditorClient.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "DOMCSSStyleDeclarationInternal.h" 3368513a70bcd92384395513322f1b801e7bf9c729Steve Block#import "DOMDocumentFragmentInternal.h" 340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "DOMHTMLElementInternal.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "DOMHTMLInputElementInternal.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "DOMHTMLTextAreaElementInternal.h" 370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "DOMNodeInternal.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "DOMRangeInternal.h" 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebArchive.h" 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDataSourceInternal.h" 410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "WebDelegateImplementationCaching.h" 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDocument.h" 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebEditingDelegatePrivate.h" 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFormDelegate.h" 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrameInternal.h" 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebHTMLView.h" 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebHTMLViewInternal.h" 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitLogging.h" 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitVersionChecks.h" 5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#import "WebLocalizableStringsInternal.h" 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSURLExtras.h" 5268513a70bcd92384395513322f1b801e7bf9c729Steve Block#import "WebResourceInternal.h" 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebViewInternal.h" 5468513a70bcd92384395513322f1b801e7bf9c729Steve Block#import <WebCore/ArchiveResource.h> 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Document.h> 5668513a70bcd92384395513322f1b801e7bf9c729Steve Block#import <WebCore/DocumentFragment.h> 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/EditAction.h> 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/EditCommand.h> 590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/HTMLInputElement.h> 600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/HTMLNames.h> 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/HTMLTextAreaElement.h> 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/KeyboardEvent.h> 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/LegacyWebArchive.h> 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/PlatformKeyboardEvent.h> 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/PlatformString.h> 66f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#import <WebCore/SpellChecker.h> 670617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#import <WebCore/UserTypingGestureIndicator.h> 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/WebCoreObjCExtras.h> 69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <runtime/InitializeThreading.h> 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <wtf/PassRefPtr.h> 7121939df44de1705786c545cd1bf519d47250322dBen Murdoch#import <wtf/Threading.h> 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WebCore; 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochusing namespace HTMLNames; 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 77f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD) 782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch@interface NSSpellChecker (WebNSSpellCheckerDetails) 792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch- (NSString *)languageForWordRange:(NSRange)range inString:(NSString *)string orthography:(NSOrthography *)orthography; 802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch@end 81f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif 82f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 8368513a70bcd92384395513322f1b801e7bf9c729Steve Block@interface NSAttributedString (WebNSAttributedStringDetails) 8468513a70bcd92384395513322f1b801e7bf9c729Steve Block- (id)_initWithDOMRange:(DOMRange*)range; 8568513a70bcd92384395513322f1b801e7bf9c729Steve Block- (DOMDocumentFragment*)_documentFromRange:(NSRange)range document:(DOMDocument*)document documentAttributes:(NSDictionary *)dict subresources:(NSArray **)subresources; 8668513a70bcd92384395513322f1b801e7bf9c729Steve Block@end 8768513a70bcd92384395513322f1b801e7bf9c729Steve Block 880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic WebViewInsertAction kit(EditorInsertAction coreAction) 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return static_cast<WebViewInsertAction>(coreAction); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9368513a70bcd92384395513322f1b801e7bf9c729Steve Blockstatic const int InvalidCorrectionPanelTag = 0; 9468513a70bcd92384395513322f1b801e7bf9c729Steve Block 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef BUILDING_ON_TIGER 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@interface NSSpellChecker (NotYetPublicMethods) 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)learnWord:(NSString *)word; 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@interface WebEditCommand : NSObject 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 103563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark RefPtr<EditCommand> m_command; 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (WebEditCommand *)commandWithEditCommand:(PassRefPtr<EditCommand>)command; 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (EditCommand *)command; 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebEditCommand 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)initialize 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project JSC::initializeThreading(); 11621939df44de1705786c545cd1bf519d47250322dBen Murdoch WTF::initializeMainThreadToProcessMainThread(); 117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef BUILDING_ON_TIGER 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCoreObjCFinalizeOnMainThread(self); 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 120635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithEditCommand:(PassRefPtr<EditCommand>)command 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(command); 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super init]; 126563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark m_command = command; 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)dealloc 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (WebCoreObjCScheduleDeallocateOnMainThread([WebEditCommand class], self)) 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 134563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super dealloc]; 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)finalize 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_MAIN_THREAD(); 141563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super finalize]; 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (WebEditCommand *)commandWithEditCommand:(PassRefPtr<EditCommand>)command 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[[WebEditCommand alloc] initWithEditCommand:command] autorelease]; 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 150563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark- (EditCommand *)command 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 152563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return m_command.get(); 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@interface WebEditorUndoTarget : NSObject 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)undoEditing:(id)arg; 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)redoEditing:(id)arg; 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebEditorUndoTarget 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)undoEditing:(id)arg 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT([arg isKindOfClass:[WebEditCommand class]]); 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [arg command]->unapply(); 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)redoEditing:(id)arg 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT([arg isKindOfClass:[WebEditCommand class]]); 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [arg command]->reapply(); 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::pageDestroyed() 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete this; 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebEditorClient::WebEditorClient(WebView *webView) 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_webView(webView) 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_undoTarget([[[WebEditorUndoTarget alloc] init] autorelease]) 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_haveUndoRedoOperations(false) 1915ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 1925ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 1935ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 1945ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenWebEditorClient::~WebEditorClient() 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1965ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD) 197f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch dismissCorrectionPanel(ReasonForDismissingCorrectionPanelIgnored); 1985ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::isContinuousSpellCheckingEnabled() 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [m_webView isContinuousSpellCheckingEnabled]; 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::toggleContinuousSpellChecking() 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [m_webView toggleContinuousSpellChecking:nil]; 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::isGrammarCheckingEnabled() 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef BUILDING_ON_TIGER 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [m_webView isGrammarCheckingEnabled]; 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::toggleGrammarChecking() 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef BUILDING_ON_TIGER 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [m_webView toggleGrammarChecking:nil]; 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint WebEditorClient::spellCheckerDocumentTag() 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [m_webView spellCheckerDocumentTag]; 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldDeleteRange(Range* range) 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[m_webView _editingDelegateForwarder] webView:m_webView 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project shouldDeleteDOMRange:kit(range)]; 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldShowDeleteInterface(HTMLElement* element) 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[m_webView _editingDelegateForwarder] webView:m_webView 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project shouldShowDeleteInterfaceForElement:kit(element)]; 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::smartInsertDeleteEnabled() 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [m_webView smartInsertDeleteEnabled]; 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 249635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectbool WebEditorClient::isSelectTrailingWhitespaceEnabled() 250635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 251635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [m_webView isSelectTrailingWhitespaceEnabled]; 252635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 253635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldApplyStyle(CSSStyleDeclaration* style, Range* range) 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[m_webView _editingDelegateForwarder] webView:m_webView 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project shouldApplyStyle:kit(style) toElementsInDOMRange:kit(range)]; 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldMoveRangeAfterDelete(Range* range, Range* rangeToBeReplaced) 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[m_webView _editingDelegateForwarder] webView:m_webView 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project shouldMoveRangeAfterDelete:kit(range) replacingRange:kit(rangeToBeReplaced)]; 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldBeginEditing(Range* range) 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[m_webView _editingDelegateForwarder] webView:m_webView 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project shouldBeginEditingInDOMRange:kit(range)]; 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldEndEditing(Range* range) 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[m_webView _editingDelegateForwarder] webView:m_webView 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project shouldEndEditingInDOMRange:kit(range)]; 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldInsertText(const String& text, Range* range, EditorInsertAction action) 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebView* webView = m_webView; 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[webView _editingDelegateForwarder] webView:webView shouldInsertText:text replacingDOMRange:kit(range) givenAction:kit(action)]; 2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldChangeSelectedRange(Range* fromRange, Range* toRange, EAffinity selectionAffinity, bool stillSelecting) 2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [m_webView _shouldChangeSelectedDOMRange:kit(fromRange) toDOMRange:kit(toRange) affinity:kit(selectionAffinity) stillSelecting:stillSelecting]; 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::didBeginEditing() 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] postNotificationName:WebViewDidBeginEditingNotification object:m_webView]; 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::respondToChangedContents() 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView <WebDocumentView> *view = [[[m_webView selectedFrame] frameView] documentView]; 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([view isKindOfClass:[WebHTMLView class]]) 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [(WebHTMLView *)view _updateFontPanel]; 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] postNotificationName:WebViewDidChangeNotification object:m_webView]; 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::respondToChangedSelection() 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [m_webView _selectionChanged]; 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: This quirk is needed due to <rdar://problem/5009625> - We can phase it out once Aperture can adopt the new behavior on their end 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITHOUT_APERTURE_QUIRK) && [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.Aperture"]) 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] postNotificationName:WebViewDidChangeSelectionNotification object:m_webView]; 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::didEndEditing() 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] postNotificationName:WebViewDidEndEditingNotification object:m_webView]; 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::didWriteSelectionToPasteboard() 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[m_webView _editingDelegateForwarder] webView:m_webView didWriteSelectionToPasteboard:[NSPasteboard generalPasteboard]]; 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::didSetSelectionTypesForPasteboard() 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[m_webView _editingDelegateForwarder] webView:m_webView didSetSelectionTypesForPasteboard:[NSPasteboard generalPasteboard]]; 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33068513a70bcd92384395513322f1b801e7bf9c729Steve BlockNSString *WebEditorClient::userVisibleString(NSURL *URL) 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [URL _web_userVisibleString]; 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNSURL *WebEditorClient::canonicalizeURL(NSURL *URL) 33665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 33765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return [URL _webkit_canonicalize]; 33865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 33965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNSURL *WebEditorClient::canonicalizeURLString(NSString *URLString) 34165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 34265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSURL *URL = nil; 34365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([URLString _webkit_looksLikeAbsoluteURL]) 34465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch URL = [[NSURL _web_URLWithUserTypedString:URLString] _webkit_canonicalize]; 34565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return URL; 34665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 34765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34868513a70bcd92384395513322f1b801e7bf9c729Steve Blockstatic NSArray *createExcludedElementsForAttributedStringConversion() 34968513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 35068513a70bcd92384395513322f1b801e7bf9c729Steve Block NSArray *elements = [[NSArray alloc] initWithObjects: 35168513a70bcd92384395513322f1b801e7bf9c729Steve Block // Omit style since we want style to be inline so the fragment can be easily inserted. 35268513a70bcd92384395513322f1b801e7bf9c729Steve Block @"style", 35368513a70bcd92384395513322f1b801e7bf9c729Steve Block // Omit xml so the result is not XHTML. 35468513a70bcd92384395513322f1b801e7bf9c729Steve Block @"xml", 35568513a70bcd92384395513322f1b801e7bf9c729Steve Block // Omit tags that will get stripped when converted to a fragment anyway. 35668513a70bcd92384395513322f1b801e7bf9c729Steve Block @"doctype", @"html", @"head", @"body", 35768513a70bcd92384395513322f1b801e7bf9c729Steve Block // Omit deprecated tags. 35868513a70bcd92384395513322f1b801e7bf9c729Steve Block @"applet", @"basefont", @"center", @"dir", @"font", @"isindex", @"menu", @"s", @"strike", @"u", 35968513a70bcd92384395513322f1b801e7bf9c729Steve Block // Omit object so no file attachments are part of the fragment. 36068513a70bcd92384395513322f1b801e7bf9c729Steve Block @"object", nil]; 36168513a70bcd92384395513322f1b801e7bf9c729Steve Block CFRetain(elements); 36268513a70bcd92384395513322f1b801e7bf9c729Steve Block return elements; 36368513a70bcd92384395513322f1b801e7bf9c729Steve Block} 36468513a70bcd92384395513322f1b801e7bf9c729Steve Block 36568513a70bcd92384395513322f1b801e7bf9c729Steve BlockDocumentFragment* WebEditorClient::documentFragmentFromAttributedString(NSAttributedString *string, Vector<RefPtr<ArchiveResource> >& resources) 36668513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 36768513a70bcd92384395513322f1b801e7bf9c729Steve Block static NSArray *excludedElements = createExcludedElementsForAttributedStringConversion(); 36868513a70bcd92384395513322f1b801e7bf9c729Steve Block 36968513a70bcd92384395513322f1b801e7bf9c729Steve Block NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys: excludedElements, NSExcludedElementsDocumentAttribute, 37068513a70bcd92384395513322f1b801e7bf9c729Steve Block nil, @"WebResourceHandler", nil]; 37168513a70bcd92384395513322f1b801e7bf9c729Steve Block 37268513a70bcd92384395513322f1b801e7bf9c729Steve Block NSArray *subResources; 37368513a70bcd92384395513322f1b801e7bf9c729Steve Block DOMDocumentFragment* fragment = [string _documentFromRange:NSMakeRange(0, [string length]) 37468513a70bcd92384395513322f1b801e7bf9c729Steve Block document:[[m_webView mainFrame] DOMDocument] 37568513a70bcd92384395513322f1b801e7bf9c729Steve Block documentAttributes:dictionary 37668513a70bcd92384395513322f1b801e7bf9c729Steve Block subresources:&subResources]; 37768513a70bcd92384395513322f1b801e7bf9c729Steve Block for (WebResource* resource in subResources) 37868513a70bcd92384395513322f1b801e7bf9c729Steve Block resources.append([resource _coreResource]); 37968513a70bcd92384395513322f1b801e7bf9c729Steve Block 38068513a70bcd92384395513322f1b801e7bf9c729Steve Block [dictionary release]; 38168513a70bcd92384395513322f1b801e7bf9c729Steve Block return core(fragment); 38268513a70bcd92384395513322f1b801e7bf9c729Steve Block} 38368513a70bcd92384395513322f1b801e7bf9c729Steve Block 38468513a70bcd92384395513322f1b801e7bf9c729Steve Blockvoid WebEditorClient::setInsertionPasteboard(NSPasteboard *pasteboard) 38568513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 38668513a70bcd92384395513322f1b801e7bf9c729Steve Block [m_webView _setInsertionPasteboard:pasteboard]; 38768513a70bcd92384395513322f1b801e7bf9c729Steve Block} 38868513a70bcd92384395513322f1b801e7bf9c729Steve Block 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef BUILDING_ON_TIGER 39068513a70bcd92384395513322f1b801e7bf9c729Steve BlockNSArray *WebEditorClient::pasteboardTypesForSelection(Frame* selectedFrame) 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame* frame = kit(selectedFrame); 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[[frame frameView] documentView] pasteboardTypesForSelection]; 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 3980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WebEditorClient::uppercaseWord() 3990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [m_webView uppercaseWord:nil]; 4010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WebEditorClient::lowercaseWord() 4040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [m_webView lowercaseWord:nil]; 4060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WebEditorClient::capitalizeWord() 4090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [m_webView capitalizeWord:nil]; 4110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WebEditorClient::showSubstitutionsPanel(bool show) 4140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSPanel *spellingPanel = [[NSSpellChecker sharedSpellChecker] substitutionsPanel]; 4160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (show) 4170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [spellingPanel orderFront:nil]; 4180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 4190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [spellingPanel orderOut:nil]; 4200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool WebEditorClient::substitutionsPanelIsShowing() 4230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [[[NSSpellChecker sharedSpellChecker] substitutionsPanel] isVisible]; 4250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WebEditorClient::toggleSmartInsertDelete() 4280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [m_webView toggleSmartInsertDelete:nil]; 4300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool WebEditorClient::isAutomaticQuoteSubstitutionEnabled() 4330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [m_webView isAutomaticQuoteSubstitutionEnabled]; 4350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WebEditorClient::toggleAutomaticQuoteSubstitution() 4380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [m_webView toggleAutomaticQuoteSubstitution:nil]; 4400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool WebEditorClient::isAutomaticLinkDetectionEnabled() 4430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [m_webView isAutomaticLinkDetectionEnabled]; 4450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WebEditorClient::toggleAutomaticLinkDetection() 4480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [m_webView toggleAutomaticLinkDetection:nil]; 4500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool WebEditorClient::isAutomaticDashSubstitutionEnabled() 4530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [m_webView isAutomaticDashSubstitutionEnabled]; 4550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WebEditorClient::toggleAutomaticDashSubstitution() 4580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [m_webView toggleAutomaticDashSubstitution:nil]; 4600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool WebEditorClient::isAutomaticTextReplacementEnabled() 4630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [m_webView isAutomaticTextReplacementEnabled]; 4650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WebEditorClient::toggleAutomaticTextReplacement() 4680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [m_webView toggleAutomaticTextReplacement:nil]; 4700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool WebEditorClient::isAutomaticSpellingCorrectionEnabled() 4730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [m_webView isAutomaticSpellingCorrectionEnabled]; 4750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WebEditorClient::toggleAutomaticSpellingCorrection() 4780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [m_webView toggleAutomaticSpellingCorrection:nil]; 4800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 4820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::shouldInsertNode(Node *node, Range* replacingRange, EditorInsertAction givenAction) 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[m_webView _editingDelegateForwarder] webView:m_webView shouldInsertNode:kit(node) replacingDOMRange:kit(replacingRange) givenAction:(WebViewInsertAction)givenAction]; 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic NSString* undoNameForEditAction(EditAction editAction) 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (editAction) { 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case EditActionUnspecified: return nil; 49281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionSetColor: return UI_STRING_KEY_INTERNAL("Set Color", "Set Color (Undo action name)", "Undo action name"); 49381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionSetBackgroundColor: return UI_STRING_KEY_INTERNAL("Set Background Color", "Set Background Color (Undo action name)", "Undo action name"); 49481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionTurnOffKerning: return UI_STRING_KEY_INTERNAL("Turn Off Kerning", "Turn Off Kerning (Undo action name)", "Undo action name"); 49581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionTightenKerning: return UI_STRING_KEY_INTERNAL("Tighten Kerning", "Tighten Kerning (Undo action name)", "Undo action name"); 49681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionLoosenKerning: return UI_STRING_KEY_INTERNAL("Loosen Kerning", "Loosen Kerning (Undo action name)", "Undo action name"); 49781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionUseStandardKerning: return UI_STRING_KEY_INTERNAL("Use Standard Kerning", "Use Standard Kerning (Undo action name)", "Undo action name"); 49881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionTurnOffLigatures: return UI_STRING_KEY_INTERNAL("Turn Off Ligatures", "Turn Off Ligatures (Undo action name)", "Undo action name"); 49981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionUseStandardLigatures: return UI_STRING_KEY_INTERNAL("Use Standard Ligatures", "Use Standard Ligatures (Undo action name)", "Undo action name"); 50081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionUseAllLigatures: return UI_STRING_KEY_INTERNAL("Use All Ligatures", "Use All Ligatures (Undo action name)", "Undo action name"); 50181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionRaiseBaseline: return UI_STRING_KEY_INTERNAL("Raise Baseline", "Raise Baseline (Undo action name)", "Undo action name"); 50281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionLowerBaseline: return UI_STRING_KEY_INTERNAL("Lower Baseline", "Lower Baseline (Undo action name)", "Undo action name"); 50381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionSetTraditionalCharacterShape: return UI_STRING_KEY_INTERNAL("Set Traditional Character Shape", "Set Traditional Character Shape (Undo action name)", "Undo action name"); 50481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionSetFont: return UI_STRING_KEY_INTERNAL("Set Font", "Set Font (Undo action name)", "Undo action name"); 50581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionChangeAttributes: return UI_STRING_KEY_INTERNAL("Change Attributes", "Change Attributes (Undo action name)", "Undo action name"); 50681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionAlignLeft: return UI_STRING_KEY_INTERNAL("Align Left", "Align Left (Undo action name)", "Undo action name"); 50781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionAlignRight: return UI_STRING_KEY_INTERNAL("Align Right", "Align Right (Undo action name)", "Undo action name"); 50881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionCenter: return UI_STRING_KEY_INTERNAL("Center", "Center (Undo action name)", "Undo action name"); 50981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionJustify: return UI_STRING_KEY_INTERNAL("Justify", "Justify (Undo action name)", "Undo action name"); 51081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionSetWritingDirection: return UI_STRING_KEY_INTERNAL("Set Writing Direction", "Set Writing Direction (Undo action name)", "Undo action name"); 51181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionSubscript: return UI_STRING_KEY_INTERNAL("Subscript", "Subscript (Undo action name)", "Undo action name"); 51281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionSuperscript: return UI_STRING_KEY_INTERNAL("Superscript", "Superscript (Undo action name)", "Undo action name"); 51381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionUnderline: return UI_STRING_KEY_INTERNAL("Underline", "Underline (Undo action name)", "Undo action name"); 51481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionOutline: return UI_STRING_KEY_INTERNAL("Outline", "Outline (Undo action name)", "Undo action name"); 51581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionUnscript: return UI_STRING_KEY_INTERNAL("Unscript", "Unscript (Undo action name)", "Undo action name"); 51681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionDrag: return UI_STRING_KEY_INTERNAL("Drag", "Drag (Undo action name)", "Undo action name"); 51781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionCut: return UI_STRING_KEY_INTERNAL("Cut", "Cut (Undo action name)", "Undo action name"); 51881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionPaste: return UI_STRING_KEY_INTERNAL("Paste", "Paste (Undo action name)", "Undo action name"); 51981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionPasteFont: return UI_STRING_KEY_INTERNAL("Paste Font", "Paste Font (Undo action name)", "Undo action name"); 52081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionPasteRuler: return UI_STRING_KEY_INTERNAL("Paste Ruler", "Paste Ruler (Undo action name)", "Undo action name"); 52181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionTyping: return UI_STRING_KEY_INTERNAL("Typing", "Typing (Undo action name)", "Undo action name"); 52281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionCreateLink: return UI_STRING_KEY_INTERNAL("Create Link", "Create Link (Undo action name)", "Undo action name"); 52381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionUnlink: return UI_STRING_KEY_INTERNAL("Unlink", "Unlink (Undo action name)", "Undo action name"); 52481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionInsertList: return UI_STRING_KEY_INTERNAL("Insert List", "Insert List (Undo action name)", "Undo action name"); 52581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionFormatBlock: return UI_STRING_KEY_INTERNAL("Formatting", "Format Block (Undo action name)", "Undo action name"); 52681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionIndent: return UI_STRING_KEY_INTERNAL("Indent", "Indent (Undo action name)", "Undo action name"); 52781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case EditActionOutdent: return UI_STRING_KEY_INTERNAL("Outdent", "Outdent (Undo action name)", "Undo action name"); 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::registerCommandForUndoOrRedo(PassRefPtr<EditCommand> cmd, bool isRedo) 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(cmd); 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSUndoManager *undoManager = [m_webView undoManager]; 5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *actionName = undoNameForEditAction(cmd->editingAction()); 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebEditCommand *command = [WebEditCommand commandWithEditCommand:cmd]; 5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [undoManager registerUndoWithTarget:m_undoTarget.get() selector:(isRedo ? @selector(redoEditing:) : @selector(undoEditing:)) object:command]; 5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (actionName) 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [undoManager setActionName:actionName]; 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_haveUndoRedoOperations = YES; 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::registerCommandForUndo(PassRefPtr<EditCommand> cmd) 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project registerCommandForUndoOrRedo(cmd, false); 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::registerCommandForRedo(PassRefPtr<EditCommand> cmd) 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project registerCommandForUndoOrRedo(cmd, true); 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::clearUndoRedoOperations() 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_haveUndoRedoOperations) { 5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // workaround for <rdar://problem/4645507> NSUndoManager dies 5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // with uncaught exception when undo items cleared while 5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // groups are open 5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSUndoManager *undoManager = [m_webView undoManager]; 5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int groupingLevel = [undoManager groupingLevel]; 5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (int i = 0; i < groupingLevel; ++i) 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [undoManager endUndoGrouping]; 5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [undoManager removeAllActionsWithTarget:m_undoTarget.get()]; 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (int i = 0; i < groupingLevel; ++i) 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [undoManager beginUndoGrouping]; 5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_haveUndoRedoOperations = NO; 5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool WebEditorClient::canCopyCut(bool defaultValue) const 57681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 57781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return defaultValue; 57881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 57981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 58081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool WebEditorClient::canPaste(bool defaultValue) const 58181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 58281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return defaultValue; 58381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 58481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::canUndo() const 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[m_webView undoManager] canUndo]; 5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::canRedo() const 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[m_webView undoManager] canRedo]; 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::undo() 5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (canUndo()) 5988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[m_webView undoManager] undo]; 5998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::redo() 6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (canRedo()) 6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[m_webView undoManager] redo]; 6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::handleKeyboardEvent(KeyboardEvent* event) 6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* frame = event->target()->toNode()->document()->frame(); 6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebHTMLView *webHTMLView = [[kit(frame) frameView] documentView]; 6112bde8e466a4451c7319e3a072d118917957d6554Steve Block if ([webHTMLView _interpretKeyEvent:event savingCommands:NO]) 6128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project event->setDefaultHandled(); 6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::handleInputMethodKeydown(KeyboardEvent* event) 6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* frame = event->target()->toNode()->document()->frame(); 6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebHTMLView *webHTMLView = [[kit(frame) frameView] documentView]; 6192bde8e466a4451c7319e3a072d118917957d6554Steve Block if ([webHTMLView _interpretKeyEvent:event savingCommands:YES]) 6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project event->setDefaultHandled(); 6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define FormDelegateLog(ctrl) LOG(FormDelegate, "control=%@", ctrl) 6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::textFieldDidBeginEditing(Element* element) 6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!element->hasTagName(inputTag)) 628635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 629635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DOMHTMLInputElement* inputElement = kit(static_cast<HTMLInputElement*>(element)); 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FormDelegateLog(inputElement); 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CallFormDelegate(m_webView, @selector(textFieldDidBeginEditing:inFrame:), inputElement, kit(element->document()->frame())); 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::textFieldDidEndEditing(Element* element) 6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!element->hasTagName(inputTag)) 638635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 639635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DOMHTMLInputElement* inputElement = kit(static_cast<HTMLInputElement*>(element)); 6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FormDelegateLog(inputElement); 6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CallFormDelegate(m_webView, @selector(textFieldDidEndEditing:inFrame:), inputElement, kit(element->document()->frame())); 6438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6440617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::textDidChangeInTextField(Element* element) 6468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!element->hasTagName(inputTag)) 648635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 6490617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 6500617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen if (!UserTypingGestureIndicator::processingUserTypingGesture() || UserTypingGestureIndicator::focusedElementAtGestureStart() != element) 6510617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return; 652635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DOMHTMLInputElement* inputElement = kit(static_cast<HTMLInputElement*>(element)); 6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FormDelegateLog(inputElement); 6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CallFormDelegate(m_webView, @selector(textDidChangeInTextField:inFrame:), inputElement, kit(element->document()->frame())); 6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic SEL selectorForKeyEvent(KeyboardEvent* event) 6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: This helper function is for the auto-fill code so we can pass a selector to the form delegate. 6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Eventually, we should move all of the auto-fill code down to WebKit and remove the need for this function by 6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // not relying on the selector in the new implementation. 6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The key identifiers are from <http://www.w3.org/TR/DOM-Level-3-Events/keyset.html#KeySet-Set> 6646b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner const String& key = event->keyIdentifier(); 6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (key == "Up") 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return @selector(moveUp:); 6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (key == "Down") 6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return @selector(moveDown:); 6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (key == "U+001B") 6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return @selector(cancel:); 6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (key == "U+0009") { 6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (event->shiftKey()) 6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return @selector(insertBacktab:); 6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return @selector(insertTab:); 6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (key == "Enter") 6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return @selector(insertNewline:); 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::doTextFieldCommandFromEvent(Element* element, KeyboardEvent* event) 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!element->hasTagName(inputTag)) 684635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return NO; 685635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DOMHTMLInputElement* inputElement = kit(static_cast<HTMLInputElement*>(element)); 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FormDelegateLog(inputElement); 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (SEL commandSelector = selectorForKeyEvent(event)) 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return CallFormDelegateReturningBoolean(NO, m_webView, @selector(textField:doCommandBySelector:inFrame:), inputElement, commandSelector, kit(element->document()->frame())); 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::textWillBeDeletedInTextField(Element* element) 6948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!element->hasTagName(inputTag)) 696635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 697635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DOMHTMLInputElement* inputElement = kit(static_cast<HTMLInputElement*>(element)); 6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FormDelegateLog(inputElement); 7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We're using the deleteBackward selector for all deletion operations since the autofill code treats all deletions the same way. 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CallFormDelegateReturningBoolean(NO, m_webView, @selector(textField:doCommandBySelector:inFrame:), inputElement, @selector(deleteBackward:), kit(element->document()->frame())); 7028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::textDidChangeInTextArea(Element* element) 7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!element->hasTagName(textareaTag)) 707635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 708635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 7090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DOMHTMLTextAreaElement* textAreaElement = kit(static_cast<HTMLTextAreaElement*>(element)); 7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FormDelegateLog(textAreaElement); 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CallFormDelegate(m_webView, @selector(textDidChangeInTextArea:inFrame:), textAreaElement, kit(element->document()->frame())); 7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::ignoreWordInSpellDocument(const String& text) 7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSSpellChecker sharedSpellChecker] ignoreWord:text 7178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inSpellDocumentWithTag:spellCheckerDocumentTag()]; 7188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::learnWord(const String& text) 7218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSSpellChecker sharedSpellChecker] learnWord:text]; 7238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::checkSpellingOfString(const UChar* text, int length, int* misspellingLocation, int* misspellingLength) 7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString* textString = [[NSString alloc] initWithCharactersNoCopy:const_cast<UChar*>(text) length:length freeWhenDone:NO]; 7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRange range = [[NSSpellChecker sharedSpellChecker] checkSpellingOfString:textString startingAt:0 language:nil wrap:NO inSpellDocumentWithTag:spellCheckerDocumentTag() wordCount:NULL]; 7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [textString release]; 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (misspellingLocation) { 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // WebCore expects -1 to represent "not found" 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (range.location == NSNotFound) 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *misspellingLocation = -1; 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *misspellingLocation = range.location; 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (misspellingLength) 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *misspellingLength = range.length; 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochString WebEditorClient::getAutoCorrectSuggestionForMisspelledWord(const String& inputWord) 7430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 7440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // This method can be implemented using customized algorithms for the particular browser. 7450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Currently, it computes an empty string. 7460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return String(); 7470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 7480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::checkGrammarOfString(const UChar* text, int length, Vector<GrammarDetail>& details, int* badGrammarLocation, int* badGrammarLength) 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef BUILDING_ON_TIGER 7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSArray *grammarDetails; 7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString* textString = [[NSString alloc] initWithCharactersNoCopy:const_cast<UChar*>(text) length:length freeWhenDone:NO]; 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRange range = [[NSSpellChecker sharedSpellChecker] checkGrammarOfString:textString startingAt:0 language:nil wrap:NO inSpellDocumentWithTag:spellCheckerDocumentTag() details:&grammarDetails]; 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [textString release]; 7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (badGrammarLocation) 7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // WebCore expects -1 to represent "not found" 75881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *badGrammarLocation = (range.location == NSNotFound) ? -1 : static_cast<int>(range.location); 7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (badGrammarLength) 7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *badGrammarLength = range.length; 7618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (NSDictionary *detail in grammarDetails) { 7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(detail); 7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project GrammarDetail grammarDetail; 7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSValue *detailRangeAsNSValue = [detail objectForKey:NSGrammarRange]; 7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(detailRangeAsNSValue); 7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRange detailNSRange = [detailRangeAsNSValue rangeValue]; 767cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block ASSERT(detailNSRange.location != NSNotFound); 768cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block ASSERT(detailNSRange.length > 0); 7698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project grammarDetail.location = detailNSRange.location; 7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project grammarDetail.length = detailNSRange.length; 7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project grammarDetail.userDescription = [detail objectForKey:NSGrammarUserDescription]; 7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSArray *guesses = [detail objectForKey:NSGrammarCorrections]; 7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (NSString *guess in guesses) 7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project grammarDetail.guesses.append(String(guess)); 7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project details.append(grammarDetail); 7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 780563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 7812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic Vector<TextCheckingResult> core(NSArray *incomingResults, TextCheckingTypeMask checkingTypes) 7822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 7832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Vector<TextCheckingResult> results; 7842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 785563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (NSTextCheckingResult *incomingResult in incomingResults) { 786563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NSRange resultRange = [incomingResult range]; 787563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NSTextCheckingType resultType = [incomingResult resultType]; 788cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block ASSERT(resultRange.location != NSNotFound); 789cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block ASSERT(resultRange.length > 0); 7900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (NSTextCheckingTypeSpelling == resultType && 0 != (checkingTypes & NSTextCheckingTypeSpelling)) { 791563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark TextCheckingResult result; 7920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.type = TextCheckingTypeSpelling; 793563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark result.location = resultRange.location; 794563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark result.length = resultRange.length; 795563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark results.append(result); 7960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if (NSTextCheckingTypeGrammar == resultType && 0 != (checkingTypes & NSTextCheckingTypeGrammar)) { 797563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark TextCheckingResult result; 798563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NSArray *details = [incomingResult grammarDetails]; 7990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.type = TextCheckingTypeGrammar; 800563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark result.location = resultRange.location; 801563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark result.length = resultRange.length; 802563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (NSDictionary *incomingDetail in details) { 803563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT(incomingDetail); 804563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark GrammarDetail detail; 805563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NSValue *detailRangeAsNSValue = [incomingDetail objectForKey:NSGrammarRange]; 806563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT(detailRangeAsNSValue); 807563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NSRange detailNSRange = [detailRangeAsNSValue rangeValue]; 808cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block ASSERT(detailNSRange.location != NSNotFound); 809cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block ASSERT(detailNSRange.length > 0); 810563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark detail.location = detailNSRange.location; 811563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark detail.length = detailNSRange.length; 812563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark detail.userDescription = [incomingDetail objectForKey:NSGrammarUserDescription]; 813563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NSArray *guesses = [incomingDetail objectForKey:NSGrammarCorrections]; 814563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (NSString *guess in guesses) 815563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark detail.guesses.append(String(guess)); 816563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark result.details.append(detail); 817563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 818563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark results.append(result); 8190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if (NSTextCheckingTypeLink == resultType && 0 != (checkingTypes & NSTextCheckingTypeLink)) { 8200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch TextCheckingResult result; 8210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.type = TextCheckingTypeLink; 8220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.location = resultRange.location; 8230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.length = resultRange.length; 8240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.replacement = [[incomingResult URL] absoluteString]; 8250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch results.append(result); 8260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if (NSTextCheckingTypeQuote == resultType && 0 != (checkingTypes & NSTextCheckingTypeQuote)) { 8270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch TextCheckingResult result; 8280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.type = TextCheckingTypeQuote; 8290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.location = resultRange.location; 8300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.length = resultRange.length; 8310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.replacement = [incomingResult replacementString]; 8320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch results.append(result); 8330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if (NSTextCheckingTypeDash == resultType && 0 != (checkingTypes & NSTextCheckingTypeDash)) { 8340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch TextCheckingResult result; 8350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.type = TextCheckingTypeDash; 8360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.location = resultRange.location; 8370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.length = resultRange.length; 8380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.replacement = [incomingResult replacementString]; 8390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch results.append(result); 8400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if (NSTextCheckingTypeReplacement == resultType && 0 != (checkingTypes & NSTextCheckingTypeReplacement)) { 8410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch TextCheckingResult result; 8420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.type = TextCheckingTypeReplacement; 8430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.location = resultRange.location; 8440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.length = resultRange.length; 8450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.replacement = [incomingResult replacementString]; 8460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch results.append(result); 8470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if (NSTextCheckingTypeCorrection == resultType && 0 != (checkingTypes & NSTextCheckingTypeCorrection)) { 8480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch TextCheckingResult result; 8490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.type = TextCheckingTypeCorrection; 8500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.location = resultRange.location; 8510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.length = resultRange.length; 8520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result.replacement = [incomingResult replacementString]; 8530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch results.append(result); 854563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 855563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 8562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 8572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return results; 8582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 8592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 8602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 8612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebEditorClient::checkTextOfParagraph(const UChar* text, int length, TextCheckingTypeMask checkingTypes, Vector<TextCheckingResult>& results) 8622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 8632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 8642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch NSString *textString = [[NSString alloc] initWithCharactersNoCopy:const_cast<UChar*>(text) length:length freeWhenDone:NO]; 8652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch NSArray *incomingResults = [[NSSpellChecker sharedSpellChecker] checkString:textString range:NSMakeRange(0, [textString length]) types:(checkingTypes|NSTextCheckingTypeOrthography) options:nil inSpellDocumentWithTag:spellCheckerDocumentTag() orthography:NULL wordCount:NULL]; 8662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [textString release]; 8672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch results = core(incomingResults, checkingTypes); 868563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#endif 869563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 870563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 8718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::updateSpellingUIWithGrammarString(const String& badGrammarPhrase, const GrammarDetail& grammarDetail) 8728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef BUILDING_ON_TIGER 8748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMutableArray* corrections = [NSMutableArray array]; 8758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (unsigned i = 0; i < grammarDetail.guesses.size(); i++) { 8768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString* guess = grammarDetail.guesses[i]; 8778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [corrections addObject:guess]; 8788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRange grammarRange = NSMakeRange(grammarDetail.location, grammarDetail.length); 8808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString* grammarUserDescription = grammarDetail.userDescription; 8818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMutableDictionary* grammarDetailDict = [NSDictionary dictionaryWithObjectsAndKeys:[NSValue valueWithRange:grammarRange], NSGrammarRange, grammarUserDescription, NSGrammarUserDescription, corrections, NSGrammarCorrections, nil]; 8828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSSpellChecker sharedSpellChecker] updateSpellingPanelWithGrammarString:badGrammarPhrase detail:grammarDetailDict]; 8848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 8858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8875ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD) 8882bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebEditorClient::showCorrectionPanel(CorrectionPanelInfo::PanelType panelType, const FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings) 8892bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 8902bde8e466a4451c7319e3a072d118917957d6554Steve Block m_correctionPanel.show(m_webView, panelType, boundingBoxOfReplacedString, replacedString, replacementString, alternativeReplacementStrings); 8915ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 8925ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 893f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid WebEditorClient::dismissCorrectionPanel(ReasonForDismissingCorrectionPanel reasonForDismissing) 8945ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 8952bde8e466a4451c7319e3a072d118917957d6554Steve Block m_correctionPanel.dismiss(reasonForDismissing); 8965ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 89768513a70bcd92384395513322f1b801e7bf9c729Steve Block 8982bde8e466a4451c7319e3a072d118917957d6554Steve BlockString WebEditorClient::dismissCorrectionPanelSoon(ReasonForDismissingCorrectionPanel reasonForDismissing) 89968513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 9002bde8e466a4451c7319e3a072d118917957d6554Steve Block return m_correctionPanel.dismissSoon(reasonForDismissing); 90168513a70bcd92384395513322f1b801e7bf9c729Steve Block} 90281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 90381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebEditorClient::recordAutocorrectionResponse(EditorClient::AutocorrectionResponseType responseType, const String& replacedString, const String& replacementString) 90481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 9052bde8e466a4451c7319e3a072d118917957d6554Steve Block NSCorrectionResponse response = responseType == EditorClient::AutocorrectionReverted ? NSCorrectionResponseReverted : NSCorrectionResponseEdited; 9062bde8e466a4451c7319e3a072d118917957d6554Steve Block CorrectionPanel::recordAutocorrectionResponse(m_webView, response, replacedString, replacementString); 90781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 9085ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif 9095ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 9108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::updateSpellingUIWithMisspelledWord(const String& misspelledWord) 9118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSSpellChecker sharedSpellChecker] updateSpellingPanelWithMisspelledWord:misspelledWord]; 9138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::showSpellingUI(bool show) 9168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSPanel *spellingPanel = [[NSSpellChecker sharedSpellChecker] spellingPanel]; 9188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (show) 9198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [spellingPanel orderFront:nil]; 9208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 9218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [spellingPanel orderOut:nil]; 9228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool WebEditorClient::spellingUIIsShowing() 9258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[[NSSpellChecker sharedSpellChecker] spellingPanel] isVisible]; 9278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 929f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid WebEditorClient::getGuessesForWord(const String& word, const String& context, Vector<String>& guesses) { 930f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch guesses.clear(); 931f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD) 932f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSString* language = nil; 933f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSOrthography* orthography = nil; 934f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSSpellChecker *checker = [NSSpellChecker sharedSpellChecker]; 935f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (context.length()) { 936f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [checker checkString:context range:NSMakeRange(0, context.length()) types:NSTextCheckingTypeOrthography options:0 inSpellDocumentWithTag:spellCheckerDocumentTag() orthography:&orthography wordCount:0]; 937f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch language = [checker languageForWordRange:NSMakeRange(0, context.length()) inString:context orthography:orthography]; 938f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 939f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSArray* stringsArray = [checker guessesForWordRange:NSMakeRange(0, word.length()) inString:word language:language inSpellDocumentWithTag:spellCheckerDocumentTag()]; 940f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#else 9418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSArray* stringsArray = [[NSSpellChecker sharedSpellChecker] guessesForWord:word]; 942f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif 9438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned count = [stringsArray count]; 944f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 9458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (count > 0) { 9468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSEnumerator* enumerator = [stringsArray objectEnumerator]; 9478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString* string; 9488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while ((string = [enumerator nextObject]) != nil) 9498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project guesses.append(string); 9508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 953967717af5423377c967781471ee106e2bb4e11c8Ben Murdochvoid WebEditorClient::willSetInputMethodState() 954967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{ 955967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch} 956967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 9578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebEditorClient::setInputMethodState(bool) 9588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 960f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 961f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 962f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch@interface WebEditorSpellCheckResponder : NSObject 963f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 964f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebCore::SpellChecker* _sender; 965f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch int _sequence; 9662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch TextCheckingTypeMask _types; 967f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch RetainPtr<NSArray> _results; 968f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 9692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch- (id)initWithSender:(WebCore::SpellChecker*)sender sequence:(int)sequence types:(WebCore::TextCheckingTypeMask)types results:(NSArray*)results; 970f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch- (void)perform; 971f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch@end 972f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 973f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch@implementation WebEditorSpellCheckResponder 9742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch- (id)initWithSender:(WebCore::SpellChecker*)sender sequence:(int)sequence types:(WebCore::TextCheckingTypeMask)types results:(NSArray*)results 975f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 976f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch self = [super init]; 977f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!self) 978f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return nil; 979f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch _sender = sender; 980f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch _sequence = sequence; 9812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch _types = types; 982f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch _results = results; 983f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return self; 984f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 985f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 986f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch- (void)perform 987f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 9882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch _sender->didCheck(_sequence, core(_results.get(), _types)); 989f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 990f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 991f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch@end 992f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif 993f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 9942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebEditorClient::requestCheckingOfString(WebCore::SpellChecker* sender, int sequence, WebCore::TextCheckingTypeMask checkingTypes, const String& text) 995f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 996f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 997f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSRange range = NSMakeRange(0, text.length()); 998f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch NSRunLoop* currentLoop = [NSRunLoop currentRunLoop]; 999f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [[NSSpellChecker sharedSpellChecker] requestCheckingOfString:text range:range types:NSTextCheckingAllSystemTypes options:0 inSpellDocumentWithTag:0 1000f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch completionHandler:^(NSInteger, NSArray* results, NSOrthography*, NSInteger) { 1001f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch [currentLoop performSelector:@selector(perform) 10022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch target:[[[WebEditorSpellCheckResponder alloc] initWithSender:sender sequence:sequence types:checkingTypes results:results] autorelease] 1003f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch argument:nil order:0 modes:[NSArray arrayWithObject:NSDefaultRunLoopMode]]; 1004f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch }]; 1005f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif 1006f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 1007