23 #ifndef __KMIME_HEADER_PARSING_H__
24 #define __KMIME_HEADER_PARSING_H__
26 #include <QtCore/QString>
27 #include <QtCore/QPair>
28 #include <QtCore/QList>
30 #include <kdatetime.h>
32 #include "kmime_export.h"
34 template <
typename K,
typename V>
class QMap;
49 struct KMIME_EXPORT QStringOrQPair {
50 QStringOrQPair() : qstring(), qpair( 0, 0 ) {}
52 QPair<const char*, int> qpair;
55 struct KMIME_EXPORT AddrSpec {
56 QString asString()
const;
58 QString asPrettyString()
const;
63 typedef 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;
171 typedef QList<Mailbox> MailboxList;
173 struct KMIME_EXPORT Address {
175 MailboxList mailboxList;
177 typedef QList<Address> AddressList;
181 namespace HeaderParsing {
198 KMIME_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 );
210 KMIME_EXPORT
bool parseAtom(
const char* &scursor,
const char *
const send,
211 QString &result,
bool allow8Bit=
false );
213 KMIME_EXPORT
bool parseAtom(
const char* &scursor,
const char *
const send,
214 QPair<const char*,int> &result,
215 bool allow8Bit=
false );
219 KMIME_EXPORT
bool parseToken(
const char* &scursor,
const char *
const send,
220 QString &result,
bool allow8Bit=
false );
222 KMIME_EXPORT
bool parseToken(
const char* &scursor,
const char *
const send,
223 QPair<const char*,int> &result,
224 bool allow8Bit=
false );
227 KMIME_EXPORT
bool parseGenericQuotedString(
const char* &scursor,
228 const char*
const send,
229 QString &result,
bool isCRLF,
230 const char openChar=
'"',
231 const char closeChar=
'"' );
234 KMIME_EXPORT
bool parseComment(
const char* &scursor,
const char *
const send,
235 QString &result,
bool isCRLF=
false,
236 bool reallySave=
true );
253 KMIME_EXPORT
bool parsePhrase(
const char* &scursor,
const char *
const send,
254 QString &result,
bool isCRLF=
false );
268 KMIME_EXPORT
bool parseDotAtom(
const char* &scursor,
const char *
const send,
269 QString &result,
bool isCRLF=
false );
285 KMIME_EXPORT
void eatCFWS(
const char* &scursor,
const char *
const send,
288 KMIME_EXPORT
bool parseDomain(
const char* &scursor,
const char *
const send,
289 QString &result,
bool isCRLF=
false );
291 KMIME_EXPORT
bool parseObsRoute(
const char* &scursor,
const char *
const send,
292 QStringList &result,
bool isCRLF=
false,
295 KMIME_EXPORT
bool parseAddrSpec(
const char* &scursor,
const char *
const send,
296 Types::AddrSpec &result,
bool isCRLF=
false );
298 KMIME_EXPORT
bool parseAngleAddr(
const char* &scursor,
const char *
const send,
299 Types::AddrSpec &result,
bool isCRLF=
false );
317 KMIME_EXPORT
bool parseMailbox(
const char* &scursor,
const char *
const send,
318 Types::Mailbox &result,
bool isCRLF=
false );
320 KMIME_EXPORT
bool parseGroup(
const char* &scursor,
const char *
const send,
321 Types::Address &result,
bool isCRLF=
false );
323 KMIME_EXPORT
bool parseAddress(
const char* &scursor,
const char *
const send,
324 Types::Address &result,
bool isCRLF=
false );
326 KMIME_EXPORT
bool parseAddressList(
const char* &scursor,
327 const char *
const send,
328 Types::AddressList &result,
331 KMIME_EXPORT
bool parseParameter(
const char* &scursor,
const char *
const send,
332 QPair<QString,Types::QStringOrQPair> &result,
335 KMIME_EXPORT
bool parseParameterList(
const char* &scursor,
336 const char *
const send,
337 QMap<QString,QString> &result,
340 KMIME_EXPORT
bool parseRawParameterList(
const char* &scursor,
341 const char *
const send,
342 QMap<QString,Types::QStringOrQPair> &result,
350 KMIME_EXPORT
bool parseParameterListWithCharset(
const char* &scursor,
351 const char *
const send,
352 QMap<QString,QString> &result,
353 QByteArray& charset,
bool isCRLF=
false );
362 KMIME_EXPORT
int parseDigits(
const char* &scursor,
const char*
const send,
int &result );
364 KMIME_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 );
369 KMIME_EXPORT
bool parseDateTime(
const char* &scursor,
const char *
const send,
370 KDateTime &result,
bool isCRLF=
false );
390 KMIME_EXPORT
void extractHeaderAndBody(
const QByteArray &content,
391 QByteArray &header, QByteArray &body );
398 #endif // __KMIME_HEADER_PARSING_H__
Represents an (email address, display name) pair according RFC 2822, section 3.4. ...
Quoting
Describes how display names should be quoted.