/**********************************************************************
 *
 *   rfccodecs  - handler for various rfc/mime encodings
 *   Copyright (C) 2000 s.carstens@gmx.de
 *
 *   This library is free software; you can redistribute it and/or
 *   modify it under the terms of the GNU Library General Public
 *   License as published by the Free Software Foundation; either
 *   version 2 of the License, or (at your option) any later version.
 *
 *   This library is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *   Library General Public License for more details.
 *
 *   You should have received a copy of the GNU Library General Public License
 *   along with this library; see the file COPYING.LIB.  If not, write to
 *   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 *   Boston, MA 02110-1301, USA.
 *
 *********************************************************************/
/**
 * @file
 * This file is part of the IMAP support library and defines the
 * RfcCodecs class.
 *
 * @brief
 * Provides handlers for various RFC/MIME encodings.
 *
 * @author Sven Carstens
 */

#ifndef KIMAP2_RFCCODECS_H
#define KIMAP2_RFCCODECS_H

#include <QtCore/QString>

#include "kimap2_export.h"

class QTextCodec;

namespace KIMAP2
{

/**
  Converts an Unicode IMAP mailbox to a QByteArray which can be used in
  IMAP communication.
  @param src is the QByteArray containing the IMAP mailbox.
  @since 4.3
*/
KIMAP2_EXPORT QByteArray encodeImapFolderName(const QByteArray &src);

/**
  Converts an UTF-7 encoded IMAP mailbox to a QByteArray
  @param inSrc is the QByteArray containing the Unicode path.
  @since 4.3
*/
KIMAP2_EXPORT QByteArray decodeImapFolderName(const QByteArray &inSrc);
/**
  Converts an Unicode IMAP mailbox to a QString which can be used in
  IMAP communication.
  @param src is the QString containing the IMAP mailbox.
*/
KIMAP2_EXPORT QString encodeImapFolderName(const QString &src);

/**
  Converts an UTF-7 encoded IMAP mailbox to a Unicode QString.
  @param inSrc is the QString containing the Unicode path.
*/
KIMAP2_EXPORT QString decodeImapFolderName(const QString &inSrc);

/**
  Replaces " with \" and \ with \\ " and \ characters.
  @param src is the QString to quote.
*/
KIMAP2_EXPORT QString quoteIMAP(const QString &src);

/**
  Replaces " with \" and \ with \\ " and \ characters.
  @param src is the QString to quote.
  @since 4.3
*/
KIMAP2_EXPORT QByteArray quoteIMAP(const QByteArray &src);

/**
  Fetches a Codec by @p name.
  @param name is the QString version of the Codec name.
  @return Text Codec object
*/
KIMAP2_EXPORT QTextCodec *codecForName(const QString &name);

/**
  Decodes a RFC2047 string @p str.
  @param str is the QString to decode.
  @param charset is the character set to use when decoding.
  @param language is the language found in the charset.
*/
KIMAP2_EXPORT const QString decodeRFC2047String(const QString &str,
        QString &charset,
        QString &language);
/**
  Decodes a RFC2047 string @p str.
  @param str is the QString to decode.
  @param charset is the character set to use when decoding.
*/
KIMAP2_EXPORT const QString decodeRFC2047String(const QString &str,
        QString &charset);

/**
  Decodes a RFC2047 string @p str.
  @param str is the QString to decode.
*/
KIMAP2_EXPORT const QString decodeRFC2047String(const QString &str);

/**
  Encodes a RFC2047 string @p str.
  @param str is the QString to encode.
*/
KIMAP2_EXPORT const QString encodeRFC2047String(const QString &str);

/**
  Encodes a RFC2047 string @p str.
  @param str is the QString to encode.
*/
KIMAP2_EXPORT const QByteArray encodeRFC2047String(const QByteArray &str);

/**
  Encodes a RFC2231 string @p str.
  @param str is the QString to encode.
*/
KIMAP2_EXPORT const QString encodeRFC2231String(const QString &str);

/**
  Decodes a RFC2231 string @p str.
  @param str is the QString to decode.
*/
KIMAP2_EXPORT const QString decodeRFC2231String(const QString &str);
}

#endif
