* download files with LWP::UserAgent
[lab.git] / misc / findcombinable.pl
1 #! /usr/bin/perl -w
2
3 use strict;
4 use warnings;
5 use utf8;
6
7 use Encode;
8 use Unicode::Normalize qw(NFC);
9
10 my $top = shift @ARGV || exit;
11 if (! -d $top) { exit; }
12
13 my $utf8 = find_encoding("utf8");
14
15 checkdir($top);
16
17 sub match {
18     my $str = shift @_;
19     
20     $str = $utf8->decode($str);
21     if ($str ne NFC($str)) {
22         return $utf8->encode(NFC($str));
23     }
24     
25     return '';
26 }
27
28 sub checkdir {
29     my $target = shift @_;
30     
31     print STDERR "# checking '$target'\n";
32     opendir(my $dir, $target) || return $target;
33     my @entries = sort grep { !m/^(\.|\.\.)$/g } readdir($dir);
34     closedir($dir);
35     
36     my @dirs;
37     while (my $entry = shift @entries) {
38         if (my $composed = match($entry)) {
39             print "'$target/$entry' can be composed to '$composed'\n";
40             next;
41         }
42         if (-d "$target/$entry") {
43             push @dirs, $entry;
44             next;
45         }
46     }
47     
48     while (my $entry = pop @dirs) {
49         checkdir("$target/$entry");
50     }
51 }