【SWIG】DxLibのラッパーファイルを一から作り直してみる2

トントン
記事: 100
登録日時: 14年前

【SWIG】DxLibのラッパーファイルを一から作り直してみる2

投稿記事 by トントン » 12年前

前回の続き

CODE:

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__
前回取得したHTMLから関数だけを抜き出すコード。
これで、リファレンスに載っている関数は全て取得できるはず。。。
(はず。。。)
_Parseクラスに無理くり処理を突っ込んだ感が否めないので
関数加工するコードを書くついでにもう少し細分化を検討しよう。
そうしよう。
最後に編集したユーザー トントン on 2013年9月22日(日) 04:10 [ 編集 1 回目 ]

アバター
みけCAT
記事: 6734
登録日時: 14年前

Re: 【SWIG】DxLibのラッパーファイルを一から作り直してみる2

投稿記事 by みけCAT » 12年前

マジレス:DXライブラリの関数一覧が欲しいのなら、DxLib.hをパースする方が早くないですか?

トントン
記事: 100
登録日時: 14年前

Re: 【SWIG】DxLibのラッパーファイルを一から作り直してみる2

投稿記事 by トントン » 12年前

みけCAT さんが書きました:マジレス:DXライブラリの関数一覧が欲しいのなら、DxLib.hをパースする方が早くないですか?
その通りです。
ただ、関数を抜き出すだけなら良いのですがデフォルト引数を消したい場合の処理を考えたとき面倒くさい。
IDirectDrawSurface型とかを含んでいる場合ラップするときの型変換がとてつもなく面倒くさいのです。

それなら、シンプルな使い方ができてリファレンスに載っている関数+αを実装すれば良いという考えです。