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