/*************************************************************************** autoreplaceplugin.cpp - description ------------------- begin : 20030425 copyright : (C) 2003 by Roberto Pariset email : victorheremita@fastwebnet.it ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include "kopetechatsessionmanager.h" #include "kopetesimplemessagehandler.h" #include "autoreplaceplugin.h" #include "autoreplaceconfig.h" typedef KGenericFactory AutoReplacePluginFactory; K_EXPORT_COMPONENT_FACTORY( kopete_autotqreplace, AutoReplacePluginFactory( "kopete_autotqreplace" ) ) AutoReplacePlugin * AutoReplacePlugin::pluginStatic_ = 0L; AutoReplacePlugin::AutoReplacePlugin( TQObject *tqparent, const char * name, const TQStringList & ) : Kopete::Plugin( AutoReplacePluginFactory::instance(), tqparent, name ) { if( !pluginStatic_ ) pluginStatic_ = this; m_prefs = new AutoReplaceConfig; connect( Kopete::ChatSessionManager::self(), TQT_SIGNAL( aboutToSend( Kopete::Message & ) ), this, TQT_SLOT( slotAboutToSend( Kopete::Message & ) ) ); // nb this connection causes the slot to be called on in- and outbound // messages which suggests something is broken in the message handler // system! m_inboundHandler = new Kopete::SimpleMessageHandlerFactory( Kopete::Message::Inbound, Kopete::MessageHandlerFactory::InStageToSent, this, TQT_SLOT( slotAboutToSend( Kopete::Message& ) ) ); connect( this, TQT_SIGNAL( settingsChanged() ), this, TQT_SLOT( slotSettingsChanged() ) ); } AutoReplacePlugin::~AutoReplacePlugin() { pluginStatic_ = 0L; delete m_inboundHandler; delete m_prefs; } AutoReplacePlugin * AutoReplacePlugin::plugin() { return pluginStatic_ ; } void AutoReplacePlugin::slotSettingsChanged() { m_prefs->load(); } void AutoReplacePlugin::slotAboutToSend( Kopete::Message &msg ) { if ( ( msg.direction() == Kopete::Message::Outbound && m_prefs->autoReplaceOutgoing() ) || ( msg.direction() == Kopete::Message::Inbound && m_prefs->autoReplaceIncoming() ) ) { TQString replaced_message = msg.plainBody(); AutoReplaceConfig::WordsToReplace map = m_prefs->map(); // replaces all matched words --> try to find a more 'economic' way // "\\b(%1)\\b" doesn't work when substituting /me. TQString match = "(^|\\s|\\.|\\;|\\,|\\:)(%1)(\\b)"; AutoReplaceConfig::WordsToReplace::Iterator it; bool isReplaced=false; for ( it = map.begin(); it != map.end(); ++it ) { TQRegExp re( match.tqarg( TQRegExp::escape( it.key() ) ) ); if( re.search( replaced_message ) != -1 ) { TQString before = re.cap(1); TQString after = re.cap(3); replaced_message.tqreplace( re, before + map.tqfind( it.key() ).data() + after ); isReplaced=true; } } // the message is now the one with replaced words if(isReplaced) msg.setBody( replaced_message, Kopete::Message::PlainText ); if( msg.direction() == Kopete::Message::Outbound ) { if ( m_prefs->dotEndSentence() ) { TQString replaced_message = msg.plainBody(); // eventually add . at the end of the lines, sent lines only replaced_message.tqreplace( TQRegExp( "([a-z])$" ), "\\1." ); // replaced_message.tqreplace(TQRegExp( "([\\w])$" ), "\\1." ); // the message is now the one with replaced words msg.setBody( replaced_message, Kopete::Message::PlainText ); } if( m_prefs->capitalizeBeginningSentence() ) { TQString replaced_message = msg.plainBody(); // eventually start each sent line with capital letter // TODO ". " "? " "! " replaced_message[ 0 ] = replaced_message.tqat( 0 ).upper(); // the message is now the one with replaced words msg.setBody( replaced_message, Kopete::Message::PlainText ); } } } } #include "autoreplaceplugin.moc" // vim: set noet ts=4 sts=4 sw=4: