use 5.12.0;
use warnings;
use utf8;
use autodie;
use FindBin;
use Encode;
sub _IO::new {
use IO::File;
my $obj = {}; $obj->{class} = shift;
$obj->{write_array} = sub {
my ($file, $array_ref) = @_;
open my $fh, '>', "$file";
$fh->autoflush(1);
for my $data (@$array_ref) {
$fh->print($data."\n");
}
$fh->close;
};
$obj->{write_all} = sub {
my ($file, $data) = @_;
open my $fh, '>', "$file";
$fh->autoflush(1);
$fh->print($data);
$fh->close;
};
$obj->{read_all} = sub {
my ($file) = @_;
open my $fh, ' };
$fh->close;
return $content;
};
$obj;
}
sub _Parse::new {
use HTML::TreeBuilder;
my $obj = {}; $obj->{class} = shift;
my $tree_builder = HTML::TreeBuilder->new;
$obj->{steal_dxlib_func} = sub {
my ($file) = @_;
$tree_builder->parse_file($file);
$tree_builder->eof();
my @func_list;
for my $tag ($tree_builder->find("tr")) {
my $data = $tag->as_text;
$data = decode('cp932', $data);
if ($data =~ /.*宣言.*/) {
$data =~ s/(概略|引数|戻り値|解説|サンプル).*//gsm;
$data =~ s/宣言//g;
$data =~ s/(;|;).*//gsm;
push @func_list, encode('cp932', $data) if defined($data) && $data ne '';
}
}
@func_list = do { my %h; grep { !$h{$_}++ } @func_list };
return @func_list;
};
$obj;
}
my $my_content_path = "$FindBin::Bin"."/content/";
my $io = _IO->new;
my @file_list = glob "$my_content_path*.html";
my $parse = _Parse->new;
my @func_list;
for my $file (@file_list){
push @func_list, $parse->{steal_dxlib_func}->($file);
}
$io->{write_array}->("func_list.txt", \@func_list);
__END__
これで、リファレンスに載っている関数は全て取得できるはず。。。
(はず。。。)
_Parseクラスに無理くり処理を突っ込んだ感が否めないので
関数加工するコードを書くついでにもう少し細分化を検討しよう。
そうしよう。