[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/KDE/4.2/kdelibs/khtml
From: Maks Orlovich <maksim () kde ! org>
Date: 2009-03-21 16:07:45
Message-ID: 1237651665.513470.20189.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 942375 by orlovich:
Merged revision:r941605 | vtokarev | 2009-03-19 21:49:54 -0400 (Thu, 19 Mar 2009) | 2 \
lines
Add caseSensitivity parameter, for startsWith/endsWith methods in
DOMStrngImpl, which allows to avoid some more conversions in checkSimpleSelector
M +11 -16 css/cssstyleselector.cpp
M +22 -8 xml/dom_stringimpl.cpp
M +4 -2 xml/dom_stringimpl.h
--- branches/KDE/4.2/kdelibs/khtml/css/cssstyleselector.cpp #942374:942375
@@ -1374,31 +1374,26 @@
case CSSSelector::Begin:
{
//kDebug( 6080 ) << "checking for beginswith match";
- QString val_str = QString::fromRawData(value->unicode(), \
value->length());
- QString sel_str = QString::fromRawData(sel->value.string().unicode(), \
sel->value.length());
- return val_str.startsWith(sel_str, caseSensitive ? Qt::CaseSensitive : \
Qt::CaseInsensitive) && !sel_str.isEmpty(); + DOMStringImpl* selValue = \
sel->value.impl(); + return selValue && selValue->length() && \
value->startsWith(selValue, caseSensitive ? DOM::CaseSensitive : \
DOM::CaseInsensitive); }
case CSSSelector::End:
{
//kDebug( 6080 ) << "checking for endswith match";
- QString val_str = QString::fromRawData(value->unicode(), \
value->length());
- QString sel_str = QString::fromRawData(sel->value.string().unicode(), \
sel->value.length());
- return val_str.endsWith(sel_str, caseSensitive ? Qt::CaseSensitive : \
Qt::CaseInsensitive) && !sel_str.isEmpty(); + DOMStringImpl* selValue = \
sel->value.impl(); + return selValue && selValue->length() && \
value->endsWith(selValue, caseSensitive ? DOM::CaseSensitive : DOM::CaseInsensitive); \
} case CSSSelector::Hyphen:
{
//kDebug( 6080 ) << "checking for hyphen match";
- QString val_str = QString::fromRawData(value->unicode(), \
value->length());
- QString sel_str = QString::fromRawData(sel->value.string().unicode(), \
sel->value.length());
- const QString& str = val_str;
- const QString& selStr = sel_str;
- if(str.length() < selStr.length()) return false;
- // Check if str begins with selStr:
- if(str.indexOf(selStr, 0, (caseSensitive ? Qt::CaseSensitive : \
Qt::CaseInsensitive)) != 0) return false; + DOMStringImpl* selValue = \
sel->value.impl(); + if (value->length() < selValue->length())
+ return false;
+ // Check if value begins with selStr:
+ if (!value->startsWith(selValue))
+ return false;
// It does. Check for exact match or following '-':
- if(str.length() != selStr.length()
- && str[selStr.length()] != '-') return false;
- break;
+ return value->length() == selValue->length() || \
(*value)[selValue->length()].unicode() == '-'; }
case CSSSelector::PseudoClass:
case CSSSelector::PseudoElement:
--- branches/KDE/4.2/kdelibs/khtml/xml/dom_stringimpl.cpp #942374:942375
@@ -470,28 +470,42 @@
return QString::fromRawData(s, l).toFloat(ok);
}
-bool DOMStringImpl::endsWith(DOMStringImpl* str) const
+bool DOMStringImpl::endsWith(DOMStringImpl* str, CaseSensitivity cs) const
{
if (l < str->l) return false;
const QChar *a = s + l - 1;
const QChar *b = str->s + str->l - 1;
int i = str->l;
- while (i--) {
- if (*a != *b) return false;
- a--, b--;
+ if (cs == CaseSensitive) {
+ while (i--) {
+ if (*a != *b) return false;
+ a--, b--;
+ }
+ } else {
+ while (i--) {
+ if (a->toLower() != b->toLower()) return false;
+ a--, b--;
+ }
}
return true;
}
-bool DOMStringImpl::startsWith(DOMStringImpl* str) const
+bool DOMStringImpl::startsWith(DOMStringImpl* str, CaseSensitivity cs) const
{
if (l < str->l) return false;
const QChar *a = s;
const QChar *b = str->s;
int i = str->l;
- while (i--) {
- if (*a != *b) return false;
- a++, b++;
+ if (cs == CaseSensitive) {
+ while (i--) {
+ if (*a != *b) return false;
+ a++, b++;
+ }
+ } else {
+ while (i--) {
+ if (a->toLower() != b->toLower()) return false;
+ a++, b++;
+ }
}
return true;
}
--- branches/KDE/4.2/kdelibs/khtml/xml/dom_stringimpl.h #942374:942375
@@ -37,6 +37,8 @@
namespace DOM {
+enum CaseSensitivity { CaseSensitive, CaseInsensitive };
+
class DOMStringImpl : public khtml::Shared<DOMStringImpl>
{
private:
@@ -124,8 +126,8 @@
uint length() const { return l; }
QString string() const;
- bool endsWith(DOMStringImpl* str) const;
- bool startsWith(DOMStringImpl* str) const;
+ bool endsWith(DOMStringImpl* str, CaseSensitivity cs = CaseSensitive) const;
+ bool startsWith(DOMStringImpl* str, CaseSensitivity cs = CaseSensitive) const;
DOMStringImpl* substring(unsigned pos, unsigned len = UINT_MAX) const;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic