From kde-commits Fri Mar 18 01:33:29 2011 From: Maks Orlovich Date: Fri, 18 Mar 2011 01:33:29 +0000 To: kde-commits Subject: =?utf-8?q?=5Bkdelibs=5D_khtml/rendering=3A_Include_trailing_punc?= Message-Id: <20110318013329.23580A60C6 () git ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=130041206325715 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