[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