23#ifndef __KMIME_HEADER_PARSING_H__
24#define __KMIME_HEADER_PARSING_H__
26#include <QtCore/QString>
27#include <QtCore/QPair>
28#include <QtCore/QList>
32#include "kmime_export.h"
34template <
typename K,
typename V>
class QMap;
49struct KMIME_EXPORT QStringOrQPair {
50 QStringOrQPair() : qstring(), qpair( 0, 0 ) {}
52 QPair<const char*, int> qpair;
55struct KMIME_EXPORT AddrSpec {
56 QString asString()
const;
58 QString asPrettyString()
const;
63typedef QList<AddrSpec> AddrSpecList;
72 typedef QList<Mailbox> List;
78 QByteArray address()
const;
80 AddrSpec addrSpec()
const;
90 void setAddress(
const AddrSpec &addr );
95 void setAddress(
const QByteArray &addr );
100 void setName(
const QString &name );
105 void setNameFrom7Bit(
const QByteArray &name,
106 const QByteArray &defaultCharset = QByteArray() );
111 bool hasAddress()
const;
116 bool hasName()
const;
123 QString prettyAddress()
const;
147 QString prettyAddress( Quoting quoting )
const;
152 void fromUnicodeString(
const QString &s );
157 void from7BitString(
const QByteArray &s );
164 QByteArray as7BitString(
const QByteArray &encCharset )
const;
167 QString mDisplayName;
171typedef QList<Mailbox> MailboxList;
173struct KMIME_EXPORT Address {
175 MailboxList mailboxList;
177typedef QList<Address> AddressList;
181namespace HeaderParsing {
198KMIME_EXPORT
bool parseEncodedWord(
const char* &scursor,
199 const char *
const send,
200 QString &result, QByteArray &language,
201 QByteArray &usedCS,
const QByteArray &defaultCS = QByteArray(),
202 bool forceCS =
false );
210KMIME_EXPORT
bool parseAtom(
const char* &scursor,
const char *
const send,
211 QString &result,
bool allow8Bit=
false );
213KMIME_EXPORT
bool parseAtom(
const char* &scursor,
const char *
const send,
214 QPair<const char*,int> &result,
215 bool allow8Bit=
false );
219KMIME_EXPORT
bool parseToken(
const char* &scursor,
const char *
const send,
220 QString &result,
bool allow8Bit=
false );
222KMIME_EXPORT
bool parseToken(
const char* &scursor,
const char *
const send,
223 QPair<const char*,int> &result,
224 bool allow8Bit=
false );
227KMIME_EXPORT
bool parseGenericQuotedString(
const char* &scursor,
228 const char*
const send,
229 QString &result,
bool isCRLF,
230 const char openChar=
'"',
231 const char closeChar=
'"' );
234KMIME_EXPORT
bool parseComment(
const char* &scursor,
const char *
const send,
235 QString &result,
bool isCRLF=
false,
236 bool reallySave=
true );
253KMIME_EXPORT
bool parsePhrase(
const char* &scursor,
const char *
const send,
254 QString &result,
bool isCRLF=
false );
268KMIME_EXPORT
bool parseDotAtom(
const char* &scursor,
const char *
const send,
269 QString &result,
bool isCRLF=
false );
285KMIME_EXPORT
void eatCFWS(
const char* &scursor,
const char *
const send,
288KMIME_EXPORT
bool parseDomain(
const char* &scursor,
const char *
const send,
289 QString &result,
bool isCRLF=
false );
291KMIME_EXPORT
bool parseObsRoute(
const char* &scursor,
const char *
const send,
292 QStringList &result,
bool isCRLF=
false,
295KMIME_EXPORT
bool parseAddrSpec(
const char* &scursor,
const char *
const send,
296 Types::AddrSpec &result,
bool isCRLF=
false );
298KMIME_EXPORT
bool parseAngleAddr(
const char* &scursor,
const char *
const send,
299 Types::AddrSpec &result,
bool isCRLF=
false );
317KMIME_EXPORT
bool parseMailbox(
const char* &scursor,
const char *
const send,
318 Types::Mailbox &result,
bool isCRLF=
false );
320KMIME_EXPORT
bool parseGroup(
const char* &scursor,
const char *
const send,
321 Types::Address &result,
bool isCRLF=
false );
323KMIME_EXPORT
bool parseAddress(
const char* &scursor,
const char *
const send,
324 Types::Address &result,
bool isCRLF=
false );
326KMIME_EXPORT
bool parseAddressList(
const char* &scursor,
327 const char *
const send,
328 Types::AddressList &result,
331KMIME_EXPORT
bool parseParameter(
const char* &scursor,
const char *
const send,
332 QPair<QString,Types::QStringOrQPair> &result,
335KMIME_EXPORT
bool parseParameterList(
const char* &scursor,
336 const char *
const send,
337 QMap<QString,QString> &result,
340KMIME_EXPORT
bool parseRawParameterList(
const char* &scursor,
341 const char *
const send,
342 QMap<QString,Types::QStringOrQPair> &result,
350KMIME_EXPORT
bool parseParameterListWithCharset(
const char* &scursor,
351 const char *
const send,
352 QMap<QString,QString> &result,
353 QByteArray& charset,
bool isCRLF=
false );
362KMIME_EXPORT
int parseDigits(
const char* &scursor,
const char*
const send,
int &result );
364KMIME_EXPORT
bool parseTime(
const char* &scursor,
const char *
const send,
365 int &hour,
int &min,
int &sec,
366 long int &secsEastOfGMT,
367 bool &timeZoneKnown,
bool isCRLF=
false );
369KMIME_EXPORT
bool parseDateTime(
const char* &scursor,
const char *
const send,
370 KDateTime &result,
bool isCRLF=
false );
390KMIME_EXPORT
void extractHeaderAndBody(
const QByteArray &content,
391 QByteArray &header, QByteArray &body );
Represents an (email address, display name) pair according RFC 2822, section 3.4.
Quoting
Describes how display names should be quoted.