次のエントリ: Text::Diff で差分抽出 [perl]
Text::CHMでHTMLヘルプファイル(.chm)を展開する
2008-02-27-1 / カテゴリ: [programming][perl] / [permlink]
とあるSDKのマニュアルがchmファイルでのみ提供されていて、エディタのキーワード色変更設定用([2005-12-12-1])にAPIだけ抜き出したいとき、とか
・コンストラクタ
$o = Text::CHM->new(ヘルプ.chm);
・ファイルオブジェクトのリスト取得
@l = $o->get_filelist();
・ファイルのパスを取得
$path = $l[n]->{path}
path以外にsize、titleを取得できる模様。
・ファイルの中身を取得
$data = $l[n]->get_object($path);
・終了
$o->close();
作ったスクリプト (動作確認 ActivePerl 5.8.8)
ヘルプファイルの中にはイメージなどのバイナリも含まれることがあるので、ファイル出力時には raw モードで書き出す。
ヘルプにも書いてあるけど
・コンストラクタ
$o = Text::CHM->new(ヘルプ.chm);
・ファイルオブジェクトのリスト取得
@l = $o->get_filelist();
・ファイルのパスを取得
$path = $l[n]->{path}
path以外にsize、titleを取得できる模様。
・ファイルの中身を取得
$data = $l[n]->get_object($path);
・終了
$o->close();
作ったスクリプト (動作確認 ActivePerl 5.8.8)
#!/usr/bin/perl -w use strict; use Encode; use Text::CHM; use File::Basename; use File::Path; my $chmfile = shift; unless (-f $chmfile) { print "no such file: $chmfile\n"; exit 0; } my ($outdir) = fileparse($chmfile, ('.chm')); my $chm = Text::CHM->new($chmfile); foreach my $content ($chm->get_filelist()) { my $dir = dirname(my $file = $outdir . $content->{path}); next if $file =~ m|/$|; mkpath [$dir] unless -d $dir; open W, ">:raw", "$file" or die "cannot open $file: $!\n"; print W $chm->get_object($content->{path}); close W; } $chm->close();第一引数に展開(解凍)したいchmファイルを指定して実行すると、ファイル名(拡張子なし)のディレクトリを作って、その下にバラす。
ヘルプファイルの中にはイメージなどのバイナリも含まれることがあるので、ファイル出力時には raw モードで書き出す。
ヘルプにも書いてあるけど
$chm->get_object($content->{path});を、stdout とかに出力すると、結構大変なことになるので注意。
次のエントリ: Text::Diff で差分抽出 [perl]
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
最終更新時間: 2013-05-02 16:12