1/* $Id: delimitermap.h,v 1.1 2003/06/04 00:25:37 marka Exp $ */
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
48extern "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 */
63typedef 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 */
72IDN_EXPORT idn_result_t
73idn_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 */
80IDN_EXPORT void
81idn_delimitermap_destroy(idn_delimitermap_t ctx);
82
83/*
84 * Increment reference count of the delimitermap `ctx' created by
85 * 'idn_delimitermap_create'.
86 */
87IDN_EXPORT void
88idn_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 */
98IDN_EXPORT idn_result_t
99idn_delimitermap_add(idn_delimitermap_t ctx, unsigned long delimiter);
100
101IDN_EXPORT idn_result_t
102idn_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 */
115IDN_EXPORT idn_result_t
116idn_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