📄 htmlediting.h
字号:
/* * 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. */#ifndef __htmlediting_h__#define __htmlediting_h__#include "dom_position.h"#include "dom_selection.h"#include "dom_string.h"#include "shared.h"#include "xml/dom_nodeimpl.h"namespace DOM { class CSSStyleDeclarationImpl; class DocumentFragmentImpl; class DocumentImpl; class DOMString; class ElementImpl; class NodeImpl; class Position; class Selection; class TextImpl;};namespace khtml {class AppendNodeCommandImpl;class ApplyStyleCommandImpl;class CompositeEditCommandImpl;class DeleteCollapsibleWhitespaceCommandImpl;class DeleteSelectionCommandImpl;class DeleteTextCommandImpl;class EditCommand;class EditCommandImpl;class InputNewlineCommandImpl;class InputTextCommandImpl;class InsertNodeBeforeCommandImpl;class InsertTextCommandImpl;class JoinTextNodesCommandImpl;class MoveSelectionCommandImpl;class ReplaceSelectionCommandImpl;class RemoveCSSPropertyCommandImpl;class RemoveNodeAttributeCommandImpl;class RemoveNodeCommandImpl;class RemoveNodeAndPruneCommandImpl;class RemoveNodePreservingChildrenCommandImpl;class SetNodeAttributeCommandImpl;class SplitTextNodeCommandImpl;class TypingCommandImpl;//------------------------------------------------------------------------------------------// Constantsenum ECommandID { EditCommandID, // leave the base class first, others in alpha order AppendNodeCommandID, ApplyStyleCommandID, CompositeEditCommandID, DeleteCollapsibleWhitespaceCommandID, DeleteSelectionCommandID, DeleteTextCommandID, InputNewlineCommandID, InputTextCommandID, InsertNodeBeforeCommandID, InsertTextCommandID, JoinTextNodesCommandID, MoveSelectionCommandID, ReplaceSelectionCommandID, RemoveCSSPropertyCommandID, RemoveNodeAttributeCommandID, RemoveNodeCommandID, RemoveNodeAndPruneCommandID, RemoveNodePreservingChildrenCommandID, SetNodeAttributeCommandID, SplitTextNodeCommandID, TypingCommandID,};//------------------------------------------------------------------------------------------// SharedCommandImplclass SharedCommandImpl : public Shared<SharedCommandImpl>{public: SharedCommandImpl() {} virtual ~SharedCommandImpl() {} virtual int commandID() const = 0; virtual bool isCompositeStep() const = 0; virtual void apply() = 0; virtual void unapply() = 0; virtual void reapply() = 0; virtual DOM::DocumentImpl * const document() const = 0; virtual DOM::Selection startingSelection() const = 0; virtual DOM::Selection endingSelection() const = 0; virtual void setStartingSelection(const DOM::Selection &s) = 0; virtual void setEndingSelection(const DOM::Selection &s) = 0; virtual EditCommand parent() const = 0; virtual void setParent(const EditCommand &) = 0;};//------------------------------------------------------------------------------------------// EditCommandclass EditCommand : public SharedPtr<SharedCommandImpl>{public: EditCommand(); EditCommand(EditCommandImpl *); EditCommand(const EditCommand &); virtual ~EditCommand(); int commandID() const; bool isCompositeStep() const; bool isNull() const; bool notNull() const; void apply(); void unapply(); void reapply(); DOM::DocumentImpl * const document() const; DOM::Selection startingSelection() const; DOM::Selection endingSelection() const; void setStartingSelection(const DOM::Selection &s); void setEndingSelection(const DOM::Selection &s); EditCommand parent() const; void setParent(const EditCommand &); EditCommandImpl *handle() const; static EditCommand &emptyCommand();};//------------------------------------------------------------------------------------------// CompositeEditCommandclass CompositeEditCommand : public EditCommand{public: CompositeEditCommand(); CompositeEditCommand(CompositeEditCommandImpl *); CompositeEditCommand(const CompositeEditCommand &); virtual ~CompositeEditCommand();private: inline CompositeEditCommandImpl *impl() const;};//==========================================================================================// Concrete commands//------------------------------------------------------------------------------------------// AppendNodeCommandclass AppendNodeCommand : public EditCommand{public: AppendNodeCommand(DOM::DocumentImpl *, DOM::NodeImpl *parentNode, DOM::NodeImpl *appendChild); virtual ~AppendNodeCommand(); DOM::NodeImpl *parentNode() const; DOM::NodeImpl *appendChild() const; private: inline AppendNodeCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// ApplyStyleCommandclass ApplyStyleCommand : public CompositeEditCommand{public: ApplyStyleCommand(DOM::DocumentImpl *, DOM::CSSStyleDeclarationImpl *); virtual ~ApplyStyleCommand(); DOM::CSSStyleDeclarationImpl *style() const;private: inline ApplyStyleCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// DeleteCollapsibleWhitespaceCommandclass DeleteCollapsibleWhitespaceCommand : public CompositeEditCommand{public: DeleteCollapsibleWhitespaceCommand(DOM::DocumentImpl *document); DeleteCollapsibleWhitespaceCommand(DOM::DocumentImpl *document, const DOM::Selection &selection); virtual ~DeleteCollapsibleWhitespaceCommand();private: inline DeleteCollapsibleWhitespaceCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// DeleteSelectionCommandclass DeleteSelectionCommand : public CompositeEditCommand{public: DeleteSelectionCommand(DOM::DocumentImpl *document); DeleteSelectionCommand(DOM::DocumentImpl *document, const DOM::Selection &selection); virtual ~DeleteSelectionCommand();private: inline DeleteSelectionCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// DeleteTextCommandclass DeleteTextCommand : public EditCommand{public: DeleteTextCommand(DOM::DocumentImpl *document, DOM::TextImpl *, long offset, long count); DeleteTextCommand(const DeleteTextCommand &); virtual ~DeleteTextCommand(); DOM::TextImpl *node() const; long offset() const; long count() const;private: inline DeleteTextCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// InputNewlineCommandclass InputNewlineCommand : public CompositeEditCommand{public: InputNewlineCommand(DOM::DocumentImpl *document); virtual ~InputNewlineCommand();private: inline InputNewlineCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// InputTextCommandclass InputTextCommand : public CompositeEditCommand{public: InputTextCommand(DOM::DocumentImpl *document); virtual ~InputTextCommand(); void deleteCharacter(); void input(const DOM::DOMString &text); unsigned long charactersAdded() const;private: inline InputTextCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// InsertNodeBeforeCommandclass InsertNodeBeforeCommand : public EditCommand{public: InsertNodeBeforeCommand(); InsertNodeBeforeCommand(DOM::DocumentImpl *, DOM::NodeImpl *insertChild, DOM::NodeImpl *refChild); InsertNodeBeforeCommand(const InsertNodeBeforeCommand &); virtual ~InsertNodeBeforeCommand(); DOM::NodeImpl *insertChild() const; DOM::NodeImpl *refChild() const; private: inline InsertNodeBeforeCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// InsertTextCommandclass InsertTextCommand : public EditCommand{public: InsertTextCommand(DOM::DocumentImpl *document, DOM::TextImpl *, long, const DOM::DOMString &); virtual ~InsertTextCommand(); DOM::TextImpl *node() const; long offset() const; DOM::DOMString text() const;private: inline InsertTextCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// JoinTextNodesCommandclass JoinTextNodesCommand : public EditCommand{public: JoinTextNodesCommand(DOM::DocumentImpl *, DOM::TextImpl *, DOM::TextImpl *); virtual ~JoinTextNodesCommand(); DOM::TextImpl *firstNode() const; DOM::TextImpl *secondNode() const; private: inline JoinTextNodesCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// ReplaceSelectionCommandclass ReplaceSelectionCommand : public CompositeEditCommand{public: ReplaceSelectionCommand(DOM::DocumentImpl *document, DOM::DocumentFragmentImpl *fragment, bool selectReplacement=true); virtual ~ReplaceSelectionCommand();private: inline ReplaceSelectionCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// MoveSelectionCommandclass MoveSelectionCommand : public CompositeEditCommand{public: MoveSelectionCommand(DOM::DocumentImpl *document, DOM::DocumentFragmentImpl *fragment, DOM::Position &position); virtual ~MoveSelectionCommand(); private: inline MoveSelectionCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// RemoveCSSPropertyCommandclass RemoveCSSPropertyCommand : public EditCommand{public: RemoveCSSPropertyCommand(DOM::DocumentImpl *, DOM::CSSStyleDeclarationImpl *, int property); virtual ~RemoveCSSPropertyCommand(); DOM::CSSStyleDeclarationImpl *styleDeclaration() const; int property() const; private: inline RemoveCSSPropertyCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// RemoveNodeAttributeCommandclass RemoveNodeAttributeCommand : public EditCommand{public: RemoveNodeAttributeCommand(DOM::DocumentImpl *, DOM::ElementImpl *, DOM::NodeImpl::Id attribute); virtual ~RemoveNodeAttributeCommand(); DOM::ElementImpl *element() const; DOM::NodeImpl::Id attribute() const; private: inline RemoveNodeAttributeCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// RemoveNodeCommandclass RemoveNodeCommand : public EditCommand{public: RemoveNodeCommand(DOM::DocumentImpl *, DOM::NodeImpl *node); virtual ~RemoveNodeCommand(); DOM::NodeImpl *node() const; private: inline RemoveNodeCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// RemoveNodeAndPruneCommandclass RemoveNodeAndPruneCommand : public CompositeEditCommand{public: RemoveNodeAndPruneCommand(DOM::DocumentImpl *, DOM::NodeImpl *pruneNode, DOM::NodeImpl *stopNode=0); virtual ~RemoveNodeAndPruneCommand(); DOM::NodeImpl *pruneNode() const; DOM::NodeImpl *stopNode() const; private: inline RemoveNodeAndPruneCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// RemoveNodePreservingChildrenCommandclass RemoveNodePreservingChildrenCommand : public CompositeEditCommand{public: RemoveNodePreservingChildrenCommand(DOM::DocumentImpl *document, DOM::NodeImpl *node); virtual ~RemoveNodePreservingChildrenCommand(); DOM::NodeImpl *node() const;private: inline RemoveNodePreservingChildrenCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// SetNodeAttributeCommandclass SetNodeAttributeCommand : public EditCommand{public: SetNodeAttributeCommand(DOM::DocumentImpl *, DOM::ElementImpl *, DOM::NodeImpl::Id attribute, const DOM::DOMString &value); virtual ~SetNodeAttributeCommand(); DOM::ElementImpl *element() const; DOM::NodeImpl::Id attribute() const; DOM::DOMString value() const; private: inline SetNodeAttributeCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// SplitTextNodeCommandclass SplitTextNodeCommand : public EditCommand{public: SplitTextNodeCommand(DOM::DocumentImpl *, DOM::TextImpl *, long); virtual ~SplitTextNodeCommand(); DOM::TextImpl *node() const; long offset() const; private: inline SplitTextNodeCommandImpl *impl() const;};//------------------------------------------------------------------------------------------// TypingCommandclass TypingCommand : public CompositeEditCommand{public: static void deleteKeyPressed(DOM::DocumentImpl *document); static void insertText(DOM::DocumentImpl *document, const DOM::DOMString &text); static void insertNewline(DOM::DocumentImpl *document); static bool isOpenForMoreTypingCommand(const EditCommand &); static void closeTyping(EditCommand); bool openForMoreTyping() const; void closeTyping();private: TypingCommand(DOM::DocumentImpl *document); TypingCommand(TypingCommand *); TypingCommand(const TypingCommand &); virtual ~TypingCommand(); void deleteKeyPressed(); void insertText(const DOM::DOMString &text); void insertNewline(); inline TypingCommandImpl *impl() const;};//------------------------------------------------------------------------------------------} // end namespace khtml#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -