view src/lib-charset/charset-utf8.h @ 4605:e6cb9f75b76a HEAD

Added charset_is_utf8() and charset_to_ucase_utf8_full().
author Timo Sirainen <tss@iki.fi>
date Sat, 16 Sep 2006 16:50:21 +0300
parents 928229f8b3e6
children e5451501ff2f
line wrap: on
line source

#ifndef __CHARSET_UTF8_H
#define __CHARSET_UTF8_H

enum charset_result {
	CHARSET_RET_OK = 1,
	CHARSET_RET_OUTPUT_FULL = 0,
	CHARSET_RET_INCOMPLETE_INPUT = -1,
	CHARSET_RET_INVALID_INPUT = -2
};

/* Begin translation to UTF-8. */
struct charset_translation *charset_to_utf8_begin(const char *charset,
						  bool *unknown_charset);

void charset_to_utf8_end(struct charset_translation **t);

void charset_to_utf8_reset(struct charset_translation *t);

/* Returns TRUE if charset is UTF-8 or ASCII */
bool charset_is_utf8(const char *charset);

/* Translate src to UTF-8. src_size is updated to contain the number of
   characters actually translated from src. Note that dest buffer is used
   only up to its current size, for growing it automatically use
   charset_to_ucase_utf8_full(). */
enum charset_result
charset_to_ucase_utf8(struct charset_translation *t,
		      const unsigned char *src, size_t *src_size,
		      buffer_t *dest);
enum charset_result
charset_to_ucase_utf8_full(struct charset_translation *t,
			   const unsigned char *src, size_t *src_size,
			   buffer_t *dest);

/* Simple wrappers for above functions. If utf8_size is non-NULL, it's set
   to same as strlen(returned data). */
const char *
charset_to_utf8_string(const char *charset, bool *unknown_charset,
		       const unsigned char *data, size_t size,
		       size_t *utf8_size_r);
const char *
charset_to_ucase_utf8_string(const char *charset, bool *unknown_charset,
			     const unsigned char *data, size_t size,
			     size_t *utf8_size_r);

void _charset_utf8_ucase(const unsigned char *src, size_t src_size,
			 buffer_t *dest, size_t destpos);
const char *_charset_utf8_ucase_strdup(const unsigned char *data, size_t size,
				       size_t *utf8_size_r);

#endif