83ccfff32b7aeb236ec82988f3b01863a3d0ede0
[yaz-moved-to-github.git] / include / yaz / yaz-iconv.h
1 /*
2  * Copyright (C) 1995-2006, Index Data ApS
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and
5  * its documentation, in whole or in part, for any purpose, is hereby granted,
6  * provided that:
7  *
8  * 1. This copyright and permission notice appear in all copies of the
9  * software and its documentation. Notices of copyright or attribution
10  * which appear at the beginning of any file must remain unchanged.
11  *
12  * 2. The name of Index Data or the individual authors may not be used to
13  * endorse or promote products derived from this software without specific
14  * prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
18  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
19  * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
20  * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
21  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
22  * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24  * OF THIS SOFTWARE.
25  *
26  * $Id: yaz-iconv.h,v 1.11 2006-08-24 10:01:03 adam Exp $
27  */
28 /**
29  * \file yaz-iconv.h
30  * \brief Header for YAZ iconv interface
31  */
32
33 #ifndef YAZ_ICONV_H
34 #define YAZ_ICONV_H
35
36 #include <stddef.h>
37 #include <yaz/yconfig.h>
38
39 YAZ_BEGIN_CDECL
40
41 /** \brief yaz_iconv handle (similar to iconv_t) */
42 typedef struct yaz_iconv_struct *yaz_iconv_t;
43
44 /** \brief error code: unknown */
45 #define YAZ_ICONV_UNKNOWN 1
46 /** \brief error code: Not sufficient room for output buffer */
47 #define YAZ_ICONV_E2BIG 2
48 /** \brief error code: Invalid sequence */
49 #define YAZ_ICONV_EILSEQ 3
50 /** \brief error code: An incomplete multibyte sequence is in input buffer */
51 #define YAZ_ICONV_EINVAL 4
52
53 /** \brief just like iconv_open(3) */
54 YAZ_EXPORT yaz_iconv_t yaz_iconv_open (const char *tocode,
55                                        const char *fromcode);
56 /** \brief just like iconv(3) */
57 YAZ_EXPORT size_t yaz_iconv (yaz_iconv_t cd, char **inbuf, size_t *inbytesleft,
58                              char **outbuf, size_t *outbytesleft);
59 /** \brief returns last error - like errno for iconv(3) */
60 YAZ_EXPORT int yaz_iconv_error (yaz_iconv_t cd);
61
62 /** \brief just like iconv_close(3) */
63 YAZ_EXPORT int yaz_iconv_close (yaz_iconv_t cd);
64
65 /** \brief tests whether conversion is handled by YAZ' iconv or system iconv */
66 YAZ_EXPORT int yaz_iconv_isbuiltin(yaz_iconv_t cd);
67
68 YAZ_EXPORT int yaz_matchstr(const char *s1, const char *s2);
69
70 YAZ_EXPORT int yaz_strcmp_del(const char *a, const char *b, const char *b_del);
71
72 /** \brief decodes UTF-8 sequence
73     \param inp input buffer with UTF-8 bytes
74     \param inbytesleft length of input buffer
75     \param no_read holds number of bytes read if conversion is successful
76     \param error pointer to error code if error occurs
77     \retval 0 if error
78     \retval >0 if conversion is successful
79 */
80 YAZ_EXPORT unsigned long yaz_read_UTF8_char(unsigned char *inp,
81                                             size_t inbytesleft,
82                                             size_t *no_read,
83                                             int *error);
84
85 /** \brief encodes UTF-8 sequence 
86     \param x the UNICODE value
87     \param outbuf output buffer pointer, updated if conversion is successful
88     \param outbytesleft length of buffer, updated if conversino is successful
89     \param error pointer to error code if error occurs
90     \retval 0 if successful
91     \retval -1 for error
92 */
93 YAZ_EXPORT size_t yaz_write_UTF8_char(unsigned long x,
94                                       char **outbuf, size_t *outbytesleft,
95                                       int *error);
96
97 YAZ_END_CDECL
98
99 #endif
100 /*
101  * Local variables:
102  * c-basic-offset: 4
103  * indent-tabs-mode: nil
104  * End:
105  * vim: shiftwidth=4 tabstop=8 expandtab
106  */
107