#!/usr/bin/perl -p

s/&#([0-9]+);/
$1 < 0x80 ?
	$1 == ord "\"" ? "&quot;" :
	$1 == ord "&" ? "&amp;" :
	$1 == ord "<" ? "&lt;" :
	$1 == ord ">" ? "&gt;" :
	chr ($1)
:
$1 < 0x800 ?
	chr (0xC0 | $1 >> 6 & 0x1F) .
	chr (0x80 | $1 & 0x3F)
:
$1 < 0x10000 ?
	chr (0xE0 | $1 >> 12 & 0x0F) .
	chr (0x80 | $1 >> 6 & 0x3F) .
	chr (0x80 | $1 & 0x3F)
:
$1 < 0x200000 ?
	chr (0xF0 | $1 >> 18 & 0x07) .
	chr (0x80 | $1 >> 12 & 0x3F) .
	chr (0x80 | $1 >> 6 & 0x3F) .
	chr (0x80 | $1 & 0x3F)
:
$1 < 0x4000000 ?
	chr (0xF8 | $1 >> 24 & 0x03) .
	chr (0x80 | $1 >> 18 & 0x3F) .
	chr (0x80 | $1 >> 12 & 0x3F) .
	chr (0x80 | $1 >> 6 & 0x3F) .
	chr (0x80 | $1 & 0x3F)
:
$1 < 0x80000000 ?
	chr (0xFC | $1 >> 30 & 0x01) .
	chr (0x80 | $1 >> 24 & 0x3F) .
	chr (0x80 | $1 >> 18 & 0x3F) .
	chr (0x80 | $1 >> 12 & 0x3F) .
	chr (0x80 | $1 >> 6 & 0x3F) .
	chr (0x80 | $1 & 0x3F)
:
$&/eg;
