1 /*	$NetBSD: normalizer.h,v 1.4 2014/12/10 04:37:55 christos Exp $	*/
2 
3 /* Id: normalizer.h,v 1.1 2003/06/04 00:25:40 marka Exp  */
4 /*
5  * Copyright (c) 2000 Japan Network Information Center.  All rights reserved.
6  *
7  * By using this file, you agree to the terms and conditions set forth bellow.
8  *
9  * 			LICENSE TERMS AND CONDITIONS
10  *
11  * The following License Terms and Conditions apply, unless a different
12  * license is obtained from Japan Network Information Center ("JPNIC"),
13  * a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
14  * Chiyoda-ku, Tokyo 101-0047, Japan.
15  *
16  * 1. Use, Modification and Redistribution (including distribution of any
17  *    modified or derived work) in source and/or binary forms is permitted
18  *    under this License Terms and Conditions.
19  *
20  * 2. Redistribution of source code must retain the copyright notices as they
21  *    appear in each source code file, this License Terms and Conditions.
22  *
23  * 3. Redistribution in binary form must reproduce the Copyright Notice,
24  *    this License Terms and Conditions, in the documentation and/or other
25  *    materials provided with the distribution.  For the purposes of binary
26  *    distribution the "Copyright Notice" refers to the following language:
27  *    "Copyright (c) 2000-2002 Japan Network Information Center.  All rights reserved."
28  *
29  * 4. The name of JPNIC may not be used to endorse or promote products
30  *    derived from this Software without specific prior written approval of
31  *    JPNIC.
32  *
33  * 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
34  *    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
35  *    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
36  *    PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL JPNIC BE LIABLE
37  *    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
38  *    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
39  *    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
40  *    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
41  *    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
42  *    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
43  *    ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
44  */
45 
46 #ifndef IDN_NORMALIZER_H
47 #define IDN_NORMALIZER_H 1
48 
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
52 
53 /*
54  * Domain name normalizer.
55  *
56  * Perform normalization on the specified strings.  String must be
57  * in UCS4 encoding.
58  */
59 
60 #include <idn/export.h>
61 #include <idn/result.h>
62 
63 /*
64  * Normalizer type (opaque).
65  */
66 typedef struct idn_normalizer *idn_normalizer_t;
67 
68 /*
69  * Normalizer procedure type.
70  */
71 typedef idn_result_t (*idn_normalizer_proc_t)(const unsigned long *from,
72 					      unsigned long *to, size_t tolen);
73 
74 /*
75  * Initialize this module.
76  *
77  * Returns:
78  *	idn_success		-- ok.
79  *	idn_nomemory		-- malloc failed.
80  */
81 IDN_EXPORT idn_result_t
82 idn_normalizer_initialize(void);
83 
84 /*
85  * Create a empty normalizer.
86  *
87  * Returns:
88  *	idn_success		-- ok.
89  *	idn_nomemory		-- malloc failed.
90  */
91 IDN_EXPORT idn_result_t
92 idn_normalizer_create(idn_normalizer_t *ctxp);
93 
94 /*
95  * Decrement reference count of the normalizer `ctx' created by
96  * 'idn_normalizer_create', if it is still refered by another object.
97  * Otherwise, release all the memory allocated to the normalizer.
98  */
99 IDN_EXPORT void
100 idn_normalizer_destroy(idn_normalizer_t ctx);
101 
102 /*
103  * Increment reference count of the normalizer `ctx' created by
104  * 'idn_normalizer_create'.
105  */
106 IDN_EXPORT void
107 idn_normalizer_incrref(idn_normalizer_t ctx);
108 
109 /*
110  * Add a normalization scheme to a normalizer.
111  *
112  * Multiple shemes can be added to a normalizer, and they will be
113  * applied in order.
114  *
115  * Returns:
116  *	idn_success		-- ok.
117  *	idn_invalid_name	-- unknown scheme was specified.
118  *	idn_nomemory		-- malloc failed.
119  */
120 IDN_EXPORT idn_result_t
121 idn_normalizer_add(idn_normalizer_t ctx, const char *scheme_name);
122 
123 IDN_EXPORT idn_result_t
124 idn_normalizer_addall(idn_normalizer_t ctx, const char **scheme_names,
125 		      int nschemes);
126 
127 /*
128  * Perform normalization(s) defined by a normalizer to the specified string,
129  * If the normalizer has two or more normalization schemes, they are
130  * applied in order.
131  *
132  * Returns:
133  *	idn_success		-- ok.
134  *	idn_buffer_overflow	-- output buffer is too small.
135  *	idn_nomemory		-- malloc failed.
136  */
137 IDN_EXPORT idn_result_t
138 idn_normalizer_normalize(idn_normalizer_t ctx, const unsigned long *from,
139 			 unsigned long *to, size_t tolen);
140 
141 /*
142  * Register a new normalization scheme.
143  *
144  * You can override the default normalization schemes, if you want.
145  *
146  * Returns:
147  *	idn_success		-- ok.
148  *	idn_nomemory		-- malloc failed.
149  */
150 IDN_EXPORT idn_result_t
151 idn_normalizer_register(const char *scheme_name, idn_normalizer_proc_t proc);
152 
153 #ifdef __cplusplus
154 }
155 #endif
156 
157 #endif /* IDN_NORMALIZER_H */
158