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

📄 parenmatcher.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 "parenmatcher.h"#include "paragdata.h"#include "q3textedit.h"#include "q3richtext_p.h"#include <qapplication.h>ParenMatcher::ParenMatcher(){    enabled = true;}bool ParenMatcher::match( Q3TextCursor *cursor ){    if ( !enabled )	return false;    bool ret = false;    QChar c( cursor->paragraph()->at( cursor->index() )->c );    bool ok1 = false;    bool ok2 = false;    if ( c == '{' || c == '(' || c == '[' ) {	ok1 = checkOpenParen( cursor );	ret = ok1 || ret;    } else if ( cursor->index() > 0 ) {	c = cursor->paragraph()->at( cursor->index() - 1 )->c;	if ( c == '}' || c == ')' || c == ']' ) {	    ok2 = checkClosedParen( cursor );	    ret = ok2 || ret;	}    }    return ret;}bool ParenMatcher::checkOpenParen( Q3TextCursor *cursor ){    if ( !cursor->paragraph()->extraData() )	return false;    ParenList parenList = ( (ParagData*)cursor->paragraph()->extraData() )->parenList;    Paren openParen, closedParen;    Q3TextParagraph *closedParenParag = cursor->paragraph();    int i = 0;    int ignore = 0;    bool foundOpen = false;    QChar c = cursor->paragraph()->at( cursor->index() )->c;    for (;;) {	if ( !foundOpen ) {	    if ( i >= (int)parenList.count() )		goto bye;	    openParen = parenList[ i ];	    if ( openParen.pos != cursor->index() ) {		++i;		continue;	    } else {		foundOpen = true;		++i;	    }	}	if ( i >= (int)parenList.count() ) {	    for (;;) {		closedParenParag = closedParenParag->next();		if ( !closedParenParag )		    goto bye;		if ( closedParenParag->extraData() &&		     ( (ParagData*)closedParenParag->extraData() )->parenList.count() > 0 ) {		    parenList = ( (ParagData*)closedParenParag->extraData() )->parenList;		    break;		}	    }	    i = 0;	}	closedParen = parenList[ i ];	if ( closedParen.type == Paren::Open ) {	    ignore++;	    ++i;	    continue;	} else {	    if ( ignore > 0 ) {		ignore--;		++i;		continue;	    }	    int id = Match;	    if ( c == '{' && closedParen.chr != '}' ||		 c == '(' && closedParen.chr != ')' ||		 c == '[' && closedParen.chr != ']' )		id = Mismatch;	    cursor->document()->setSelectionStart( id, *cursor );	    int tidx = cursor->index();	    Q3TextParagraph *tstring = cursor->paragraph();	    cursor->setParagraph( closedParenParag );	    cursor->setIndex( closedParen.pos + 1 );	    cursor->document()->setSelectionEnd( id, *cursor );	    cursor->setParagraph( tstring );	    cursor->setIndex( tidx );	    return true;	}    } bye:    return false;}bool ParenMatcher::checkClosedParen( Q3TextCursor *cursor ){    if ( !cursor->paragraph()->extraData() )	return false;    ParenList parenList = ( (ParagData*)cursor->paragraph()->extraData() )->parenList;    Paren openParen, closedParen;    Q3TextParagraph *openParenParag = cursor->paragraph();    int i = parenList.count() - 1;    int ignore = 0;    bool foundClosed = false;    QChar c = cursor->paragraph()->at( cursor->index() - 1 )->c;    for (;;) {	if ( !foundClosed ) {	    if ( i < 0 )		goto bye;	    closedParen = parenList[ i ];	    if ( closedParen.pos != cursor->index() - 1 ) {		--i;		continue;	    } else {		foundClosed = true;		--i;	    }	}	if ( i < 0 ) {	    for (;;) {		openParenParag = openParenParag->prev();		if ( !openParenParag )		    goto bye;		if ( openParenParag->extraData() &&		     ( (ParagData*)openParenParag->extraData() )->parenList.count() > 0 ) {		    parenList = ( (ParagData*)openParenParag->extraData() )->parenList;		    break;		}	    }	    i = parenList.count() - 1;	}	openParen = parenList[ i ];	if ( openParen.type == Paren::Closed ) {	    ignore++;	    --i;	    continue;	} else {	    if ( ignore > 0 ) {		ignore--;		--i;		continue;	    }	    int id = Match;	    if ( c == '}' && openParen.chr != '{' ||		 c == ')' && openParen.chr != '(' ||		 c == ']' && openParen.chr != '[' )		id = Mismatch;	    cursor->document()->setSelectionStart( id, *cursor );	    int tidx = cursor->index();	    Q3TextParagraph *tstring = cursor->paragraph();	    cursor->setParagraph( openParenParag );	    cursor->setIndex( openParen.pos );	    cursor->document()->setSelectionEnd( id, *cursor );	    cursor->setParagraph( tstring );	    cursor->setIndex( tidx );	    return true;	}    } bye:    return false;}

⌨️ 快捷键说明

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