use utf8;
use Encode;
-use Unicode::Normalize qw(NFC NFKC);
-binmode STDOUT => 'encoding(utf8)';
-binmode STDERR => 'encoding(utf8)';
+use Unicode::Normalize qw(NFC);
my $top = shift @ARGV || exit;
if (! -d $top) { exit; }
my $utf8 = find_encoding("utf8");
-$top = $utf8->decode($top);
checkdir($top);
sub match {
my $str = shift @_;
+ $str = $utf8->decode($str);
if ($str ne NFC($str)) {
- return 1;
+ return $utf8->encode(NFC($str));
}
return '';
sub checkdir {
my $target = shift @_;
- print STDERR "checking '$target'\n";
+ print STDERR "# checking '$target'\n";
opendir(my $dir, $target) || return $target;
- my @entries = sort readdir($dir);
+ my @entries = sort grep { !m/^(\.|\.\.)$/g } readdir($dir);
closedir($dir);
my @dirs;
while (my $entry = shift @entries) {
- next if ($entry =~ /^\.+$/);
- $entry = $utf8->decode($entry);
- if (match($entry)) {
- print "'$target/$entry' can be composed\n";
+ if (my $composed = match($entry)) {
+ print "'$target/$entry' can be composed to '$composed'\n";
next;
}
if (-d "$target/$entry") {