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

📄 phrase.cpp

📁 Linux下的基于X11的图形开发环境。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2001 Trolltech AS.  All rights reserved.**** This file is part of Qt Linguist.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "phrase.h"#include <qapplication.h>#include <qcstring.h>#include <qfile.h>#include <qmessagebox.h>#include <qregexp.h>#include <qtextstream.h>#include <qxml.h>static QCString protect( const QCString& str ){    QCString p = str;    p.replace( QRegExp("\""), "&quot;" );    p.replace( QRegExp("&"), "&amp;" );    p.replace( QRegExp(">"), "&gt;" );    p.replace( QRegExp("<"), "&lt;" );    p.replace( QRegExp("'"), "&apos;" );    return p;}Phrase::Phrase( const QString& source, const QString& target,		const QString& definition )    : s( source ), t( target ), d( definition ){}bool operator==( const Phrase& p, const Phrase& q ){    return p.source() == q.source() && p.target() == q.target() &&	   p.definition() == q.definition();}class QphHandler : public QXmlDefaultHandler{public:    QphHandler( PhraseBook *phraseBook )	: pb( phraseBook ), ferrorCount( 0 ) { }    virtual bool startElement( const QString& namespaceURI,			       const QString& localName, const QString& qName,			       const QXmlAttributes& atts );    virtual bool endElement( const QString& namespaceURI,			     const QString& localName, const QString& qName );    virtual bool characters( const QString& ch );    virtual bool fatalError( const QXmlParseException& exception );private:    PhraseBook *pb;    QString source;    QString target;    QString definition;    QString accum;    int ferrorCount;};bool QphHandler::startElement( const QString& /* namespaceURI */,			       const QString& /* localName */,			       const QString& qName,			       const QXmlAttributes& /* atts */ ){    if ( qName == QString("phrase") ) {	source.truncate( 0 );	target.truncate( 0 );	definition.truncate( 0 );    }    accum.truncate( 0 );    return TRUE;}bool QphHandler::endElement( const QString& /* namespaceURI */,			     const QString& /* localName */,			     const QString& qName ){    if ( qName == QString("source") )	source = accum;    else if ( qName == QString("target") )	target = accum;    else if ( qName == QString("definition") )	definition = accum;    else if ( qName == QString("phrase") )	pb->append( Phrase(source, target, definition) );    return TRUE;}bool QphHandler::characters( const QString& ch ){    accum += ch;    return TRUE;}bool QphHandler::fatalError( const QXmlParseException& exception ){    if ( ferrorCount++ == 0 ) {	QString msg;	msg.sprintf( "Parse error at line %d, column %d (%s).",		     exception.lineNumber(), exception.columnNumber(),		     exception.message().latin1() );	QMessageBox::information( qApp->mainWidget(),				  QObject::tr("Qt Linguist"), msg );    }    return FALSE;}bool PhraseBook::load( const QString& filename ){    QFile f( filename );    if ( !f.open(IO_ReadOnly) )	return FALSE;    QTextStream t( &f );    QXmlInputSource in( t );    QXmlSimpleReader reader;    // don't click on these!    reader.setFeature( "http://xml.org/sax/features/namespaces", FALSE );    reader.setFeature( "http://xml.org/sax/features/namespace-prefixes", TRUE );    reader.setFeature( "http://trolltech.com/xml/features/report-whitespace"		       "-only-CharData", FALSE );    QXmlDefaultHandler *hand = new QphHandler( this );    reader.setContentHandler( hand );    reader.setErrorHandler( hand );    bool ok = reader.parse( in );    reader.setContentHandler( 0 );    reader.setErrorHandler( 0 );    delete hand;    f.close();    if ( !ok )	clear();    return ok;}bool PhraseBook::save( const QString& filename ) const{    QFile f( filename );    if ( !f.open(IO_WriteOnly) )	return FALSE;    QTextStream t( &f );    t << "<!DOCTYPE QPH><QPH>\n";    ConstIterator p;    for ( p = begin(); p != end(); ++p ) {	t << "<phrase>\n";	t << "    <source>" << protect( (*p).source().utf8() ) << "</source>\n";	t << "    <target>" << protect( (*p).target().utf8() ) << "</target>\n";	if ( !(*p).definition().isEmpty() )	    t << "    <definition>" << protect( (*p).definition().utf8() )	      << "</definition>\n";	t << "</phrase>\n";    }    t << "</QPH>\n";    f.close();    return TRUE;}

⌨️ 快捷键说明

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