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

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

?? jsediting.cpp

?? It is WEB browser core module with source code. Very good!
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
 * 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 "jsediting.h"

#include "cssproperties.h"
#include "htmlediting.h"
#include "khtml_part.h"
#include "qstring.h"
#include "selection.h"

#if APPLE_CHANGES
#include "KWQKHTMLPart.h"
#endif

using khtml::TypingCommand;

namespace DOM {

class DocumentImpl;

namespace {

bool supportsPasteCommand = false;

struct CommandImp {
    bool (*execFn)(KHTMLPart *part, bool userInterface, const DOMString &value);
    bool (*enabledFn)(KHTMLPart *part);
    KHTMLPart::TriState (*stateFn)(KHTMLPart *part);
    DOMString (*valueFn)(KHTMLPart *part);
};

QDict<CommandImp> createCommandDictionary();

const CommandImp *commandImp(const DOMString &command)
{
    static QDict<CommandImp> commandDictionary = createCommandDictionary();
    return commandDictionary.find(command.string());
}

} // anonymous namespace

bool JSEditor::execCommand(const DOMString &command, bool userInterface, const DOMString &value)
{
    const CommandImp *cmd = commandImp(command);
    if (!cmd)
        return false;
    KHTMLPart *part = m_doc->part();
    if (!part)
        return false;
    m_doc->updateLayout();
    return cmd->enabledFn(part) && cmd->execFn(part, userInterface, value);
}

bool JSEditor::queryCommandEnabled(const DOMString &command)
{
    const CommandImp *cmd = commandImp(command);
    if (!cmd)
        return false;
    KHTMLPart *part = m_doc->part();
    if (!part)
        return false;
    m_doc->updateLayout();
    return cmd->enabledFn(part);
}

bool JSEditor::queryCommandIndeterm(const DOMString &command)
{
    const CommandImp *cmd = commandImp(command);
    if (!cmd)
        return false;
    KHTMLPart *part = m_doc->part();
    if (!part)
        return false;
    m_doc->updateLayout();
    return cmd->stateFn(part) == KHTMLPart::mixedTriState;
}

bool JSEditor::queryCommandState(const DOMString &command)
{
    const CommandImp *cmd = commandImp(command);
    if (!cmd)
        return false;
    KHTMLPart *part = m_doc->part();
    if (!part)
        return false;
    m_doc->updateLayout();
    return cmd->stateFn(part) != KHTMLPart::falseTriState;
}

bool JSEditor::queryCommandSupported(const DOMString &command)
{
    if (!supportsPasteCommand && command.string().lower() == "paste")
        return false;
    return commandImp(command) != 0;
}

DOMString JSEditor::queryCommandValue(const DOMString &command)
{
    const CommandImp *cmd = commandImp(command);
    if (!cmd)
        return DOMString();
    KHTMLPart *part = m_doc->part();
    if (!part)
        return DOMString();
    m_doc->updateLayout();
    return cmd->valueFn(part);
}

void JSEditor::setSupportsPasteCommand(bool flag)
{
    supportsPasteCommand = flag;
}

// =============================================================================================

// Private stuff, all inside an anonymous namespace.

namespace {

bool execStyleChange(KHTMLPart *part, int propertyID, const DOMString &propertyValue)
{
    CSSMutableStyleDeclarationImpl *style = new CSSMutableStyleDeclarationImpl;
    style->setProperty(propertyID, propertyValue);
    style->ref();
    part->applyStyle(style);
    style->deref();
    return true;
}

bool execStyleChange(KHTMLPart *part, int propertyID, const char *propertyValue)
{
    return execStyleChange(part, propertyID, DOMString(propertyValue));
}

KHTMLPart::TriState stateStyle(KHTMLPart *part, int propertyID, const char *desiredValue)
{
    CSSMutableStyleDeclarationImpl *style = new CSSMutableStyleDeclarationImpl;
    style->setProperty(propertyID, desiredValue);
    style->ref();
    KHTMLPart::TriState state = part->selectionHasStyle(style);
    style->deref();
    return state;
}

bool selectionStartHasStyle(KHTMLPart *part, int propertyID, const char *desiredValue)
{
    CSSMutableStyleDeclarationImpl *style = new CSSMutableStyleDeclarationImpl;
    style->setProperty(propertyID, desiredValue);
    style->ref();
    bool hasStyle = part->selectionStartHasStyle(style);
    style->deref();
    return hasStyle;
}

DOMString valueStyle(KHTMLPart *part, int propertyID)
{
    return part->selectionStartStylePropertyValue(propertyID);
}

// =============================================================================================
//
// execCommand implementations
//

bool execBackColor(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    return execStyleChange(part, CSS_PROP_BACKGROUND_COLOR, value);
}

bool execBold(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    bool isBold = selectionStartHasStyle(part, CSS_PROP_FONT_WEIGHT, "bold");
    return execStyleChange(part, CSS_PROP_FONT_WEIGHT, isBold ? "normal" : "bold");
}

bool execCopy(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    part->copyToPasteboard();
    return true;
}

bool execCut(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    part->cutToPasteboard();
    return true;
}

bool execDelete(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    TypingCommand::deleteKeyPressed(part->xmlDocImpl(), part->selectionGranularity() == khtml::WORD);
    return true;
}

bool execForwardDelete(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    TypingCommand::forwardDeleteKeyPressed(part->xmlDocImpl());
    return true;
}

bool execFontName(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    return execStyleChange(part, CSS_PROP_FONT_FAMILY, value);
}

bool execFontSize(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    return execStyleChange(part, CSS_PROP_FONT_SIZE, value);
}

bool execFontSizeDelta(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    return execStyleChange(part, CSS_PROP__KHTML_FONT_SIZE_DELTA, value);
}

bool execForeColor(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    return execStyleChange(part, CSS_PROP_COLOR, value);
}

bool execIndent(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    // FIXME: Implement.
    return false;
}

bool execInsertLineBreak(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    TypingCommand::insertLineBreak(part->xmlDocImpl());
    return true;
}

bool execInsertParagraph(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    TypingCommand::insertParagraphSeparator(part->xmlDocImpl());
    return true;
}

bool execInsertText(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    TypingCommand::insertText(part->xmlDocImpl(), value);
    return true;
}

bool execItalic(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    bool isItalic = selectionStartHasStyle(part, CSS_PROP_FONT_STYLE, "italic");
    return execStyleChange(part, CSS_PROP_FONT_STYLE, isItalic ? "normal" : "italic");
}

bool execJustifyCenter(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    return execStyleChange(part, CSS_PROP_TEXT_ALIGN, "center");
}

bool execJustifyFull(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    return execStyleChange(part, CSS_PROP_TEXT_ALIGN, "justify");
}

bool execJustifyLeft(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    return execStyleChange(part, CSS_PROP_TEXT_ALIGN, "left");
}

bool execJustifyRight(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    return execStyleChange(part, CSS_PROP_TEXT_ALIGN, "right");
}

bool execOutdent(KHTMLPart *part, bool userInterface, const DOMString &value)
{
    // FIXME: Implement.
    return false;
}

bool execPaste(KHTMLPart *part, bool userInterface, const DOMString &value)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一级黄| av一区二区三区在线| 精品理论电影在线| 99国内精品久久| 97久久精品人人做人人爽50路| 欧美日韩免费视频| av电影天堂一区二区在线| 7777精品久久久大香线蕉| 欧美日韩一区二区电影| 日本一区二区三区四区 | 久久品道一品道久久精品| 欧美日韩美女一区二区| 欧美高清www午色夜在线视频| 欧美私模裸体表演在线观看| 欧美中文字幕不卡| 欧美日韩中文字幕精品| 国产精品护士白丝一区av| 国产精品成人免费在线| 国产美女在线精品| 99精品久久久久久| 国产精品无圣光一区二区| 国产精品伦理一区二区| 极品瑜伽女神91| 成人激情av网| 在线免费精品视频| 国产精品麻豆网站| 国产91精品久久久久久久网曝门| voyeur盗摄精品| 国产日韩欧美一区二区三区综合| 九九九久久久精品| 91精品国产aⅴ一区二区| 久久久午夜电影| 美国十次综合导航| 99精品视频免费在线观看| 精品国产sm最大网站| 亚洲三级理论片| 亚洲成人高清在线| 国产电影一区二区三区| 欧美性色综合网| 亚洲国产综合人成综合网站| 国产一区二区三区综合| 精品国产露脸精彩对白| 精品一区二区在线视频| 久久人人97超碰com| 国产高清无密码一区二区三区| 久久婷婷久久一区二区三区| 亚洲一区二区三区在线| 国内精品国产三级国产a久久| 色综合久久久久综合体桃花网| 欧美日本一区二区三区四区| 午夜精品123| 色综合久久久久综合体| 亚洲国产成人高清精品| 3atv在线一区二区三区| 久久aⅴ国产欧美74aaa| 欧美日韩精品一区二区天天拍小说| 亚洲午夜精品一区二区三区他趣| 7777精品伊人久久久大香线蕉超级流畅| 一个色妞综合视频在线观看| 国产高清在线精品| 日韩久久一区二区| 在线91免费看| 国产米奇在线777精品观看| 日韩一区欧美小说| 成人黄色大片在线观看| 一区二区三区四区蜜桃| 欧美精品国产精品| 粉嫩嫩av羞羞动漫久久久| 成人免费在线观看入口| 在线综合+亚洲+欧美中文字幕| 美国三级日本三级久久99 | 精品视频1区2区3区| 三级在线观看一区二区| 欧美人牲a欧美精品| 国产一区二区三区av电影| 亚洲视频免费在线| 欧美成人精品高清在线播放 | 中文字幕一区av| 555www色欧美视频| zzijzzij亚洲日本少妇熟睡| 亚洲一区二区精品3399| 国产嫩草影院久久久久| 欧美一区二区三区精品| 91在线高清观看| 中文字幕免费在线观看视频一区| 国产一区二区三区四| 玉米视频成人免费看| 欧美揉bbbbb揉bbbbb| 成人夜色视频网站在线观看| 国产精品人妖ts系列视频| 欧美日高清视频| av男人天堂一区| 国产一区二区在线看| 日本三级韩国三级欧美三级| 欧美v亚洲v综合ⅴ国产v| 欧美私人免费视频| 9i看片成人免费高清| 国产一区二区三区观看| 日韩成人av影视| 亚洲国产欧美日韩另类综合| 中文字幕一区二区三区蜜月| 久久理论电影网| 日韩一区二区精品在线观看| 国产一区二区三区四区五区入口| 香蕉久久夜色精品国产使用方法 | 99精品黄色片免费大全| 国产精品一区二区在线看| av在线免费不卡| 日韩电影免费在线观看网站| 欧美一级日韩免费不卡| 欧美午夜视频网站| 91免费观看国产| av在线播放不卡| 成人免费毛片嘿嘿连载视频| 国产a久久麻豆| 国产一区中文字幕| 国产一区二区三区久久悠悠色av| 狂野欧美性猛交blacked| 日韩av一二三| 久久精品国产成人一区二区三区 | 免费在线观看日韩欧美| 久久夜色精品国产噜噜av| 日韩免费高清视频| 一本色道久久综合亚洲精品按摩| 成人国产精品免费| 99久久婷婷国产综合精品电影| 99久久国产综合精品麻豆| 97久久超碰国产精品| 日本高清不卡在线观看| 精品影视av免费| 国产成人免费xxxxxxxx| 大尺度一区二区| 91丨porny丨国产入口| 成人免费高清在线| 91香蕉视频在线| 欧美私模裸体表演在线观看| 宅男在线国产精品| 久久久精品蜜桃| 亚洲欧美偷拍卡通变态| 欧美老人xxxx18| 日韩精品一区二区三区蜜臀| 久久精品亚洲一区二区三区浴池| 91捆绑美女网站| 欧美日免费三级在线| 精品国产伦一区二区三区观看方式 | 亚洲成在人线在线播放| 美女一区二区在线观看| 国产精品一卡二卡| 在线观看成人免费视频| 在线不卡a资源高清| 精品少妇一区二区三区日产乱码| 国产清纯在线一区二区www| 亚洲男人电影天堂| 日本一区中文字幕| a亚洲天堂av| 欧美福利视频导航| 国产人成亚洲第一网站在线播放| 亚洲一区二区三区不卡国产欧美| 极品尤物av久久免费看| 一本到三区不卡视频| 日韩精品一区二区三区在线观看| 国产精品夫妻自拍| 日韩福利电影在线观看| 99久久99久久精品免费看蜜桃 | 国产精品久久久久aaaa| 爽好久久久欧美精品| 福利一区福利二区| 欧美一区二区三区日韩| 国产精品久久久久久久久免费丝袜| 日韩高清不卡在线| 色综合久久中文字幕| 国产偷国产偷亚洲高清人白洁| 亚洲最新视频在线观看| 黑人精品欧美一区二区蜜桃 | 99re6这里只有精品视频在线观看| 日韩一级完整毛片| 亚洲自拍偷拍av| 成人高清免费观看| 2024国产精品| 日本中文在线一区| 欧美三电影在线| 亚洲精品综合在线| 成人爱爱电影网址| 久久女同精品一区二区| 美女视频一区二区三区| 欧美午夜精品免费| 综合久久久久久久| 成人一级片在线观看| 国产欧美日韩中文久久| 麻豆freexxxx性91精品| 欧美老肥妇做.爰bbww| 一区二区三区四区精品在线视频| 成人免费高清视频在线观看| 久久午夜色播影院免费高清| 九九久久精品视频 | 欧美一卡二卡三卡| 亚洲电影在线免费观看| 91激情在线视频| 亚洲亚洲人成综合网络| 一本久道久久综合中文字幕|