-rw-r--r-- | noncore/net/opieirc/ircoutput.cpp | 45 | ||||
-rw-r--r-- | noncore/net/opieirc/ircoutput.h | 19 |
2 files changed, 55 insertions, 9 deletions
diff --git a/noncore/net/opieirc/ircoutput.cpp b/noncore/net/opieirc/ircoutput.cpp index 4822fc4..d2c730f 100644 --- a/noncore/net/opieirc/ircoutput.cpp +++ b/noncore/net/opieirc/ircoutput.cpp @@ -1,7 +1,17 @@ +#include <qtopia/stringutil.h> + #include "ircoutput.h" + +IRCOutputEscapeSecuences IRCOutput::m_escapeSecuences[] = { + { '', "<b>", "</b>"}, + { '', "<u>", "</u>"}, + { 0, 0, 0}, +}; + IRCOutput::IRCOutput(IRCOutputType type, QString message) { m_type = type; - m_message = message; + /* Filter color, bold and underline escape sequences, since they aren't implemented yet */ + m_message = message.replace(QRegExp("[1-9]*,*[1-9]*"), ""); } @@ -14,12 +24,36 @@ QString IRCOutput::message() { } +void IRCOutput::setType(IRCOutputType type) { + m_type = type; +} + +void IRCOutput::setMessage(const QString &message) { + m_message = message; +} + QString IRCOutput::htmlMessage() { return toHTML(m_message); } -QString IRCOutput::toHTML(QString message) { - QString htmlMessage =message.replace(QRegExp("&"), "&"); - htmlMessage = htmlMessage.replace(QRegExp(">"), ">"); - htmlMessage = htmlMessage.replace(QRegExp("<"), "<"); +QString IRCOutput::toHTML(const QString &message) { + QString htmlMessage = Qtopia::escapeString(message); + + for(int i=0; m_escapeSecuences[i].escape != 0;++i) { + int pos = 0; + bool isOpen = false; + while( (pos = htmlMessage.find(m_escapeSecuences[i].escape, pos)) != -1) { + htmlMessage.remove(pos, 1); + if(isOpen) + htmlMessage.insert(pos, m_escapeSecuences[i].close); + else + htmlMessage.insert(pos, m_escapeSecuences[i].open); + + isOpen = !isOpen; + } + if(isOpen) + htmlMessage.append(m_escapeSecuences[i].close); + } + + htmlMessage = htmlMessage.replace(QRegExp("\n"), "<br>"); return htmlMessage; } @@ -32,2 +66,3 @@ void *IRCOutput::getParam(int index) { return m_parameters.at(index); } + diff --git a/noncore/net/opieirc/ircoutput.h b/noncore/net/opieirc/ircoutput.h index 9c0b8bb..934dbda 100644 --- a/noncore/net/opieirc/ircoutput.h +++ b/noncore/net/opieirc/ircoutput.h @@ -46,5 +46,12 @@ enum IRCOutputType { OUTPUT_QUERYACTION = 15, /* parameters : person (IRCPerson) */ OUTPUT_CHANPERSONMODE = 16, /* parameters : channel (IRCCHannel) person (IRCChannelPerson) */ - OUTPUT_TOPIC = 17 /* parameters : channel (IRCChannel) */ + OUTPUT_TOPIC = 17, /* parameters : channel (IRCChannel) */ + OUTPUT_TITLE = 18 /* parameters : channel (IRCChannel) */ +}; + +typedef struct IRCOutputEscapeSecuences { + char escape; + char *open; + char *close; }; @@ -55,5 +62,5 @@ enum IRCOutputType { class IRCOutput { public: - IRCOutput(IRCOutputType type, QString message); + IRCOutput(IRCOutputType type = OUTPUT_SERVERMESSAGE, QString message = QString::null); /* Used to add a parameter to this IRCOutput. Parameters are dependent on which IRCOutputType we are using (see above) */ @@ -64,6 +71,9 @@ public: /* Return the message with all HTML code escaped (for example < instead of '<') */ QString htmlMessage(); - - static QString toHTML(QString message); + + void setType(IRCOutputType); + void setMessage(const QString &message); + + static QString toHTML(const QString &message); void *getParam(int index); protected: @@ -71,4 +81,5 @@ protected: QString m_message; QList<void> m_parameters; + static IRCOutputEscapeSecuences m_escapeSecuences[]; }; |