23 #ifndef __KMIME_HEADER_PARSING_H__
24 #define __KMIME_HEADER_PARSING_H__
26 #include <QtCore/QString>
27 #include <QtCore/QPair>
29 #include <kdatetime.h>
31 #include "kmime_export.h"
33 template <
typename K,
typename V>
class QMap;
48 struct KMIME_EXPORT QStringOrQPair {
49 QStringOrQPair() : qstring(), qpair( 0, 0 ) {}
51 QPair<const char*, int> qpair;
54 struct KMIME_EXPORT AddrSpec {
55 QString asString()
const;
57 QString asPrettyString()
const;
62 typedef QList<AddrSpec> AddrSpecList;
71 typedef QList<Mailbox> List;
77 QByteArray address()
const;
79 AddrSpec addrSpec()
const;
89 void setAddress(
const AddrSpec &addr );
94 void setAddress(
const QByteArray &addr );
99 void setName(
const QString &name );
104 void setNameFrom7Bit(
const QByteArray &name,
105 const QByteArray &defaultCharset = QByteArray() );
110 bool hasAddress()
const;
115 bool hasName()
const;
122 QString prettyAddress()
const;
146 QString prettyAddress( Quoting quoting )
const;
151 void fromUnicodeString(
const QString &s );
156 void from7BitString(
const QByteArray &s );
163 QByteArray as7BitString(
const QByteArray &encCharset )
const;
166 QString mDisplayName;
170 typedef QList<Mailbox> MailboxList;
172 struct KMIME_EXPORT Address {
174 MailboxList mailboxList;
176 typedef QList<Address> AddressList;
180 namespace HeaderParsing {
197 KMIME_EXPORT
bool parseEncodedWord(
const char* &scursor,
198 const char *
const send,
199 QString &result, QByteArray &language,
200 QByteArray &usedCS,
const QByteArray &defaultCS = QByteArray(),
201 bool forceCS =
false );
209 KMIME_EXPORT
bool parseAtom(
const char* &scursor,
const char *
const send,
210 QString &result,
bool allow8Bit=
false );
212 KMIME_EXPORT
bool parseAtom(
const char* &scursor,
const char *
const send,
213 QPair<const char*,int> &result,
214 bool allow8Bit=
false );
218 KMIME_EXPORT
bool parseToken(
const char* &scursor,
const char *
const send,
219 QString &result,
bool allow8Bit=
false );
221 KMIME_EXPORT
bool parseToken(
const char* &scursor,
const char *
const send,
222 QPair<const char*,int> &result,
223 bool allow8Bit=
false );
226 KMIME_EXPORT
bool parseGenericQuotedString(
const char* &scursor,
227 const char*
const send,
228 QString &result,
bool isCRLF,
229 const char openChar=
'"',
230 const char closeChar=
'"' );
233 KMIME_EXPORT
bool parseComment(
const char* &scursor,
const char *
const send,
234 QString &result,
bool isCRLF=
false,
235 bool reallySave=
true );
252 KMIME_EXPORT
bool parsePhrase(
const char* &scursor,
const char *
const send,
253 QString &result,
bool isCRLF=
false );
267 KMIME_EXPORT
bool parseDotAtom(
const char* &scursor,
const char *
const send,
268 QString &result,
bool isCRLF=
false );
284 KMIME_EXPORT
void eatCFWS(
const char* &scursor,
const char *
const send,
287 KMIME_EXPORT
bool parseDomain(
const char* &scursor,
const char *
const send,
288 QString &result,
bool isCRLF=
false );
290 KMIME_EXPORT
bool parseObsRoute(
const char* &scursor,
const char *
const send,
291 QStringList &result,
bool isCRLF=
false,
294 KMIME_EXPORT
bool parseAddrSpec(
const char* &scursor,
const char *
const send,
295 Types::AddrSpec &result,
bool isCRLF=
false );
297 KMIME_EXPORT
bool parseAngleAddr(
const char* &scursor,
const char *
const send,
298 Types::AddrSpec &result,
bool isCRLF=
false );
316 KMIME_EXPORT
bool parseMailbox(
const char* &scursor,
const char *
const send,
317 Types::Mailbox &result,
bool isCRLF=
false );
319 KMIME_EXPORT
bool parseGroup(
const char* &scursor,
const char *
const send,
320 Types::Address &result,
bool isCRLF=
false );
322 KMIME_EXPORT
bool parseAddress(
const char* &scursor,
const char *
const send,
323 Types::Address &result,
bool isCRLF=
false );
325 KMIME_EXPORT
bool parseAddressList(
const char* &scursor,
326 const char *
const send,
327 Types::AddressList &result,
330 KMIME_EXPORT
bool parseParameter(
const char* &scursor,
const char *
const send,
331 QPair<QString,Types::QStringOrQPair> &result,
334 KMIME_EXPORT
bool parseParameterList(
const char* &scursor,
335 const char *
const send,
336 QMap<QString,QString> &result,
339 KMIME_EXPORT
bool parseRawParameterList(
const char* &scursor,
340 const char *
const send,
341 QMap<QString,Types::QStringOrQPair> &result,
349 KMIME_EXPORT
bool parseParameterListWithCharset(
const char* &scursor,
350 const char *
const send,
351 QMap<QString,QString> &result,
352 QByteArray& charset,
bool isCRLF=
false );
361 KMIME_EXPORT
int parseDigits(
const char* &scursor,
const char*
const send,
int &result );
363 KMIME_EXPORT
bool parseTime(
const char* &scursor,
const char *
const send,
364 int &hour,
int &min,
int &sec,
365 long int &secsEastOfGMT,
366 bool &timeZoneKnown,
bool isCRLF=
false );
368 KMIME_EXPORT
bool parseDateTime(
const char* &scursor,
const char *
const send,
369 KDateTime &result,
bool isCRLF=
false );
389 KMIME_EXPORT
void extractHeaderAndBody(
const QByteArray &content,
390 QByteArray &header, QByteArray &body );
397 #endif // __KMIME_HEADER_PARSING_H__