Changeset 3344 in webkit


Ignore:
Timestamp:
Jan 16, 2003, 6:25:09 PM (22 years ago)
Author:
rjw
Message:

Fixed 3148932. Account for zero width characters
in <pre> fixed-width optimization.

Reviewed by hyatt.

  • khtml/rendering/render_text.cpp: (RenderText::widthFromCache):

Reviewed by Richard (written by Mike S.) 'Clean' implementations of these
functions that were too similar to the Qt implementations.

  • kwq/KWQString.mm: (QString::left): (QString::right): (QString::mid):
Location:
trunk/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog-2003-10-25

    r3343 r3344  
     12003-01-16  Richard Williamson   <rjw@apple.com>
     2
     3        Fixed 3148932.  Account for zero width characters
     4        in <pre> fixed-width optimization.
     5       
     6        Reviewed by hyatt.
     7
     8        * khtml/rendering/render_text.cpp:
     9        (RenderText::widthFromCache):
     10       
     11        Reviewed by Richard (written by Mike S.)  'Clean' implementations of these
     12        functions that were too similar to the Qt implementations.
     13       
     14        * kwq/KWQString.mm:
     15        (QString::left):
     16        (QString::right):
     17        (QString::mid):
     18
    1192003-01-16  Maciej Stachowiak  <mjs@apple.com>
    220
  • trunk/WebCore/ChangeLog-2005-08-23

    r3343 r3344  
     12003-01-16  Richard Williamson   <rjw@apple.com>
     2
     3        Fixed 3148932.  Account for zero width characters
     4        in <pre> fixed-width optimization.
     5       
     6        Reviewed by hyatt.
     7
     8        * khtml/rendering/render_text.cpp:
     9        (RenderText::widthFromCache):
     10       
     11        Reviewed by Richard (written by Mike S.)  'Clean' implementations of these
     12        functions that were too similar to the Qt implementations.
     13       
     14        * kwq/KWQString.mm:
     15        (QString::left):
     16        (QString::right):
     17        (QString::mid):
     18
    1192003-01-16  Maciej Stachowiak  <mjs@apple.com>
    220
  • trunk/WebCore/khtml/rendering/render_text.cpp

    r3250 r3344  
    816816{
    817817    if (m_monospaceCharacterWidth != 0){
    818         return len * m_monospaceCharacterWidth;
     818        int i, w = 0;
     819        for (i = start; i < start+len; i++){
     820            int dir = str->s[i].direction();
     821            if (dir != QChar::DirNSM && dir != QChar::DirBN)
     822                w += m_monospaceCharacterWidth;
     823        }
     824        return w;
    819825    }
    820826   
    821827    return f->width(str->s, str->l, start, len);
    822828}
     829#ifdef XXX
     830inline int RenderText::widthFromCache(const Font *f, int start, int len) const
     831{
     832    if (m_monospaceCharacterWidth != 0){
     833        return len * m_monospaceCharacterWidth;
     834    }
     835
     836    return f->width(str->s, str->l, start, len);
     837}
     838#endif
     839
    823840#endif
    824841
  • trunk/WebCore/kwq/KWQString.mm

    r3321 r3344  
    17001700
    17011701QString QString::left(uint len) const
    1702 {
    1703     if ( isEmpty() ) {
    1704         return QString();
    1705     } else if ( len == 0 ) {                    // ## just for 1.x compat:
    1706         return fromLatin1("");
    1707     } else if ( len > dataHandle[0]->_length ) {
    1708         return *this;
    1709     } else {
    1710         QString s( unicode(), len );
    1711         return s;
    1712     }
    1713 }
     1702{ return mid(0, len); }
     1703
    17141704
    17151705QString QString::right(uint len) const
    1716 {
    1717     if ( isEmpty() ) {
    1718         return QString();
    1719     } else if ( len == 0 ) {                    // ## just for 1.x compat:
    1720         return fromLatin1("");
    1721     } else {
    1722         uint l = dataHandle[0]->_length;
    1723         if ( len > l )
    1724             len = l;
    1725         QString s( unicode()+(l-len), len );
    1726         return s;
    1727     }
    1728 }
    1729 
    1730 QString QString::mid(uint index, uint len) const
    1731 {
    1732     uint slen = dataHandle[0]->_length;
    1733     if ( isEmpty() || index >= slen ) {
    1734         return QString();
    1735     } else if ( len == 0 ) {                    // ## just for 1.x compat:
    1736         return fromLatin1("");
    1737     } else {
    1738         if (dataHandle[0]->_isAsciiValid){
    1739             if ( len > slen-index )
    1740                 len = slen - index;
    1741             if ( index == 0 && len == dataHandle[0]->_length )
    1742                 return *this;
    1743             register const char *p = ascii()+index;
    1744             QString s( p, len );
    1745             return s;
    1746         }
    1747         else if (dataHandle[0]->_isUnicodeValid){
    1748             if ( len > slen-index )
    1749                 len = slen - index;
    1750             if ( index == 0 && len == dataHandle[0]->_length )
    1751                 return *this;
    1752             register const QChar *p = unicode()+index;
    1753             QString s( p, len );
    1754             return s;
    1755         }
    1756         else
    1757             FATAL("invalid character cache");
    1758     }
    1759     return QString(); // Never reached, shut the compiler up.
    1760 }
     1706{ return mid(length() - len, len); }
     1707
     1708
     1709QString QString::mid(uint start, uint len) const
     1710{
     1711    if( dataHandle && *dataHandle)
     1712    {
     1713        KWQStringData &data = **dataHandle;
     1714       
     1715        if (data._length == 0)
     1716            return QString();
     1717           
     1718        // clip length
     1719        if( len > data._length - start )
     1720            len = data._length - start;
     1721
     1722        if ( index == 0 && len == data._length )
     1723            return *this;
     1724
     1725        ASSERT( start+len<=data._length );      // range check
     1726       
     1727        // ascii case
     1728        if( data._isAsciiValid && data._ascii )
     1729            return QString( &(data._ascii[start]) , len);
     1730       
     1731        // unicode case
     1732        else if( data._isUnicodeValid && data._unicode )
     1733            return QString( &(data._unicode[start]), len );
     1734    }
     1735   
     1736    // degenerate case
     1737    return null;
     1738}
     1739
    17611740
    17621741QString QString::copy() const
Note: See TracChangeset for help on using the changeset viewer.