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
45sub 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
82s/<U\+([0-9A-Fa-f]+)>/&to_utf8($1)/eg;
83