Esempio n. 1
0
bool CSSLangPseudoClassSelector::match(Element& element, ViewCSSImp* view, bool dynamic)
{
    std::u16string attr;
    for (Element e = element; e; e = e.getParentElement()) {
        attr = interface_cast<html::HTMLElement>(e).getLang();
        if (!attr.empty()) {
            toLower(attr);
            return dashMatch(attr, lang);
        }
    }
    return false;
}
TEST(CSSTokenizerTest, MultipleCharacterTokens)
{
    TEST_TOKENS("~=", includeMatch());
    TEST_TOKENS("|=", dashMatch());
    TEST_TOKENS("^=", prefixMatch());
    TEST_TOKENS("$=", suffixMatch());
    TEST_TOKENS("*=", substringMatch());
    TEST_TOKENS("||", column());
    TEST_TOKENS("|||", column(), delim('|'));
    TEST_TOKENS("<!--", cdo());
    TEST_TOKENS("<!---", cdo(), delim('-'));
    TEST_TOKENS("-->", cdc());
}
Esempio n. 3
0
bool CSSAttributeSelector::match(Element& e, ViewCSSImp* view, bool dynamic)
{
    Nullable<std::u16string> attr = e.getAttribute(name);
    if (!attr.hasValue())
        return false;
    std::u16string v = attr.value();
    if (flags == u"i")
        toLower(v);
    switch (op) {
    case None:
        return true;
    case Equals:
        return v == value;
        break;
    case Includes:
        if (v.length() == 0 || contains(v, u" "))
            return false;
        return contains(v, value);
    case DashMatch:
        return dashMatch(v, value);
    case PrefixMatch:
        if (v.length() == 0)
            return false;
        return startsWith(v, value);
    case SuffixMatch:
        if (v.length() == 0)
            return false;
        return endsWith(v, value);
    case SubstringMatch:
        if (v.length() == 0)
            return false;
        return find(v, value);
    default:
        break;
    }
    return false;
}