Initial import of bind-9.7.1-P2
[kai/bind9.git] / contrib / idn / idnkit-1.0-src / lib / tests / utffilter
1 #! /usr/bin/perl -wp
2 #
3 # Copyright (c) 2002 Japan Network Information Center.
4 # All rights reserved.
5 #  
6 # By using this file, you agree to the terms and conditions set forth bellow.
7
8 #                       LICENSE TERMS AND CONDITIONS 
9
10 # The following License Terms and Conditions apply, unless a different
11 # license is obtained from Japan Network Information Center ("JPNIC"),
12 # a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda,
13 # Chiyoda-ku, Tokyo 101-0047, Japan.
14
15 # 1. Use, Modification and Redistribution (including distribution of any
16 #    modified or derived work) in source and/or binary forms is permitted
17 #    under this License Terms and Conditions.
18
19 # 2. Redistribution of source code must retain the copyright notices as they
20 #    appear in each source code file, this License Terms and Conditions.
21
22 # 3. Redistribution in binary form must reproduce the Copyright Notice,
23 #    this License Terms and Conditions, in the documentation and/or other
24 #    materials provided with the distribution.  For the purposes of binary
25 #    distribution the "Copyright Notice" refers to the following language:
26 #    "Copyright (c) 2000-2002 Japan Network Information Center.  All rights reserved."
27
28 # 4. The name of JPNIC may not be used to endorse or promote products
29 #    derived from this Software without specific prior written approval of
30 #    JPNIC.
31
32 # 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
33 #    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34 #    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
35 #    PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL JPNIC BE LIABLE
36 #    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
37 #    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
38 #    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
39 #    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
40 #    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
41 #    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
42 #    ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
43 #
44
45 sub to_utf8 ($) {
46     my ($utf32) = hex($_[0]);
47     my ($mask, $length);
48     
49     if ($utf32 < 0x80) {
50         $mask = 0;
51         $length = 1;
52     } elsif ($utf32 < 0x800) {
53         $mask = 0xc0;
54         $length = 2;
55     } elsif ($utf32 < 0x10000) {
56         $mask = 0xe0;
57         $length = 3;
58     } elsif ($utf32 < 0x200000) {
59         $mask = 0xf0;
60         $length = 4;
61     } elsif ($utf32 < 0x4000000) {
62         $mask = 0xf8;
63         $length = 5;
64     } elsif ($utf32 < 0x80000000) {
65         $mask = 0xfc;
66         $length = 6;
67     } else {
68         return '';
69     }
70
71     my ($result, $offset);
72     $offset = 6 * ($length - 1);
73     $result .= sprintf('\\x%02x', ($utf32 >> $offset) | $mask);
74     while ($offset > 0) {
75         $offset -= 6;
76         $result .= sprintf('\\x%02x', (($utf32 >> $offset) & 0x3f) | 0x80);
77     }
78
79     return $result;
80 }
81
82 s/<U\+([0-9A-Fa-f]+)>/&to_utf8($1)/eg;