📄 htmlediting.cpp
字号:
/* * Copyright (C) 2004 Apple Computer, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */#include "htmlediting.h"#include "htmlediting_impl.h"#include "khtml_part.h"#include "dom/dom_doc.h"#include "dom/dom_position.h"#include "xml/dom_docimpl.h"#include "xml/dom_nodeimpl.h"#include "xml/dom_selection.h"#include "xml/dom_textimpl.h"#if APPLE_CHANGES#include "KWQAssertions.h"#include "KWQLogging.h"#endifusing DOM::CSSStyleDeclarationImpl;using DOM::DocumentImpl;using DOM::ElementImpl;using DOM::Position;using DOM::DOMString;using DOM::NodeImpl;using DOM::NodeListImpl;using DOM::Selection;using DOM::TextImpl;#define IF_IMPL_NULL_RETURN_ARG(arg) do { \ if (isNull()) { return arg; } \ } while (0) #define IF_IMPL_NULL_RETURN do { \ if (isNull()) { return; } \ } while (0)namespace khtml {//------------------------------------------------------------------------------------------// EditCommandEditCommand::EditCommand() : SharedPtr<SharedCommandImpl>(){}EditCommand::EditCommand(EditCommandImpl *impl) : SharedPtr<SharedCommandImpl>(impl){}EditCommand::EditCommand(const EditCommand &o) : SharedPtr<SharedCommandImpl>(o.get()){}EditCommand::~EditCommand(){}int EditCommand::commandID() const{ IF_IMPL_NULL_RETURN_ARG(0); return get()->commandID();}bool EditCommand::isCompositeStep() const{ IF_IMPL_NULL_RETURN_ARG(false); return get()->isCompositeStep();}bool EditCommand::isNull() const{ return get() == 0;}bool EditCommand::notNull() const{ return !isNull();}void EditCommand::apply(){ IF_IMPL_NULL_RETURN; get()->apply();}void EditCommand::unapply(){ IF_IMPL_NULL_RETURN; get()->unapply();}void EditCommand::reapply(){ IF_IMPL_NULL_RETURN; get()->reapply();}DocumentImpl * const EditCommand::document() const{ IF_IMPL_NULL_RETURN_ARG(0); return get()->document();}Selection EditCommand::startingSelection() const{ IF_IMPL_NULL_RETURN_ARG(Selection()); return get()->startingSelection();}Selection EditCommand::endingSelection() const{ IF_IMPL_NULL_RETURN_ARG(Selection()); return get()->endingSelection();}void EditCommand::setStartingSelection(const Selection &s){ IF_IMPL_NULL_RETURN; get()->setStartingSelection(s);}void EditCommand::setEndingSelection(const Selection &s){ IF_IMPL_NULL_RETURN; get()->setEndingSelection(s);}EditCommand EditCommand::parent() const{ IF_IMPL_NULL_RETURN_ARG(0); return get()->parent();}void EditCommand::setParent(const EditCommand &cmd){ IF_IMPL_NULL_RETURN; get()->setParent(cmd);}EditCommandImpl *EditCommand::handle() const{ return static_cast<EditCommandImpl *>(get());}EditCommand &EditCommand::emptyCommand(){ static EditCommand m_emptyCommand; return m_emptyCommand;}//------------------------------------------------------------------------------------------// CompositeEditCommandCompositeEditCommand::CompositeEditCommand() : EditCommand() {}CompositeEditCommand::CompositeEditCommand(CompositeEditCommandImpl *impl) : EditCommand(impl) {}CompositeEditCommand::CompositeEditCommand(const CompositeEditCommand &o) : EditCommand(o.impl()) {}CompositeEditCommand::~CompositeEditCommand(){}CompositeEditCommandImpl *CompositeEditCommand::impl() const{ return static_cast<CompositeEditCommandImpl *>(get());}//==========================================================================================// Concrete commands//------------------------------------------------------------------------------------------// AppendNodeCommandAppendNodeCommand::AppendNodeCommand(DocumentImpl *document, NodeImpl *parentNode, NodeImpl *appendChild) : EditCommand(new AppendNodeCommandImpl(document, parentNode, appendChild)){}AppendNodeCommand::~AppendNodeCommand(){}AppendNodeCommandImpl *AppendNodeCommand::impl() const{ return static_cast<AppendNodeCommandImpl *>(get());}NodeImpl *AppendNodeCommand::parentNode() const{ IF_IMPL_NULL_RETURN_ARG(0); return impl()->parentNode();}NodeImpl *AppendNodeCommand::appendChild() const{ IF_IMPL_NULL_RETURN_ARG(0); return impl()->appendChild();}//------------------------------------------------------------------------------------------// ApplyStyleCommandApplyStyleCommand::ApplyStyleCommand(DocumentImpl *document, CSSStyleDeclarationImpl *style) : CompositeEditCommand(new ApplyStyleCommandImpl(document, style)){}ApplyStyleCommand::~ApplyStyleCommand(){}ApplyStyleCommandImpl *ApplyStyleCommand::impl() const{ return static_cast<ApplyStyleCommandImpl *>(get());}CSSStyleDeclarationImpl *ApplyStyleCommand::style() const{ IF_IMPL_NULL_RETURN_ARG(0); return impl()->style();}//------------------------------------------------------------------------------------------// DeleteCollapsibleWhitespaceCommandDeleteCollapsibleWhitespaceCommand::DeleteCollapsibleWhitespaceCommand(DocumentImpl *document) : CompositeEditCommand(new DeleteCollapsibleWhitespaceCommandImpl(document)){}DeleteCollapsibleWhitespaceCommand::DeleteCollapsibleWhitespaceCommand(DocumentImpl *document, const Selection &selection) : CompositeEditCommand(new DeleteCollapsibleWhitespaceCommandImpl(document, selection)){}DeleteCollapsibleWhitespaceCommand::~DeleteCollapsibleWhitespaceCommand(){} DeleteCollapsibleWhitespaceCommandImpl *DeleteCollapsibleWhitespaceCommand::impl() const{ return static_cast<DeleteCollapsibleWhitespaceCommandImpl *>(get());}//------------------------------------------------------------------------------------------// DeleteSelectionCommandDeleteSelectionCommand::DeleteSelectionCommand(DocumentImpl *document) : CompositeEditCommand(new DeleteSelectionCommandImpl(document)){}DeleteSelectionCommand::DeleteSelectionCommand(DocumentImpl *document, const Selection &selection) : CompositeEditCommand(new DeleteSelectionCommandImpl(document, selection)){}DeleteSelectionCommand::~DeleteSelectionCommand(){} DeleteSelectionCommandImpl *DeleteSelectionCommand::impl() const{ return static_cast<DeleteSelectionCommandImpl *>(get());}//------------------------------------------------------------------------------------------// DeleteTextCommandDeleteTextCommand::DeleteTextCommand(DocumentImpl *document, TextImpl *node, long offset, long count) : EditCommand(new DeleteTextCommandImpl(document, node, offset, count)){}DeleteTextCommand::DeleteTextCommand(const DeleteTextCommand &o) : EditCommand(o.impl()){}DeleteTextCommand::~DeleteTextCommand(){}DeleteTextCommandImpl *DeleteTextCommand::impl() const{ return static_cast<DeleteTextCommandImpl *>(get());}TextImpl *DeleteTextCommand::node() const{ IF_IMPL_NULL_RETURN_ARG(0); return impl()->node();}long DeleteTextCommand::offset() const{ IF_IMPL_NULL_RETURN_ARG(0); return impl()->offset();}long DeleteTextCommand::count() const{ IF_IMPL_NULL_RETURN_ARG(0); return impl()->count();}//------------------------------------------------------------------------------------------// InputNewlineCommandInputNewlineCommand::InputNewlineCommand(DocumentImpl *document) : CompositeEditCommand(new InputNewlineCommandImpl(document)){}InputNewlineCommand::~InputNewlineCommand() {}InputNewlineCommandImpl *InputNewlineCommand::impl() const{ return static_cast<InputNewlineCommandImpl *>(get());}//------------------------------------------------------------------------------------------// InputTextCommandInputTextCommand::InputTextCommand(DocumentImpl *document) : CompositeEditCommand(new InputTextCommandImpl(document)){}InputTextCommand::~InputTextCommand() {}InputTextCommandImpl *InputTextCommand::impl() const{ return static_cast<InputTextCommandImpl *>(get());}void InputTextCommand::deleteCharacter(){ IF_IMPL_NULL_RETURN; impl()->deleteCharacter();}void InputTextCommand::input(const DOM::DOMString &text){ IF_IMPL_NULL_RETURN; impl()->input(text);}unsigned long InputTextCommand::charactersAdded() const{ IF_IMPL_NULL_RETURN_ARG(0); return impl()->charactersAdded();}//------------------------------------------------------------------------------------------// InsertNodeBeforeCommandInsertNodeBeforeCommand::InsertNodeBeforeCommand() : EditCommand(){}InsertNodeBeforeCommand::InsertNodeBeforeCommand(DocumentImpl *document, NodeImpl *insertChild, NodeImpl *refChild) : EditCommand(new InsertNodeBeforeCommandImpl(document, insertChild, refChild)){}InsertNodeBeforeCommand::InsertNodeBeforeCommand(const InsertNodeBeforeCommand &o) : EditCommand(new InsertNodeBeforeCommandImpl(o.document(), o.insertChild(), o.refChild())){}InsertNodeBeforeCommand::~InsertNodeBeforeCommand(){}InsertNodeBeforeCommandImpl *InsertNodeBeforeCommand::impl() const{ return static_cast<InsertNodeBeforeCommandImpl *>(get());}NodeImpl *InsertNodeBeforeCommand::insertChild() const{ IF_IMPL_NULL_RETURN_ARG(0); return impl()->insertChild();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -