【SWIG】DxLibのラッパーファイルを一から作り直してみる2
前回の続き
前回、取得したHTMLから関数群だけを抜き出すスクリプト。
次はこっから、いい感じにラップしていくスクリプトを組む予定。
また、クロージャーで実装していこうと思ったけど
チョイ修正しつつMouseあたりでも使用してみようと思った。
1 use 5.12.0; 2 use warnings; 3 use utf8; 4 use autodie; 5 use FindBin; 6 use Encode; 7 8 9 sub _IO::new { 10 use IO::File; 11 my $obj = {}; $obj->{class} = shift; 12 13 $obj->{write_array} = sub { 14 my ($file, $array_ref) = @_; 15 open my $fh, '>', "$file"; 16 $fh->autoflush(1); 17 for my $data (@$array_ref) { 18 $fh->print($data."\n"); 19 } 20 $fh->close; 21 }; 22 23 $obj->{write_all} = sub { 24 my ($file, $data) = @_; 25 open my $fh, '>', "$file"; 26 $fh->autoflush(1); 27 $fh->print($data); 28 $fh->close; 29 }; 30 31 $obj->{read_all} = sub { 32 my ($file) = @_; 33 open my $fh, '<', "$file"; 34 my $content = do { local $/; <$fh> }; 35 $fh->close; 36 return $content; 37 }; 38 $obj; 39 } 40 41 sub _Parse::new { 42 use HTML::TreeBuilder; 43 my $obj = {}; $obj->{class} = shift; 44 my $tree_builder = HTML::TreeBuilder->new; 45 46 $obj->{steal_dxlib_func} = sub { 47 my ($file) = @_; 48 49 $tree_builder->parse_file($file); 50 $tree_builder->eof(); 51 my @func_list; 52 for my $tag ($tree_builder->find("tr")) { 53 my $data = $tag->as_text; 54 $data = decode('cp932', $data); 55 if ($data =~ /.*宣言.*/) { 56 $data =~ s/(概略|引数|戻り値|解説|サンプル).*//gsm; 57 $data =~ s/宣言//g; 58 $data =~ s/(;|;).*//gsm; 59 push @func_list, encode('cp932', $data) if defined($data) && $data ne ''; 60 } 61 } 62 @func_list = do { my %h; grep { !$h{$_}++ } @func_list }; 63 return @func_list; 64 }; 65 $obj; 66 } 67 68 my $my_content_path = "$FindBin::Bin"."/content/"; 69 my $io = _IO->new; 70 71 my @file_list = glob "$my_content_path*.html"; 72 my $parse = _Parse->new; 73 74 my @func_list; 75 for my $file (@file_list){ 76 push @func_list, $parse->{steal_dxlib_func}->($file); 77 } 78 79 $io->{write_array}->("func_list.txt", \@func_list); 80 81 __END__
前回、取得したHTMLから関数群だけを抜き出すスクリプト。
次はこっから、いい感じにラップしていくスクリプトを組む予定。
また、クロージャーで実装していこうと思ったけど
チョイ修正しつつMouseあたりでも使用してみようと思った。