Reviewed by Maciej.
Pulled a number of methods from WebKit and WebCoreFrameBridge into
C++ objects.
* WebCore.exp:
* WebCore.xcodeproj/project.pbxproj:
* editing/Editor.cpp:
(WebCore::Editor::replaceMarkedText):
From -[WebCoreFrameBridge replaceMarkedTextWithText:]
* editing/Editor.h:
* page/Frame.cpp:
(WebCore::Frame::setMarkedTextRange):
Pulled platform independent logic from Mac specific implementation
(WebCore::Frame::selectRangeInMarkedText):
Converted from -[WebHTMLView _selectRangeInMarkedText:]
* page/Frame.h:
* page/mac/FrameMac.mm:
(WebCore::Frame::setMarkedTextRange):
Now only does Mac specific logic when manipulating initial
NSAttributedString
* page/mac/WebCoreFrameBridge.h:
* page/mac/WebCoreFrameBridge.mm:
Removed -[WebCoreFrameBridge replaceMarkedTextWithText:]
WebKit:
Reviewed by Maciej.
<rdar://problem/
5318756> Need to refactor IM/Marked text code to share logic with windows.
Moved a number of methods from WebHTMLView into WebCore.
Replaced bridge methods with calls directly into WebCore objects.
* WebKit.xcodeproj/project.pbxproj:
* WebView/WebHTMLView.mm:
(-[WebHTMLView setMarkedText:selectedRange:]):
Now calls WebCore object methods directly, rather than calling
via the bridge.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@24085
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2007-07-06 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej.
+
+ Pulled a number of methods from WebKit and WebCoreFrameBridge into
+ C++ objects.
+
+ * WebCore.exp:
+ * WebCore.xcodeproj/project.pbxproj:
+ * editing/Editor.cpp:
+ (WebCore::Editor::replaceMarkedText):
+ From -[WebCoreFrameBridge replaceMarkedTextWithText:]
+ * editing/Editor.h:
+ * page/Frame.cpp:
+ (WebCore::Frame::setMarkedTextRange):
+ Pulled platform independent logic from Mac specific implementation
+ (WebCore::Frame::selectRangeInMarkedText):
+ Converted from -[WebHTMLView _selectRangeInMarkedText:]
+ * page/Frame.h:
+ * page/mac/FrameMac.mm:
+ (WebCore::Frame::setMarkedTextRange):
+ Now only does Mac specific logic when manipulating initial
+ NSAttributedString
+ * page/mac/WebCoreFrameBridge.h:
+ * page/mac/WebCoreFrameBridge.mm:
+ Removed -[WebCoreFrameBridge replaceMarkedTextWithText:]
+
2007-07-06 Mitz Pettel <mitz@webkit.org>
Reviewed by Darin.
__ZN7WebCore5Frame20setSelectionFromNoneEv
__ZN7WebCore5Frame20windowScriptNPObjectEv
__ZN7WebCore5Frame21setProhibitsScrollingEb
+__ZN7WebCore5Frame23selectRangeInMarkedTextEjj
__ZN7WebCore5Frame26dashboardRegionsDictionaryEv
__ZN7WebCore5Frame29cleanupScriptObjectsForPluginEPv
__ZN7WebCore5Frame4initEv
__ZN7WebCore6Editor16selectMarkedTextEv
__ZN7WebCore6Editor17discardMarkedTextEv
__ZN7WebCore6Editor17insertOrderedListEv
+__ZN7WebCore6Editor17replaceMarkedTextERKNS_6StringE
__ZN7WebCore6Editor19deleteWithDirectionENS_19SelectionController10EDirectionENS_15TextGranularityEbb
__ZN7WebCore6Editor19insertUnorderedListEv
__ZN7WebCore6Editor21applyStyleToSelectionEPNS_19CSSStyleDeclarationENS_10EditActionE
0867D690FE84028FC02AAC07 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 149C284308902B11008A9EFC /* Build configuration list for PBXProject "WebCore" */;
- compatibilityVersion = "Xcode 2.4";
hasScannedForEncodings = 1;
knownRegions = (
English,
mainGroup = 0867D691FE84028FC02AAC07 /* WebKit */;
productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
projectDirPath = "";
- projectRoot = "";
targets = (
93F198A508245E59001E9ABC /* WebCore */,
DD041FBE09D9DDBE0010AF2A /* Derived Sources */,
}
#endif
+void Editor::replaceMarkedText(const String& text)
+{
+ if (m_frame->selectionController()->isNone())
+ return;
+
+ int exception = 0;
+
+ Range *markedTextRange = m_frame->markedTextRange();
+ if (markedTextRange && !markedTextRange->collapsed(exception))
+ TypingCommand::deleteKeyPressed(m_frame->document(), false);
+
+ if (!text.isEmpty())
+ TypingCommand::insertText(m_frame->document(), text, true);
+
+ m_frame->revealSelection(RenderLayer::gAlignToEdgeIfNeeded);
+}
+
void Editor::ignoreSpelling()
{
if (!client())
void selectMarkedText();
void unmarkText();
void discardMarkedText();
+ void replaceMarkedText(const String&);
bool ignoreMarkedTextSelectionChange() const { return m_ignoreMarkedTextSelectionChange; }
void setIgnoreMarkedTextSelectionChange(bool ignore) { m_ignoreMarkedTextSelectionChange = ignore; }
return d->m_markedTextRange.get();
}
+void Frame::setMarkedTextRange(Range* range, Vector<MarkedTextUnderline>& markedRangeDecorations)
+{
+ int exception = 0;
+
+ ASSERT(!range || range->startContainer(exception) == range->endContainer(exception));
+ ASSERT(!range || range->collapsed(exception) || range->startContainer(exception)->isTextNode());
+
+ d->m_markedTextUnderlines.clear();
+ if (markedRangeDecorations.size()) {
+ d->m_markedTextUsesUnderlines = true;
+ d->m_markedTextUnderlines = markedRangeDecorations;
+ } else
+ d->m_markedTextUsesUnderlines = false;
+
+ if (d->m_markedTextRange.get() && document() && d->m_markedTextRange->startContainer(exception)->renderer())
+ d->m_markedTextRange->startContainer(exception)->renderer()->repaint();
+
+ if (range && range->collapsed(exception))
+ d->m_markedTextRange = 0;
+ else
+ d->m_markedTextRange = range;
+
+ if (d->m_markedTextRange.get() && document() && d->m_markedTextRange->startContainer(exception)->renderer())
+ d->m_markedTextRange->startContainer(exception)->renderer()->repaint();
+}
+
+void Frame::selectRangeInMarkedText(unsigned selOffset, unsigned selLength)
+{
+ ExceptionCode ec = 0;
+
+ RefPtr<Range> selectedRange = document()->createRange();
+ Range* markedTextRange = this->markedTextRange();
+
+ ASSERT(markedTextRange->startContainer(ec) == markedTextRange->endContainer(ec));
+ ASSERT(!ec);
+ unsigned selectionStart = markedTextRange->startOffset(ec) + selOffset;
+ unsigned selectionEnd = selectionStart + selLength;
+ ASSERT(!ec);
+
+ selectedRange->setStart(markedTextRange->startContainer(ec), selectionStart, ec);
+ ASSERT(!ec);
+ selectedRange->setEnd(markedTextRange->startContainer(ec), selectionEnd, ec);
+ ASSERT(!ec);
+
+ selectionController()->setSelectedRange(selectedRange.get(), DOWNSTREAM, false, ec);
+}
+
SelectionController* Frame::selectionController() const
{
return &d->m_selectionController;
void removeEditingStyleFromElement(Element*) const;
Range* markedTextRange() const;
+
#if PLATFORM(MAC)
void issuePasteCommand();
#endif
const Vector<MarkedTextUnderline>& markedTextUnderlines() const;
bool markedTextUsesUnderlines() const;
+ void setMarkedTextRange(Range* , Vector<MarkedTextUnderline>&);
+ void selectRangeInMarkedText(unsigned selOffset, unsigned selLength);
unsigned markAllMatchesForText(const String&, bool caseFlag, unsigned limit);
bool markedTextMatchesAreHighlighted() const;
NSDictionary* fontAttributesForSelectionStart() const;
NSWritingDirection baseWritingDirectionForSelectionStart() const;
- void setMarkedTextRange(const Range* , NSArray* attributes, NSArray* ranges);
+ void setMarkedTextRange(Range* , NSArray* attributes, NSArray* ranges);
#endif
}
}
-void Frame::setMarkedTextRange(const Range* range, NSArray* attributes, NSArray* ranges)
+void Frame::setMarkedTextRange(Range* range, NSArray* attributes, NSArray* ranges)
{
- int exception = 0;
+ int exception;
+ exception = 0;
ASSERT(!range || range->startContainer(exception) == range->endContainer(exception));
ASSERT(!range || range->collapsed(exception) || range->startContainer(exception)->isTextNode());
- d->m_markedTextUnderlines.clear();
- if (attributes == nil)
- d->m_markedTextUsesUnderlines = false;
- else {
- d->m_markedTextUsesUnderlines = true;
- convertAttributesToUnderlines(d->m_markedTextUnderlines, range, attributes, ranges);
- }
-
- if (d->m_markedTextRange.get() && document() && d->m_markedTextRange->startContainer(exception)->renderer())
- d->m_markedTextRange->startContainer(exception)->renderer()->repaint();
-
- if (range && range->collapsed(exception))
- d->m_markedTextRange = 0;
- else
- d->m_markedTextRange = const_cast<Range*>(range);
-
- if (d->m_markedTextRange.get() && document() && d->m_markedTextRange->startContainer(exception)->renderer())
- d->m_markedTextRange->startContainer(exception)->renderer()->repaint();
+ Vector<MarkedTextUnderline> decorations;
+ if (attributes)
+ convertAttributesToUnderlines(decorations, range, attributes, ranges);
+
+ setMarkedTextRange(range, decorations);
}
NSMutableDictionary* Frame::dashboardRegionsDictionary()
// international text input "marked text"
- (void)setMarkedTextDOMRange:(DOMRange *)range customAttributes:(NSArray *)attributes ranges:(NSArray *)ranges;
- (DOMRange *)markedTextDOMRange;
-- (void)replaceMarkedTextWithText:(NSString *)text;
- (NSFont *)fontForSelection:(BOOL *)hasMultipleFonts;
- (NSWritingDirection)baseWritingDirectionForSelectionStart;
return [self convertToNSRange:m_frame->markedTextRange()];
}
-- (void)replaceMarkedTextWithText:(NSString *)text
-{
- if (m_frame->selectionController()->isNone())
- return;
-
- int exception = 0;
-
- Range *markedTextRange = m_frame->markedTextRange();
- if (markedTextRange && !markedTextRange->collapsed(exception))
- TypingCommand::deleteKeyPressed(m_frame->document(), NO);
-
- if ([text length] > 0)
- TypingCommand::insertText(m_frame->document(), text, YES);
-
- m_frame->revealSelection(RenderLayer::gAlignToEdgeIfNeeded);
-}
-
// Given proposedRange, returns an extended range that includes adjacent whitespace that should
// be deleted along with the proposed range in order to preserve proper spacing and punctuation of
// the text surrounding the deletion.
+2007-07-06 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej.
+
+ <rdar://problem/5318756> Need to refactor IM/Marked text code to share logic with windows.
+
+ Moved a number of methods from WebHTMLView into WebCore.
+ Replaced bridge methods with calls directly into WebCore objects.
+
+ * WebKit.xcodeproj/project.pbxproj:
+ * WebView/WebHTMLView.mm:
+ (-[WebHTMLView setMarkedText:selectedRange:]):
+ Now calls WebCore object methods directly, rather than calling
+ via the bridge.
+
2007-07-06 John Sullivan <sullivan@apple.com>
Reviewed by Brady
0867D690FE84028FC02AAC07 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 149C283208902B0F008A9EFC /* Build configuration list for PBXProject "WebKit" */;
- compatibilityVersion = "Xcode 2.4";
hasScannedForEncodings = 1;
knownRegions = (
English,
mainGroup = 0867D691FE84028FC02AAC07 /* WebKit */;
productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
projectDirPath = "";
- projectRoot = "";
targets = (
9398100A0824BF01008DF038 /* WebKit */,
);
coreFrame->editor()->unmarkText();
}
-- (void)_selectRangeInMarkedText:(NSRange)range
-{
- ASSERT([self hasMarkedText]);
-
- WebFrameBridge *bridge = [self _bridge];
- DOMRange *selectedRange = [[[self _frame] DOMDocument] createRange];
- DOMRange *markedTextRange = [bridge markedTextDOMRange];
-
- ASSERT([markedTextRange startContainer] == [markedTextRange endContainer]);
-
- unsigned selectionStart = [markedTextRange startOffset] + range.location;
- unsigned selectionEnd = selectionStart + range.length;
-
- [selectedRange setStart:[markedTextRange startContainer] offset:selectionStart];
- [selectedRange setEnd:[markedTextRange startContainer] offset:selectionEnd];
-
- Frame* coreFrame = core([self _frame]);
- if (coreFrame) {
- ExceptionCode ec = 0;
- coreFrame->selectionController()->setSelectedRange(core(selectedRange), DOWNSTREAM, false, ec);
- }
-}
-
- (void)_extractAttributes:(NSArray **)a ranges:(NSArray **)r fromAttributedString:(NSAttributedString *)string
{
int length = [[string string] length];
[self _extractAttributes:&attributes ranges:&ranges fromAttributedString:string];
}
- [bridge replaceMarkedTextWithText:text];
+ coreFrame->editor()->replaceMarkedText(text);
[bridge setMarkedTextDOMRange:[self _selectedRange] customAttributes:attributes ranges:ranges];
if ([self hasMarkedText])
- [self _selectRangeInMarkedText:newSelRange];
+ coreFrame->selectRangeInMarkedText(newSelRange.location, newSelRange.length);
coreFrame->editor()->setIgnoreMarkedTextSelectionChange(false);
}