Various changes for IRC plugin, not yet usable.
[kdenetwork.git] / kopete / protocols / irc / libkirc / kernel / kbytearrayescaper.cpp
blob7cad60f89374e94aaa44cc6b28e6e1e49333b1cf
1 /*
2 kbytearrayescaper.cpp - A small class that allow to (un)escape a QByteArray using custom escape sequences.
4 Copyright (c) 2003-2007 by Michel Hermier <michel.hermier@gmail.com>
6 Kopete (c) 2003-2007 by the Kopete developers <kopete-devel@kde.org>
8 *************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 *************************************************************************
18 #include "kbytearrayescaper.h"
20 class KByteArrayEscaper::Private
22 public:
23 char escape_char;
24 char escape[256];
25 char reverse[256];
28 KByteArrayEscaper::KByteArrayEscaper(char escape_char, const KByteArrayEscaper::EscapeList &escapes)
29 : d(new KByteArrayEscaper::Private)
31 reset(escape_char);
32 addEscape(escapes);
35 KByteArrayEscaper::~KByteArrayEscaper()
37 delete d;
40 void KByteArrayEscaper::reset(char escape_char)
42 d->escape_char = escape_char;
43 for (int i=0; i<256; ++i)
44 removeEscape(i);
47 void KByteArrayEscaper::addEscape(char escape, char replacement)
49 d->escape[(uchar)escape] = replacement;
50 d->reverse[(uchar)replacement] = escape;
53 void KByteArrayEscaper::addEscape(const KByteArrayEscaper::EscapeList &escapeds)
55 Q_FOREACH(const KByteArrayEscaper::Escape &escaped, escapeds)
56 addEscape(escaped.first, escaped.second);
59 void KByteArrayEscaper::removeEscape(char escape)
61 addEscape(escape, escape);
64 QByteArray KByteArrayEscaper::escape(const QByteArray &buffer) const
66 #ifdef __GNUC__
67 #warning implement me
68 #endif
69 return buffer;
71 #if 0
72 QByteArray quoted;
73 // ret.resize(buffer.size()*1.10);
75 char escaped;
76 foreach (char c, buffer)
78 escaped = d->escaped[(uchar)c];
79 if(c != escaped || c == d->escape)
80 quoted += d->escape;
81 quoted += escaped;
83 return quoted;
84 #endif
87 QList<QByteArray> KByteArrayEscaper::escape(const QList<QByteArray> &buffers) const
89 QList<QByteArray> ret;
90 Q_FOREACH(const QByteArray &buffer, buffers)
91 ret.append(escape(buffer));
92 return ret;
95 QByteArray KByteArrayEscaper::unescape(const QByteArray &buffer) const
97 #ifdef __GNUC__
98 #warning implement me
99 #endif
100 return buffer;
102 #if 0
103 QByteArray quoted;
104 // ret.resize(buffer.size()*1.10);
106 bool escaped = false;
107 foreach (char c, buffer)
109 if (escaped)
110 quoted += d->reverse[(uchar)c];
111 escaped = !escaped && c == d->escape;
112 if (!escaped)
113 quoted += c;
115 if (quoted)
116 ret += d->escape;
118 return quoted;
119 #endif
122 QList<QByteArray> KByteArrayEscaper::unescape(const QList<QByteArray> &buffers) const
124 QList<QByteArray> ret;
125 Q_FOREACH(const QByteArray &buffer, buffers)
126 ret.append(unescape(buffer));
127 return ret;