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

📄 cindent.cpp

📁 qtopia的源程序,一种嵌入式图形操作系统
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-$THISYEAR$ Trolltech AS. All rights reserved.**** This file is part of the $MODULE$ of the Qt Toolkit.**** $LICENSE$**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "cindent.h"#include "qregexp.h"extern int indentForBottomLine( const QStringList& program, QChar typedIn );extern void setTabSize( int s );extern void setIndentSize( int s );CIndent::CIndent()    : Q3TextIndent(), tabSize( 8 ), indentSize( 4 ),      autoIndent( true ), keepTabs( true ), lastDoc( 0 ){}static int indentation( const QString &s ){    if ( s.simplifyWhiteSpace().length() == 0 )	return 0;    int i = 0;    int ind = 0;    while ( i < (int)s.length() ) {	QChar c = s.at( i );	if ( c == ' ' )	    ind++;	else if ( c == '\t' )	    ind += 8;	else	    break;	++i;    }    return ind;}void CIndent::tabify( QString &s ){    if ( !keepTabs )	return;    int i = 0;    for ( ;; ) {	for ( int j = i; j < (int)s.length(); ++j ) {	    if ( s[ j ] != ' ' && s[ j ] != '\t' ) {		if ( j > i ) {		    QString t  = s.mid( i, j - i );		    int spaces = 0;		    for ( int k = 0; k < (int)t.length(); ++k )			spaces += ( t[ k ] == ' ' ? 1 : tabSize );		    s.remove( i, t.length() );		    int tabs = spaces / tabSize;		    spaces = spaces - ( tabSize * tabs );		    QString tmp;		    tmp.fill( ' ', spaces );		    if ( spaces > 0 )			s.insert( i, tmp );		    tmp.fill( '\t', tabs );		    if ( tabs > 0 )			s.insert( i, tmp );		}		break;	    }	}	i = s.find( '\n', i );	if ( i == -1 )	    break;	++i;    }}void CIndent::indentLine( Q3TextParagraph *p, int &oldIndent, int &newIndent ){    QString indentString;    indentString.fill( ' ', newIndent );    indentString.append( QString::fromLatin1("a") );    tabify( indentString );    indentString.remove( indentString.length() - 1, 1 );    newIndent = indentString.length();    oldIndent = 0;    while ( p->length() > 0 && ( p->at( 0 )->c == ' ' || p->at( 0 )->c == '\t' ) ) {	++oldIndent;	p->remove( 0, 1 );    }    if (p->string()->length() == 0)        p->insert(0, QLatin1String(" "));    if (!indentString.isEmpty())	p->insert(0, indentString);}void CIndent::indent( Q3TextDocument *doc, Q3TextParagraph *p, int *oldIndent, int *newIndent ){    lastDoc = doc;    int oi = indentation( p->string()->toString() );    QStringList code;    Q3TextParagraph *parag = doc->firstParagraph();    while ( parag ) {	code << parag->string()->toString();	if ( parag == p )	    break;	parag = parag->next();    }    int ind = indentForBottomLine( code, QChar::Null );    indentLine( p, oi, ind );    if ( oldIndent )	*oldIndent = oi;    if ( newIndent )	*newIndent = ind;}void CIndent::reindent(){    if ( !lastDoc )	return;    // #### this is sloooooooow (O(n^2))    Q3TextParagraph *parag = lastDoc->firstParagraph();    while ( parag ) {	indent( lastDoc, parag, 0, 0 );	parag = parag->next();    }}void CIndent::setTabSize( int ts ){    tabSize = ts;    ::setTabSize( ts );}void CIndent::setIndentSize( int is ){    indentSize = is;    ::setIndentSize( is );}

⌨️ 快捷键说明

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