source: lab/trunk/misc/findcombinable.pl @ 193

Last change on this file since 193 was 193, checked in by mitty, 11 years ago
  • fix: previous procedure skips files such as '...'
  • Property svn:executable set to *
File size: 1.0 KB
RevLine 
[187]1#! /usr/bin/perl -w
2
3use strict;
4use warnings;
5use utf8;
6
[192]7use Encode;
[187]8use Unicode::Normalize qw(NFC NFKC);
[192]9binmode STDOUT => 'encoding(utf8)';
10binmode STDERR => 'encoding(utf8)';
[187]11
12my $top = shift @ARGV || exit;
13if (! -d $top) { exit; }
14
[192]15my $utf8 = find_encoding("utf8");
16$top = $utf8->decode($top);
17
[187]18checkdir($top);
19
[188]20sub match {
[187]21    my $str = shift @_;
22   
23    if ($str ne NFC($str)) {
24        return 1;
25    }
26   
27    return '';
28}
29
30sub checkdir {
31    my $target = shift @_;
32   
33    print STDERR "checking '$target'\n";
34    opendir(my $dir, $target) || return $target;
[193]35    my @entries = sort grep { !m/^(\.|\.\.)$/g } readdir($dir);
[187]36    closedir($dir);
37   
38    my @dirs;
39    while (my $entry = shift @entries) {
[192]40        $entry = $utf8->decode($entry);
[188]41        if (match($entry)) {
[187]42            print "'$target/$entry' can be composed\n";
43            next;
44        }
45        if (-d "$target/$entry") {
46            push @dirs, $entry;
47            next;
48        }
49    }
50   
51    while (my $entry = pop @dirs) {
52        checkdir("$target/$entry");
53    }
54}
Note: See TracBrowser for help on using the repository browser.