[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    =?utf-8?q?=5Bkdelibs=5D_khtml/rendering=3A_Include_trailing_punc?=
From:       Maks Orlovich <maksim () kde ! org>
Date:       2011-03-18 1:33:29
Message-ID: 20110318013329.23580A60C6 () git ! kde ! org
[Download RAW message or body]

Git commit 3309a1dcf1667d28e2d532e9017d770978c3b734 by Maks Orlovich.
Committed on 21/02/2011 at 18:39.
Pushed by orlovich into branch 'master'.

Include trailing punctuation in :first-letter

(Also follow CSS's definition of punctuation)

BUG: 197455

M  +13   -3    khtml/rendering/render_block.cpp     

http://commits.kde.org/kdelibs/3309a1dcf1667d28e2d532e9017d770978c3b734

diff --git a/khtml/rendering/render_block.cpp b/khtml/rendering/render_block.cpp
index f9c718e..2172b3b 100644
--- a/khtml/rendering/render_block.cpp
+++ b/khtml/rendering/render_block.cpp
@@ -160,6 +160,16 @@ void RenderBlock::attach()
     updatePseudoChildren();
 }
 
+static inline bool isFirstLetterPunct(const QChar* c) {
+    // CSS2.1/3 definition for ::first-letter doesn't include Pc or Pd.
+    if (c->isPunct()) {
+        QChar::Category cat = c->category();
+        return cat != QChar::Punctuation_Connector &&
+               cat != QChar::Punctuation_Dash;
+    }
+    return false;
+}
+
 void RenderBlock::updateFirstLetter()
 {
     // Only blocks with inline-children can generate a first-letter
@@ -240,12 +250,12 @@ void RenderBlock::updateFirstLetter()
                 length++;
             begin = length;
             while ( length < oldText->l &&
-                    ( (oldText->s+length)->isPunct() || (oldText->s+length)->isSpace() ))
+                    ( isFirstLetterPunct(oldText->s+length) || (oldText->s+length)->isSpace() ))
                 length++;
             if ( length < oldText->l &&
-                    !( (oldText->s+length)->isSpace() || (oldText->s+length)->isPunct() ))
+                    !( (oldText->s+length)->isSpace() || isFirstLetterPunct(oldText->s+length) ))
                 length++;
-            while ( length < oldText->l && (oldText->s+length)->isMark() )
+            while ( length < oldText->l && isFirstLetterPunct(oldText->s+length) )
                 length++;
 
             // we need to generated a remainingText object even if no text is left

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic