1 /* $Id$ */
2 /*
3  * Copyright (c) 2001 Japan Network Information Center.  All rights reserved.
4  *
5  * By using this file, you agree to the terms and conditions set forth bellow.
6  *
7  * 			LICENSE TERMS AND CONDITIONS
8  *
9  * The following License Terms and Conditions apply, unless a different
10  * license is obtained from Japan Network Information Center ("JPNIC"),
11  * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
12  * Chiyoda-ku, Tokyo 101-0047, Japan.
13  *
14  * 1. Use, Modification and Redistribution (including distribution of any
15  *    modified or derived work) in source and/or binary forms is permitted
16  *    under this License Terms and Conditions.
17  *
18  * 2. Redistribution of source code must retain the copyright notices as they
19  *    appear in each source code file, this License Terms and Conditions.
20  *
21  * 3. Redistribution in binary form must reproduce the Copyright Notice,
22  *    this License Terms and Conditions, in the documentation and/or other
23  *    materials provided with the distribution.  For the purposes of binary
24  *    distribution the "Copyright Notice" refers to the following language:
25  *    "Copyright (c) 2000-2002 Japan Network Information Center.  All rights reserved."
26  *
27  * 4. The name of JPNIC may not be used to endorse or promote products
28  *    derived from this Software without specific prior written approval of
29  *    JPNIC.
30  *
31  * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
32  *    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  *    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
34  *    PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL JPNIC BE LIABLE
35  *    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
36  *    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
37  *    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
38  *    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
39  *    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
40  *    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
41  *    ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
42  */
43 
44 #ifndef IDN_DELIMITERMAP_H
45 #define IDN_DELIMITERMAP_H 1
46 
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50 
51 /*
52  * Mapper.
53  *
54  * Perfom mapping local delimiters to `.'.
55  */
56 
57 #include <idn/export.h>
58 #include <idn/result.h>
59 
60 /*
61  * Map object type.
62  */
63 typedef struct idn_delimitermap *idn_delimitermap_t;
64 
65 /*
66  * Create a delimitermap context.
67  *
68  * Returns:
69  *      idn_success             -- ok.
70  *      idn_nomemory            -- malloc failed.
71  */
72 IDN_EXPORT idn_result_t
73 idn_delimitermap_create(idn_delimitermap_t *ctxp);
74 
75 /*
76  * Decrement reference count of the delimitermap `ctx' created by
77  * 'idn_delimitermap_create', if it is still refered by another object.
78  * Otherwise, release all the memory allocated to the delimitermap.
79  */
80 IDN_EXPORT void
81 idn_delimitermap_destroy(idn_delimitermap_t ctx);
82 
83 /*
84  * Increment reference count of the delimitermap `ctx' created by
85  * 'idn_delimitermap_create'.
86  */
87 IDN_EXPORT void
88 idn_delimitermap_incrref(idn_delimitermap_t ctx);
89 
90 /*
91  * Add a local delimiter.
92  *
93  * Returns:
94  *      idn_success             -- ok.
95  *      idn_nomemory            -- malloc failed.
96  *      idn_invalid_codepoint   -- delimiter is not valid UCS4 character.
97  */
98 IDN_EXPORT idn_result_t
99 idn_delimitermap_add(idn_delimitermap_t ctx, unsigned long delimiter);
100 
101 IDN_EXPORT idn_result_t
102 idn_delimitermap_addall(idn_delimitermap_t ctx, unsigned long *delimiters,
103 			int ndelimiters);
104 
105 /*
106  * Map local delimiters in `from' to `.'.
107  *
108  * Note that if no delimiter is added to the context, the function copies
109  * the string.
110  *
111  * Returns:
112  *      idn_success             -- ok.
113  *      idn_buffer_overflow     -- output buffer is too small.
114  */
115 IDN_EXPORT idn_result_t
116 idn_delimitermap_map(idn_delimitermap_t ctx, const unsigned long *from,
117 		     unsigned long *to, size_t tolen);
118 
119 #ifdef __cplusplus
120 }
121 #endif
122 
123 #endif /* IDN_DELIMITERMAP_H */
124