亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? htmlediting.h

?? It is WEB browser core module with source code. Very good!
?? H
?? 第 1 頁 / 共 3 頁
字號:
/*
 * 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_nodeimpl.h"
#include "editing/edit_actions.h"
#include "qmap.h"
#include "qptrlist.h"
#include "qvaluelist.h"
#include "selection.h"
#include "shared.h"

namespace DOM {
    class CSSMutableStyleDeclarationImpl;
    class CSSProperty;
    class CSSStyleDeclarationImpl;
    class DocumentFragmentImpl;
    class HTMLElementImpl;
    class TextImpl;
}

namespace khtml {

class EditCommand;
class Selection;
class VisiblePosition;

//------------------------------------------------------------------------------------------
// EditCommandPtr

class EditCommandPtr : public SharedPtr<EditCommand>
{
public:
    EditCommandPtr();
    EditCommandPtr(EditCommand *);
    EditCommandPtr(const EditCommandPtr &);
    ~EditCommandPtr();

    EditCommandPtr &operator=(const EditCommandPtr &);

    bool isCompositeStep() const;

    void apply() const;
    void unapply() const;
    void reapply() const;

    EditAction editingAction() const;

    DOM::DocumentImpl * const document() const;

    Selection startingSelection() const;
    Selection endingSelection() const;

    void setStartingSelection(const Selection &s) const;
    void setStartingSelection(const VisiblePosition &p) const;
    void setStartingSelection(const DOM::Position &p, EAffinity affinity) const;
    void setEndingSelection(const Selection &s) const;
    void setEndingSelection(const VisiblePosition &p) const;
    void setEndingSelection(const DOM::Position &p, EAffinity affinity) const;

    DOM::CSSMutableStyleDeclarationImpl *typingStyle() const;
    void setTypingStyle(DOM::CSSMutableStyleDeclarationImpl *) const;

    EditCommandPtr parent() const;
    void setParent(const EditCommandPtr &) const;

    bool isInsertTextCommand() const;
    bool isInsertLineBreakCommand() const;
    bool isTypingCommand() const;

    static EditCommandPtr &emptyCommand();
};

//------------------------------------------------------------------------------------------
// StyleChange

class StyleChange 
OOM_MODIFIED
{
public:
    enum ELegacyHTMLStyles { DoNotUseLegacyHTMLStyles, UseLegacyHTMLStyles };

    explicit StyleChange(DOM::CSSStyleDeclarationImpl *, ELegacyHTMLStyles usesLegacyStyles=UseLegacyHTMLStyles);
    StyleChange(DOM::CSSStyleDeclarationImpl *, const DOM::Position &, ELegacyHTMLStyles usesLegacyStyles=UseLegacyHTMLStyles);

    static ELegacyHTMLStyles styleModeForParseMode(bool);

    DOM::DOMString cssStyle() const { return m_cssStyle; }
    bool applyBold() const { return m_applyBold; }
    bool applyItalic() const { return m_applyItalic; }
    bool applyFontColor() const { return m_applyFontColor.length() > 0; }
    bool applyFontFace() const { return m_applyFontFace.length() > 0; }
    bool applyFontSize() const { return m_applyFontSize.length() > 0; }

    DOM::DOMString fontColor() { return m_applyFontColor; }
    DOM::DOMString fontFace() { return m_applyFontFace; }
    DOM::DOMString fontSize() { return m_applyFontSize; }

    bool usesLegacyStyles() const { return m_usesLegacyStyles; }

private:
    void init(DOM::CSSStyleDeclarationImpl *, const DOM::Position &);
    bool checkForLegacyHTMLStyleChange(const DOM::CSSProperty *);
    static bool currentlyHasStyle(const DOM::Position &, const DOM::CSSProperty *);
    
    DOM::DOMString m_cssStyle;
    bool m_applyBold;
    bool m_applyItalic;
    DOM::DOMString m_applyFontColor;
    DOM::DOMString m_applyFontFace;
    DOM::DOMString m_applyFontSize;
    bool m_usesLegacyStyles;
};

//------------------------------------------------------------------------------------------
// EditCommand

class EditCommand : public Shared<EditCommand>
{
public:
    EditCommand(DOM::DocumentImpl *);
    virtual ~EditCommand();

    bool isCompositeStep() const { return m_parent != 0; }
    EditCommand *parent() const { return m_parent; }
    void setParent(EditCommand *parent) { m_parent = parent; }

    enum ECommandState { NotApplied, Applied };
    
    void apply();	
    void unapply();
    void reapply();

    virtual void doApply() = 0;
    virtual void doUnapply() = 0;
    virtual void doReapply();  // calls doApply()

    virtual EditAction editingAction() const;

    virtual DOM::DocumentImpl * const document() const { return m_document; }

    Selection startingSelection() const { return m_startingSelection; }
    Selection endingSelection() const { return m_endingSelection; }

    void setEndingSelectionNeedsLayout(bool flag=true) { m_endingSelection.setNeedsLayout(flag); }
        
    ECommandState state() const { return m_state; }
    void setState(ECommandState state) { m_state = state; }

    void setStartingSelection(const Selection &s);
    void setStartingSelection(const VisiblePosition &p);
    void setStartingSelection(const DOM::Position &p, EAffinity affinity);
    void setEndingSelection(const Selection &s);
    void setEndingSelection(const VisiblePosition &p);
    void setEndingSelection(const DOM::Position &p, EAffinity affinity);

    DOM::CSSMutableStyleDeclarationImpl *typingStyle() const { return m_typingStyle; };
    void setTypingStyle(DOM::CSSMutableStyleDeclarationImpl *);
    
    DOM::CSSMutableStyleDeclarationImpl *styleAtPosition(const DOM::Position &pos);
    
    virtual bool isInsertTextCommand() const;
    virtual bool isTypingCommand() const;
    
private:
    void assignTypingStyle(DOM::CSSMutableStyleDeclarationImpl *);

    virtual bool preservesTypingStyle() const;

    DOM::DocumentImpl *m_document;
    ECommandState m_state;
    Selection m_startingSelection;
    Selection m_endingSelection;
    DOM::CSSMutableStyleDeclarationImpl *m_typingStyle;
    EditCommand *m_parent;
};

//------------------------------------------------------------------------------------------
// CompositeEditCommand

class CompositeEditCommand : public EditCommand
{
public:
    CompositeEditCommand(DOM::DocumentImpl *);
	
    virtual void doUnapply();
    virtual void doReapply();

protected:
    //
    // sugary-sweet convenience functions to help create and apply edit commands in composite commands
    //
    void appendNode(DOM::NodeImpl *appendChild, DOM::NodeImpl *parentNode);
    void applyCommandToComposite(EditCommandPtr &);
    void applyStyle(DOM::CSSStyleDeclarationImpl *style, EditAction editingAction=EditActionChangeAttributes);
    void deleteKeyPressed();
    void deleteSelection(bool smartDelete=false, bool mergeBlocksAfterDelete=true);
    void deleteSelection(const Selection &selection, bool smartDelete=false, bool mergeBlocksAfterDelete=true);
    void deleteTextFromNode(DOM::TextImpl *node, long offset, long count);
    void inputText(const DOM::DOMString &text, bool selectInsertedText = false);
    void insertNodeAfter(DOM::NodeImpl *insertChild, DOM::NodeImpl *refChild);
    void insertNodeAt(DOM::NodeImpl *insertChild, DOM::NodeImpl *refChild, long offset);
    void insertNodeBefore(DOM::NodeImpl *insertChild, DOM::NodeImpl *refChild);
    void insertParagraphSeparator();
    void insertTextIntoNode(DOM::TextImpl *node, long offset, const DOM::DOMString &text);
    void joinTextNodes(DOM::TextImpl *text1, DOM::TextImpl *text2);
    void rebalanceWhitespace();
    void removeCSSProperty(DOM::CSSStyleDeclarationImpl *, int property);
    void removeFullySelectedNodePreservingPosition(DOM::NodeImpl *node, DOM::Position &pos);
    void removeNodeAttribute(DOM::ElementImpl *, int attribute);
    void removeChildrenInRangePreservingPosition(DOM::NodeImpl *node, int from, int to, DOM::Position &pos);
    void removeNode(DOM::NodeImpl *removeChild);
    void removeNodePreservingPosition(DOM::NodeImpl *removeChild, DOM::Position &pos);
    void removeNodePreservingChildren(DOM::NodeImpl *node);
    void replaceTextInNode(DOM::TextImpl *node, long offset, long count, const DOM::DOMString &replacementText);
    void setNodeAttribute(DOM::ElementImpl *, int attribute, const DOM::DOMString &);
    void splitTextNode(DOM::TextImpl *text, long offset);
    void splitElement(DOM::ElementImpl *element, DOM::NodeImpl *atChild);
    void mergeIdenticalElements(DOM::ElementImpl *first, DOM::ElementImpl *second);
    void wrapContentsInDummySpan(DOM::ElementImpl *element);
    void splitTextNodeContainingElement(DOM::TextImpl *text, long offset);

    void deleteInsignificantText(DOM::TextImpl *, int start, int end);
    void deleteInsignificantText(const DOM::Position &start, const DOM::Position &end);
    void deleteInsignificantTextDownstream(const DOM::Position &);

    DOM::NodeImpl *appendBlockPlaceholder(DOM::NodeImpl *);
    DOM::NodeImpl *insertBlockPlaceholder(const DOM::Position &pos);
    DOM::NodeImpl *addBlockPlaceholderIfNeeded(DOM::NodeImpl *);
    bool removeBlockPlaceholder(DOM::NodeImpl *);
    DOM::NodeImpl *findBlockPlaceholder(DOM::NodeImpl *);

    void moveParagraphContentsToNewBlockIfNecessary(const DOM::Position &);

    QValueList<EditCommandPtr> m_cmds;
};

//==========================================================================================
// Concrete commands
//------------------------------------------------------------------------------------------
// AppendNodeCommand

class AppendNodeCommand : public EditCommand
{
public:
    AppendNodeCommand(DOM::DocumentImpl *, DOM::NodeImpl *appendChild, DOM::NodeImpl *parentNode);
    virtual ~AppendNodeCommand();

    virtual void doApply();
    virtual void doUnapply();

    DOM::NodeImpl *appendChild() const { return m_appendChild; }
    DOM::NodeImpl *parentNode() const { return m_parentNode; }

private:
    DOM::NodeImpl *m_appendChild;
    DOM::NodeImpl *m_parentNode;    
};

//------------------------------------------------------------------------------------------
// ApplyStyleCommand

class ApplyStyleCommand : public CompositeEditCommand
{
public:
    enum EPropertyLevel { PropertyDefault, ForceBlockProperties };

    ApplyStyleCommand(DOM::DocumentImpl *, DOM::CSSStyleDeclarationImpl *style, EditAction editingAction=EditActionChangeAttributes, EPropertyLevel=PropertyDefault);
    virtual ~ApplyStyleCommand();
	
    virtual void doApply();
    virtual EditAction editingAction() const;

    DOM::CSSMutableStyleDeclarationImpl *style() const { return m_style; }

private:
    // style-removal helpers
    bool isHTMLStyleNode(DOM::CSSMutableStyleDeclarationImpl *, DOM::HTMLElementImpl *);
    void removeHTMLStyleNode(DOM::HTMLElementImpl *);
    void removeHTMLFontStyle(DOM::CSSMutableStyleDeclarationImpl *, DOM::HTMLElementImpl *);
    void removeCSSStyle(DOM::CSSMutableStyleDeclarationImpl *, DOM::HTMLElementImpl *);
    void removeBlockStyle(DOM::CSSMutableStyleDeclarationImpl *, const DOM::Position &start, const DOM::Position &end);
    void removeInlineStyle(DOM::CSSMutableStyleDeclarationImpl *, const DOM::Position &start, const DOM::Position &end);
    bool nodeFullySelected(DOM::NodeImpl *, const DOM::Position &start, const DOM::Position &end) const;
    bool nodeFullyUnselected(DOM::NodeImpl *node, const DOM::Position &start, const DOM::Position &end) const;
    DOM::CSSMutableStyleDeclarationImpl *extractTextDecorationStyle(DOM::NodeImpl *node);
    DOM::CSSMutableStyleDeclarationImpl *extractAndNegateTextDecorationStyle(DOM::NodeImpl *node);
    void applyTextDecorationStyle(DOM::NodeImpl *node, DOM::CSSMutableStyleDeclarationImpl *style);
    void pushDownTextDecorationStyleAroundNode(DOM::NodeImpl *node, const DOM::Position &start, const DOM::Position &end, bool force);
    void pushDownTextDecorationStyleAtBoundaries(const DOM::Position &start, const DOM::Position &end);
    
    // style-application helpers
    void applyBlockStyle(DOM::CSSMutableStyleDeclarationImpl *);
    void applyRelativeFontStyleChange(DOM::CSSMutableStyleDeclarationImpl *);
    void applyInlineStyle(DOM::CSSMutableStyleDeclarationImpl *);
    void addBlockStyleIfNeeded(DOM::CSSMutableStyleDeclarationImpl *, DOM::NodeImpl *);
    void addInlineStyleIfNeeded(DOM::CSSMutableStyleDeclarationImpl *, DOM::NodeImpl *start, DOM::NodeImpl *end);
    bool splitTextAtStartIfNeeded(const DOM::Position &start, const DOM::Position &end);
    bool splitTextAtEndIfNeeded(const DOM::Position &start, const DOM::Position &end);
    bool splitTextElementAtStartIfNeeded(const DOM::Position &start, const DOM::Position &end);
    bool splitTextElementAtEndIfNeeded(const DOM::Position &start, const DOM::Position &end);
    bool mergeStartWithPreviousIfIdentical(const DOM::Position &start, const DOM::Position &end);
    bool mergeEndWithNextIfIdentical(const DOM::Position &start, const DOM::Position &end);
    void cleanUpEmptyStyleSpans(const DOM::Position &start, const DOM::Position &end);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
高潮精品一区videoshd| 伊人婷婷欧美激情| 欧美激情综合五月色丁香小说| 日韩一区二区精品葵司在线| 在线91免费看| 久久综合狠狠综合| 久久蜜桃av一区二区天堂| 国产精品全国免费观看高清| 一区二区三区产品免费精品久久75| 一区二区三区在线视频播放| 日韩精品一二三区| 大胆欧美人体老妇| 在线国产电影不卡| 国产日韩v精品一区二区| 亚洲激情中文1区| 紧缚捆绑精品一区二区| 91看片淫黄大片一级| 久久免费电影网| 青青草国产成人av片免费| 成人伦理片在线| 精品久久久久久久久久久久包黑料| 日韩一区在线看| 国产麻豆9l精品三级站| 欧美sm极限捆绑bd| 亚洲欧美综合另类在线卡通| 国模娜娜一区二区三区| 69堂成人精品免费视频| 亚洲精品高清在线| 91丨porny丨蝌蚪视频| 国产精品女人毛片| 久久国产精品色婷婷| 日韩精品一区二区三区在线观看| 一区二区三区影院| 一本久久a久久免费精品不卡| 国产日韩三级在线| 成人免费视频免费观看| 久久久久久久网| 国产91精品一区二区| 久久久久久久精| 成人视屏免费看| 一区精品在线播放| 91九色最新地址| 亚洲成人资源在线| 日韩午夜av一区| 国产精品影视在线观看| 成人欧美一区二区三区白人| 在线观看免费一区| 美女视频黄久久| 国产精品三级在线观看| 91蝌蚪国产九色| 激情综合色播激情啊| 国产三级精品视频| 欧美日精品一区视频| 国产91露脸合集magnet | 亚洲欧美综合网| 欧美理论片在线| 成人性生交大合| 蓝色福利精品导航| 亚洲乱码中文字幕综合| 精品福利av导航| 欧美精品v日韩精品v韩国精品v| 国产精品一卡二| 亚洲一区二区三区中文字幕| 国产色产综合色产在线视频| 欧美精品日韩综合在线| 91在线观看污| 成人少妇影院yyyy| 国产高清一区日本| 久久精品国产99| 亚洲高清免费在线| 国产真实乱子伦精品视频| 亚洲国产cao| 日韩电影网1区2区| 午夜精品在线视频一区| 亚洲免费视频成人| 一区免费观看视频| 国产精品国产精品国产专区不片| 久久久亚洲精华液精华液精华液| 日韩欧美三级在线| 欧美不卡在线视频| 日韩一区和二区| 亚洲精品一区二区精华| 精品国产乱码久久久久久老虎 | 亚洲永久精品国产| 亚洲乱码日产精品bd| 综合分类小说区另类春色亚洲小说欧美| 国产精品久久看| 国产精品美女久久久久高潮| 国产精品理伦片| 亚洲女性喷水在线观看一区| 亚洲男同性恋视频| 日韩一区精品视频| 极品少妇xxxx偷拍精品少妇| 国产麻豆精品一区二区| 99精品在线观看视频| 欧美四级电影网| 26uuu色噜噜精品一区二区| 久久亚洲捆绑美女| 亚洲精品视频在线观看网站| 视频一区视频二区在线观看| 国产一区二区视频在线播放| 日本二三区不卡| 欧美va亚洲va香蕉在线| 中文字幕一区二区三| 日本成人中文字幕| 色综合欧美在线| 久久久亚洲精品石原莉奈| 亚洲成人黄色小说| 99re亚洲国产精品| www亚洲一区| 青青草原综合久久大伊人精品| 91麻豆蜜桃一区二区三区| 精品国产亚洲一区二区三区在线观看| 亚洲人成精品久久久久久| 狠狠色2019综合网| 日韩欧美成人午夜| 五月天精品一区二区三区| 一本色道久久加勒比精品| 国产日韩影视精品| 国产二区国产一区在线观看| 日韩一二三区不卡| 日本91福利区| 欧美一区二区成人| 蜜臀av一级做a爰片久久| 欧美视频在线观看一区| 亚洲最新视频在线观看| 欧美伊人精品成人久久综合97| 国产精品久久久久久久久免费桃花| 韩国三级在线一区| 国产精品欧美极品| 99久久综合精品| 亚洲一区二区av电影| 日韩一区二区三区视频在线| 美女性感视频久久| 久久日韩粉嫩一区二区三区| 国产91露脸合集magnet| 亚洲综合av网| 精品国产1区2区3区| 成人aa视频在线观看| 亚洲国产欧美在线| 欧美疯狂做受xxxx富婆| 国产在线视频不卡二| 欧美激情一区二区三区全黄| 在线观看日韩毛片| 蜜桃久久精品一区二区| 国产欧美1区2区3区| 欧洲一区在线观看| 国产河南妇女毛片精品久久久| 亚洲欧洲三级电影| 欧美精品一区二区三区蜜桃| 高清视频一区二区| 日本美女视频一区二区| 一区二区三区四区av| 国产无人区一区二区三区| 欧美日韩成人综合| 91成人网在线| 不卡电影一区二区三区| 奇米777欧美一区二区| 亚洲综合视频在线观看| 国产精品久久久久久久久搜平片| 精品国产91九色蝌蚪| 在线播放/欧美激情| 欧美日韩在线直播| 色哟哟一区二区三区| 91麻豆.com| 日本精品一区二区三区高清| 99久久精品国产观看| 成人avav在线| 91麻豆国产精品久久| av高清不卡在线| 99久久精品情趣| 91免费版在线看| 欧美日韩高清一区二区三区| 欧美精品亚洲一区二区在线播放| 欧美视频一区二区在线观看| 欧美性色黄大片| 精品日韩一区二区三区免费视频| 日韩欧美在线1卡| 久久麻豆一区二区| 一区二区三区在线观看视频| 亚洲成人手机在线| 极品少妇一区二区| 99免费精品在线观看| 欧美性极品少妇| 2023国产精品自拍| 亚洲精选视频在线| 免费观看久久久4p| 成人黄色在线网站| 日韩欧美国产一二三区| 日本一区二区三区电影| 五月综合激情日本mⅴ| 成人午夜免费视频| 日韩欧美国产综合在线一区二区三区| 久久亚洲一区二区三区四区| 亚洲精选视频免费看| 国产河南妇女毛片精品久久久 | 中文字幕视频一区二区三区久| 亚洲123区在线观看| 丰满少妇久久久久久久| 欧美日韩亚州综合|