libtranscript
/home/gertjan/projects/transcript/src/transcript.h
00001 /* Copyright (C) 2011 G.P. Halkes
00002    This program is free software: you can redistribute it and/or modify
00003    it under the terms of the GNU General Public License version 3, as
00004    published by the Free Software Foundation.
00005 
00006    This program is distributed in the hope that it will be useful,
00007    but WITHOUT ANY WARRANTY; without even the implied warranty of
00008    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00009    GNU General Public License for more details.
00010 
00011    You should have received a copy of the GNU General Public License
00012    along with this program.  If not, see <http://www.gnu.org/licenses/>.
00013 */
00014 #ifndef TRANSCRIPT_H
00015 #define TRANSCRIPT_H
00016 
00017 #ifdef __cplusplus
00018 extern "C" {
00019 #endif
00020 
00021 #include <stdlib.h>
00022 #include <stdint.h>
00023 
00024 #include <transcript/api.h>
00025 
00043 #define TRANSCRIPT_VERSION 0
00044 
00048 typedef struct transcript_t transcript_t;
00049 
00051 enum transcript_flags_t {
00052         TRANSCRIPT_ALLOW_FALLBACK = (1<<0), 
00056         TRANSCRIPT_SUBST_UNASSIGNED = (1<<1), 
00057         TRANSCRIPT_SUBST_ILLEGAL = (1<<2), 
00058         TRANSCRIPT_ALLOW_PRIVATE_USE = (1<<3), 
00060         /* These are only valid as argument to transcript_from_unicode and transcript_to_unicode. */
00061         TRANSCRIPT_FILE_START = (1<<8), 
00070         TRANSCRIPT_END_OF_TEXT = (1<<9),
00075         TRANSCRIPT_SINGLE_CONVERSION = (1<<10),
00080         TRANSCRIPT_NO_MN_CONVERSION = (1<<11),
00085         TRANSCRIPT_NO_1N_CONVERSION = (1<<12)
00086 
00087         /* NOTE: internal flags are defined in transcript_internal.h and moduledefs.h. Make sure these don't overlap! */
00088 };
00089 
00091 typedef enum {
00092         TRANSCRIPT_SUCCESS, 
00093         TRANSCRIPT_NO_SPACE, 
00094         TRANSCRIPT_INCOMPLETE, 
00096         TRANSCRIPT_FALLBACK, 
00097         TRANSCRIPT_UNASSIGNED, 
00098         TRANSCRIPT_ILLEGAL, 
00099         TRANSCRIPT_ILLEGAL_END, 
00100         TRANSCRIPT_INTERNAL_ERROR, 
00101         TRANSCRIPT_PRIVATE_USE, 
00103         TRANSCRIPT_ERRNO, 
00104         TRANSCRIPT_BAD_ARG, 
00105         TRANSCRIPT_OUT_OF_MEMORY, 
00106         TRANSCRIPT_INVALID_FORMAT, 
00107         TRANSCRIPT_TRUNCATED_MAP, 
00108         TRANSCRIPT_WRONG_VERSION, 
00109         TRANSCRIPT_INTERNAL_TABLE, 
00110         TRANSCRIPT_DLOPEN_FAILURE, 
00111         TRANSCRIPT_CONVERTER_DISABLED, 
00112         TRANSCRIPT_PACKAGE_FILE, 
00113         TRANSCRIPT_INIT_DLFCN, 
00114         TRANSCRIPT_NOT_INITIALIZED, 
00116         TRANSCRIPT_PART_SUCCESS_MAX = TRANSCRIPT_INCOMPLETE 
00118 } transcript_error_t;
00119 
00120 typedef enum {
00121         TRANSCRIPT_UTF8 = 1,
00122         TRANSCRIPT_UTF16,
00123         TRANSCRIPT_UTF32,
00124         TRANSCRIPT_UTF16BE,
00125         TRANSCRIPT_UTF16LE,
00126         TRANSCRIPT_UTF32BE,
00127         TRANSCRIPT_UTF32LE,
00128         _TRANSCRIPT_UTFLAST
00129 } transcript_utf_t;
00130 
00131 
00132 #ifndef _TRANSCRIPT_CONST
00133 #define _TRANSCRIPT_CONST const
00134 #endif
00135 
00139 typedef struct {
00140         _TRANSCRIPT_CONST char *name; 
00141         int available; 
00145 } transcript_name_t;
00146 
00148 #define TRANSCRIPT_SAVE_STATE_SIZE 32
00149 
00150 TRANSCRIPT_API transcript_error_t transcript_init(void);
00151 TRANSCRIPT_API void transcript_finalize(void);
00152 TRANSCRIPT_API int transcript_probe_converter(const char *name);
00153 TRANSCRIPT_API transcript_t *transcript_open_converter(const char *name, transcript_utf_t utf_type, int flags, transcript_error_t *error);
00154 TRANSCRIPT_API void transcript_close_converter(transcript_t *handle);
00155 TRANSCRIPT_API int transcript_equal(const char *name_a, const char *name_b);
00156 TRANSCRIPT_API transcript_error_t transcript_to_unicode(transcript_t *handle, const char **inbuf,
00157         const char *inbuflimit, char **outbuf, const char *outbuflimit, int flags);
00158 TRANSCRIPT_API transcript_error_t transcript_from_unicode(transcript_t *handle, const char **inbuf,
00159         const char *inbuflimit, char **outbuf, const char *outbuflimit, int flags);
00160 TRANSCRIPT_API transcript_error_t transcript_to_unicode_skip(transcript_t *handle, const char **inbuf, const char *inbuflimit);
00161 TRANSCRIPT_API transcript_error_t transcript_from_unicode_skip(transcript_t *handle, const char **inbuf, const char *inbuflimit);
00162 TRANSCRIPT_API transcript_error_t transcript_from_unicode_flush(transcript_t *handle, char **outbuf, const char *outbuflimit);
00163 TRANSCRIPT_API void transcript_to_unicode_reset(transcript_t *handle);
00164 TRANSCRIPT_API void transcript_from_unicode_reset(transcript_t *handle);
00165 TRANSCRIPT_API void transcript_save_state(transcript_t *handle, void *state);
00166 /*FIXME: should we do loading (and perhaps saving) per direction?*/
00167 TRANSCRIPT_API void transcript_load_state(transcript_t *handle, void *state);
00168 TRANSCRIPT_API const char *transcript_strerror(transcript_error_t error);
00169 TRANSCRIPT_API const transcript_name_t *transcript_get_names(int *count);
00170 TRANSCRIPT_API void transcript_normalize_name(const char *name, char *normalized_name, size_t normalized_name_max);
00171 TRANSCRIPT_API const char *transcript_get_codeset(void);
00172 TRANSCRIPT_API long transcript_get_version(void);
00173 
00175 #define TRANSCRIPT_MIN_UNICODE_BUFFER_SIZE (4*20)
00176 
00177 #define TRANSCRIPT_MIN_CODEPAGE_BUFFER_SIZE (32)
00178 
00180 #define TRANSCRIPT_MIN_BUFFER_SIZE TRANSCRIPT_MIN_UNICODE_BUFFER_SIZE
00181 
00184 #if defined(TRANSCRIPT_ICONV_API) || defined(TRANSCRIPT_ICONV)
00185 
00199 typedef struct _transcript_iconv_t *transcript_iconv_t;
00200 
00201 TRANSCRIPT_API transcript_iconv_t transcript_iconv_open(const char *tocode, const char *fromcode);
00202 TRANSCRIPT_API int transcript_iconv_close(transcript_iconv_t cd);
00203 TRANSCRIPT_API size_t transcript_iconv(transcript_iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
00204 
00207 #ifdef TRANSCRIPT_ICONV
00208 typedef transcript_iconv_t iconv_t;
00209 #define iconv(_a, _b, _c, _d, _e) transcript_iconv((_a), (_b), (_c), (_d), (_e))
00210 #define iconv_open(_a, _b) transcript_iconv_open((_a), (_b))
00211 #define iconv_close(_a) transcript_iconv_close(_a)
00212 #endif
00213 #endif
00214 
00215 #ifdef __cplusplus
00216 }
00217 #endif
00218 
00219 #endif
 All Data Structures Variables