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

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

?? htmlediting.cpp

?? It is WEB browser core module with source code. Very good!
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
}

void EditCommandPtr::setParent(const EditCommandPtr &cmd) const
{
    IF_IMPL_NULL_RETURN;
    get()->setParent(cmd.get());
}

EditCommandPtr &EditCommandPtr::emptyCommand()
{
    static EditCommandPtr m_emptyCommand;
    return m_emptyCommand;
}

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

StyleChange::StyleChange(CSSStyleDeclarationImpl *style, ELegacyHTMLStyles usesLegacyStyles)
    : m_applyBold(false), m_applyItalic(false), m_usesLegacyStyles(usesLegacyStyles)
{
    init(style, Position());
}

StyleChange::StyleChange(CSSStyleDeclarationImpl *style, const Position &position, ELegacyHTMLStyles usesLegacyStyles)
    : m_applyBold(false), m_applyItalic(false), m_usesLegacyStyles(usesLegacyStyles)
{
    init(style, position);
}

void StyleChange::init(CSSStyleDeclarationImpl *style, const Position &position)
{
    style->ref();
    CSSMutableStyleDeclarationImpl *mutableStyle = style->makeMutable();
    mutableStyle->ref();
    style->deref();
    
    QString styleText("");

    QValueListConstIterator<CSSProperty> end;
    for (QValueListConstIterator<CSSProperty> it = mutableStyle->valuesIterator(); it != end; ++it) {
        const CSSProperty *property = &*it;

        // If position is empty or the position passed in already has the 
        // style, just move on.
        if (position.isNotNull() && currentlyHasStyle(position, property))
            continue;
        
        // If needed, figure out if this change is a legacy HTML style change.
        if (m_usesLegacyStyles && checkForLegacyHTMLStyleChange(property))
            continue;

        // Add this property

        if (property->id() == CSS_PROP__KHTML_TEXT_DECORATIONS_IN_EFFECT) {
            // we have to special-case text decorations
            CSSProperty alteredProperty = CSSProperty(CSS_PROP_TEXT_DECORATION, property->value(), property->isImportant());
            styleText += alteredProperty.cssText().string();
        } else {
            styleText += property->cssText().string();
        }
    }

    mutableStyle->deref();

    // Save the result for later
    m_cssStyle = styleText.stripWhiteSpace();
}

StyleChange::ELegacyHTMLStyles StyleChange::styleModeForParseMode(bool isQuirksMode)
{
    return isQuirksMode ? UseLegacyHTMLStyles : DoNotUseLegacyHTMLStyles;
}

bool StyleChange::checkForLegacyHTMLStyleChange(const CSSProperty *property)
{
    if (!property || !property->value()) {
        return false;
    }
    
    DOMString valueText(property->value()->cssText());
    switch (property->id()) {
        case CSS_PROP_FONT_WEIGHT:
            if (strcasecmp(valueText, "bold") == 0) {
                m_applyBold = true;
                return true;
            }
            break;
        case CSS_PROP_FONT_STYLE:
            if (strcasecmp(valueText, "italic") == 0 || strcasecmp(valueText, "oblique") == 0) {
                m_applyItalic = true;
                return true;
            }
            break;
        case CSS_PROP_COLOR: {
            QColor color(CSSParser::parseColor(valueText));
            m_applyFontColor = color.name();
            return true;
        }
        case CSS_PROP_FONT_FAMILY:
            m_applyFontFace = valueText;
            return true;
        case CSS_PROP_FONT_SIZE:
            if (property->value()->cssValueType() == CSSValue::CSS_PRIMITIVE_VALUE) {
                CSSPrimitiveValueImpl *value = static_cast<CSSPrimitiveValueImpl *>(property->value());
                float number = value->getFloatValue(CSSPrimitiveValue::CSS_PX);
                if (number <= 9)
                    m_applyFontSize = "1";
                else if (number <= 10)
                    m_applyFontSize = "2";
                else if (number <= 13)
                    m_applyFontSize = "3";
                else if (number <= 16)
                    m_applyFontSize = "4";
                else if (number <= 18)
                    m_applyFontSize = "5";
                else if (number <= 24)
                    m_applyFontSize = "6";
                else
                    m_applyFontSize = "7";
                // Huge quirk in Microsft Entourage is that they understand CSS font-size, but also write 
                // out legacy 1-7 values in font tags (I guess for mailers that are not CSS-savvy at all, 
                // like Eudora). Yes, they write out *both*. We need to write out both as well. Return false.
                return false; 
            }
            else {
                // Can't make sense of the number. Put no font size.
                return true;
            }
    }
    return false;
}

bool StyleChange::currentlyHasStyle(const Position &pos, const CSSProperty *property)
{
    ASSERT(pos.isNotNull());
    CSSComputedStyleDeclarationImpl *style = pos.computedStyle();
    ASSERT(style);
    style->ref();
    CSSValueImpl *value = style->getPropertyCSSValue(property->id(), DoNotUpdateLayout);
    style->deref();
    if (!value)
        return false;
    value->ref();
    bool result = strcasecmp(value->cssText(), property->value()->cssText()) == 0;
    value->deref();
    return result;
}

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

EditCommand::EditCommand(DocumentImpl *document) 
    : m_document(document), m_state(NotApplied), m_typingStyle(0), m_parent(0)
{
    ASSERT(m_document);
    ASSERT(m_document->part());
    m_document->ref();
    m_startingSelection = m_document->part()->selection();
    m_endingSelection = m_startingSelection;

    m_document->part()->setSelection(Selection(), false, true);
}

EditCommand::~EditCommand()
{
    ASSERT(m_document);
    m_document->deref();
    if (m_typingStyle)
        m_typingStyle->deref();
}

void EditCommand::apply()
{
    ASSERT(m_document);
    ASSERT(m_document->part());
    ASSERT(state() == NotApplied);
 
    KHTMLPart *part = m_document->part();

    ASSERT(part->selection().isNone());

    doApply();
    
    m_state = Applied;

    // FIXME: Improve typing style.
    // See this bug: <rdar://problem/3769899> Implementation of typing style needs improvement
    if (!preservesTypingStyle())
        setTypingStyle(0);

    if (!isCompositeStep()) {
        document()->updateLayout();
        EditCommandPtr cmd(this);
        part->appliedEditing(cmd);
    }
}

void EditCommand::unapply()
{
    ASSERT(m_document);
    ASSERT(m_document->part());
    ASSERT(state() == Applied);

    bool topLevel = !isCompositeStep();
 
    KHTMLPart *part = m_document->part();

    if (topLevel) {
        part->setSelection(Selection(), false, true);
    }
    ASSERT(part->selection().isNone());
    
    doUnapply();
    
    m_state = NotApplied;

    if (topLevel) {
        document()->updateLayout();
        EditCommandPtr cmd(this);
        part->unappliedEditing(cmd);
    }
}

void EditCommand::reapply()
{
    ASSERT(m_document);
    ASSERT(m_document->part());
    ASSERT(state() == NotApplied);
    
    bool topLevel = !isCompositeStep();
 
    KHTMLPart *part = m_document->part();

    if (topLevel) {
        part->setSelection(Selection(), false, true);
    }
    ASSERT(part->selection().isNone());
    
    doReapply();
    
    m_state = Applied;

    if (topLevel) {
        document()->updateLayout();
        EditCommandPtr cmd(this);
        part->reappliedEditing(cmd);
    }
}

void EditCommand::doReapply()
{
    doApply();
}

EditAction EditCommand::editingAction() const
{
    return EditActionUnspecified;
}

void EditCommand::setStartingSelection(const Selection &s)
{
    for (EditCommand *cmd = this; cmd; cmd = cmd->m_parent)
        cmd->m_startingSelection = s;
}

void EditCommand::setStartingSelection(const VisiblePosition &p)
{
    Selection s = Selection(p);
    for (EditCommand *cmd = this; cmd; cmd = cmd->m_parent)
        cmd->m_startingSelection = s;
}

void EditCommand::setStartingSelection(const Position &p, EAffinity affinity)
{
    Selection s = Selection(p, affinity);
    for (EditCommand *cmd = this; cmd; cmd = cmd->m_parent)
        cmd->m_startingSelection = s;
}

void EditCommand::setEndingSelection(const Selection &s)
{
    for (EditCommand *cmd = this; cmd; cmd = cmd->m_parent)
        cmd->m_endingSelection = s;
}

void EditCommand::setEndingSelection(const VisiblePosition &p)
{
    Selection s = Selection(p);
    for (EditCommand *cmd = this; cmd; cmd = cmd->m_parent)
        cmd->m_endingSelection = s;
}

void EditCommand::setEndingSelection(const Position &p, EAffinity affinity)
{
    Selection s = Selection(p, affinity);
    for (EditCommand *cmd = this; cmd; cmd = cmd->m_parent)
        cmd->m_endingSelection = s;
}

void EditCommand::assignTypingStyle(CSSMutableStyleDeclarationImpl *style)
{
    if (m_typingStyle == style)
        return;
        
    CSSMutableStyleDeclarationImpl *old = m_typingStyle;
    m_typingStyle = style;
    if (m_typingStyle)
        m_typingStyle->ref();
    if (old)
        old->deref();
}

void EditCommand::setTypingStyle(CSSMutableStyleDeclarationImpl *style)
{
    // FIXME: Improve typing style.
    // See this bug: <rdar://problem/3769899> Implementation of typing style needs improvement
    for (EditCommand *cmd = this; cmd; cmd = cmd->m_parent)
        cmd->assignTypingStyle(style);
}

bool EditCommand::preservesTypingStyle() const
{
    return false;
}

bool EditCommand::isInsertTextCommand() const
{
    return false;
}

bool EditCommand::isTypingCommand() const
{
    return false;
}

CSSMutableStyleDeclarationImpl *EditCommand::styleAtPosition(const Position &pos)
{
    CSSComputedStyleDeclarationImpl *computedStyle = pos.computedStyle();
    computedStyle->ref();
    CSSMutableStyleDeclarationImpl *style = computedStyle->copyInheritableProperties();
    computedStyle->deref();
 
    // FIXME: Improve typing style.
    // See this bug: <rdar://problem/3769899> Implementation of typing style needs improvement
    CSSMutableStyleDeclarationImpl *typingStyle = document()->part()->typingStyle();
    if (typingStyle)
        style->merge(typingStyle);
    
    return style;
}


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

CompositeEditCommand::CompositeEditCommand(DocumentImpl *document) 
    : EditCommand(document)
{
}

void CompositeEditCommand::doUnapply()
{
    if (m_cmds.count() == 0) {
        return;
    }
    
    for (int i = m_cmds.count() - 1; i >= 0; --i)
        m_cmds[i]->unapply();

    setState(NotApplied);
}

void CompositeEditCommand::doReapply()
{
    if (m_cmds.count() == 0) {
        return;
    }

    for (QValueList<EditCommandPtr>::ConstIterator it = m_cmds.begin(); it != m_cmds.end(); ++it)
        (*it)->reapply();

    setState(Applied);
}

//
// sugary-sweet convenience functions to help create and apply edit commands in composite commands
//
void CompositeEditCommand::applyCommandToComposite(EditCommandPtr &cmd)
{
    cmd.setStartingSelection(endingSelection());
    cmd.setEndingSelection(endingSelection());
    cmd.setParent(this);
    cmd.apply();
    m_cmds.append(cmd);
}

void CompositeEditCommand::applyStyle(CSSStyleDeclarationImpl *style, EditAction editingAction)
{
    EditCommandPtr cmd(new ApplyStyleCommand(document(), style, editingAction));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三区视频在线 | 99久久久久久99| 欧美亚洲高清一区二区三区不卡| 51精品久久久久久久蜜臀| 国产亚洲午夜高清国产拍精品| 亚洲色图制服丝袜| 国产在线乱码一区二区三区| 色噜噜狠狠成人中文综合| 精品国产凹凸成av人网站| 亚洲激情男女视频| 国产精品系列在线播放| 3atv一区二区三区| 一区二区三区.www| zzijzzij亚洲日本少妇熟睡| www一区二区| 久久国产夜色精品鲁鲁99| 欧美久久免费观看| 一区二区高清免费观看影视大全 | 久久精品视频免费观看| 日韩国产成人精品| 欧美日韩一区二区三区不卡| 最新国产成人在线观看| 国产不卡视频在线播放| 精品国一区二区三区| 日精品一区二区三区| 欧美日韩一区二区三区四区五区| 亚洲免费在线观看视频| 白白色亚洲国产精品| 欧美国产成人精品| 国产成人在线免费| 久久久99久久| 国产电影一区在线| 久久精品一区二区三区不卡牛牛| 久久99蜜桃精品| 欧美不卡激情三级在线观看| 美洲天堂一区二卡三卡四卡视频| 欧美女孩性生活视频| 亚洲一区二区精品3399| 精品视频123区在线观看| 亚洲成在人线在线播放| 欧美日韩久久久久久| 日精品一区二区三区| 欧美精品丝袜久久久中文字幕| 午夜一区二区三区视频| 欧美一区二区视频网站| 精品一区二区三区免费毛片爱| www成人在线观看| 国产mv日韩mv欧美| 日韩理论片在线| 欧美日韩欧美一区二区| 日精品一区二区三区| 精品国免费一区二区三区| 懂色av一区二区在线播放| 亚洲欧美自拍偷拍色图| 欧美日韩亚洲综合在线 | 丁香网亚洲国际| 国产精品传媒在线| 欧美三级中文字幕| 免费在线观看成人| 国产午夜精品福利| 色哟哟国产精品| 日本视频一区二区三区| 久久久久久久一区| 在线观看日韩国产| 亚洲国产乱码最新视频 | 亚洲精品成人悠悠色影视| 欧美精品18+| 国产成人在线影院| 亚洲国产精品欧美一二99| 精品国产成人在线影院| 成人免费视频视频| 日本午夜一区二区| 国产精品午夜在线| 宅男噜噜噜66一区二区66| 国产成人亚洲综合色影视| 亚洲成人手机在线| 欧美国产日韩精品免费观看| 欧美精品日日鲁夜夜添| 成人国产精品免费观看动漫| 亚洲国产精品一区二区www| 久久久久国产成人精品亚洲午夜| 欧美羞羞免费网站| 国产美女在线观看一区| 亚洲成人tv网| 中文字幕五月欧美| 精品国产乱码久久久久久图片| 一本久久a久久免费精品不卡| 狠狠色狠狠色综合| 日韩国产欧美在线观看| 欧美激情中文不卡| 欧美刺激脚交jootjob| 欧美午夜一区二区三区免费大片| 高清国产一区二区| 久久精品免费观看| 午夜精品福利在线| 亚洲乱码国产乱码精品精小说 | 国产激情视频一区二区在线观看 | 不卡的电影网站| 国产最新精品免费| 日本强好片久久久久久aaa| 亚洲免费色视频| 国产精品美女一区二区在线观看| 精品久久久网站| 91精品国产色综合久久ai换脸| 欧美在线|欧美| 91浏览器打开| eeuss鲁一区二区三区| 国产高清久久久久| 国产成人亚洲综合色影视| 国产一二精品视频| 国产一区二区主播在线| 国内精品久久久久影院色| 蜜桃久久精品一区二区| 蜜桃一区二区三区四区| 日本在线不卡视频一二三区| 性欧美大战久久久久久久久| 亚洲综合丁香婷婷六月香| 亚洲综合在线电影| 夜夜嗨av一区二区三区中文字幕 | 三级不卡在线观看| 日韩成人免费电影| 日韩av一区二区在线影视| 天天综合色天天综合| 日本欧美一区二区三区| 另类小说一区二区三区| 精品一区二区日韩| 成人一级黄色片| 色综合久久精品| 欧美性大战久久久| 69精品人人人人| 久久久久国色av免费看影院| 国产精品国产馆在线真实露脸 | 久久疯狂做爰流白浆xx| 国产一区二区三区久久久| 成人v精品蜜桃久久一区| 一本色道亚洲精品aⅴ| 欧美精品在欧美一区二区少妇| 日韩视频一区二区三区| 国产亚洲欧美日韩日本| 亚洲激情欧美激情| 日本不卡的三区四区五区| 韩国成人精品a∨在线观看| 精品在线亚洲视频| 亚洲无线码一区二区三区| 久久av中文字幕片| 国产一区啦啦啦在线观看| 懂色av一区二区在线播放| 欧美午夜不卡视频| 欧美一区二区免费视频| 精品乱码亚洲一区二区不卡| 欧美成人三级在线| 亚洲欧美中日韩| 亚洲成人777| 另类小说欧美激情| 成人精品视频.| 欧美精品少妇一区二区三区| 久久这里只有精品视频网| 久久久久久一二三区| 亚洲视频1区2区| 久久超碰97人人做人人爱| 国产美女娇喘av呻吟久久| 99久久免费国产| 欧美高清性hdvideosex| 国产精品不卡一区二区三区| 亚洲已满18点击进入久久| 久久99九九99精品| 不卡高清视频专区| 欧美一区二区三区四区在线观看| 欧美午夜寂寞影院| 久久久久久久久久久黄色| 天堂在线一区二区| 国产suv精品一区二区三区 | 久久99精品视频| 粉嫩久久99精品久久久久久夜| 欧美精品黑人性xxxx| 国产精品久久夜| 日本va欧美va瓶| av激情亚洲男人天堂| 久久精品夜夜夜夜久久| 亚洲成人av在线电影| 国产成人激情av| 欧美丰满高潮xxxx喷水动漫| 亚洲乱码国产乱码精品精小说 | 久久五月婷婷丁香社区| 亚洲丝袜制服诱惑| 精品一区二区三区免费观看| 欧美在线观看18| 中文字幕不卡在线播放| 男男gaygay亚洲| 日韩午夜在线播放| 亚洲一区二区三区四区五区黄| 国产.欧美.日韩| 精品日韩在线观看| 蜜臀精品一区二区三区在线观看| 色噜噜久久综合| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 久久久精品综合| 麻豆91在线观看| 欧美一区二区三区电影| 中文字幕第一区|