#!/usr/bin/perl | |
use strict; | |
use warnings; | |
STDOUT->autoflush(1); | |
sub iswide | |
{ | |
my ( $cp ) = @_; | |
return chr($cp) =~ m/\p{East_Asian_Width=Wide}|\p{East_Asian_Width=Fullwidth}/; | |
} | |
my ( $start, $end ); | |
foreach my $cp ( 0 .. 0x1FFFF ) { | |
iswide($cp) or next; | |
if( defined $end and $end == $cp-1 ) { | |
# extend the range | |
$end = $cp; | |
next; | |
} | |
# start a new range | |
printf " { %#04x, %#04x },\n", $start, $end if defined $start; | |
$start = $end = $cp; | |
} | |
printf " { %#04x, %#04x },\n", $start, $end if defined $start; |