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

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

?? cssstyleselector.cpp

?? linux下開源瀏覽器WebKit的源碼,市面上的很多商用瀏覽器都是移植自WebKit
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
    if (!rules)        return;    for (CSSRuleData* d = rules->first(); d; d = d->next()) {        CSSStyleRule* rule = d->rule();        const AtomicString& localName = m_element->localName();        const AtomicString& selectorLocalName = d->selector()->m_tag.localName();        if ((localName == selectorLocalName || selectorLocalName == starAtom) && checkSelector(d->selector())) {            // If the rule has no properties to apply, then ignore it.            CSSMutableStyleDeclaration* decl = rule->declaration();            if (!decl || !decl->length())                continue;                        // If we're matching normal rules, set a pseudo bit if             // we really just matched a pseudo-element.            if (m_dynamicPseudo != NOPSEUDO && m_checker.m_pseudoStyle == NOPSEUDO) {                if (m_checker.m_collectRulesOnly)                    return;                if (m_dynamicPseudo < FIRST_INTERNAL_PSEUDOID)                    m_style->setHasPseudoStyle(m_dynamicPseudo);            } else {                // Update our first/last rule indices in the matched rules array.                lastRuleIndex = m_matchedDecls.size() + m_matchedRules.size();                if (firstRuleIndex == -1)                    firstRuleIndex = lastRuleIndex;                // Add this rule to our list of matched rules.                addMatchedRule(d);            }        }    }}static bool operator >(CSSRuleData& r1, CSSRuleData& r2){    int spec1 = r1.selector()->specificity();    int spec2 = r2.selector()->specificity();    return (spec1 == spec2) ? r1.position() > r2.position() : spec1 > spec2; }    static bool operator <=(CSSRuleData& r1, CSSRuleData& r2){    return !(r1 > r2);}void CSSStyleSelector::sortMatchedRules(unsigned start, unsigned end){    if (start >= end || (end - start == 1))        return; // Sanity check.    if (end - start <= 6) {        // Apply a bubble sort for smaller lists.        for (unsigned i = end - 1; i > start; i--) {            bool sorted = true;            for (unsigned j = start; j < i; j++) {                CSSRuleData* elt = m_matchedRules[j];                CSSRuleData* elt2 = m_matchedRules[j + 1];                if (*elt > *elt2) {                    sorted = false;                    m_matchedRules[j] = elt2;                    m_matchedRules[j + 1] = elt;                }            }            if (sorted)                return;        }        return;    }    // Peform a merge sort for larger lists.    unsigned mid = (start + end) / 2;    sortMatchedRules(start, mid);    sortMatchedRules(mid, end);        CSSRuleData* elt = m_matchedRules[mid - 1];    CSSRuleData* elt2 = m_matchedRules[mid];        // Handle the fast common case (of equal specificity).  The list may already    // be completely sorted.    if (*elt <= *elt2)        return;        // We have to merge sort.  Ensure our merge buffer is big enough to hold    // all the items.    Vector<CSSRuleData*> rulesMergeBuffer;    rulesMergeBuffer.reserveInitialCapacity(end - start);     unsigned i1 = start;    unsigned i2 = mid;        elt = m_matchedRules[i1];    elt2 = m_matchedRules[i2];        while (i1 < mid || i2 < end) {        if (i1 < mid && (i2 == end || *elt <= *elt2)) {            rulesMergeBuffer.append(elt);            if (++i1 < mid)                elt = m_matchedRules[i1];        } else {            rulesMergeBuffer.append(elt2);            if (++i2 < end)                elt2 = m_matchedRules[i2];        }    }        for (unsigned i = start; i < end; i++)        m_matchedRules[i] = rulesMergeBuffer[i - start];}void CSSStyleSelector::initElementAndPseudoState(Element* e){    m_element = e;    if (m_element && m_element->isStyledElement())        m_styledElement = static_cast<StyledElement*>(m_element);    else        m_styledElement = 0;    pseudoState = PseudoUnknown;}void CSSStyleSelector::initForStyleResolve(Element* e, RenderStyle* parentStyle, PseudoId pseudoID){    m_checker.m_pseudoStyle = pseudoID;    m_parentNode = e ? e->parentNode() : 0;#if ENABLE(SVG)    if (!m_parentNode && e && e->isSVGElement() && e->isShadowNode())        m_parentNode = e->shadowParentNode();#endif    if (parentStyle)        m_parentStyle = parentStyle;    else        m_parentStyle = m_parentNode ? m_parentNode->renderStyle() : 0;    m_style = 0;    m_matchedDecls.clear();    m_ruleList = 0;    m_fontDirty = false;}static inline const AtomicString* linkAttribute(Node* node){    if (!node->isLink())        return 0;    ASSERT(node->isElementNode());    Element* element = static_cast<Element*>(node);    if (element->isHTMLElement())        return &element->getAttribute(hrefAttr);#if ENABLE(WML)    if (element->isWMLElement()) {        // <anchor> elements don't have href attributes, but we still want to        // appear as link, so linkAttribute() has to return a non-null value!        if (element->hasTagName(WMLNames::anchorTag))            return &emptyAtom;        return &element->getAttribute(hrefAttr);    }#endif#if ENABLE(SVG)    if (element->isSVGElement())        return &element->getAttribute(XLinkNames::hrefAttr);#endif    return 0;}CSSStyleSelector::SelectorChecker::SelectorChecker(Document* document, bool strictParsing)    : m_document(document)    , m_strictParsing(strictParsing)    , m_collectRulesOnly(false)    , m_pseudoStyle(NOPSEUDO)    , m_documentIsHTML(document->isHTMLDocument()){}PseudoState CSSStyleSelector::SelectorChecker::checkPseudoState(Element* element, bool checkVisited) const{    const AtomicString* attr = linkAttribute(element);    if (!attr || attr->isNull())        return PseudoNone;    if (!checkVisited)        return PseudoAnyLink;    LinkHash hash = visitedLinkHash(m_document->baseURL(), *attr);    if (!hash)        return PseudoLink;    Frame* frame = m_document->frame();    if (!frame)        return PseudoLink;    Page* page = frame->page();    if (!page)        return PseudoLink;    m_linksCheckedForVisitedState.add(hash);    return page->group().isLinkVisited(hash) ? PseudoVisited : PseudoLink;}bool CSSStyleSelector::SelectorChecker::checkSelector(CSSSelector* sel, Element* element) const{    pseudoState = PseudoUnknown;    PseudoId dynamicPseudo = NOPSEUDO;    return checkSelector(sel, element, 0, dynamicPseudo, true, false) == SelectorMatches;}#ifdef STYLE_SHARING_STATSstatic int fraction = 0;static int total = 0;#endifstatic const unsigned cStyleSearchThreshold = 10;Node* CSSStyleSelector::locateCousinList(Element* parent, unsigned depth){    if (parent && parent->isStyledElement()) {        StyledElement* p = static_cast<StyledElement*>(parent);        if (!p->inlineStyleDecl() && !p->hasID()) {            Node* r = p->previousSibling();            unsigned subcount = 0;            RenderStyle* st = p->renderStyle();            while (r) {                if (r->renderStyle() == st)                    return r->lastChild();                if (subcount++ == cStyleSearchThreshold)                    return 0;                r = r->previousSibling();            }            if (!r && depth < cStyleSearchThreshold)                r = locateCousinList(parent->parentElement(), depth + 1);            while (r) {                if (r->renderStyle() == st)                    return r->lastChild();                if (subcount++ == cStyleSearchThreshold)                    return 0;                r = r->previousSibling();            }        }    }    return 0;}bool CSSStyleSelector::canShareStyleWithElement(Node* n){    if (n->isStyledElement()) {        StyledElement* s = static_cast<StyledElement*>(n);        RenderStyle* style = s->renderStyle();        if (style && !style->unique() &&            (s->tagQName() == m_element->tagQName()) && !s->hasID() &&            (s->hasClass() == m_element->hasClass()) && !s->inlineStyleDecl() &&            (s->hasMappedAttributes() == m_styledElement->hasMappedAttributes()) &&            (s->isLink() == m_element->isLink()) &&             !style->affectedByAttributeSelectors() &&            (s->hovered() == m_element->hovered()) &&            (s->active() == m_element->active()) &&            (s->focused() == m_element->focused()) &&            (s != s->document()->cssTarget() && m_element != m_element->document()->cssTarget()) &&            (s->getAttribute(typeAttr) == m_element->getAttribute(typeAttr)) &&            (s->getAttribute(XMLNames::langAttr) == m_element->getAttribute(XMLNames::langAttr)) &&            (s->getAttribute(langAttr) == m_element->getAttribute(langAttr)) &&            (s->getAttribute(readonlyAttr) == m_element->getAttribute(readonlyAttr)) &&            (s->getAttribute(cellpaddingAttr) == m_element->getAttribute(cellpaddingAttr))) {            bool isControl = s->isFormControlElement();            if (isControl != m_element->isFormControlElement())                return false;            if (isControl) {                InputElement* thisInputElement = toInputElement(s);                InputElement* otherInputElement = toInputElement(m_element);                if (thisInputElement && otherInputElement) {                    if ((thisInputElement->isAutofilled() != otherInputElement->isAutofilled()) ||                        (thisInputElement->isChecked() != otherInputElement->isChecked()) ||                        (thisInputElement->isIndeterminate() != otherInputElement->isIndeterminate()))                    return false;                } else                    return false;                FormControlElement* thisFormControlElement = toFormControlElement(s);                FormControlElement* otherFormControlElement = toFormControlElement(m_element);                if (thisFormControlElement && otherFormControlElement) {                    if (thisFormControlElement->isEnabled() != otherFormControlElement->isEnabled())                        return false;                } else                    return false;            }            if (style->transitions() || style->animations())                return false;            bool classesMatch = true;            if (s->hasClass()) {                const AtomicString& class1 = m_element->getAttribute(classAttr);                const AtomicString& class2 = s->getAttribute(classAttr);                classesMatch = (class1 == class2);            }                        if (classesMatch) {                bool mappedAttrsMatch = true;                if (s->hasMappedAttributes())                    mappedAttrsMatch = s->mappedAttributes()->mapsEquivalent(m_styledElement->mappedAttributes());                if (mappedAttrsMatch) {                    bool linksMatch = true;                    if (s->isLink()) {                        // We need to check to see if the visited state matches.                        if (pseudoState == PseudoUnknown) {                            const Color& linkColor = m_element->document()->linkColor();                            const Color& visitedColor = m_element->document()->visitedLinkColor();                            pseudoState = m_checker.checkPseudoState(m_element, style->pseudoState() != PseudoAnyLink || linkColor != visitedColor);                        }                        linksMatch = (pseudoState == style->pseudoState());                    }                                        if (linksMatch)                        return true;                }            }        }    }    return false;}RenderStyle* CSSStyleSelector::locateSharedStyle(){    if (m_styledElement && !m_styledElement->inlineStyleDecl() && !m_styledElement->hasID() && !m_styledElement->document()->usesSiblingRules()) {        // Check previous siblings.        unsigned count = 0;        Node* n;        for (n = m_element->previousSibling(); n && !n->isElementNode(); n = n->previousSibling()) { }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产日日夜夜| 精品一区二区三区欧美| 久久国产剧场电影| 日韩欧美国产成人一区二区| 亚洲一级二级三级在线免费观看| 99国产精品久久久久久久久久| 欧美极品aⅴ影院| 国产精品一区二区果冻传媒| 欧美国产激情二区三区| 久久综合久久鬼色| 成人理论电影网| 亚洲另类在线制服丝袜| 欧美日韩精品欧美日韩精品一综合| 一区二区日韩电影| 欧美成人a在线| 日本精品一区二区三区高清 | 9色porny自拍视频一区二区| 亚洲一区在线观看免费| 亚洲在线视频免费观看| 天天综合网天天综合色| 欧美国产一区在线| 亚洲精品你懂的| 日韩黄色免费电影| 国产精品色哟哟| 欧美一区二区三区在线观看| 国产suv精品一区二区6| 午夜影院久久久| 欧美经典三级视频一区二区三区| 欧美国产一区二区在线观看| 中文字幕中文字幕在线一区| 欧美一级生活片| 久久亚洲捆绑美女| 欧美国产日产图区| 亚洲午夜精品17c| 久久av老司机精品网站导航| 国产精品一区二区久激情瑜伽| 波多野结衣中文字幕一区| 久久99精品久久久久久动态图| 国产一区二区三区观看| 久久国产乱子精品免费女| 成人性生交大片免费看中文| 色噜噜狠狠成人网p站| 日韩免费一区二区三区在线播放| 国产精品视频一二| 丝袜美腿亚洲色图| 成人av影院在线| 欧美一区三区二区| 国产精品不卡一区| 久久91精品国产91久久小草| 91色|porny| 成人sese在线| 精品国产1区2区3区| 欧美一级高清片| 欧美一级高清片| 亚洲欧美视频在线观看| 国产香蕉久久精品综合网| 精品女同一区二区| 亚洲综合色视频| 成人天堂资源www在线| 在线不卡a资源高清| 69精品人人人人| 91精品久久久久久蜜臀| 亚洲天堂免费看| 亚洲综合久久久| 成人a区在线观看| 日韩精品最新网址| 午夜伊人狠狠久久| 在线亚洲免费视频| 欧美高清一级片在线| 中文字幕一区二| 亚洲第一av色| 欧美无砖专区一中文字| 欧美日韩国产大片| 一区二区三区 在线观看视频| bt欧美亚洲午夜电影天堂| 久久亚洲综合色一区二区三区| 麻豆国产欧美日韩综合精品二区 | 日本成人在线不卡视频| 国产一区三区三区| 欧美xxxxx牲另类人与| 日韩av电影天堂| 91麻豆精品国产91久久久久久久久| 亚洲日本青草视频在线怡红院 | 色国产综合视频| 亚洲色图19p| 99久久精品免费观看| 亚洲欧美一区二区三区极速播放 | 国产三级欧美三级| 久久嫩草精品久久久精品一| 国产精品久久夜| 国产精品一品二品| 国产精品久久久久久久久搜平片| 国产成人亚洲综合a∨猫咪| 91在线视频官网| 亚洲精品高清视频在线观看| 91在线视频观看| 午夜精品一区二区三区电影天堂 | 欧美一级欧美三级在线观看 | 精品一区二区在线播放| 欧美成人精品3d动漫h| 国产一区久久久| 国产精品国产自产拍高清av| 91年精品国产| 亚洲第一在线综合网站| 欧美色图片你懂的| 国产欧美日韩不卡免费| www.欧美色图| 亚洲大片精品永久免费| 日韩一区二区中文字幕| 国产999精品久久| 一区二区三区在线观看网站| 欧美在线观看禁18| 另类人妖一区二区av| 国产色一区二区| 欧美日韩一区三区四区| 精品一区免费av| 亚洲欧美国产三级| 91精品国产欧美一区二区18| 国产成人小视频| 亚洲va在线va天堂| 国产日本一区二区| 欧美日韩视频专区在线播放| 国产精品亚洲а∨天堂免在线| 国产精品国产精品国产专区不蜜| 欧美日韩一级片网站| 国产精品白丝av| 午夜精品久久一牛影视| 久久一区二区三区四区| 欧美日韩一区二区三区在线| 风间由美一区二区三区在线观看| 午夜精品视频在线观看| 国产精品久线观看视频| 精品国产sm最大网站| 欧美最猛黑人xxxxx猛交| 国产91丝袜在线观看| 麻豆一区二区在线| 午夜精品一区二区三区电影天堂 | 亚洲成人手机在线| 久久伊99综合婷婷久久伊| 欧美日韩国产精品自在自线| 波多野结衣亚洲| 国产主播一区二区| 欧美一级在线观看| 欧美午夜电影一区| 色视频一区二区| 无吗不卡中文字幕| 亚洲国产视频一区二区| 亚洲欧美日韩中文字幕一区二区三区| 欧美成人精品二区三区99精品| 欧美日韩三级一区| 91免费观看视频在线| 国产精品99久久久久久宅男| 狠狠色狠狠色综合系列| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲午夜电影在线| 亚洲乱码国产乱码精品精的特点 | 理论电影国产精品| 三级欧美在线一区| 亚欧色一区w666天堂| 亚洲一二三级电影| 亚洲免费av高清| 亚洲激情男女视频| 亚洲欧美综合色| 亚洲另类中文字| 一区二区免费在线| 亚洲午夜视频在线观看| 午夜伊人狠狠久久| 久久爱www久久做| 国产不卡在线一区| 99久久精品免费看国产 | 午夜精品免费在线| 麻豆一区二区三区| 国产91露脸合集magnet| 97精品视频在线观看自产线路二| 色欧美日韩亚洲| 欧美日韩亚洲综合一区二区三区 | 欧美久久久久中文字幕| 91精品国产综合久久香蕉麻豆| 欧美日韩大陆一区二区| 欧美成人精品3d动漫h| 国产精品青草综合久久久久99| 国产精品久久久久久久久晋中| 亚洲人被黑人高潮完整版| 天天做天天摸天天爽国产一区 | 丁香婷婷综合激情五月色| 菠萝蜜视频在线观看一区| 91国偷自产一区二区三区成为亚洲经典| 91成人国产精品| 精品久久久久久无| 中文字幕一区二区三区四区不卡 | 色吊一区二区三区| 91精品国产综合久久精品图片| 久久午夜色播影院免费高清| 成人免费视频在线观看| 日本三级亚洲精品| 91在线视频18| 欧美大片拔萝卜| 一区二区三区中文字幕精品精品 | 国产欧美精品一区二区色综合朱莉 | 一区二区久久久|