亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲精品videosex极品| 国产精品一二三四区| 亚洲欧美中日韩| 国产欧美一区二区三区鸳鸯浴| 日韩免费性生活视频播放| 欧美一区二区在线播放| 欧美一级夜夜爽| 日韩视频中午一区| 欧美成人三级电影在线| 久久无码av三级| 国产日韩欧美在线一区| 国产精品丝袜黑色高跟| 中文字幕乱码久久午夜不卡| 中文成人av在线| 亚洲精品一二三| 婷婷综合久久一区二区三区| 美女国产一区二区三区| 国产精品亚洲午夜一区二区三区 | 亚洲尤物在线视频观看| 一区二区三区免费观看| 天堂va蜜桃一区二区三区漫画版| 三级不卡在线观看| 精品一二三四区| 国产成人欧美日韩在线电影| 99久久久久免费精品国产 | 91麻豆精品国产91久久久久久久久| 欧美日韩一区在线观看| 宅男噜噜噜66一区二区66| 欧美一区二区三区啪啪| 国产日韩欧美麻豆| 亚洲综合视频在线观看| 日韩 欧美一区二区三区| 精品无人码麻豆乱码1区2区| 成人深夜在线观看| 欧美日韩免费观看一区三区| 日韩午夜电影在线观看| 国产精品免费久久久久| 一区二区三区在线播| 麻豆中文一区二区| av在线播放成人| 欧美一区二区视频网站| 国产欧美综合在线| 亚洲国产成人精品视频| 国产一区二区三区| 一本大道久久a久久综合| 日韩欧美亚洲另类制服综合在线| 日本一区二区免费在线| 亚洲r级在线视频| 国产成人av一区二区三区在线 | 日韩欧美国产综合| 国产精品久久久久久久久久免费看| 亚洲第一主播视频| 成人性生交大片免费看中文| 欧美群妇大交群中文字幕| 国产精品网曝门| 日产欧产美韩系列久久99| 成人av资源在线| 欧美一级二级在线观看| 亚洲欧美日韩在线| 国产一区啦啦啦在线观看| 欧洲日韩一区二区三区| 久久精品视频在线免费观看| 午夜av一区二区| av一区二区三区四区| 亚洲精品一区二区三区福利 | 国产高清久久久| 3d动漫精品啪啪| 亚洲色图欧美偷拍| 韩国精品免费视频| 欧美另类一区二区三区| 亚洲人成电影网站色mp4| 寂寞少妇一区二区三区| 欧美男同性恋视频网站| 一区二区中文视频| 国产酒店精品激情| 日韩欧美第一区| 亚洲成a人v欧美综合天堂 | 欧美一区2区视频在线观看| 亚洲欧美在线视频观看| 国产高清在线观看免费不卡| 91精品婷婷国产综合久久| 亚洲综合色网站| 一本色道a无线码一区v| 中文字幕一区二区三区在线观看| 韩日欧美一区二区三区| 91麻豆精品91久久久久久清纯| 亚洲一区二区在线视频| av中文字幕在线不卡| 国产视频一区二区在线| 国内外成人在线| 日韩一级大片在线| 日韩av午夜在线观看| 欧美日韩成人综合天天影院| 亚洲高清一区二区三区| 91国产成人在线| 一区二区三区四区高清精品免费观看 | 欧美系列亚洲系列| 洋洋成人永久网站入口| 一本色道久久加勒比精品| 亚洲视频每日更新| 99久久国产免费看| 国产精品电影院| 国产91富婆露脸刺激对白| 久久久久国产一区二区三区四区| 国内精品久久久久影院色| 2023国产精品| 高清久久久久久| 国产区在线观看成人精品| 成人美女视频在线看| 最新国产精品久久精品| 色婷婷国产精品久久包臀| 一区二区免费视频| 欧美精品久久天天躁| 肉色丝袜一区二区| 日韩精品中午字幕| 国产精品一区一区| 国产清纯美女被跳蛋高潮一区二区久久w | 亚洲制服丝袜av| 精品1区2区3区| 七七婷婷婷婷精品国产| 日韩精品一区二区三区老鸭窝| 韩日av一区二区| 久久久久国产一区二区三区四区 | 久久精品一区二区三区不卡牛牛| 国产精品小仙女| 日韩一区有码在线| 欧洲日韩一区二区三区| 日韩成人精品视频| 精品久久人人做人人爰| 国产福利一区二区三区视频 | 国产成人超碰人人澡人人澡| 中文字幕亚洲电影| 欧美视频一二三区| 久久精品国产免费| 中文字幕国产一区| 色综合天天性综合| 日韩av成人高清| 亚洲国产高清在线| 欧美偷拍一区二区| 韩国毛片一区二区三区| 亚洲欧洲av色图| 在线综合视频播放| 国产综合久久久久久鬼色| 中文字幕亚洲一区二区av在线| 欧美日韩一卡二卡三卡| 国产乱妇无码大片在线观看| 亚洲女人****多毛耸耸8| 91精品国产色综合久久不卡蜜臀| 国产美女精品在线| 一区二区三区精品在线观看| 欧美大白屁股肥臀xxxxxx| 成人h动漫精品一区二区| 日韩电影免费在线观看网站| 国产精品丝袜一区| 欧美一区二区观看视频| 波多野结衣中文字幕一区二区三区| 亚洲成av人片一区二区三区| 久久久久国产一区二区三区四区| 欧美丝袜丝交足nylons图片| 国内成人免费视频| 亚洲成人av电影在线| 国产欧美精品一区aⅴ影院 | 国产丝袜欧美中文另类| 欧美日韩一级二级三级| 国产成人午夜精品影院观看视频 | 日韩午夜激情电影| 91小视频在线观看| 久久国产精品一区二区| 亚洲一区在线播放| 国产精品久久久久久久久免费丝袜| 91精品欧美一区二区三区综合在| 99免费精品在线| 国产一区二区三区在线观看免费 | 91网站最新地址| 国产精品1区2区| 日韩高清不卡一区二区三区| 依依成人综合视频| 日本一区二区视频在线| 欧美电影免费提供在线观看| 欧美在线观看视频一区二区三区| 成人中文字幕电影| 精品一二三四区| 日韩精品午夜视频| 一区2区3区在线看| 中文字幕亚洲一区二区av在线| 久久久精品影视| 欧美成人a∨高清免费观看| 欧美美女视频在线观看| 91福利精品视频| 99久久免费视频.com| 丁香桃色午夜亚洲一区二区三区| 久久激五月天综合精品| 日韩av一区二区三区四区| 亚洲第一狼人社区| 夜夜嗨av一区二区三区中文字幕 | 成人丝袜18视频在线观看| 国产精品一区二区久激情瑜伽| 久久99深爱久久99精品| 91极品美女在线| 不卡视频一二三四|