[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/KDE/3.5/kdelibs/khtml
From: Germain Garand <germain () ebooksfrance ! com>
Date: 2006-06-28 21:14:44
Message-ID: 1151529284.253769.607.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 555985 by ggarand:
merge WC/#3230/r13102/
"CSS1: Words with inline elements get extra capital letters"
patch by Andrew Wellington <proton@wiretapped.net>
M +6 -0 rendering/render_container.cpp
M +32 -0 rendering/render_object.cpp
M +3 -0 rendering/render_object.h
M +16 -1 rendering/render_text.cpp
M +2 -2 xml/dom_stringimpl.cpp
M +1 -1 xml/dom_stringimpl.h
--- branches/KDE/3.5/kdelibs/khtml/rendering/render_container.cpp #555984:555985
@@ -152,6 +152,12 @@
// just add it...
insertChildNode(newChild, beforeChild);
}
+
+ if (newChild->isText() && newChild->style()->textTransform() == CAPITALIZE) {
+ DOM::DOMStringImpl* textToTransform = static_cast<RenderText*>(newChild)->originalString();
+ if (textToTransform)
+ static_cast<RenderText*>(newChild)->setText(textToTransform, true);
+ }
newChild->attach();
}
--- branches/KDE/3.5/kdelibs/khtml/rendering/render_object.cpp #555984:555985
@@ -283,6 +283,38 @@
KHTMLAssert(0);
}
+RenderObject *RenderObject::nextRenderer() const
+{
+ if (firstChild())
+ return firstChild();
+ else if (nextSibling())
+ return nextSibling();
+ else {
+ const RenderObject *r = this;
+ while (r && !r->nextSibling())
+ r = r->parent();
+ if (r)
+ return r->nextSibling();
+ }
+ return 0;
+}
+
+RenderObject *RenderObject::previousRenderer() const
+{
+ if (previousSibling()) {
+ RenderObject *r = previousSibling();
+ while (r->lastChild())
+ r = r->lastChild();
+ return r;
+ }
+ else if (parent()) {
+ return parent();
+ }
+ else {
+ return 0;
+ }
+}
+
static void addLayers(RenderObject* obj, RenderLayer* parentLayer, RenderObject*& newObject,
RenderLayer*& beforeChild)
{
--- branches/KDE/3.5/kdelibs/khtml/rendering/render_object.h #555984:555985
@@ -141,6 +141,9 @@
virtual RenderObject *firstChild() const { return 0; }
virtual RenderObject *lastChild() const { return 0; }
+ RenderObject *nextRenderer() const;
+ RenderObject *previousRenderer() const;
+
virtual bool childAllowed() const { return false; }
virtual RenderLayer* layer() const { return 0; }
--- branches/KDE/3.5/kdelibs/khtml/rendering/render_text.cpp #555984:555985
@@ -1151,7 +1151,22 @@
if ( str && style() ) {
oldstr = str;
switch(style()->textTransform()) {
- case CAPITALIZE: str = str->capitalize(); break;
+ case CAPITALIZE:
+ {
+ // find previous text renderer if one exists
+ RenderObject* o;
+ bool runOnString = false;
+ for (o = previousRenderer(); o && o->isInlineFlow(); o = o->previousRenderer())
+ ;
+ if (o && o->isText()) {
+ DOMStringImpl* prevStr = static_cast<RenderText*>(o)->string();
+ QChar c = (*prevStr)[prevStr->length() - 1];
+ if (!c.isSpace())
+ runOnString = true;
+ }
+ str = str->capitalize(runOnString);
+ }
+ break;
case UPPERCASE: str = str->upper(); break;
case LOWERCASE: str = str->lower(); break;
case NONE:
--- branches/KDE/3.5/kdelibs/khtml/xml/dom_stringimpl.cpp #555984:555985
@@ -370,9 +370,9 @@
return c;
}
-DOMStringImpl *DOMStringImpl::capitalize() const
+DOMStringImpl *DOMStringImpl::capitalize(bool noFirstCap) const
{
- bool canCapitalize=true;
+ bool canCapitalize= !noFirstCap;
DOMStringImpl *c = new DOMStringImpl;
if(!l) return c;
--- branches/KDE/3.5/kdelibs/khtml/xml/dom_stringimpl.h #555984:555985
@@ -88,7 +88,7 @@
bool isLower() const;
DOMStringImpl *lower() const;
DOMStringImpl *upper() const;
- DOMStringImpl *capitalize() const;
+ DOMStringImpl *capitalize(bool noFirstCap=false) const;
QChar *unicode() const { return s; }
uint length() const { return l; }
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic