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

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

?? cssstyleselector.cpp

?? It is WEB browser core module with source code. Very good!
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
        {
            // FIXME: This match needs to know how to backtrack and be non-deterministic.
            bool found = false;
            while(!found)
            {
        n = n->parentNode();
                if(!n || !n->isElementNode()) return false;
                ElementImpl *elem = static_cast<ElementImpl *>(n);
                if (checkOneSelector(sel, elem)) found = true;
            }
            break;
        }
        case CSSSelector::Child:
        {
            n = n->parentNode();
            if (!strictParsing)
                while (n && n->implicitNode()) n = n->parentNode();
            if(!n || !n->isElementNode()) return false;
            ElementImpl *elem = static_cast<ElementImpl *>(n);
            if (!checkOneSelector(sel, elem)) return false;
            break;
        }
        case CSSSelector::Sibling:
        {
            n = n->previousSibling();
        while( n && !n->isElementNode() )
        n = n->previousSibling();
            if( !n ) return false;
            ElementImpl *elem = static_cast<ElementImpl *>(n);
            if (!checkOneSelector(sel, elem)) return false;
            break;
        }
        case CSSSelector::SubSelector:
    {
            if (onlyHoverActive)
                onlyHoverActive = (sel->match == CSSSelector::Pseudo &&
                                   (sel->pseudoType() == CSSSelector::PseudoHover ||
                                    sel->pseudoType() == CSSSelector::PseudoActive));

        //kdDebug() << "CSSOrderedRule::checkSelector" << endl;
        ElementImpl *elem = static_cast<ElementImpl *>(n);
        // a selector is invalid if something follows :first-xxx
        if (dynamicPseudo != RenderStyle::NOPSEUDO)
        return false;
        if (!checkOneSelector(sel, elem)) return false;
        //kdDebug() << "CSSOrderedRule::checkSelector: passed" << endl;
        break;
    }
        }
        relation = sel->relation;
    }

    if (subject && havePseudo && dynamicPseudo != pseudoStyle)
        return false;

    // disallow *:hover, *:active, and *:hover:active except for links
    if (onlyHoverActive && subject) {
        if (pseudoState == PseudoUnknown)
            checkPseudoState(e);

        if (pseudoState == PseudoNone) {
            if (!affectedByHover && style->affectedByHoverRules())
                style->setAffectedByHoverRules(false);
            if (!affectedByActive && style->affectedByActiveRules())
                style->setAffectedByActiveRules(false);
            return false;
        }
    }

    return true;
}

bool CSSStyleSelector::checkOneSelector(DOM::CSSSelector *sel, DOM::ElementImpl *e)
{
    if(!e)
        return false;

    if (sel->tag != anyQName) {
        int eltID = e->id();
        Q_UINT16 localName = localNamePart(eltID);
        Q_UINT16 ns = namespacePart(eltID);
        Q_UINT16 selLocalName = localNamePart(sel->tag);
        Q_UINT16 selNS = namespacePart(sel->tag);

        if (localName <= ID_LAST_TAG && e->isHTMLElement())
            ns = xhtmlNamespace; // FIXME: Really want to move away from this complicated hackery and just
                                 // switch tags and attr names over to AtomicStrings.

        if ((selLocalName != anyLocalName && localName != selLocalName) ||
            (selNS != anyNamespace && ns != selNS))
            return false;
    }

    if (sel->attr) {
        if (sel->match == CSSSelector::Class) {
            if (!e->hasClass())
                return false;
            for (const AtomicStringList* c = e->getClassList(); c; c = c->next())
                if (c->string() == sel->value)
                    return true;
            return false;
        }
        else if (sel->match == CSSSelector::Id)
            return e->hasID() && e->getIDAttribute() == sel->value;
        else if (style && (e != element || !htmlElement || !htmlElement->isMappedAttribute(sel->attr)))
            style->setAffectedByAttributeSelectors();

        const AtomicString& value = e->getAttribute(sel->attr);
        if (value.isNull()) return false; // attribute is not set

        switch(sel->match) {
        case CSSSelector::Exact:
        if ((isXMLDoc && sel->value != value) ||
                (!isXMLDoc && !equalsIgnoreCase(sel->value, value)))
                return false;
            break;
        case CSSSelector::List:
        {
            int spacePos = value.find(' ', 0);
            if (spacePos == -1) {
                // There is no list, just a single item.  We can avoid
                // allocing QStrings and just treat this as an exact
                // match check.
                if ((isXMLDoc && sel->value != value) ||
                    (!isXMLDoc && !equalsIgnoreCase(sel->value, value)))
                    return false;
                break;
            }

            // The selector's value can't contain a space, or it's totally bogus.
            spacePos = sel->value.find(' ');
            if (spacePos != -1)
                return false;

            QString str = value.string();
            QString selStr = sel->value.string();
            int startSearchAt = 0;
            while (true) {
                int foundPos = str.find(selStr, startSearchAt, isXMLDoc);
                if (foundPos == -1) return false;
                if (foundPos == 0 || str[foundPos-1] == ' ') {
                    uint endStr = foundPos + selStr.length();
                    if (endStr == str.length() || str[endStr] == ' ')
                        break; // We found a match.
                }

                // No match.  Keep looking.
                startSearchAt = foundPos + 1;
            }

            break;
        }
        case CSSSelector::Contain:
        {
            //kdDebug( 6080 ) << "checking for contains match" << endl;
            QString str = value.string();
            QString selStr = sel->value.string();
            int pos = str.find(selStr, 0, isXMLDoc);
            if(pos == -1) return false;
            break;
        }
        case CSSSelector::Begin:
        {
            //kdDebug( 6080 ) << "checking for beginswith match" << endl;
            QString str = value.string();
            QString selStr = sel->value.string();
            int pos = str.find(selStr, 0, isXMLDoc);
            if(pos != 0) return false;
            break;
        }
        case CSSSelector::End:
        {
            //kdDebug( 6080 ) << "checking for endswith match" << endl;
            QString str = value.string();
            QString selStr = sel->value.string();
        if (isXMLDoc && !str.endsWith(selStr)) return false;
        if (!isXMLDoc) {
            int pos = str.length() - selStr.length();
        if (pos < 0 || pos != str.find(selStr, pos, false) )
            return false;
        }
            break;
        }
        case CSSSelector::Hyphen:
        {
            //kdDebug( 6080 ) << "checking for hyphen match" << endl;
            QString str = value.string();
            QString selStr = sel->value.string();
            if(str.length() < selStr.length()) return false;
            // Check if str begins with selStr:
            if(str.find(selStr, 0, isXMLDoc) != 0) return false;
            // It does. Check for exact match or following '-':
            if(str.length() != selStr.length()
                && str[selStr.length()] != '-') return false;
            break;
        }
        default:
            break;
        }
    }
    if(sel->match == CSSSelector::Pseudo)
    {
        // Pseudo elements. We need to check first child here. No dynamic pseudo
        // elements for the moment
//  kdDebug() << "CSSOrderedRule::pseudo " << value << endl;
    switch (sel->pseudoType()) {
            case CSSSelector::PseudoEmpty:
                if (!e->firstChild())
                    return true;
                break;
            case CSSSelector::PseudoFirstChild: {
                // first-child matches the first child that is an element!
                if (e->parentNode()) {
                    DOM::NodeImpl* n = e->previousSibling();
                    while ( n && !n->isElementNode() )
                        n = n->previousSibling();
                    if ( !n )
                        return true;
                }
                break;
            }
            case CSSSelector::PseudoLastChild: {
                // last-child matches the last child that is an element!
                if (e->parentNode()) {
                    DOM::NodeImpl* n = e->nextSibling();
                    while ( n && !n->isElementNode() )
                        n = n->nextSibling();
                    if ( !n )
                        return true;
                }
                break;
            }
            case CSSSelector::PseudoOnlyChild: {
                // If both first-child and last-child apply, then only-child applies.
                if (e->parentNode()) {
                    DOM::NodeImpl* n = e->previousSibling();
                    while ( n && !n->isElementNode() )
                        n = n->previousSibling();
                    if ( !n ) {
                        n = e->nextSibling();
                        while ( n && !n->isElementNode() )
                            n = n->nextSibling();
                        if ( !n )
                            return true;
                    }
                }
                break;
            }
            case CSSSelector::PseudoFirstLine:
                if ( subject ) {
                    dynamicPseudo=RenderStyle::FIRST_LINE;
                    return true;
                }
                break;
            case CSSSelector::PseudoFirstLetter:
                if ( subject ) {
                    dynamicPseudo=RenderStyle::FIRST_LETTER;
                    return true;
                }
                break;
            case CSSSelector::PseudoTarget:
                if (e == e->getDocument()->getCSSTarget())
                    return true;
                break;
            case CSSSelector::PseudoAnyLink:
                if (pseudoState == PseudoUnknown)
                    checkPseudoState(e, false);
                if (pseudoState == PseudoAnyLink || pseudoState == PseudoLink || pseudoState == PseudoVisited)
                    return true;
                break;
            case CSSSelector::PseudoLink:
                if ( pseudoState == PseudoUnknown || pseudoState == PseudoAnyLink )
                    checkPseudoState( e );
                if ( pseudoState == PseudoLink )
                    return true;
                break;
            case CSSSelector::PseudoVisited:
                if ( pseudoState == PseudoUnknown || pseudoState == PseudoAnyLink )
                    checkPseudoState( e );
                if ( pseudoState == PseudoVisited )
                    return true;
                break;
            case CSSSelector::PseudoHover: {
                // If we're in quirks mode, then hover should never match anchors with no
                // href.  This is important for sites like wsj.com.
                if (strictParsing || e->id() != ID_A || e->hasAnchor()) {
                    if (element == e && style)
                        style->setAffectedByHoverRules(true);
                    if (e->renderer()) {
                        if (element != e)
                            e->renderer()->style()->setAffectedByHoverRules(true);
                        if (e->renderer()->mouseInside())
                            return true;
                    }
                }
                break;
            }
            case CSSSelector::PseudoDrag: {
                if (element == e && style)
                    style->setAffectedByDragRules(true);
                if (e->renderer()) {
                    if (element != e)
                        e->renderer()->style()->setAffectedByDragRules(true);
                    if (e->renderer()->isDragging())
                        return true;
                }
                break;
            }
            case CSSSelector::PseudoFocus:
                if (e && e->focused()) {
                    return true;
                }
                break;
            case CSSSelector::PseudoActive:
                // If we're in quirks mode, then :active should never match anchors with no
                // href.
                if (strictParsing || e->id() != ID_A || e->hasAnchor()) {
                    if (element == e && style)
                        style->setAffectedByActiveRules(true);
                    else if (e->renderer())
                        e->renderer()->style()->setAffectedByActiveRules(true);
                    if (e->active())
                        return true;
                }
                break;
            case CSSSelector::PseudoRoot:
                if (e == e->getDocument()->documentElement())
                    return true;
                break;
            case CSSSelector::PseudoNot: {
                // check the simple selector
                for (CSSSelector* subSel = sel->simpleSelector; subSel;
                     subSel = subSel->tagHistory) {
                    // :not cannot nest.  I don't really know why this is a restriction in CSS3,
                    // but it is, so let's honor it.
                    if (subSel->simpleSelector)
                        break;
                    if (!checkOneSelector(subSel, e))
                        return true;
                }
                break;
            }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级乱人伦电影| 久久久777精品电影网影网| 日韩你懂的在线观看| 国产精品看片你懂得| 日韩黄色在线观看| 99re这里只有精品视频首页| 欧美一级二级三级乱码| 亚洲国产高清在线观看视频| 亚洲1区2区3区4区| 91在线无精精品入口| 久久精品人人做人人爽人人| 香蕉久久夜色精品国产使用方法| 高潮精品一区videoshd| 日韩欧美国产一二三区| 亚洲综合丝袜美腿| 99久久99久久久精品齐齐| 久久精品视频免费观看| 精品一区二区免费在线观看| 欧美人牲a欧美精品| 一区二区三区色| 99国产一区二区三精品乱码| 亚洲国产高清在线观看视频| 国产精品亚洲成人| 精品成人私密视频| 精品无码三级在线观看视频| 日韩精品最新网址| 男男视频亚洲欧美| 欧美一区二区在线播放| 婷婷综合五月天| 欧美日韩国产小视频在线观看| 亚洲制服丝袜av| 在线免费观看日韩欧美| 一区二区成人在线视频| 欧美性生交片4| 午夜精品久久久久久久久久久| 日本福利一区二区| 亚洲午夜在线电影| 欧美特级限制片免费在线观看| 亚洲最大色网站| 91精选在线观看| 人人爽香蕉精品| 精品国产一二三区| 高潮精品一区videoshd| 亚洲免费色视频| 欧美日韩在线播放三区| 日韩黄色片在线观看| 日韩欧美激情四射| 国产精品一区在线观看乱码| 中文字幕亚洲在| 色老头久久综合| 午夜久久久久久久久| 欧美一区二区三区男人的天堂| 久久99精品久久久| 中文字幕一区二区在线观看| 成人中文字幕在线| 一区二区三区欧美日| 91精品国产免费久久综合| 国产综合久久久久久久久久久久| 国产精品午夜在线观看| 色婷婷精品久久二区二区蜜臂av| 婷婷丁香激情综合| 精品国产乱码久久久久久久久| 99在线视频精品| 日韩国产精品久久久久久亚洲| 精品成人私密视频| 在线一区二区三区四区五区| 天天操天天干天天综合网| 精品少妇一区二区| 一本久久精品一区二区| 麻豆免费精品视频| 国产精品夫妻自拍| 日韩欧美国产电影| 色香蕉久久蜜桃| 极品美女销魂一区二区三区| 亚洲精品乱码久久久久久久久| 日韩欧美成人一区二区| 91视频一区二区| 精品一区二区三区蜜桃| 亚洲午夜免费视频| 国产偷v国产偷v亚洲高清| 91精品在线免费| 色噜噜夜夜夜综合网| 国产乱码字幕精品高清av| 午夜国产精品影院在线观看| 中文字幕一区在线观看视频| 精品国免费一区二区三区| 在线视频综合导航| 成人黄色国产精品网站大全在线免费观看 | 亚洲第一狼人社区| 国产情人综合久久777777| 制服丝袜成人动漫| 欧美日精品一区视频| 成人精品免费网站| 精一区二区三区| 美日韩黄色大片| 亚洲成av人片在线观看| 综合色中文字幕| 国产精品久久久久三级| 国产免费久久精品| 久久久久国产一区二区三区四区 | 成人综合在线观看| 国产剧情在线观看一区二区| 男男gaygay亚洲| 日韩不卡一区二区三区| 日精品一区二区| 亚洲国产精品久久人人爱| 一区二区三区中文字幕| 亚洲色图视频网站| 最近中文字幕一区二区三区| 国产日韩欧美亚洲| 国产视频一区二区在线| 久久免费视频色| 亚洲精品在线免费播放| 欧美成va人片在线观看| 日韩欧美的一区| 欧美成人性战久久| 亚洲精品一区二区三区精华液| 欧美一区二区三区的| 欧美一级二级在线观看| 精品国产欧美一区二区| 久久久久久亚洲综合影院红桃 | 538在线一区二区精品国产| 欧美日韩中文另类| 欧美日韩国产免费| 91精品国产高清一区二区三区| 777午夜精品视频在线播放| 欧美日韩成人在线| 日韩欧美中文字幕制服| 精品日本一线二线三线不卡| 2020国产成人综合网| 欧美激情一区二区三区在线| 中文字幕佐山爱一区二区免费| 最好看的中文字幕久久| 亚洲18女电影在线观看| 麻豆精品视频在线观看免费| 国产一区二区三区四区五区入口| 成人一区二区在线观看| 91精品91久久久中77777| 欧美欧美欧美欧美首页| 精品国产麻豆免费人成网站| 国产精品国产三级国产aⅴ入口 | 欧美日韩国产在线观看| 日韩午夜精品视频| 国产精品欧美经典| 图片区小说区区亚洲影院| 久久99国产精品免费网站| 成人av免费在线播放| 欧美撒尿777hd撒尿| 国产色一区二区| 亚洲综合一区在线| 精品系列免费在线观看| 色综合天天性综合| 日韩欧美国产一区在线观看| 成人欧美一区二区三区在线播放| 亚洲第一主播视频| 成人h动漫精品一区二| 欧美日韩高清一区二区不卡| 国产午夜精品一区二区三区视频| 亚洲小少妇裸体bbw| 国产精品1区二区.| 91精品国产全国免费观看| 国产精品久久久久久久岛一牛影视| 亚洲午夜在线电影| av电影天堂一区二区在线观看| 在线不卡a资源高清| 亚洲欧美在线高清| 国产精品456露脸| 欧美久久久久久久久久| 亚洲欧洲无码一区二区三区| 美国毛片一区二区三区| 91官网在线免费观看| 久久久精品tv| 捆绑紧缚一区二区三区视频| 欧美三级在线视频| 亚洲欧美经典视频| 懂色一区二区三区免费观看| 91精品啪在线观看国产60岁| 亚洲女子a中天字幕| 国产精品一品视频| 精品国产区一区| 免费观看91视频大全| 欧美理论片在线| 亚洲一区成人在线| 91免费国产在线观看| 中文字幕欧美国产| 国产精品自拍在线| 精品嫩草影院久久| 日韩精品福利网| 精品视频在线视频| 亚洲一区二区三区中文字幕在线| 国产不卡视频在线播放| 久久久久国产精品麻豆ai换脸| 久久se这里有精品| 日韩欧美在线123| 免费成人在线视频观看| 欧美一区二区三区思思人| 日韩黄色免费网站| 日韩欧美国产wwwww| 久久精品国产亚洲aⅴ| 日韩欧美三级在线|