⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 break_lines.cpp

📁 khtml在gtk上的移植版本
💻 CPP
字号:
#include <break_lines.h>#ifdef HAVE_THAI_BREAKS#include "ThBreakIterator.h"static const QChar *cached = 0;static QCString *cachedString = 0;static ThBreakIterator *thaiIt = 0;#endif#if APPLE_CHANGES && !KWIQ#include <CoreServices/CoreServices.h>#endifvoid cleanupLineBreaker(){#ifdef HAVE_THAI_BREAKS    if ( cachedString )	delete cachedString;    if ( thaiIt )	delete thaiIt;    cached = 0;#endif}namespace khtml {/*  This function returns true, if the string can bre broken before the   character at position pos in the string s with length len*/bool isBreakable( const QChar *s, int pos, int len){#if !APPLE_CHANGES || KWIQ    const QChar *c = s+pos;    unsigned short ch = c->unicode();    if ( ch > 0xff ) {	// not latin1, need to do more sophisticated checks for asian fonts	unsigned char row = c->row();	if ( row == 0x0e ) {	    // 0e00 - 0e7f == Thai	    if ( c->cell() < 0x80 ) {#ifdef HAVE_THAI_BREAKS		// check for thai		if( s != cached ) {		    // build up string of thai chars		    QTextCodec *thaiCodec = QTextCodec::codecForMib(2259);		    if ( !cachedString )			cachedString = new QCString;		    if ( !thaiIt )			thaiIt = ThBreakIterator::createWordInstance(); 		    *cachedString = thaiCodec->fromUnicode( QConstString( (QChar *)s, len ).string() );		}		thaiIt->setText((tchar *)cachedString->data());		for(int i = thaiIt->first(); i != thaiIt->DONE; i = thaiIt->next() ) {		    if( i == pos )			return true;		    if( i > pos )			return false;		}		return false;#else		// if we don't have a thai line breaking lib, allow		// breaks everywhere except directly before punctuation.		return true;#endif	    } else 		return false;	}	if ( row > 0x2d && row < 0xfb || row == 0x11 )	    // asian line breaking. Everywhere allowed except directly	    // in front of a punctuation character.	    return true;	else // no asian font	    return c->isSpace();    } else {	if ( ch == ' ' || ch == '\n' )	    return true;    }    return false;#else    OSStatus status = 0, findStatus = 0;    static TextBreakLocatorRef breakLocator = 0;    UniCharArrayOffset end;    const QChar *c = s+pos;    unsigned short ch = c->unicode();    // Newlines are always breakable.    if (ch == '\n')        return true;    // If current character, or the previous character aren't simple latin1 then    // use the UC line break locator.  UCFindTextBreak will report false if we    // have a sequence of 0xa0 0x20 (nbsp, sp), so we explicity check for that    // case.    unsigned short lastCh = pos > 0 ? (s+pos-1)->unicode() : 0;    if ((ch > 0x7f && ch != 0xa0) || (lastCh > 0x7f && lastCh != 0xa0)) {        if (!breakLocator)            status = UCCreateTextBreakLocator(NULL, 0, kUCTextBreakLineMask, &breakLocator);        if (status == 0)            findStatus = UCFindTextBreak(breakLocator, kUCTextBreakLineMask, 0, (const UniChar *)s, len, pos, &end);        // If carbon fails, fail back on simple white space detection.        if (findStatus == 0)            return ((int)end == pos) ? true : false;    }        // Match WinIE's breaking strategy, which is to always allow breaks after hyphens and question marks.    if (lastCh == '-' || lastCh == '?')        return true;    return c->direction() == QChar::DirWS;#endif    }};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -