annotate dwtx/dwtxhelper/mangoicu/UDomainName.d @ 92:f05207c07a98

changed filetype to unix
author Frank Benoit <benoit@tionex.de>
date Mon, 07 Jul 2008 15:54:03 +0200
parents 11e8159caf7a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
92
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
1 /*******************************************************************************
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
2
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
3 @file UDomainName.d
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
4
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
5 Copyright (c) 2004 Kris Bell
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
6
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
7 This software is provided 'as-is', without any express or implied
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
8 warranty. In no event will the authors be held liable for damages
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
9 of any kind arising from the use of this software.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
10
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
11 Permission is hereby granted to anyone to use this software for any
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
12 purpose, including commercial applications, and to alter it and/or
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
13 redistribute it freely, subject to the following restrictions:
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
14
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
15 1. The origin of this software must not be misrepresented; you must
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
16 not claim that you wrote the original software. If you use this
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
17 software in a product, an acknowledgment within documentation of
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
18 said product would be appreciated but is not required.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
19
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
20 2. Altered source versions must be plainly marked as such, and must
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
21 not be misrepresented as being the original software.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
22
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
23 3. This notice may not be removed or altered from any distribution
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
24 of the source.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
25
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
26 4. Derivative works are permitted, but they must carry this notice
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
27 in full and credit the original source.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
28
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
29
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
30 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
31
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
32
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
33 @version Initial version, November 2004
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
34 @author Kris
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
35
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
36 Note that this package and documentation is built around the ICU
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
37 project (http://oss.software.ibm.com/icu/). Below is the license
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
38 statement as specified by that software:
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
39
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
40
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
41 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
42
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
43
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
44 ICU License - ICU 1.8.1 and later
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
45
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
46 COPYRIGHT AND PERMISSION NOTICE
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
47
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
48 Copyright (c) 1995-2003 International Business Machines Corporation and
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
49 others.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
50
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
51 All rights reserved.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
52
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
53 Permission is hereby granted, free of charge, to any person obtaining a
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
54 copy of this software and associated documentation files (the
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
55 "Software"), to deal in the Software without restriction, including
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
56 without limitation the rights to use, copy, modify, merge, publish,
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
57 distribute, and/or sell copies of the Software, and to permit persons
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
58 to whom the Software is furnished to do so, provided that the above
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
59 copyright notice(s) and this permission notice appear in all copies of
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
60 the Software and that both the above copyright notice(s) and this
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
61 permission notice appear in supporting documentation.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
62
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
63 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
64 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
65 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
66 OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
67 HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
68 INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
69 FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
70 NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
71 WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
72
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
73 Except as contained in this notice, the name of a copyright holder
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
74 shall not be used in advertising or otherwise to promote the sale, use
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
75 or other dealings in this Software without prior written authorization
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
76 of the copyright holder.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
77
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
78 ----------------------------------------------------------------------
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
79
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
80 All trademarks and registered trademarks mentioned herein are the
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
81 property of their respective owners.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
82
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
83 *******************************************************************************/
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
84
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
85 module dwtx.dwtxhelper.mangoicu.UDomainName;
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
86
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
87 private import dwtx.dwtxhelper.mangoicu.ICU,
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
88 dwtx.dwtxhelper.mangoicu.UString;
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
89
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
90 /*******************************************************************************
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
91
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
92 UIDNA API implements the IDNA protocol as defined in the
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
93 IDNA RFC (http://www.ietf.org/rfc/rfc3490.txt).
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
94
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
95 The RFC defines 2 operations: toAscii and toUnicode. Domain
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
96 labels containing non-ASCII code points are required to be
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
97 processed by toAscii operation before passing it to resolver
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
98 libraries. Domain names that are obtained from resolver
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
99 libraries are required to be processed by toUnicode operation
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
100 before displaying the domain name to the user. IDNA requires
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
101 that implementations process input strings with Nameprep
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
102 (http://www.ietf.org/rfc/rfc3491.txt), which is a profile of
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
103 Stringprep (http://www.ietf.org/rfc/rfc3454.txt), and then with
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
104 Punycode (http://www.ietf.org/rfc/rfc3492.txt). Implementations
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
105 of IDNA MUST fully implement Nameprep and Punycode; neither
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
106 Nameprep nor Punycode are optional.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
107
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
108 The input and output of toAscii() and ToUnicode() operations are
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
109 Unicode and are designed to be chainable, i.e., applying toAscii()
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
110 or toUnicode() operations multiple times to an input string will
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
111 yield the same result as applying the operation once.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
112
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
113 See <A HREF="http://oss.software.ibm.com/icu/apiref/uidna_8h.html">
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
114 this page</A> for full details.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
115
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
116 *******************************************************************************/
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
117
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
118 class UDomainName : ICU
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
119 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
120 private UStringView text;
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
121 private Handle handle;
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
122
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
123 enum Options
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
124 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
125 Strict,
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
126 Lenient,
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
127 Std3
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
128 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
129
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
130
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
131 /***********************************************************************
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
132
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
133
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
134 ***********************************************************************/
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
135
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
136 this (UStringView text)
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
137 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
138 this.text = text;
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
139 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
140
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
141 /***********************************************************************
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
142
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
143 This function implements the ToASCII operation as
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
144 defined in the IDNA RFC.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
145
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
146 This operation is done on single labels before sending
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
147 it to something that expects ASCII names. A label is an
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
148 individual part of a domain name. Labels are usually
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
149 separated by dots; e.g." "www.example.com" is composed
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
150 of 3 labels "www","example", and "com".
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
151
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
152 ***********************************************************************/
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
153
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
154 void toAscii (UString dst, Options o = Options.Strict)
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
155 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
156 uint fmt (wchar* p, uint len, inout UErrorCode e)
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
157 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
158 return uidna_toASCII (text.get.ptr, text.len, p, len, o, null, e);
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
159 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
160
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
161 dst.format (&fmt, "failed to convert IDN to ASCII");
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
162 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
163
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
164 /***********************************************************************
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
165
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
166 This function implements the ToUnicode operation as
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
167 defined in the IDNA RFC.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
168
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
169 This operation is done on single labels before sending
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
170 it to something that expects Unicode names. A label is
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
171 an individual part of a domain name. Labels are usually
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
172 separated by dots; for e.g." "www.example.com" is composed
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
173 of 3 labels "www","example", and "com".
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
174
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
175 ***********************************************************************/
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
176
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
177 void toUnicode (UString dst, Options o = Options.Strict)
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
178 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
179 uint fmt (wchar* p, uint len, inout UErrorCode e)
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
180 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
181 return uidna_toUnicode (text.get.ptr, text.len, p, len, o, null, e);
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
182 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
183
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
184 dst.format (&fmt, "failed to convert IDN to Unicode");
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
185 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
186
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
187 /***********************************************************************
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
188
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
189 Convenience function that implements the IDNToASCII
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
190 operation as defined in the IDNA RFC.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
191
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
192 This operation is done on complete domain names, e.g:
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
193 "www.example.com". It is important to note that this
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
194 operation can fail. If it fails, then the input domain
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
195 name cannot be used as an Internationalized Domain Name
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
196 and the application should have methods defined to deal
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
197 with the failure.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
198
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
199 Note: IDNA RFC specifies that a conformant application
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
200 should divide a domain name into separate labels, decide
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
201 whether to apply allowUnassigned and useSTD3ASCIIRules
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
202 on each, and then convert. This function does not offer
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
203 that level of granularity. The options once set will apply
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
204 to all labels in the domain name
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
205
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
206 ***********************************************************************/
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
207
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
208 void IdnToAscii (UString dst, Options o = Options.Strict)
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
209 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
210 uint fmt (wchar* p, uint len, inout UErrorCode e)
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
211 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
212 return uidna_IDNToASCII (text.get.ptr, text.len, p, len, o, null, e);
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
213 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
214
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
215 dst.format (&fmt, "failed to convert IDN to ASCII");
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
216 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
217
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
218 /***********************************************************************
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
219
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
220 Convenience function that implements the IDNToUnicode
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
221 operation as defined in the IDNA RFC.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
222
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
223 This operation is done on complete domain names, e.g:
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
224 "www.example.com".
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
225
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
226 Note: IDNA RFC specifies that a conformant application
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
227 should divide a domain name into separate labels, decide
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
228 whether to apply allowUnassigned and useSTD3ASCIIRules
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
229 on each, and then convert. This function does not offer
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
230 that level of granularity. The options once set will apply
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
231 to all labels in the domain name
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
232
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
233 ***********************************************************************/
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
234
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
235 void IdnToUnicode (UString dst, Options o = Options.Strict)
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
236 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
237 uint fmt (wchar* p, uint len, inout UErrorCode e)
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
238 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
239 return uidna_IDNToUnicode (text.get.ptr, text.len, p, len, o, null, e);
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
240 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
241
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
242 dst.format (&fmt, "failed to convert IDN to Unicode");
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
243 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
244
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
245 /***********************************************************************
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
246
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
247 Compare two IDN strings for equivalence.
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
248
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
249 This function splits the domain names into labels and
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
250 compares them. According to IDN RFC, whenever two labels
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
251 are compared, they are considered equal if and only if
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
252 their ASCII forms (obtained by applying toASCII) match
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
253 using an case-insensitive ASCII comparison. Two domain
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
254 names are considered a match if and only if all labels
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
255 match regardless of whether label separators match
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
256
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
257 ***********************************************************************/
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
258
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
259 int compare (UString other, Options o = Options.Strict)
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
260 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
261 UErrorCode e;
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
262 int i = uidna_compare (text.get.ptr, text.len, other.get.ptr, other.len, o, e);
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
263 testError (e, "failed to compare IDN strings");
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
264 return i;
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
265 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
266
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
267
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
268 /***********************************************************************
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
269
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
270 Bind the ICU functions from a shared library. This is
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
271 complicated by the issues regarding D and DLLs on the
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
272 Windows platform
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
273
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
274 ***********************************************************************/
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
275
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
276 private static void* library;
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
277
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
278 /***********************************************************************
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
279
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
280 ***********************************************************************/
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
281
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
282 private static extern (C)
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
283 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
284 uint function (wchar*, uint, wchar*, uint, uint, void*, inout UErrorCode) uidna_toASCII;
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
285 uint function (wchar*, uint, wchar*, uint, uint, void*, inout UErrorCode) uidna_toUnicode;
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
286 uint function (wchar*, uint, wchar*, uint, uint, void*, inout UErrorCode) uidna_IDNToASCII;
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
287 uint function (wchar*, uint, wchar*, uint, uint, void*, inout UErrorCode) uidna_IDNToUnicode;
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
288 int function (wchar*, uint, wchar*, uint, uint, inout UErrorCode) uidna_compare;
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
289 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
290
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
291 /***********************************************************************
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
292
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
293 ***********************************************************************/
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
294
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
295 static FunctionLoader.Bind[] targets =
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
296 [
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
297 {cast(void**) &uidna_toASCII, "uidna_toASCII"},
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
298 {cast(void**) &uidna_toUnicode, "uidna_toUnicode"},
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
299 {cast(void**) &uidna_IDNToASCII, "uidna_IDNToASCII"},
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
300 {cast(void**) &uidna_IDNToUnicode, "uidna_IDNToUnicode"},
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
301 {cast(void**) &uidna_compare, "uidna_compare"},
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
302 ];
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
303
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
304 /***********************************************************************
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
305
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
306 ***********************************************************************/
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
307
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
308 static this ()
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
309 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
310 library = FunctionLoader.bind (icuuc, targets);
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
311 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
312
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
313 /***********************************************************************
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
314
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
315 ***********************************************************************/
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
316
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
317 static ~this ()
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
318 {
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
319 FunctionLoader.unbind (library);
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
320 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
321 }
f05207c07a98 changed filetype to unix
Frank Benoit <benoit@tionex.de>
parents: 91
diff changeset
322